@@ -1,17 +1,22 @@
|
|||||||
import { COLORS } from '@/constants/colors'
|
import { COLORS } from '@/constants/colors'
|
||||||
import { ArrowLeft } from 'iconsax-react'
|
import { ArrowLeft } from 'iconsax-react'
|
||||||
import { type FC, type ReactNode } from 'react'
|
import { type FC, type ReactNode } from 'react'
|
||||||
|
import { Link } from 'react-router-dom'
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
icon: ReactNode,
|
icon: ReactNode,
|
||||||
count: number | undefined,
|
count: number | undefined,
|
||||||
description: string
|
description: string,
|
||||||
|
to: string,
|
||||||
}
|
}
|
||||||
|
|
||||||
const StatCard: FC<Props> = (props) => {
|
const StatCard: FC<Props> = (props) => {
|
||||||
const { icon, count, description } = props
|
const { icon, count, description, to } = props
|
||||||
return (
|
return (
|
||||||
<div className='flex-1 bg-white rounded-3xl p-6'>
|
<Link
|
||||||
|
to={to}
|
||||||
|
className='flex-1 bg-white rounded-3xl p-6 block transition-shadow hover:shadow-md'
|
||||||
|
>
|
||||||
<div className='flex justify-between items-center'>
|
<div className='flex justify-between items-center'>
|
||||||
{icon}
|
{icon}
|
||||||
|
|
||||||
@@ -27,8 +32,8 @@ const StatCard: FC<Props> = (props) => {
|
|||||||
<div className='mt-2 text-sm'>
|
<div className='mt-2 text-sm'>
|
||||||
{description}
|
{description}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</Link>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export default StatCard
|
export default StatCard
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
import GridWrapper from '@/components/GridWrapper'
|
import GridWrapper from '@/components/GridWrapper'
|
||||||
|
import { Paths } from '@/config/Paths'
|
||||||
import { COLORS } from '@/constants/colors'
|
import { COLORS } from '@/constants/colors'
|
||||||
import { t } from '@/locale'
|
import { t } from '@/locale'
|
||||||
|
import { ProformaInvoiceStatusEnum } from '@/pages/invoice/enum/InvoiceEnum'
|
||||||
|
import { TabMyOrdersEnum } from '@/pages/order/enum/OrderEnum'
|
||||||
|
import { useGetOrderStats } from '@/pages/order/hooks/useOrderData'
|
||||||
import { BoxTick, BoxTime, ReceiptText, TruckTick } from 'iconsax-react'
|
import { BoxTick, BoxTime, ReceiptText, TruckTick } from 'iconsax-react'
|
||||||
import { type FC } from 'react'
|
import { type FC } from 'react'
|
||||||
import StatCard from './StatCard'
|
import StatCard from './StatCard'
|
||||||
import { useGetOrderStats } from '@/pages/order/hooks/useOrderData'
|
|
||||||
|
|
||||||
const Stats: FC = () => {
|
const Stats: FC = () => {
|
||||||
|
|
||||||
@@ -21,6 +24,7 @@ const Stats: FC = () => {
|
|||||||
<StatCard
|
<StatCard
|
||||||
count={data?.data.requestsCount}
|
count={data?.data.requestsCount}
|
||||||
description={t('home.requestCount')}
|
description={t('home.requestCount')}
|
||||||
|
to={Paths.myRequests}
|
||||||
icon={<BoxTime
|
icon={<BoxTime
|
||||||
size={27}
|
size={27}
|
||||||
color={COLORS.primary}
|
color={COLORS.primary}
|
||||||
@@ -29,6 +33,7 @@ const Stats: FC = () => {
|
|||||||
<StatCard
|
<StatCard
|
||||||
count={data?.data.invoicesCount}
|
count={data?.data.invoicesCount}
|
||||||
description={t('home.factureCount')}
|
description={t('home.factureCount')}
|
||||||
|
to={`${Paths.proformaInvoice}?tab=${ProformaInvoiceStatusEnum.NOT_CONFIRMED}`}
|
||||||
icon={<ReceiptText
|
icon={<ReceiptText
|
||||||
size={27}
|
size={27}
|
||||||
color={COLORS.primary}
|
color={COLORS.primary}
|
||||||
@@ -37,6 +42,7 @@ const Stats: FC = () => {
|
|||||||
<StatCard
|
<StatCard
|
||||||
count={data?.data.inProgressOrdersCount}
|
count={data?.data.inProgressOrdersCount}
|
||||||
description={t('home.orderCount')}
|
description={t('home.orderCount')}
|
||||||
|
to={`${Paths.order.myOrders}?tab=${TabMyOrdersEnum.IN_PROGRESS}`}
|
||||||
icon={<BoxTick
|
icon={<BoxTick
|
||||||
size={27}
|
size={27}
|
||||||
color={COLORS.primary}
|
color={COLORS.primary}
|
||||||
@@ -45,6 +51,7 @@ const Stats: FC = () => {
|
|||||||
<StatCard
|
<StatCard
|
||||||
count={data?.data.completedOrdersCount}
|
count={data?.data.completedOrdersCount}
|
||||||
description={t('home.orderDoneCount')}
|
description={t('home.orderDoneCount')}
|
||||||
|
to={`${Paths.order.myOrders}?tab=${TabMyOrdersEnum.DELIVERED}`}
|
||||||
icon={<TruckTick
|
icon={<TruckTick
|
||||||
size={27}
|
size={27}
|
||||||
color={COLORS.primary}
|
color={COLORS.primary}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import Tabs from '@/components/Tabs'
|
import Tabs from '@/components/Tabs'
|
||||||
import { useMemo, useState, type FC } from 'react'
|
import { useMemo, useState, type FC } from 'react'
|
||||||
import { Link, useNavigate } from 'react-router-dom'
|
import { Link, useNavigate, useSearchParams } from 'react-router-dom'
|
||||||
import { ProformaInvoiceStatusEnum } from './enum/InvoiceEnum'
|
import { ProformaInvoiceStatusEnum } from './enum/InvoiceEnum'
|
||||||
import Filters from '@/components/Filters'
|
import Filters from '@/components/Filters'
|
||||||
import Table from '@/components/Table'
|
import Table from '@/components/Table'
|
||||||
@@ -14,6 +14,12 @@ import moment from 'moment-jalaali'
|
|||||||
import StatusWithText from '@/components/StatusWithText'
|
import StatusWithText from '@/components/StatusWithText'
|
||||||
import { Eye } from 'iconsax-react'
|
import { Eye } from 'iconsax-react'
|
||||||
|
|
||||||
|
const isInvoiceTab = (value: string | null): value is ProformaInvoiceStatusEnum =>
|
||||||
|
value === ProformaInvoiceStatusEnum.ALL ||
|
||||||
|
value === ProformaInvoiceStatusEnum.NOT_CONFIRMED ||
|
||||||
|
value === ProformaInvoiceStatusEnum.PARTIALLY_CONFIRMED ||
|
||||||
|
value === ProformaInvoiceStatusEnum.CONFIRMED
|
||||||
|
|
||||||
const getServiceNames = (invoice: Invoice): string => {
|
const getServiceNames = (invoice: Invoice): string => {
|
||||||
const names = [...new Set(invoice.items.map((item) => item.product.title))]
|
const names = [...new Set(invoice.items.map((item) => item.product.title))]
|
||||||
return names.join('، ') || '-'
|
return names.join('، ') || '-'
|
||||||
@@ -21,7 +27,11 @@ const getServiceNames = (invoice: Invoice): string => {
|
|||||||
|
|
||||||
const ProformaInvoice: FC = () => {
|
const ProformaInvoice: FC = () => {
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
const [activeTab, setActiveTab] = useState<ProformaInvoiceStatusEnum>(ProformaInvoiceStatusEnum.ALL)
|
const [searchParams] = useSearchParams()
|
||||||
|
const tabFromQuery = searchParams.get('tab')
|
||||||
|
const [activeTab, setActiveTab] = useState<ProformaInvoiceStatusEnum>(
|
||||||
|
isInvoiceTab(tabFromQuery) ? tabFromQuery : ProformaInvoiceStatusEnum.ALL,
|
||||||
|
)
|
||||||
const [filters, setFilters] = useState<FilterValues>({})
|
const [filters, setFilters] = useState<FilterValues>({})
|
||||||
|
|
||||||
const { data, isPending } = useGetInvoices()
|
const { data, isPending } = useGetInvoices()
|
||||||
|
|||||||
@@ -6,14 +6,22 @@ import { Eye } from 'iconsax-react'
|
|||||||
import Table from '@/components/Table'
|
import Table from '@/components/Table'
|
||||||
import { useGetMyOrders } from './hooks/useOrderData'
|
import { useGetMyOrders } from './hooks/useOrderData'
|
||||||
import moment from 'moment-jalaali'
|
import moment from 'moment-jalaali'
|
||||||
import { Link } from 'react-router-dom'
|
import { Link, useSearchParams } from 'react-router-dom'
|
||||||
import { Paths } from '@/config/Paths'
|
import { Paths } from '@/config/Paths'
|
||||||
import StatusBadge from '@/components/StatusBadge'
|
import StatusBadge from '@/components/StatusBadge'
|
||||||
|
|
||||||
|
const isOrderTab = (value: string | null): value is TabMyOrdersEnum =>
|
||||||
|
value === TabMyOrdersEnum.ALL ||
|
||||||
|
value === TabMyOrdersEnum.IN_PROGRESS ||
|
||||||
|
value === TabMyOrdersEnum.DELIVERED ||
|
||||||
|
value === TabMyOrdersEnum.CANCELLED
|
||||||
|
|
||||||
const MyOrders: FC = () => {
|
const MyOrders: FC = () => {
|
||||||
|
const [searchParams] = useSearchParams()
|
||||||
|
const tabFromQuery = searchParams.get('tab')
|
||||||
const [page, setPage] = useState<number>(1)
|
const [page, setPage] = useState<number>(1)
|
||||||
const [activeTab, setActiveTab] = useState<TabMyOrdersEnum>(
|
const [activeTab, setActiveTab] = useState<TabMyOrdersEnum>(
|
||||||
TabMyOrdersEnum.ALL,
|
isOrderTab(tabFromQuery) ? tabFromQuery : TabMyOrdersEnum.ALL,
|
||||||
)
|
)
|
||||||
const { data } = useGetMyOrders(page, activeTab)
|
const { data } = useGetMyOrders(page, activeTab)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user