gitscope
← marzneshin / v0.7.2 / dashboard/src/modules/services/api/services.query.ts
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/services/api/services.query.ts · TypeScript
Blame Raw
 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}