From 2d0285dafcd311f289585712e8c39071048e8427 Mon Sep 17 00:00:00 2001 From: Samandar Turgunboyev Date: Wed, 29 Oct 2025 18:41:59 +0500 Subject: [PATCH] api ulandi --- index.html | 4 +- package-lock.json | 59 ++ package.json | 2 + public/Logo_blue.png | Bin 0 -> 21616 bytes public/navLogo.png | Bin 0 -> 21616 bytes src/App.tsx | 3 + src/pages/faq/lib/api.ts | 50 +- src/pages/faq/lib/type.ts | 14 + src/pages/faq/ui/Faq.tsx | 359 +++++-- src/pages/faq/ui/FaqCategory.tsx | 94 +- src/pages/finance/lib/api.ts | 42 + src/pages/finance/lib/type.ts | 106 ++ src/pages/finance/ui/Finance.tsx | 259 ++--- src/pages/finance/ui/FinanceDetailTour.tsx | 10 +- src/pages/finance/ui/FinanceDetailUsers.tsx | 565 +++++------ src/pages/news/lib/api.ts | 26 +- src/pages/news/lib/data.ts | 2 +- src/pages/news/lib/form.ts | 5 +- src/pages/news/lib/type.ts | 37 + src/pages/news/ui/AddNews.tsx | 16 +- src/pages/news/ui/News.tsx | 85 +- src/pages/news/ui/NewsCategory.tsx | 2 +- src/pages/news/ui/StepOne.tsx | 155 +-- src/pages/news/ui/StepTwo.tsx | 124 ++- src/pages/seo/lib/api.ts | 40 + src/pages/seo/lib/types.ts | 37 + src/pages/seo/ui/Seo.tsx | 314 ++++-- src/pages/site-banner/lib/api.ts | 47 + src/pages/site-banner/lib/types.ts | 37 + src/pages/site-banner/ui/Banner.tsx | 583 +++++++++++ src/pages/site-banner/ui/BannerCarousel.tsx | 112 +++ src/pages/site-page/lib/api.ts | 122 +++ src/pages/site-page/lib/types.ts | 63 ++ src/pages/site-page/ui/PolicyCrud.tsx | 365 ++++--- src/pages/site-page/ui/SitePage.tsx | 436 ++++---- src/pages/support/lib/api.ts | 64 ++ src/pages/support/lib/types.ts | 80 ++ src/pages/support/ui/SupportAgency.tsx | 219 ++-- src/pages/support/ui/SupportTours.tsx | 347 ++++--- src/pages/tour-settings/lib/api.ts | 70 ++ src/pages/tour-settings/lib/types.ts | 43 + src/pages/tour-settings/ui/TourSettings.tsx | 482 ++++++--- src/pages/tours/lib/api.ts | 63 ++ src/pages/tours/lib/form.ts | 24 +- src/pages/tours/lib/type.ts | 248 ++++- src/pages/tours/ui/BadgeTable.tsx | 2 +- src/pages/tours/ui/CreateEditTour.tsx | 7 +- src/pages/tours/ui/FeaturesTable.tsx | 2 +- src/pages/tours/ui/FeaturesTableType.tsx | 2 +- src/pages/tours/ui/MealTable.tsx | 2 +- src/pages/tours/ui/StepOne.tsx | 584 ++++++++--- src/pages/tours/ui/StepTwo.tsx | 327 +++--- src/pages/tours/ui/TourDetail.tsx | 933 ++++++++---------- src/pages/tours/ui/Tours.tsx | 119 ++- src/pages/tours/ui/TransportTable.tsx | 195 ++-- src/shared/config/api/URLs.ts | 18 + .../config/i18n/locales/ru/translation.json | 140 ++- .../config/i18n/locales/uz/translation.json | 141 ++- src/shared/ui/carousel.tsx | 239 +++++ src/shared/ui/infiniteScrollSelect.tsx | 104 ++ src/shared/ui/iocnSelect.tsx | 7 +- src/shared/ui/switch.tsx | 29 + src/widgets/sidebar/ui/Sidebar.tsx | 1 + vite.config.ts | 4 +- 64 files changed, 6319 insertions(+), 2352 deletions(-) create mode 100644 public/Logo_blue.png create mode 100644 public/navLogo.png create mode 100644 src/pages/finance/lib/api.ts create mode 100644 src/pages/finance/lib/type.ts create mode 100644 src/pages/seo/lib/api.ts create mode 100644 src/pages/seo/lib/types.ts create mode 100644 src/pages/site-banner/lib/api.ts create mode 100644 src/pages/site-banner/lib/types.ts create mode 100644 src/pages/site-banner/ui/Banner.tsx create mode 100644 src/pages/site-banner/ui/BannerCarousel.tsx create mode 100644 src/pages/site-page/lib/api.ts create mode 100644 src/pages/site-page/lib/types.ts create mode 100644 src/pages/support/lib/api.ts create mode 100644 src/pages/support/lib/types.ts create mode 100644 src/pages/tour-settings/lib/api.ts create mode 100644 src/pages/tour-settings/lib/types.ts create mode 100644 src/shared/ui/carousel.tsx create mode 100644 src/shared/ui/infiniteScrollSelect.tsx create mode 100644 src/shared/ui/switch.tsx diff --git a/index.html b/index.html index 6ea9d59..b86a998 100644 --- a/index.html +++ b/index.html @@ -2,9 +2,9 @@ - + - FIAS - React Js app + Simple Travel
diff --git a/package-lock.json b/package-lock.json index b7f3d0b..451f109 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-switch": "^1.2.6", "@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-tooltip": "^1.2.8", "@tailwindcss/vite": "^4.1.7", @@ -34,6 +35,7 @@ "cmdk": "^1.1.1", "date-fns": "^4.1.0", "dayjs": "^1.11.18", + "embla-carousel-react": "^8.6.0", "framer-motion": "^12.23.24", "i18next": "^25.5.2", "i18next-browser-languagedetector": "^8.2.0", @@ -2109,6 +2111,35 @@ } } }, + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-tabs": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", @@ -3860,6 +3891,34 @@ "integrity": "sha512-/0ybgsQd1muo8QlnuTpKwtl0oX5YMlUGbm8xyqgDU00motRkKFFbUJySAQBWcY79rVqNLWIWa87BGVGClwAB2w==", "dev": true }, + "node_modules/embla-carousel": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", + "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", + "license": "MIT" + }, + "node_modules/embla-carousel-react": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.6.0.tgz", + "integrity": "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==", + "license": "MIT", + "dependencies": { + "embla-carousel": "8.6.0", + "embla-carousel-reactive-utils": "8.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/embla-carousel-reactive-utils": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz", + "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==", + "license": "MIT", + "peerDependencies": { + "embla-carousel": "8.6.0" + } + }, "node_modules/emoji-regex": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", diff --git a/package.json b/package.json index e36bd21..bc0a08a 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-switch": "^1.2.6", "@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-tooltip": "^1.2.8", "@tailwindcss/vite": "^4.1.7", @@ -38,6 +39,7 @@ "cmdk": "^1.1.1", "date-fns": "^4.1.0", "dayjs": "^1.11.18", + "embla-carousel-react": "^8.6.0", "framer-motion": "^12.23.24", "i18next": "^25.5.2", "i18next-browser-languagedetector": "^8.2.0", diff --git a/public/Logo_blue.png b/public/Logo_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..6758c9df9737cfcc91e69880735b27fa17150711 GIT binary patch literal 21616 zcmdpd1y`F*7j1AT1zMoR)t>Z)5Dv$Sq`~?62z*AI^(F6d{fB*oBA2uekgx)RpJ@Ny` zNkQKg0Kg^s_eKF^WRW5ZQCv0Ur2&-_l>5kk(5<9YqyT`LINXO%7yy7ahN6s=win9r zim?xoeADUU#}yYg7n(2kPF)nCq9Na3%ZRI0lcHFncVlzWVUr>M7&^+LlMCWS#T{!y ze98(HNv&x;ESpQD{ABk>{$t?&a~lWN=8&FFQ!8Z7paF!A?DGG!S2u_&WU&?YzV((S zK}R$>^Ycb3+kdsgiYzWXj}3+YF`eB&R1mw0o)C&MT+d%q0m+^ zXlENWg@~@0b@+C)=Oj}M1pts_f1Q^+=7y72uGeUR?_XmXSB~6-l8>+Ql4W!TQUs{= z>Ed+740*nGiiG)o-mnUV2VNn!79d4FNR!JRkIkl?iP6wBBrM$@^$l`N2XvCm*ujcG zbQWZtk8(kYyr7nI={)4@)n(Cv@9&;=39{)0II)$_W&T&lfGivuX|dZ3`;+pE3%a<= zXmB4RiR>V6`JI&dVfLmxRA3dSNAX8AcU(XI8sCY(#W(?Sd=Uv!IP^;vQvv}E?+imU zod>u6d>`NK&(}Cyj4Vk; zgQ$z@9r`W1^bAw{Csg*1L=Qg>8tDD3hx}4qhzF>Y@9vcSClPtf@~qK;N`LT;2S!}W zz6LaU8I46OZ24cmf!yVa{a(p~37SFWiRw`}I~FjLCBeJ|!A8zc7aizo4fpf=TRi7k z)DEIZHj-EB#U%9XBVYO3!OpO?O8+%Ah6=euT%>|{3TiQ#T20>7o@*h*6c-E@^nVKz{5sF? z15RjC&M4OrL2HxA$P3`7Jn4Ak-gxy2WkffbO~@I|ysn8Qco@uptBsAcfdJJ1BwOV4 zLz3*&@Xd3w-5qO~z9zG%|EGW)7B(%R-+vGWqmcDJz1!n(G6%w}2lGE29THr@|x0nGe#jfK@j{X!iTl3h?CWPjAG7+X=c-f=Q9 z(@DR}iPhzJjV@`=f6}o=L?rem&?huB#va8*CWr@mLH7NlMzn(-RCW6sOLR#(R=mwKJ;{Ll=pV7JTuTFGyd z@z*#csUNR3^RX^8W&>JG3Nw7(el$mUQ5|s7Tg4&dO}B=xs=c)MS7bsLAgN#B7nIL? zQqxcs2_%@tH->&^Dyb5rt_$xWV2^W6FKtUqso!FY%(1Ozm5k*R;vN`#W4CuTAv0Aq z?mH-MrH=wQ{al2WT#hzl4Xt6gJuDfpoB1)?#YO}UU*Z6a@zWKBisO0gABDB^1>RPR zI69q^@dN^b2o3fD+k7#&FtraN68qHT$!=j`-EV85~0Us;bD~+Pg`B_j+ofBv-j)Ca-GAqRhO^MiQ+G#Ja0Klk}m+H0Y zgQ$x*ho5hH4wu@>1&7lxnagSr?&EP=GFC1HB@IM{0ej-wg5@ya-$%g7pk@H zOt-b?$|SwGFV4z*+kQa;&R=Tk#f7NXrvAzdj-w&X&An2wX*{N#CBj*VpA%|9cd>`kT(`Hn`F3SV~~F)05CLqV4?29 zaZJwsjY)|4mtuV4Oa?LX;a}<$qs1{dYAAp_GuGF6TgHn;_gU4noez8p!;ru29FoPI zG}KoN0Ek2f2>|e-k(?~qPpRz=$_K|~`Bd*@5<*jDH?V|nioG7(uurpL`rO_&yi)@R z`aLHuIfX~Y&^2Az34b-o7(K_c=WrR#tw!H2fV=ZIG$Oz9#&RqNxh|*;`0D4Y@!UMu zNXyHg?cpdk2_C%FvlfXi!n5$&YvHSr*jx2M9_eJs4qjkE*x7CM`Oyj7{<$t=CHs8e_&0Zp=uJz6rGZ{o~vFJof0!Ac)enFs;FJtc(! zI8JpT+ac3*64*xM5-z6(001NIEY;6PbE<)zs>@?;_{U!j$9+!_=z7!LFHhQB-Os{~ zkLJ(;z#j&fKyOPmw@=K6st2-51Qh0>92xVCy{K%X7_(Mb6rLn{5_6twbt+D%0APWS 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�sq0iI>a{RU6X*ni-7c0Li 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 literal 0 HcmV?d00001 diff --git a/public/navLogo.png b/public/navLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..6758c9df9737cfcc91e69880735b27fa17150711 GIT binary patch literal 21616 zcmdpd1y`F*7j1AT1zMoR)t>Z)5Dv$Sq`~?62z*AI^(F6d{fB*oBA2uekgx)RpJ@Ny` zNkQKg0Kg^s_eKF^WRW5ZQCv0Ur2&-_l>5kk(5<9YqyT`LINXO%7yy7ahN6s=win9r zim?xoeADUU#}yYg7n(2kPF)nCq9Na3%ZRI0lcHFncVlzWVUr>M7&^+LlMCWS#T{!y ze98(HNv&x;ESpQD{ABk>{$t?&a~lWN=8&FFQ!8Z7paF!A?DGG!S2u_&WU&?YzV((S zK}R$>^Ycb3+kdsgiYzWXj}3+YF`eB&R1mw0o)C&MT+d%q0m+^ zXlENWg@~@0b@+C)=Oj}M1pts_f1Q^+=7y72uGeUR?_XmXSB~6-l8>+Ql4W!TQUs{= z>Ed+740*nGiiG)o-mnUV2VNn!79d4FNR!JRkIkl?iP6wBBrM$@^$l`N2XvCm*ujcG zbQWZtk8(kYyr7nI={)4@)n(Cv@9&;=39{)0II)$_W&T&lfGivuX|dZ3`;+pE3%a<= zXmB4RiR>V6`JI&dVfLmxRA3dSNAX8AcU(XI8sCY(#W(?Sd=Uv!IP^;vQvv}E?+imU zod>u6d>`NK&(}Cyj4Vk; zgQ$z@9r`W1^bAw{Csg*1L=Qg>8tDD3hx}4qhzF>Y@9vcSClPtf@~qK;N`LT;2S!}W zz6LaU8I46OZ24cmf!yVa{a(p~37SFWiRw`}I~FjLCBeJ|!A8zc7aizo4fpf=TRi7k z)DEIZHj-EB#U%9XBVYO3!OpO?O8+%Ah6=euT%>|{3TiQ#T20>7o@*h*6c-E@^nVKz{5sF? z15RjC&M4OrL2HxA$P3`7Jn4Ak-gxy2WkffbO~@I|ysn8Qco@uptBsAcfdJJ1BwOV4 zLz3*&@Xd3w-5qO~z9zG%|EGW)7B(%R-+vGWqmcDJz1!n(G6%w}2lGE29THr@|x0nGe#jfK@j{X!iTl3h?CWPjAG7+X=c-f=Q9 z(@DR}iPhzJjV@`=f6}o=L?rem&?huB#va8*CWr@mLH7NlMzn(-RCW6sOLR#(R=mwKJ;{Ll=pV7JTuTFGyd z@z*#csUNR3^RX^8W&>JG3Nw7(el$mUQ5|s7Tg4&dO}B=xs=c)MS7bsLAgN#B7nIL? zQqxcs2_%@tH->&^Dyb5rt_$xWV2^W6FKtUqso!FY%(1Ozm5k*R;vN`#W4CuTAv0Aq z?mH-MrH=wQ{al2WT#hzl4Xt6gJuDfpoB1)?#YO}UU*Z6a@zWKBisO0gABDB^1>RPR zI69q^@dN^b2o3fD+k7#&FtraN68qHT$!=j`-EV85~0Us;bD~+Pg`B_j+ofBv-j)Ca-GAqRhO^MiQ+G#Ja0Klk}m+H0Y zgQ$x*ho5hH4wu@>1&7lxnagSr?&EP=GFC1HB@IM{0ej-wg5@ya-$%g7pk@H zOt-b?$|SwGFV4z*+kQa;&R=Tk#f7NXrvAzdj-w&X&An2wX*{N#CBj*VpA%|9cd>`kT(`Hn`F3SV~~F)05CLqV4?29 zaZJwsjY)|4mtuV4Oa?LX;a}<$qs1{dYAAp_GuGF6TgHn;_gU4noez8p!;ru29FoPI zG}KoN0Ek2f2>|e-k(?~qPpRz=$_K|~`Bd*@5<*jDH?V|nioG7(uurpL`rO_&yi)@R z`aLHuIfX~Y&^2Az34b-o7(K_c=WrR#tw!H2fV=ZIG$Oz9#&RqNxh|*;`0D4Y@!UMu zNXyHg?cpdk2_C%FvlfXi!n5$&YvHSr*jx2M9_eJs4qjkE*x7CM`Oyj7{<$t=CHs8e_&0Zp=uJz6rGZ{o~vFJof0!Ac)enFs;FJtc(! zI8JpT+ac3*64*xM5-z6(001NIEY;6PbE<)zs>@?;_{U!j$9+!_=z7!LFHhQB-Os{~ zkLJ(;z#j&fKyOPmw@=K6st2-51Qh0>92xVCy{K%X7_(Mb6rLn{5_6twbt+D%0APWS zrMk;#&UgQ}snD4`U*9!@TNTu)#@=$-U{2T_Gw<>&zxLYD(^Yu{jo|nx2iO=8RBNj+ z9xd#-ohata8}EEmsRkU==Uav>4#a-3)e@k;%zaue3#0bXN_l*3}%28=q~O+mcWh^6L!X`*ya-v zr*c*qpRw1Y!mfryagzRThnZ~d^pyAJ&MeeMEGk^<8w4m*F0%y-16Nm!{CZpU_e_X% z7B|uxDaBRtjS>5f7Fr?r=w{2AItx$x|1z)wp6R4Z0!9cAa}SWO>-#g zKmYzfMp4wKQeZ#uT7u%a{EYSP*7T)WNhL05(j2pP?g!C#@-KQbH$C6oM!&7N%onBl zcCC$t<0U8@sESgF$cPLw!3~_gckIr5YJ$aoU}TF-lmD=~E*A=wE7hqs=kRrLI{ZQF z>C-FpKNu&Ps-HniT1WA7)S$6TrnIrQxJEI2B5pWnw)jxuV0;*(Ua$nK$n`6IDyHuP~qMw-N9)DN2P=W%FpQ!O3UAW#TznRCxMB)v-o`{QmaDN~XXQ3#bzC1l4fy1l0j;$vT{JLl-#btL zGg)r$-QAc^`PFjMy8`!g^1OaLyjOQH@64>O@`a#Z?zgUW7Vi<45H=V@biU!o@kCgo zuL?~}t%IcmXoBGB$-jweU2yxZX>pY<=hMK&-ZCoxkyma&X zLi#O5(Eigq&gGyhhj>2wyau4d0Bf9>pRN3;@v_2uPC6B=XHN%PfR>7^)2Sb=Qg`h_rN*cfKkC1Z8dJB|K zCgyFKv8Gz)_VaR(E^ZTSrqR^G7gZo5*=81Gg+1)~JvM(?L#_5{q2vU@L= zDEz5EihE#mc$gTqTGlg2u#*&0^Pf<0x@S)TeEq0*ZyyXfh89iN-Ul?jn9nMM$PUdf zfMH{sM_CKEHzAM~(*ne8&1foL>@o(VsvDvM5tVYU|A$Q|cb!;h@)r1BbbOVG1HPyE zhw2NW;=F08Nj>YZ-Os8S#o_^W=MiEWoj>wWR+{Q@Nx#?k5kWR+3Pb!%dEaheDhV!2 z1}5nIy?dyzZ%+!D*epj^#xm$?4`h4u*@`mjfZJJW;nzden*x+_{8F3$kYB9shG8pc3aOQ-dd)^P@d(JFJ}7JvEtH-j%Jyw0bSM!iVv#tv4{RD5l zIIK<26CFR#uz^~vhe#k6HW>YvgA8)f=0p3H84E_v#arZ3V`hh$Lo~WrsPZftc0UPP z9eq8(ydpD(ycS$-#)ahy6O{Ihi2fjaSM1<8Q1S-9NPbVpY0pK3U>{c$T%Wc^>DJ3Kk4z)0v~@ zAhTPZPo|{Z9P9VF5^j-W921jp%N`(u>8iF!Xkwo|4)Yk`l6PFyqN-X#A zg|mIz9N8BNL~L&0^M!`|k}3#K*|I5wKq#h#F1T5Lkak5BQ&Bm6o|wu`2AT@4=H{ge zTE*7ibj&x~_0YG;Gsq9#{kUk#nl^IH={&g>o~>t?)kdvbw0zi#m;(yc+-nNIG_xw& z%;yuRVrdpooiFMbuGG>qXh0(-5~_{uTuKY7537t)xVH2v^`P`l9*EJcY3puzIhqU0 zUq)g8KI^jS^0C7D|Ei?Ian!^4e?)DECVP{O_S>`JuCJIC{ETWoE*tS2b(|dfqx1;X^q68!CW;m; zo`#j1)Z_mK^`n1miDJFTW5WnK6OYdm9>i2(nCxODjjV5-LV#1v)Rd~5u+UF&bRDF7 z*9;IFP_#2~icZsl0T|lWzqT)6Q7>Rx$1UF(*yv4#(jEWiHi1khK3vLfG!d%j@l-*7 z&a)ie8*-j%(y*I=oLRavbrF7pQ&T2E?OikQ|p792Od!H;rLrSp115}|JFt=7JN-q|Ly^_dbhapWf2Y(gzgDrE-x zGCR5RZuJ6X1~8qDPHr3S{F5_b3ssI8^CLz})7RfPifd6KBkT-OYoOHVuwcItN&2Dg zYYLa~TH@u+E(x!W8m1pD7kwSYUpHVZRUf7r^udRJw><7F_BX_}}0q1s>)W@GH!* zUDVZx3jeZodZ(NAGbMt5D(lBudV#h3d^F9VPE8C+v{Yk+mEubQ&N?-TeL>YSu1KWv>|UeCRGKMG>B z5s_$O;Y@T?qV-Pk#B24uwhMwGz|jt+9=i99YQo_vX<`2MW<`g#83^&CugmimnEFnH z?L9rjbO{J^y{q8y{7wpYaT`V2g7P9*+N`*8bj#sH%6Lyt_!Pn8GS!$pLER7I zILYv^3|~4dfb$i#55@A*QgJKFZ-l>G9)+W(mX|AH`8sHOe(sNLjnqfz(S;4?B-t!a z@(O9R;)9LJnZ)a4?;LH0jaR#rrt%j=6S?j#V?K&bLh!2Nf%Zz>K~(8buj$WfI$u&7$%sTR=3L1#Boc?N-|36k zjjUU^jL!k~C2FCOD>wb1hk}|2)z}7xLJeA=#jqvl<>u5N`CgecWCuPk_&8EP`^_K}aGN{ZR~ z6YXHO`WmgPc*6U%v=A1WXZ5`sr%yd5x)nuKZO& zWglP2qx97L7sL7k93505a;(9 zG8Gvi7rosz80cHzr^SGltS-1yu3Yl6eoJZ1E|~Mno4I+ol9i7uN6IJD2gq<_wau2} zV+yzLf1?_H7|g zttMA;CuTL$QC`g~wy0`ReTR9_T?WyBEKMnmdik%-^Zg-c-c2{LiuUb_bSz+d(V3r! z0xG4bi`nqhe7Bi7xpOlBT1^I(bp60r)1X$-HTC_3cdFQ#k!G2Bh^T-C)UN165y0Bm8C=SgVicNBmQ1U(_4T?VIllA#a%S6M zTatR%p4~$4OlZt%S#lZ~o@R%M6Xx`6U=@CpRu{{HuP_%oO8iv*$mF7qNr2J29s1N8 zi`H?5oy22DH)>!WuUt-Z5?7oU+1(FJZHMj$rxk(4V8&AeO_U^e?2B@4{e@;Us~G{e z&vgvcb9H#$y@-XPE^0i)IXO{QOYU}TgGW6i0?WsUEJnC$EzdtEPTrBw@EG!!5y8+#-GO? zFM?o<+4lc@W%^Tb>;?71JQK4(j-ojAqa@%R)}C zLrJ#zyc}^@w=H>*M$oo#MadIZzfYBhciop{_rcO5txM+$HQ9;Z*S{=YZDnbtjQpl^ z_8U}ljjMOOYvlwuH%-FU=T*L~s&W~G&)hIISukJ}gGJ+y(^qVBBhVq7Za%XPsRj*> z7b^v;%0nW3HWH{#BAcyx?l0LRs-+F1;CtN2gd^%W%c z{}g2F{?zk@6aaSrL|Uk8X8IUD^B?d^_3YGa05?blv>E!;pQYFyqU< zrpBLjR;~M=ah9+qC+NfbCvkb8H`MJ7wY1x-@*GcZQU`3*Tr9L^k|fZy&Oz zfi436Af52N+b0U9UTNMB;(BKb(k8WlhZN#*^Y=io$vmB8Swi{MzV!vSBgJso^=&6+ zz0sre)isTta@J*ES89~sb*9LmJb7unM%mjAfiEU?&ibF1+4w6`r@BCFoKRCxjcj z{k?MgtDFfcYoLf5j%R0sk6o(zaoffWGbEqGrg`P?OVnk$ykQJQM~CJIs5mb5RI+3 zmCj>Ox7*d*`Y(7Q<&WB}BUlw?dTZ~+&-j^1|C#+Mz_w{E^xR*KZ$Q*z-U{#4lLCV{ zkB3mkQ1$3Xu4bnvOWTbob4!&?EV|ui0m7B~fd{kxRkt{s7MzOIlRTx#H+Vh=UXJ>5 z+o;6ZFiHYyb$$oS{rXI`(Le9#T>_-Xx|*f3+~(~IlwqBz0T!F0B;AG1^fhhs0|kd_ zYL4-YRM*pTbw=)|xInFN_up@4^)+~boh4+^DlX%gMLMcFKLXn7(S+@Ip}dcQIG zx(AOCL|Y-MQ*L&a=#gdHq{q1I@wh zQuiCROkoZ;h5AW--`hgTv6xOJJ%3kDU>G>Y$4xh%f#w^R7mzW8fRjL)npbOdhRRm` zuP7>asO&2E^E+p=*v}e%Tm7;UbXB{Ze8CmI=|_e#@}2*TK=Z@DxIuCEot)t4!_t1w zz>1Mah}>1!+PKKKa_uqtNv56`$1!PX0vi$-xMX10!-_HAG;fEi<;0($4P?Zl?0f1u zFLL!8p|_>(8M5p$Cy=(ynR$vhjPFxkf+xt7R^$3ve#hCFRxL|Z#KesB+hL_32N&p$ z$aiXmN5L5OpAo;6MH_vf2l&GH&|K~v`5vpEP^VW6%^|q@ zq*eM!#bm2g1OheD|KojboN%Y5BA?Lf%m!0C#ZHb| zMkZFLP#IDfqu%yfuNC#P9jT%K*izAah#!4^r0uL5^=?CvOmO&%DJ=GUnMPb|7{JgM z()(u$Qs??G``pV;wi1UmsBcVGC=>G!S7u3t%1s440%PZb42D>t- zV@)!yvbvQsenq37>FFd5wO~u-KiO4-7yZZJf^COs#0yv;UISJ@QGbX(@XC3F;pB)`$)TS}JtucswOhZl0I@@6#-tu(~? z`-7oVu<>^Bmqp;9jHMMUrfVQrUS4@R!u~`4lxoA*J9ojL(YBasOBL!IYP(BSjQ=Y9 zs5&v3-^FDj%@>E>42r+ffplo{#Nbn&?_tqcSqmyIOVr3vMjx16KO2YEs@1S#9o4w~ zUk6Nmcd5?Z(~a*>oTZ`krq4gUscy?LSC;OPIYJdrRPki;4n}0+n=M)fyU4Ua!;^Z6 zXNK!DKj{aiDw{bYdKw^xqlyg8!C?(_i(>lI(bYyi+DnteNfp$T*@b)f)jp^nOoZog zBMq1wX;1je!bLqu#1~yE(Xm$IyqUc&&7jmSU9|oIOm`_)V;7;Dzz3;Cf)!G>z-*gl zGG0huLFYOsx3!61Xy4X6s*AxvzARNDBeyVv!R#0boR51>EEt0I(-YI)7sLIJ4;{Gn zo^(yCxu_mYiK-D`OV@I&j{3m#80Zt<@M&)2!r9&$s4uIJFn7;KWI)&S=MH(Y(0=UyW}2j+Ll=a zAya4nZeK#__^|WEh*H=373IxcI99SxlECpx%NWuBAUqOj(~h^wdFpYkqIh}(*|*nM zCkBK9@dK$TH-pH8|4K`x)V2;84?81>e{_)uP-m^EA2XuzNShS<=Hs?NuRo4ca4qAa zbD-$kHKX{AX|FaxVHyH0NN#GyCH=1{zVjs;Pjj{ES8H__(14ABEtnA9LXuK&5GKcS zLW54ZJ#|tUTtuIVdS-;~J~2aqiSxnK*K&q1Pg**~g7X(LNN;?06Y$fEv4b;5FX`Z_ ziAj$v1sNrY%8|C-H)GJYnXy4YFD!RU4~qv8pk$SOGGuOAy1hRJ65BC#ao^si7@?~= zaN;@MXvE4&qBJx3W3>rP<%9wTC#hw)`*DB?)B6R@I;2y0_Z>8^3z-AH12aWA=4<5C zQ&wU}7A^^JEaLm5NRUu@asBFeB_HATN2)rLEPzL7VZl z)48%VSw%1!SLj(@1D~IjnzluOnR)j5a$nq_Eb=xIeOn$qf(aCOArut#F7T?r^oOtT zH!_E)2G^RxP); zvP@;D7HXGihl+Fhfl{fl<3su7vB*ga=Ml67Pc?5_!RwDk!GZ#V?r{IJf;3WB#O(N8 zZIvQG;Jnq^fY*kyf5;77$0R)T2R8IeyfE7C z!1qy42{87{-IBsF5?d20G8l*IetkHX&v%*&g_~Fy@-6(ul{)_DO+!pY+3sEzOY2Ld zJklPy+@f741CKKn6k5tGVMit(lZs#F@)FT}U!w};6^Ln{5K7U%SUuB1+%*f zj7)y@baY0+f#6}uSDGHqwF92s^TV){Uo~=jrtqB{y*8!`$o|*4Zbk=D10=@dD|XHe z8|t>5xdL(|ZSYh+lRWt3^(b1{cUv;fah_xdCAkF}zw4sVmY>q{%xd#CMacW+@aNb{ z9yu%&tTE;IbkEXf#`Y95LK*K7V3epQZ;f|ZLv=lo%ZOc#eL~K)hM2T{9KGV$*E3XI z9PGvO6GoE`%~cQ^($~JKiOuYt`fWVh#?J{ConGUF(>va<|J3qBp*kF-KOX?MP+fU%I8fLP!5Z6^wMB_1g zTUU`wlx0-0h$KqQ3z+CYV_)m%@t7!|h$~++1uH(Gy4iDUT!M7M))0=rzR~s<4jj@B zeFImJR=4Ze9k-Q#nXS9>r3rB7#kv0*Ld3*u;aH!CnJ7;1X93vMAU{5Fre%(HWZ^iL zvkv-bN}oF?0FqqfmJU+-ec3*rF?W%->k9JR-XRm$-J797 zekmniha<`^-hnSU^+)qAa$=HiWo;Odw{raaqsETRb)SSF%+Pbp^#fqH$T1}e*E zHDYZ^;(SOH%(Q{+duO27ct z(bgBO!$6X)_9;Z$Rr`M@DYl{o)W9eg4d{G3V(QReKd#GiEW|>UXKw8qZ=tQ{nWk{w z(tG%DX)0%QB3r8b`{=jBw-Rg9L*>edN?hSzQ19o=g&`|uIb`yo?aFjj0(WX#*3rPK zV7-tb;7Wgw;LB%E28W}{6H2S1qJ$JgS)cp>zJw_PTs|5-;2FJ85$uk(=2zl;C{{qd z<0J7mHgm-@*m{Yo%WBj_=}KIpI)-Eb-R=>dQ?hO_N1#rxfZH~@DBDCS7qKAsEei5H z^Xu89?7R{u`y&L@c%rT(I(*Puu%|0{ajTH{_k(H0H+O-n*$mU(*<9XC%r61~Cm!Wf zlSJcsez(|yXy76MYc=(MeOFJe9IqNajQdv%E>pbi9Zz6vKQ{sp6C4Ym}bbOqC>i?NI`+#T-w}!!7>WUp11%Fw(1#mf% zWm_t%&Rk&)&{L7QJK}`G_{>r&27JC$&)?f{Bz<0a^Z^Qb#1hQdos?e^AnBE=wU$u6 zfN%6Lq^Gq0RE)SzCB6$jP`FZ>M-wzOqlaR&}O6MNXY^snC`O>7|OvaH#?!e|b!7x~0Tr9g`x`CHd z^IKSbY1&z_XA!K#j_j8n-1XXLv!)IH1SIrY))COj!NcEM=8qcjJj?j=&FHtMlFiH% zBn)E#AycFw^HW#u{$6IF9O>^^X4ZO}VXL3wZF+S1mvugsQIwCexFl)TN*lwM-H)A4 zeazLkk`~c{WJ%$1Aaiex;+5?Lf|WwW-xg{*9?lOR|HUi~1v7!a3MLnc%uqhuui`m1 z{mQZ*&AES(;$d8zr1?=I+;z`zrkV4*eg$f>x>zHpO^UOp_m?F1YwS8jqP8KEzij02 z7Q`9os5FPvwTlgw)GpAB?l*+>o)P3wT8ecAt)s>8t3@ujLebN^^SN*Pe*$gJXYp z46$&2d`)cCx7t+z+4JFi3*3t%uGzdd47IE8p&WGfIKfB54UA=hWryn%c&ZbvO?tlQ zUZ;v!cOPG9y8YmTycXxh(JVBXe=wPOc|w@QR_uWSGSMe4>3ACT1$Ef6S=*4nk{o|R z;`7sqFqwi(L*d8%o2!PJ9_UQ-BRnJgEjtja#-5&m>-Kwxzcg34>hw(wK=@o#j^@Ef z(*Xe!42ZenwFRS=6iDr7RW7M(+8EBOZ~+()!U(RXT@|Mnx@|2ByGUUR%%t2+IUd{5 zU`I=CuLUOi%%yo8PmgEQzpQ0){X>yDAp`cM`j`rv*Oq{&237MVumY zEu*g$&OabIg75YEOlBB8K?iXA|N@%1~SR)Ob6bj;87las)rZ8 z=3*_*JWmkQpY^glhBrqSaBlPCD_@4E*uTT2m4CJ{!EMuNhDe%gVZoGD*(%58A2i;l ziMIU>0fIaqe>n!d+f-RQk8C&h?(s>s9Tixwj}aua{4nrZVEaN^YtP}d=6$ElRU!JN zWf3kNj&jiX(1<->CJzhAfs&V2646-kJ&*r5r@UPMQQSxiw&VvJg>f=EwdJ9|F<<6+ zJZ?ttT=o~$HA*;KKTBgWEp}`NQKYJE8mv9CT`)KsmV49wSd=!cI0;EaqfkVIBZ;;6 zUMB^V<%$H+kDu{t-Orv^vXrYCX&I8(+f&Q!JgZ>0)sPC9b8eH^(-V1eyZy-Nd&F}! zLqlLG4ghyYN}?ea7_ZV&A9q=t-cYU437Y z%$TAE9>&3C+n9MPDs94+CENAJV`A$houcZpWET^zEu4}jViG5>56m23%AwRUxi6z!ptHYlsG&J*No7T%) zNsp{C8+5F_h=g*g#Mh(qAao#Xd|6;saR_#1XdX!;8{g)GD zx^6mHS705~DgH{){Cy4Km3f4kkVm)62x*>?Y!wljO)I3g`f4(chslS^dSv}ex+^Ws zuh)4)*2VNCnpLkul0icZLZ8ez0IZcPC@+FsO0VAC+8A`2xuZZ#qM@w;ezd>}qYxtY z<99+xw%d2u2s-cpX;>6<><`LUm=u^x+CzxAk%U_SpnFV*MRKY`!^o0u4dV!%xhP4? z>0LsNnqC`{2F#T^_d?x5`v4s6{my%ub~}fHxWMTUA^wmd@05S2`UGEv{}W*B)ViQV z3R4~5z>-AwGl)Zye_LCn?o6CfkYtIccDvPyL$i^!*en^)i21pC?-O@@h_^$M?J#Lt zrgKh1H8S@bzs!sHcf1zGMzZfpe<8gpxkHWcrR%yF@82_I56IZ&NwHwRv{38Q;7$`( zEJvhOk}8s>$58GN^sbc}T;~`)?kN^&A(HA4LDl)60*<^=tK6Z=QRi2xzAk25Hx=_t z*)!w-M)mgrvdA17qF>=P1xuq*yh~pz@iSDIrm4P=HSUU$B-&dJNqGcRwhd)7_jRIAPmC>VrD05=SIgu@zDWU_-tqQ`%#hAaWjDtGiHKrr^ zNd15Z5^pJ>i4Ui%&?9)HkV9>KCz+m~-BF&2m-e~7Zvn}>znH=|9`~iW?iW~9h}BP; zr7+y83WjLK#sTl|mg%|PH^h`@vBu#WujL!VFg;=(?UD6GX(d~v$wHEA zoM9xvATqS1Ntki1$-mzP*^pdB2ysJga3n`Sm-ESuw>Mf6bH>%Xf3$JE$k%=;9KSi- zP_F0hK9A=hNrA%fjvuhZ8Mnt^ZpFdJ2KJBUWAJ}b9RPqwKTS3lF(uQ8r*O~XsE>N|Y_jpT%yLW>Wo+yvqI)c-kWWCUVQG1jt zMolp!@cu&uS(T8~Bel$@*G2n3+MKe!;hNOqTblkr`8MHGj#reDaZ^mXL`bxzex};mUua}&`-#iHgqsC$Y9ey!v^F^UuW1;iKuS7fSABqL9zV=C z(I0ehQAQGx`i2flkq#!}Z4ho=q{#Bk=KJF+Md7<7Y{>BZ<$^|$jl=wps@(^~00QyVdJH!8C9l}*g z!8E_93y}t?N(OV8R~H=x1Zd@u9aA^_dxZg>iz4(jjrIp(P%(uN0|1sJ1Qg4hy6E=d zXk;f0wXh?~la_=%Eh%OT-!4+`jgX<$Ey(zUhMG|xEyj^umDEVLfJuv56WIN-C}^Hs zGB{e4I4&dR?_WuEj{zA8J(L~!Aj0pKTFU^hu2K{(x!N$;fGCBVqgdC&Gv9Z&LF=|| z^H~R^E`(dCdHV_z9{}bSW8T_cBhp6kO*7L-_S&X3l&osYCHI!YDtI7c?OH)*^6FSa zk|Gq7&^-O{i(Yx?h7$ifXwFD!&$M0Sj~U$@p9pSGHB(1X@pN#gB;q?S?=lDcrd%QZ z^9%wN(A{2}yq~jLrhv*vsku8r5w9^V#K1b7!tJ=95C2Z#`plAjV8^J$~tMDO{FFS4$8&6;aW`zFqJ@>)KrD#w-D;)uBM{!0SK`V zV*?iQhE@$p;AKw5j9zmW&mx7Gd|wvK9SI>W>$QxPo31RhBrY8L!!xbmHbZ{VyIo~i zBUtqwzryi>3Q4Q~{#qM4J~1`kWn4{IH0_MmOtaFnocLlosBaH5LTsq>k=?q+P z;mlfl9m8z#)u?VV_9ALH#CJ(3@s;Mi)2T!g0t4Xmqs8?>&QG=2rNWrZLY>7fOMfp` zV(VR7BB*T(MQIJM-WMwKRW4D&Vd#|WB(Va#x5~ny0OMd(C{ts^00gxlImaWk$h_sg zCf8$|r5@(=LM`DlP{8KUY!S@b=t8NDSeX=w{vXa^bauPpe1Bq!FNdiqMqbz)gp7bC z%)@@9Zbi}}`R=nMD4>`awBXg7&CgbsitCAy9b^m~dd|Fr&$G9I;v#=hqcb(j3~!_@4&oAPj(U8uV`f-2|X^fEwer2~@yjdrc|^x$3308ceEI zUhXYU)A31xEsE7F?j7iFWrI+?lEIor@wE;Vj@X*jBegxL6xJ<#kK?m_B-v�sq0iI>a{RU6X*ni-7c0Li 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 literal 0 HcmV?d00001 diff --git a/src/App.tsx b/src/App.tsx index b5e754a..c3ee832 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -16,6 +16,7 @@ import AddNews from "@/pages/news/ui/AddNews"; import News from "@/pages/news/ui/News"; import NewsCategory from "@/pages/news/ui/NewsCategory"; import Seo from "@/pages/seo/ui/Seo"; +import SiteBannerAdmin from "@/pages/site-banner/ui/Banner"; import PolicyCrud from "@/pages/site-page/ui/PolicyCrud"; import SitePage from "@/pages/site-page/ui/SitePage"; import SupportAgency from "@/pages/support/ui/SupportAgency"; @@ -88,6 +89,7 @@ const App = () => { } /> } /> } /> + } /> } /> } /> } /> @@ -97,6 +99,7 @@ const App = () => { } /> } /> } /> + } /> diff --git a/src/pages/faq/lib/api.ts b/src/pages/faq/lib/api.ts index bb9d080..578da5c 100644 --- a/src/pages/faq/lib/api.ts +++ b/src/pages/faq/lib/api.ts @@ -1,4 +1,9 @@ -import type { Faq, FaqCategory, FaqCategoryDetail } from "@/pages/faq/lib/type"; +import type { + Faq, + FaqCategory, + FaqCategoryDetail, + FaqOne, +} from "@/pages/faq/lib/type"; import httpClient from "@/shared/config/api/httpClient"; import { FAQ, FAQ_CATEGORIES } from "@/shared/config/api/URLs"; import type { AxiosResponse } from "axios"; @@ -6,11 +11,50 @@ import type { AxiosResponse } from "axios"; const getAllFaq = async (params: { page: number; page_size: number; + category: number; }): Promise> => { const res = await httpClient.get(FAQ, { params }); return res; }; +const getOneFaq = async (id: number): Promise> => { + const res = await httpClient.get(`${FAQ}${id}/`); + return res; +}; + +const createFaq = async (body: { + title: string; + title_ru: string; + text: string; + text_ru: string; + category: number; +}) => { + const res = await httpClient.post(FAQ, body); + return res; +}; + +const updateFaq = async ({ + body, + id, +}: { + id: number; + body: { + title: string; + title_ru: string; + text: string; + text_ru: string; + category?: number; + }; +}) => { + const res = await httpClient.patch(`${FAQ}${id}/`, body); + return res; +}; + +const deleteFaq = async ({ id }: { id: number }) => { + const res = await httpClient.delete(`${FAQ}${id}/`); + return res; +}; + const getAllFaqCategory = async (params: { page: number; page_size: number; @@ -48,10 +92,14 @@ const deleteFaqCategory = async (id: number) => { }; export { + createFaq, createFaqCategory, + deleteFaq, deleteFaqCategory, getAllFaq, getAllFaqCategory, getDetailFaqCategory, + getOneFaq, + updateFaq, updateFaqCategory, }; diff --git a/src/pages/faq/lib/type.ts b/src/pages/faq/lib/type.ts index 1e7ed5f..06086d8 100644 --- a/src/pages/faq/lib/type.ts +++ b/src/pages/faq/lib/type.ts @@ -21,6 +21,7 @@ export interface FaqCategoryDetail { data: { id: number; name: string; + name_uz: string; name_ru: string; }; } @@ -48,3 +49,16 @@ export interface Faq { }[]; }; } + +export interface FaqOne { + status: boolean; + data: { + id: number; + title: string; + title_uz: string; + title_ru: string; + text: string; + text_ru: string; + text_uz: string; + }; +} diff --git a/src/pages/faq/ui/Faq.tsx b/src/pages/faq/ui/Faq.tsx index f32cf64..b1e4c70 100644 --- a/src/pages/faq/ui/Faq.tsx +++ b/src/pages/faq/ui/Faq.tsx @@ -1,6 +1,13 @@ "use client"; -import { getAllFaq, getAllFaqCategory } from "@/pages/faq/lib/api"; +import { + createFaq, + deleteFaq, + getAllFaq, + getAllFaqCategory, + getOneFaq, + updateFaq, +} from "@/pages/faq/lib/api"; import { Button } from "@/shared/ui/button"; import { Dialog, @@ -16,16 +23,9 @@ import { FormItem, FormMessage, } from "@/shared/ui/form"; +import { InfiniteScrollSelect } from "@/shared/ui/infiniteScrollSelect"; import { Input } from "@/shared/ui/input"; import { Label } from "@/shared/ui/label"; -import { - Select, - SelectContent, - SelectGroup, - SelectLabel, - SelectTrigger, - SelectValue, -} from "@/shared/ui/select"; import { Table, TableBody, @@ -37,70 +37,231 @@ import { import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/shared/ui/tabs"; import { Textarea } from "@/shared/ui/textarea"; import { zodResolver } from "@hookform/resolvers/zod"; -import { useQuery } from "@tanstack/react-query"; -import { Pencil, PlusCircle, Trash2 } from "lucide-react"; -import { useEffect, useState } from "react"; +import { + useInfiniteQuery, + useMutation, + useQuery, + useQueryClient, +} from "@tanstack/react-query"; +import { + ChevronRight, + Loader2, + Pencil, + PlusCircle, + Trash2, +} from "lucide-react"; +import { useEffect, useRef, useState } from "react"; import { useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; +import { toast } from "sonner"; import z from "zod"; const faqForm = z.object({ categories: z.string().min(1, { message: "Majburiy maydon" }), title: z.string().min(1, { message: "Majburiy maydon" }), + title_ru: z.string().min(1, { message: "Majburiy maydon" }), answer: z.string().min(1, { message: "Majburiy maydon" }), + answer_ru: z.string().min(1, { message: "Majburiy maydon" }), }); const Faq = () => { - const { t } = useTranslation(); - const { data: category } = useQuery({ - queryKey: ["all_faqcategory"], - queryFn: () => { - return getAllFaqCategory({ page: 1, page_size: 99 }); - }, - select(data) { - return data.data.data.results; - }, - }); - const { data: faq } = useQuery({ - queryKey: ["all_faq"], - queryFn: () => { - return getAllFaq({ page: 1, page_size: 99 }); - }, - select(data) { - return data.data.data.results; - }, - }); const [activeTab, setActiveTab] = useState(""); + const { t } = useTranslation(); + const [openModal, setOpenModal] = useState(false); + const [editFaq, setEditFaq] = useState(null); + const queryClient = useQueryClient(); + const scrollRef = useRef(null); + const loaderRef = useRef(null); + + // Infinite scroll uchun useInfiniteQuery + const { + data: categoryData, + fetchNextPage, + hasNextPage, + isFetchingNextPage, + } = useInfiniteQuery({ + queryKey: ["all_faqcategory"], + queryFn: ({ pageParam = 1 }) => { + return getAllFaqCategory({ page: pageParam, page_size: 10 }); + }, + getNextPageParam: (lastPage) => { + const data = lastPage.data.data; + if (data.current_page < data.total_pages) { + return data.current_page + 1; + } + return undefined; + }, + initialPageParam: 1, + }); + + // Barcha kategoriyalarni birlashtirib olish + const category = + categoryData?.pages.flatMap((page) => page.data.data.results) ?? []; + + const { data: faq } = useQuery({ + queryKey: ["all_faq", activeTab], + queryFn: () => { + return getAllFaq({ page: 1, page_size: 10, category: Number(activeTab) }); + }, + select(data) { + return data.data.data.results; + }, + enabled: !!activeTab, + }); + + const { data: detailFaq } = useQuery({ + queryKey: ["detail_faq", editFaq], + queryFn: () => { + return getOneFaq(editFaq!); + }, + select(data) { + return data.data.data; + }, + enabled: !!editFaq, + }); + + const { mutate: create, isPending } = useMutation({ + mutationFn: (body: { + title: string; + title_ru: string; + text: string; + text_ru: string; + category: number; + }) => createFaq(body), + onSuccess: () => { + queryClient.refetchQueries({ queryKey: ["all_faq"] }); + setOpenModal(false); + toast.success(t("Muvaffaqiyatli qo'shildi"), { position: "top-center" }); + }, + onError: () => { + toast.error(t("Xatolik yuz berdi"), { + position: "top-center", + richColors: true, + }); + }, + }); + + const { mutate: edit, isPending: editPending } = useMutation({ + mutationFn: ({ + body, + id, + }: { + id: number; + body: { + title: string; + title_ru: string; + text: string; + text_ru: string; + category?: number; + }; + }) => updateFaq({ body, id }), + onSuccess: () => { + queryClient.refetchQueries({ queryKey: ["all_faq"] }); + setOpenModal(false); + toast.success(t("Tahrirlandi"), { position: "top-center" }); + }, + onError: () => { + toast.error(t("Xatolik yuz berdi"), { + position: "top-center", + richColors: true, + }); + }, + }); + + const { mutate: deleteFaqs, isPending: deletePending } = useMutation({ + mutationFn: ({ id }: { id: number }) => deleteFaq({ id }), + onSuccess: () => { + queryClient.refetchQueries({ queryKey: ["all_faq"] }); + setDeleteId(null); + toast.success(t("O'chirildi"), { position: "top-center" }); + }, + onError: () => { + toast.error(t("Xatolik yuz berdi"), { + position: "top-center", + richColors: true, + }); + }, + }); useEffect(() => { - if (category) { + if (category.length > 0 && !activeTab) { setActiveTab(String(category[0].id)); } - }, [category]); + }, [category, activeTab]); + + // Intersection Observer for lazy loading + useEffect(() => { + if (!scrollRef.current || !loaderRef.current) return; + + const observer = new IntersectionObserver( + (entries) => { + if (entries[0].isIntersecting && hasNextPage && !isFetchingNextPage) { + fetchNextPage(); + } + }, + { root: scrollRef.current, threshold: 0.1 }, + ); + + if (loaderRef.current) { + observer.observe(loaderRef.current); + } + + return () => observer.disconnect(); + }, [hasNextPage, isFetchingNextPage, fetchNextPage]); const [deleteId, setDeleteId] = useState(null); - const [editFaq, setEditFaq] = useState(null); - const [openModal, setOpenModal] = useState(false); const form = useForm>({ resolver: zodResolver(faqForm), defaultValues: { answer: "", + answer_ru: "", categories: "", title: "", + title_ru: "", }, }); + useEffect(() => { + if (detailFaq) { + form.setValue("title", detailFaq.title_uz); + form.setValue("title_ru", detailFaq.title_ru); + form.setValue("answer", detailFaq.text_uz); + form.setValue("answer_ru", detailFaq.text_ru); + form.setValue("categories", activeTab); + } + }, [detailFaq, form]); + function onSubmit(value: z.infer) { - console.log(value); + if (editFaq === null) { + create({ + category: Number(value.categories), + text: value.answer, + text_ru: value.answer_ru, + title: value.title, + title_ru: value.title_ru, + }); + } else if (editFaq) { + edit({ + body: { + text: value.answer, + text_ru: value.answer_ru, + title: value.title, + title_ru: value.title_ru, + }, + id: editFaq, + }); + } } const handleEdit = (faq: number) => { + setOpenModal(true); setEditFaq(faq); }; const handleDelete = () => { if (deleteId) { + deleteFaqs({ id: deleteId }); } }; @@ -125,22 +286,42 @@ const Faq = () => { setOpenModal(true); }} > - {t("Yangi qo‘shish")} + {t("Yangi qo'shish")} {/* Tabs */} - - {category?.map((cat) => ( - - {cat.name} - - ))} - +
+ + {category.map((cat) => ( + + {cat.name} + + ))} + {hasNextPage && ( +
+ {isFetchingNextPage ? ( + + ) : ( + + + + )} +
+ )} +
+
{/* Tabs content */} - {category?.map((cat) => ( + {category.map((cat) => ( {faq && faq?.length > 0 ? (
@@ -192,7 +373,7 @@ const Faq = () => {
) : (

- {t("Bu bo‘limda savollar yo‘q.")} + {t("Bu bo'limda savollar yo'q")}

)}
@@ -200,10 +381,10 @@ const Faq = () => {
- + - {editFaq ? t("FAQni tahrirlash") : t("Yangi FAQ qo‘shish")} + {editFaq ? t("FAQni tahrirlash") : t("Yangi FAQ qo'shish")} @@ -216,24 +397,37 @@ const Faq = () => { - + onValueChange={field.onChange} + placeholder={t("Kategoriya tanlang")} + label={t("Kategoriyalar")} + data={category || []} + fetchNextPage={fetchNextPage} + renderOption={(cat) => ({ + key: cat.id, + value: String(cat.id), + label: cat.name, + })} + /> + + + + )} + /> + + ( + + + + @@ -241,10 +435,10 @@ const Faq = () => { /> ( - + { )} /> + ( + + + +