diff --git a/.env b/.env index 74f350e..3c65636 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ VITE_TOKEN_NAME = 'admin_token' VITE_REFRESH_TOKEN_NAME = 'admin_refresh_token' VITE_BASE_URL = 'https://danak-dsc-api.run.danakcorp.com' -# VITE_BASE_URL = 'http://192.168.0.207:3500' \ No newline at end of file +# VITE_BASE_URL = 'http://192.168.0.221:3500' \ No newline at end of file diff --git a/src/langs/fa.json b/src/langs/fa.json index b7f3de1..77a9777 100644 --- a/src/langs/fa.json +++ b/src/langs/fa.json @@ -156,7 +156,8 @@ "active": "فعال", "deactive": "غیرفعال", "software_langauge": "زبان نرم افزار", - "link": "لینک" + "link": "لینک", + "danak_sujescet": "پیشنهاد داناک" }, "save": "ذخیره", "search": "جستجو", diff --git a/src/pages/service/List.tsx b/src/pages/service/List.tsx index 653544a..a0c89cf 100644 --- a/src/pages/service/List.tsx +++ b/src/pages/service/List.tsx @@ -1,4 +1,4 @@ -import { FC } from 'react' +import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' import Button from '../../components/Button' import { Add, Eye } from 'iconsax-react' @@ -7,11 +7,24 @@ import Input from '../../components/Input' import Td from '../../components/Td' import { Link } from 'react-router-dom' import { Pages } from '../../config/Pages' -import SwitchComponent from '../../components/Switch' +import { useGetAllServices, useGetCategoryParents } from './hooks/useServiceData' +import PageLoading from '../../components/PageLoading' +import { ServiceCategoryType, ServiceItemType } from './types/ServiceTypes' +import moment from 'moment-jalaali' +import Pagination from '../../components/Pagination' +import ToggleStatusService from './components/ToggleStatusService' +import CheckBoxComponent from '../../components/CheckBoxComponent' const ListService: FC = () => { const { t } = useTranslation('global') + const [category, setCategory] = useState('') + const [status, setstatus] = useState<'ACTIVE' | 'IN_ACTIVE' | ''>('') + const [page, setPage] = useState(1) + const [search, setSearch] = useState('') + const [isDanakSuggest, setIsDanakSuggest] = useState(false) + const getServices = useGetAllServices(search, page, category, status, isDanakSuggest) + const getCategory = useGetCategoryParents() return (
@@ -40,71 +53,108 @@ const ListService: FC = () => {
setstatus(e.target.value as 'ACTIVE' | 'IN_ACTIVE' | '')} /> +
+
+ {t('service.danak_sujescet')} +
+ setIsDanakSuggest(e.target.checked)} + /> +
setSearch(value)} />
-
- - - - - - - - - - - - -
- - - - - - - -
-
-
- - - - - null} - /> - - - - - -
-
+ { + getServices.isPending || getCategory.isPending ? + + : +
+ + + + + + + { + getServices.data?.data?.services?.map((item: ServiceItemType) => { + return ( + + + + + + ) + }) + } + + +
+ + + + + + + +
+
+ +
+
+ + + + + + + + + + +
+ +
+ +
+
+ } ) } diff --git a/src/pages/service/components/ToggleStatusService.tsx b/src/pages/service/components/ToggleStatusService.tsx new file mode 100644 index 0000000..fededc1 --- /dev/null +++ b/src/pages/service/components/ToggleStatusService.tsx @@ -0,0 +1,28 @@ +import { FC, useState } from 'react' +import { useToggleStatusService } from '../hooks/useServiceData' +import SwitchComponent from '../../../components/Switch' + +type Props = { + id: string, + status: boolean, +} + +const ToggleStatusService: FC = (props: Props) => { + + const [isActive, setIsActive] = useState(props.status) + const toggleStatus = useToggleStatusService() + + const handleChange = (value: boolean) => { + setIsActive(value) + toggleStatus.mutate(props.id) + } + + return ( + + ) +} + +export default ToggleStatusService \ No newline at end of file diff --git a/src/pages/service/hooks/useServiceData.ts b/src/pages/service/hooks/useServiceData.ts index f779416..fa587b2 100644 --- a/src/pages/service/hooks/useServiceData.ts +++ b/src/pages/service/hooks/useServiceData.ts @@ -6,6 +6,20 @@ import { ToggleStatusCategoryType, } from "../types/ServiceTypes"; +export const useGetAllServices = ( + search: string, + page: number, + category: string, + status: string, + isDanakSuggest: boolean +) => { + return useQuery({ + queryKey: ["services", search, page, category, status, isDanakSuggest], + queryFn: () => + api.getAllServicess(search, page, category, status, isDanakSuggest), + }); +}; + export const useGetCategoryParents = () => { return useQuery({ queryKey: ["service-category"], @@ -60,3 +74,9 @@ export const useMultiUpload = () => { mutationFn: (variables: FormData) => api.uploadMultiple(variables), }); }; + +export const useToggleStatusService = () => { + return useMutation({ + mutationFn: (id: string) => api.toggleStatusService(id), + }); +}; diff --git a/src/pages/service/service/ServiceService.ts b/src/pages/service/service/ServiceService.ts index 497ecb5..7c82201 100644 --- a/src/pages/service/service/ServiceService.ts +++ b/src/pages/service/service/ServiceService.ts @@ -5,6 +5,30 @@ import { ToggleStatusCategoryType, } from "../types/ServiceTypes"; +export const getAllServicess = async ( + search: string, + page: number, + category: string, + status: string, + isDanakSuggest: boolean +) => { + let query = `?page=${page}`; + if (status) { + query += `&isActive=${status === "ACTIVE" ? "1" : "0"}`; + } + if (category) { + query += `&categoryId=${category}`; + } + if (search) { + query += `&q=${search}`; + } + + if (isDanakSuggest) { + query += `&isDanakSuggest=${isDanakSuggest}`; + } + const { data } = await axios.get(`/services/list${query}`); + return data; +}; export const getCategoryParent = async () => { const { data } = await axios.get(`/services/category`); return data; @@ -53,3 +77,8 @@ export const uploadMultiple = async (params: FormData) => { const { data } = await axios.post(`/uploader/multi-file`, params); return data; }; + +export const toggleStatusService = async (id: string) => { + const { data } = await axios.post(`/services/toggle-status/${id}`); + return data; +}; diff --git a/src/pages/service/types/ServiceTypes.ts b/src/pages/service/types/ServiceTypes.ts index d036093..d598a90 100644 --- a/src/pages/service/types/ServiceTypes.ts +++ b/src/pages/service/types/ServiceTypes.ts @@ -41,3 +41,13 @@ export type CreateServiceType = { images?: string[]; createDate: string; }; + +export type ServiceItemType = { + id: string; + name: string; + author: string; + category: ServiceCategoryType; + createDate: string; + isActive: boolean; + icon: string; +};