titles
This commit is contained in:
+14
-8
@@ -14,6 +14,7 @@ import MainRouter from './router/Main'
|
||||
import AuthRouter from './router/Auth'
|
||||
import { Pages } from './config/Pages'
|
||||
import useConvertNumbers from './hooks/useConvertNumbers';
|
||||
import { Helmet, HelmetProvider } from 'react-helmet-async';
|
||||
|
||||
i18next.init({
|
||||
interpolation: { escapeValue: false },
|
||||
@@ -66,15 +67,20 @@ const App: FC = () => {
|
||||
<BrowserRouter>
|
||||
<QueryClientProvider client={queryClient}>
|
||||
<I18nextProvider i18n={i18next}>
|
||||
{
|
||||
isLogin === 'checking' ?
|
||||
null
|
||||
:
|
||||
isLogin === 'isLogin' ?
|
||||
<MainRouter />
|
||||
<HelmetProvider>
|
||||
<Helmet>
|
||||
<title>کنسول داناک</title>
|
||||
</Helmet>
|
||||
{
|
||||
isLogin === 'checking' ?
|
||||
null
|
||||
:
|
||||
<AuthRouter />
|
||||
}
|
||||
isLogin === 'isLogin' ?
|
||||
<MainRouter />
|
||||
:
|
||||
<AuthRouter />
|
||||
}
|
||||
</HelmetProvider>
|
||||
<ToastContainer />
|
||||
</I18nextProvider>
|
||||
</QueryClientProvider>
|
||||
|
||||
@@ -9,6 +9,7 @@ export const Pages = {
|
||||
mine: "/services",
|
||||
other: "/other-service",
|
||||
detail: "/services/detail/",
|
||||
buy: "/other-service/buy/",
|
||||
},
|
||||
transactions: "/transactions",
|
||||
receipts: {
|
||||
|
||||
+8
-1
@@ -122,7 +122,14 @@
|
||||
"your_comment": "نظر شما",
|
||||
"write_your_comment": "نظر خود را راجع به این سرویس بنویسید",
|
||||
"users_comments": "نظرات کاربران",
|
||||
"detail": "جزییات بیشتر"
|
||||
"detail": "جزییات بیشتر",
|
||||
"back": "بازگشت",
|
||||
"info_business": "اطلاعات کسب و کار",
|
||||
"enter_info_business": "اطلاعت کسب و کار خود را با دقت وارد کنید.",
|
||||
"business_name": "نام کسب و کار",
|
||||
"phone_business": "شماره تماس کسب و کار",
|
||||
"short_description": "توضیح کوتاه",
|
||||
"confrim_and_invoice": "تایید و صدور صورت حساب"
|
||||
},
|
||||
"loading": "در حال بارگذاری",
|
||||
"footer": {
|
||||
|
||||
+3
-4
@@ -1,11 +1,10 @@
|
||||
import { StrictMode } from 'react'
|
||||
// import { StrictMode } from 'react'
|
||||
import { createRoot } from 'react-dom/client'
|
||||
import './assets/fonts/irancell/style.css'
|
||||
import './index.css'
|
||||
import App from './App.tsx'
|
||||
|
||||
createRoot(document.getElementById('root')!).render(
|
||||
<StrictMode>
|
||||
<App />
|
||||
</StrictMode>,
|
||||
<App />
|
||||
,
|
||||
)
|
||||
|
||||
@@ -5,6 +5,7 @@ import { useNavigate, useParams } from 'react-router-dom'
|
||||
import { ArrowLeft2 } from 'iconsax-react'
|
||||
import { useGetAnnoncementDetail } from './hooks/useAnnoncementData'
|
||||
import PageLoading from '../../components/PageLoading'
|
||||
import { Helmet } from 'react-helmet-async'
|
||||
|
||||
const AnnouncementDetail: FC = () => {
|
||||
|
||||
@@ -15,6 +16,11 @@ const AnnouncementDetail: FC = () => {
|
||||
|
||||
return (
|
||||
<div className='mt-4'>
|
||||
<Helmet>
|
||||
<title>
|
||||
داناک | اطلاعیه
|
||||
</title>
|
||||
</Helmet>
|
||||
<div className='flex justify-between'>
|
||||
<div>
|
||||
{t('announcement.text_announcement')}
|
||||
|
||||
@@ -9,6 +9,7 @@ import { useGetAnnoncement } from './hooks/useAnnoncementData'
|
||||
import PageLoading from '../../components/PageLoading'
|
||||
import { AnnoncementItemType } from './types/AnnoncementTypes'
|
||||
import moment from 'moment-jalaali'
|
||||
import { Helmet } from 'react-helmet-async'
|
||||
|
||||
const AnnouncementtList: FC = () => {
|
||||
|
||||
@@ -28,6 +29,11 @@ const AnnouncementtList: FC = () => {
|
||||
|
||||
return (
|
||||
<div className='mt-4 text-sm'>
|
||||
<Helmet>
|
||||
<title>
|
||||
داناک | اطلاعیه ها
|
||||
</title>
|
||||
</Helmet>
|
||||
<div className='text-base'>
|
||||
{t('announcement.announcements')}
|
||||
</div>
|
||||
|
||||
@@ -12,6 +12,7 @@ import * as Yup from 'yup'
|
||||
import { toast } from 'react-toastify'
|
||||
import { ErrorType } from '../../helpers/types'
|
||||
import { useCreateCriticisms } from './hooks/useCriticismsData'
|
||||
import { Helmet } from 'react-helmet-async'
|
||||
|
||||
const AddCriticisms: FC = () => {
|
||||
|
||||
@@ -66,6 +67,11 @@ const AddCriticisms: FC = () => {
|
||||
|
||||
return (
|
||||
<div className='mt-4 text-sm'>
|
||||
<Helmet>
|
||||
<title>
|
||||
داناک | انتقادات
|
||||
</title>
|
||||
</Helmet>
|
||||
<div>
|
||||
{t('criticisms.criticisms')}
|
||||
</div>
|
||||
|
||||
@@ -59,8 +59,10 @@ const Legal: FC = () => {
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
if (getFinancialInfo.data?.data?.user?.legalUser) {
|
||||
if (getFinancialInfo.data?.data?.user?.legalUser || getFinancialInfo.data?.data?.user?.realUser) {
|
||||
setIsReadOnly(true)
|
||||
}
|
||||
if (getFinancialInfo.data?.data?.user?.legalUser) {
|
||||
const data = getFinancialInfo.data.data?.user
|
||||
formik.setValues({
|
||||
address: data?.address.address,
|
||||
|
||||
@@ -55,6 +55,10 @@ const Personal: FC = () => {
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
|
||||
if (getFinancialInfo.data?.data?.user?.legalUser || getFinancialInfo.data?.data?.user?.realUser) {
|
||||
setIsReadOnly(true)
|
||||
}
|
||||
if (getFinancialInfo.data?.data?.user?.realUser) {
|
||||
const data = getFinancialInfo.data?.data?.user
|
||||
setIsReadOnly(true)
|
||||
|
||||
@@ -14,6 +14,7 @@ import { useGetQuikAccess } from './hooks/useHomeData'
|
||||
import { QuikAccessItemType } from './types/HomeTypes'
|
||||
import ServiceItem from '../../components/ServiceItem'
|
||||
import PageLoading from '../../components/PageLoading'
|
||||
import { Helmet } from 'react-helmet-async';
|
||||
|
||||
|
||||
const Home: FC = () => {
|
||||
@@ -24,6 +25,9 @@ const Home: FC = () => {
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
<Helmet>
|
||||
<title>داناک | پیشخوان</title>
|
||||
</Helmet>
|
||||
{
|
||||
getAds.isPending || getQuikAccess.isPending ?
|
||||
<div className='mt-5'>
|
||||
|
||||
@@ -5,6 +5,7 @@ import PageLoading from '../../components/PageLoading'
|
||||
import DanakLearning from '../home/components/DanakLearning'
|
||||
import { Calendar2, Clock, Element3 } from 'iconsax-react'
|
||||
import moment from 'moment-jalaali'
|
||||
import { Helmet } from 'react-helmet-async'
|
||||
|
||||
const LearningDetail: FC = () => {
|
||||
|
||||
@@ -13,6 +14,11 @@ const LearningDetail: FC = () => {
|
||||
|
||||
return (
|
||||
<div className='mt-4'>
|
||||
<Helmet>
|
||||
<title>
|
||||
داناک | آموزش
|
||||
</title>
|
||||
</Helmet>
|
||||
{
|
||||
getLearningDetail.isPending ?
|
||||
<PageLoading />
|
||||
|
||||
@@ -8,6 +8,7 @@ import { LearningItemType } from './types/LearningTypes'
|
||||
import moment from 'moment-jalaali'
|
||||
import { Link } from 'react-router-dom'
|
||||
import { Pages } from '../../config/Pages'
|
||||
import { Helmet } from 'react-helmet-async'
|
||||
|
||||
const LearningList: FC = () => {
|
||||
|
||||
@@ -17,6 +18,11 @@ const LearningList: FC = () => {
|
||||
|
||||
return (
|
||||
<div className='w-full flex gap-6 mt-4'>
|
||||
<Helmet>
|
||||
<title>
|
||||
داناک | آموزش
|
||||
</title>
|
||||
</Helmet>
|
||||
<div className='flex-1'>
|
||||
<div>
|
||||
{t('learning.learning')}
|
||||
|
||||
@@ -15,6 +15,7 @@ import Button from '../../components/Button'
|
||||
import ApproveInvoice from './components/ApproveInvoice'
|
||||
import PayInvoice from './components/PayInvoice'
|
||||
import Input from '../../components/Input'
|
||||
import { Helmet } from 'react-helmet-async'
|
||||
|
||||
const ReceiptsDetail: FC = () => {
|
||||
|
||||
@@ -25,6 +26,11 @@ const ReceiptsDetail: FC = () => {
|
||||
|
||||
return (
|
||||
<div className='mt-4'>
|
||||
<Helmet>
|
||||
<title>
|
||||
داناک | صورتحساب
|
||||
</title>
|
||||
</Helmet>
|
||||
<div className='flex xl:flex-row flex-col gap-4 items-center'>
|
||||
<div className='flex gap-6 items-center'>
|
||||
<div className='whitespace-nowrap'>{t('receip.detail_account')}</div>
|
||||
|
||||
@@ -10,6 +10,7 @@ import PageLoading from '../../components/PageLoading'
|
||||
import { NumberFormat } from '../../config/func'
|
||||
import { ReceiptItemType } from './types/ReceiptTypes'
|
||||
import moment from 'moment-jalaali'
|
||||
import { Helmet } from 'react-helmet-async'
|
||||
|
||||
const ReceiptsList: FC = () => {
|
||||
|
||||
@@ -19,6 +20,11 @@ const ReceiptsList: FC = () => {
|
||||
|
||||
return (
|
||||
<div className='mt-4'>
|
||||
<Helmet>
|
||||
<title>
|
||||
داناک | صورتحساب ها
|
||||
</title>
|
||||
</Helmet>
|
||||
<div>
|
||||
{t('receip.receip_list')}
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
import { FC } from 'react'
|
||||
import { useParams } from 'react-router-dom'
|
||||
import { useGetDetailService } from './hooks/useServiceData'
|
||||
import ServiceHeader from './components/ServiceHeader'
|
||||
import HeaderBuy from './components/HeaderBuy'
|
||||
import PageLoading from '../../components/PageLoading'
|
||||
|
||||
const BuyService: FC = () => {
|
||||
|
||||
const { serviceId, planId } = useParams()
|
||||
const getDetailService = useGetDetailService(serviceId ? serviceId : '')
|
||||
|
||||
return (
|
||||
<div className='w-full flex gap-6 mt-4'>
|
||||
{
|
||||
getDetailService.isPending ?
|
||||
<PageLoading />
|
||||
:
|
||||
<div className='flex-1 max-w-full'>
|
||||
<HeaderBuy planId={planId} data={getDetailService?.data?.data?.danakService} />
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default BuyService
|
||||
@@ -111,12 +111,6 @@ const DetailService: FC = () => {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className='mt-6'>
|
||||
<Input
|
||||
label={t('service.fullName')}
|
||||
placeholder={t('service.enter_your_name')}
|
||||
/>
|
||||
</div>
|
||||
<div className='mt-6'>
|
||||
<Input
|
||||
label={t('service.title')}
|
||||
|
||||
@@ -9,6 +9,7 @@ import { useGetMyServices } from './hooks/useServiceData'
|
||||
import { MyServicesItem } from './types/ServiecTypes'
|
||||
import { useGetAds } from '../ads/hooks/useAdsData'
|
||||
import { AdsDisplayLocation } from '../ads/types/AdsTypes'
|
||||
import { Helmet } from 'react-helmet-async'
|
||||
|
||||
const MyServices: FC = () => {
|
||||
|
||||
@@ -19,6 +20,11 @@ const MyServices: FC = () => {
|
||||
|
||||
return (
|
||||
<div className='w-full flex gap-6 mt-4'>
|
||||
<Helmet>
|
||||
<title>
|
||||
داناک | سرویس های من
|
||||
</title>
|
||||
</Helmet>
|
||||
<div className='flex-1'>
|
||||
<div>
|
||||
{t('service.my_service')}
|
||||
|
||||
@@ -10,6 +10,7 @@ import ServiceItem from '../../components/ServiceItem'
|
||||
import OtherServicesComponent from './components/OtherServices'
|
||||
import { useGetAds } from '../ads/hooks/useAdsData'
|
||||
import { AdsDisplayLocation, AdsItemType } from '../ads/types/AdsTypes'
|
||||
import { Helmet } from 'react-helmet-async'
|
||||
|
||||
|
||||
const OtherServices: FC = () => {
|
||||
@@ -22,6 +23,10 @@ const OtherServices: FC = () => {
|
||||
|
||||
return (
|
||||
<div className='w-full flex gap-6'>
|
||||
<Helmet>
|
||||
<title>داناک | لیست سرویس ها
|
||||
</title>
|
||||
</Helmet>
|
||||
<div className='flex-1'>
|
||||
{
|
||||
getSuggestedServices.isPending || getAdsLeft.isPending ?
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
import { FC, useEffect, useState } from 'react'
|
||||
import Button from '../../../components/Button'
|
||||
import { ArrowRight, TickCircle } from 'iconsax-react'
|
||||
import { ServiceDetailDataType } from '../types/ServiecTypes'
|
||||
import { NumberFormat } from '../../../config/func'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import Input from '../../../components/Input'
|
||||
import Textarea from '../../../components/Textarea'
|
||||
import { useNavigate } from 'react-router-dom'
|
||||
import { Pages } from '../../../config/Pages'
|
||||
|
||||
type Props = {
|
||||
data: ServiceDetailDataType,
|
||||
planId?: string
|
||||
}
|
||||
|
||||
const HeaderBuy: FC<Props> = ({ data, planId }) => {
|
||||
|
||||
const navigate = useNavigate()
|
||||
const { t } = useTranslation('global')
|
||||
const [planSelected] = useState<string>(planId ? planId : '')
|
||||
const [price, setPrice] = useState<number>(data?.subscriptionPlans[0]?.price)
|
||||
const [finalPrice, setFinalPrice] = useState<number>(0)
|
||||
const [planText, setPlanText] = useState<string>('')
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
const plan = data?.subscriptionPlans.find((item) => item.id === planSelected)
|
||||
|
||||
setPlanText(plan.name)
|
||||
setFinalPrice(plan.finalPrice)
|
||||
setPrice(plan?.price)
|
||||
|
||||
}, [data])
|
||||
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className='p-6 bg-white rounded-3xl'>
|
||||
<div className='flex justify-between items-center'>
|
||||
<div onClick={() => navigate(Pages.services.detail + data.id)} className='flex cursor-pointer gap-1.5'>
|
||||
<ArrowRight className='size-4' color='#888888' />
|
||||
<div className='text-xs text-description'>
|
||||
{t('service.back')}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='h-8 bg-[#EAEDF5] px-9 text-xs pt-[9px] rounded-full items-center'>
|
||||
{planText}
|
||||
</div>
|
||||
</div>
|
||||
<div className='w-full items-end mt-6 flex xl:flex-row flex-col xl:justify-between'>
|
||||
<div className='flex xl:gap-8 gap-4'>
|
||||
<div className='xl:size-[70px] size-[50px] rounded-xl'>
|
||||
<img src={data?.icon} className='w-full h-full rounded-xl' />
|
||||
</div>
|
||||
<div>
|
||||
<div>
|
||||
{data?.name}
|
||||
</div>
|
||||
<div className='text-xs xl:mt-3 mt-1.5 text-[#4E505A]'>
|
||||
{data?.title}
|
||||
</div>
|
||||
<p className='text-description mt-1 text-[11px]'>
|
||||
{data?.description}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='flex flex-col justify-between xl:items-end'>
|
||||
<div className='flex gap-4 mt-5 xl:mt-0 items-center justify-between xl:justify-normal'>
|
||||
<div className='text-xs whitespace-nowrap flex gap-1 items-center'>
|
||||
<div className='flex gap-2'>
|
||||
{
|
||||
finalPrice !== price &&
|
||||
<div className='line-through text-xs text-description'>
|
||||
{NumberFormat(Number(price))}
|
||||
</div>
|
||||
}
|
||||
<div>{NumberFormat(Number(finalPrice))}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='mt-8 p-6 bg-white rounded-3xl flex xl:gap-20 xl:flex-row flex-col gap-10'>
|
||||
<div>
|
||||
<div className='text-sm'>
|
||||
{t('service.info_business')}
|
||||
</div>
|
||||
|
||||
<div className='text-xs text-description mt-2'>
|
||||
{t('service.enter_info_business')}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='flex-1'>
|
||||
<div>
|
||||
<Input
|
||||
label={t('service.business_name')}
|
||||
/>
|
||||
</div>
|
||||
<div className='mt-8'>
|
||||
<Input
|
||||
label={t('service.phone_business')}
|
||||
/>
|
||||
</div>
|
||||
<div className='mt-8'>
|
||||
<Textarea
|
||||
label={t('service.short_description')}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className='mt-8 flex justify-end'>
|
||||
<Button
|
||||
className='xl:w-fit px-5'
|
||||
>
|
||||
<div className='flex gap-2 items-center'>
|
||||
<TickCircle size={20} color='white' />
|
||||
<div>
|
||||
{t('service.confrim_and_invoice')}
|
||||
</div>
|
||||
</div>
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default HeaderBuy
|
||||
@@ -8,12 +8,12 @@ import { PlanItemType, ServiceDetailDataType } from '../types/ServiecTypes'
|
||||
import { NumberFormat } from '../../../config/func'
|
||||
import { useBuyService } from '../hooks/useServiceData'
|
||||
import { toast } from 'react-toastify'
|
||||
import { useNavigate } from 'react-router-dom'
|
||||
import { Link, useNavigate } from 'react-router-dom'
|
||||
import { Pages } from '../../../config/Pages'
|
||||
import { ErrorType } from '../../../helpers/types'
|
||||
|
||||
type Props = {
|
||||
data: ServiceDetailDataType
|
||||
data: ServiceDetailDataType,
|
||||
}
|
||||
|
||||
const ServiceHeader: FC<Props> = (props: Props) => {
|
||||
@@ -52,7 +52,7 @@ const ServiceHeader: FC<Props> = (props: Props) => {
|
||||
|
||||
|
||||
return (
|
||||
<div className='w-full p-6 bg-white rounded-3xl flex xl:flex-row flex-col xl:justify-between'>
|
||||
<div className='w-full p-6 bg-white rounded-3xl flex xl:flex-row flex-col items-end xl:justify-between'>
|
||||
<div className='flex xl:gap-8 gap-4'>
|
||||
<div className='xl:size-[70px] size-[50px] rounded-xl'>
|
||||
<img src={data?.icon} className='w-full h-full rounded-xl' />
|
||||
@@ -95,9 +95,6 @@ const ServiceHeader: FC<Props> = (props: Props) => {
|
||||
selected={planSelected}
|
||||
/>
|
||||
</div>
|
||||
<div className='size-9 hidden bg-description rounded-xl xl:flex justify-center items-center'>
|
||||
<img src={ShareIcon} className='w-4' />
|
||||
</div>
|
||||
<div className='flex gap-4 mt-5 xl:mt-0 items-center justify-between xl:justify-normal'>
|
||||
<div className='text-xs whitespace-nowrap flex gap-1 items-center'>
|
||||
<div className='flex gap-2'>
|
||||
@@ -111,18 +108,20 @@ const ServiceHeader: FC<Props> = (props: Props) => {
|
||||
</div>
|
||||
<span>{planText}</span>
|
||||
</div>
|
||||
<Button
|
||||
onClick={handleBuy}
|
||||
isLoading={buyService.isPending}
|
||||
className='bg-description xl:max-w-full max-w-[100px] text-xs h-8 bg-opacity-20 text-black px-4'
|
||||
>
|
||||
<div className='flex gap-1 items-center'>
|
||||
<div>
|
||||
{t('service.buy')}
|
||||
<Link to={Pages.services.buy + `${data.id}/${planSelected}`}>
|
||||
<Button
|
||||
// onClick={handleBuy}
|
||||
isLoading={buyService.isPending}
|
||||
className='bg-description xl:max-w-full max-w-[100px] text-xs h-8 bg-opacity-20 text-black px-4'
|
||||
>
|
||||
<div className='flex gap-1 items-center'>
|
||||
<div>
|
||||
{t('service.buy')}
|
||||
</div>
|
||||
<ArrowLeft className='size-4' color='black' />
|
||||
</div>
|
||||
<ArrowLeft className='size-4' color='black' />
|
||||
</div>
|
||||
</Button>
|
||||
</Button>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -7,6 +7,7 @@ import PageLoading from '../../components/PageLoading'
|
||||
import Email from './components/Email'
|
||||
import Sms from './components/Sms'
|
||||
import ChangePassword from './components/ChangePassword'
|
||||
import { Helmet } from 'react-helmet-async'
|
||||
|
||||
const Setting: FC = () => {
|
||||
|
||||
@@ -16,6 +17,11 @@ const Setting: FC = () => {
|
||||
|
||||
return (
|
||||
<div className='mt-4'>
|
||||
<Helmet>
|
||||
<title>
|
||||
داناک| تنظیمات
|
||||
</title>
|
||||
</Helmet>
|
||||
<div>
|
||||
{t('setting.setting')}
|
||||
</div>
|
||||
|
||||
@@ -18,6 +18,7 @@ import { useNavigate } from 'react-router-dom'
|
||||
import { Pages } from '../../config/Pages'
|
||||
import { useGetMyServices } from '../service/hooks/useServiceData'
|
||||
import { MyServicesItem } from '../service/types/ServiecTypes'
|
||||
import { Helmet } from 'react-helmet-async'
|
||||
|
||||
const CreateTicket: FC = () => {
|
||||
|
||||
@@ -81,6 +82,11 @@ const CreateTicket: FC = () => {
|
||||
|
||||
return (
|
||||
<div className='mt-4 pb-12'>
|
||||
<Helmet>
|
||||
<title>
|
||||
داناک | ایجاد تیکت
|
||||
</title>
|
||||
</Helmet>
|
||||
<div>
|
||||
{t('ticket.new_ticket')}
|
||||
</div>
|
||||
|
||||
@@ -16,6 +16,7 @@ import { toast } from 'react-toastify'
|
||||
import { ErrorType } from '../../helpers/types'
|
||||
import { clx } from '../../helpers/utils'
|
||||
import { Pages } from '../../config/Pages'
|
||||
import { Helmet } from 'react-helmet-async'
|
||||
|
||||
const TicketDetail: FC = () => {
|
||||
|
||||
@@ -86,6 +87,11 @@ const TicketDetail: FC = () => {
|
||||
|
||||
return (
|
||||
<div className='mt-4'>
|
||||
<Helmet>
|
||||
<title>
|
||||
داناک | تیکت
|
||||
</title>
|
||||
</Helmet>
|
||||
<div className='flex gap-1'>
|
||||
<div>{t('ticket.ticket_number')}</div>
|
||||
</div>
|
||||
|
||||
@@ -8,6 +8,7 @@ import { Link } from 'react-router-dom'
|
||||
import { Pages } from '../../config/Pages'
|
||||
import { useGetTickets } from './hooks/useTicketData'
|
||||
import moment from 'moment-jalaali'
|
||||
import { Helmet } from 'react-helmet-async'
|
||||
|
||||
const TicketList: FC = () => {
|
||||
|
||||
@@ -17,6 +18,11 @@ const TicketList: FC = () => {
|
||||
|
||||
return (
|
||||
<div className='mt-4'>
|
||||
<Helmet>
|
||||
<title>
|
||||
داناک | تیکت ها
|
||||
</title>
|
||||
</Helmet>
|
||||
<div className='flex justify-between items-center'>
|
||||
<div>
|
||||
{t('ticket.tickets')}
|
||||
|
||||
@@ -10,6 +10,7 @@ import { NumberFormat } from '../../config/func'
|
||||
import Pagination from '../../components/Pagination'
|
||||
import BoxSekeleton from './skeleton/BoxSekeleton'
|
||||
import DefaultTableSkeleton from '../../components/DefaultTableSkeleton'
|
||||
import { Helmet } from 'react-helmet-async'
|
||||
|
||||
const TransactionList: FC = () => {
|
||||
|
||||
@@ -19,6 +20,11 @@ const TransactionList: FC = () => {
|
||||
|
||||
return (
|
||||
<div className='mt-4'>
|
||||
<Helmet>
|
||||
<title>
|
||||
داناک | تراکنش ها
|
||||
</title>
|
||||
</Helmet>
|
||||
<div>
|
||||
{t('transaction.transaction')}
|
||||
</div>
|
||||
|
||||
@@ -28,6 +28,7 @@ import Financial from '../pages/financial/Financial'
|
||||
import CallBack from '../pages/wallet/CallBack'
|
||||
import MyDiscountList from '../pages/discounts/List'
|
||||
import LearningDetail from '../pages/learning/Detail'
|
||||
import BuyService from '../pages/service/BuyService'
|
||||
|
||||
const MainRouter: FC = () => {
|
||||
return (
|
||||
@@ -42,6 +43,7 @@ const MainRouter: FC = () => {
|
||||
<Route path={Pages.services.mine} element={<MyServices />} />
|
||||
<Route path={Pages.services.other} element={<OtherServices />} />
|
||||
<Route path={Pages.services.detail + ':id'} element={<DetailService />} />
|
||||
<Route path={Pages.services.buy + ':serviceId/:planId'} element={<BuyService />} />
|
||||
<Route path={Pages.ticket.list} element={<TicketList />} />
|
||||
<Route path={Pages.ticket.create} element={<CreateTicket />} />
|
||||
<Route path={Pages.ticket.detail + ':id'} element={<TicketDetail />} />
|
||||
|
||||
Reference in New Issue
Block a user