1import { fetch } from "@marzneshin/common/utils";
2import { ServiceType } from "../types";
3import {
4 EntityQueryKeyType,
5 SelectableEntityQueryKeyType,
6 FetchEntityReturn,
7 UseEntityQueryProps
8} from "@marzneshin/libs/entity-table";
9import { useQuery } from "@tanstack/react-query";
10
11export async function fetchServices({ queryKey }: EntityQueryKeyType): FetchEntityReturn<ServiceType> {
12 const pagination = queryKey[1];
13 const primaryFilter = queryKey[2];
14 const filters = queryKey[4].filters;
15 return fetch(`/services`, {
16 query: {
17 ...pagination,
18 ...filters,
19 name: primaryFilter,
20 descending: queryKey[3].desc,
21 order_by: queryKey[3].sortBy,
22 }
23 }).then((result) => {
24 const services: ServiceType[] = result.items;
25 return {
26 entities: services,
27 pageCount: result.pages
28 };
29 });
30}
31
32export async function fetchUserServices({ queryKey }: SelectableEntityQueryKeyType): FetchEntityReturn<ServiceType> {
33 const pagination = queryKey[3];
34 const primaryFilter = queryKey[4];
35 const filters = queryKey[6].filters;
36 return fetch(`/services`, {
37 query: {
38 ...pagination,
39 ...filters,
40 name: primaryFilter,
41 descending: queryKey[5].desc,
42 order_by: queryKey[5].sortBy,
43 }
44 }).then((result) => {
45 const services: ServiceType[] = result.items;
46 return {
47 entities: services,
48 pageCount: result.pages
49 };
50 });
51}
52
53
54export const ServicesQueryFetchKey = "services";
55
56export const useServicesQuery = ({
57 page, size, sortBy = "created_at", desc = false, filters = {}
58}: UseEntityQueryProps) => {
59 return useQuery({
60 queryKey: [ServicesQueryFetchKey, { page, size }, filters?.username ?? "", { sortBy, desc }, { filters }],
61 queryFn: fetchServices,
62 initialData: { entities: [], pageCount: 0 }
63 })
64}