gitscope
← marzneshin / v0.5.4 / dashboard/src/features/nodes/services/nodes.query.ts
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/nodes/services/nodes.query.ts · TypeScript
Blame Raw
 1import type { NodeType } from "@marzneshin/features/nodes";
 2import { useQuery } from "@tanstack/react-query";
 3import { fetch } from "@marzneshin/utils";
 4import type {
 5    EntityQueryKeyType,
 6    UseEntityQueryProps,
 7} from "@marzneshin/features/entity-table";
 8
 9export async function fetchNodes({
10    queryKey,
11}: EntityQueryKeyType): Promise<{ entity: NodeType[]; pageCount: number }> {
12    const pagination = queryKey[1];
13    const primaryFilter = queryKey[2];
14    const filters = queryKey[4].filters;
15    return fetch(`/nodes`, {
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        return {
25            entity: result.items,
26            pageCount: result.pages,
27        };
28    });
29}
30
31export const NodesQueryFetchKey = "nodes";
32
33export const useNodesQuery = ({
34    page, size, sortBy = "created_at", desc = false, filters = {}
35}: UseEntityQueryProps) => {
36    return useQuery({
37        queryKey: [NodesQueryFetchKey, { page, size }, filters?.username ?? "", { sortBy, desc }, { filters }],
38        queryFn: fetchNodes,
39        initialData: { entity: [], pageCount: 0 },
40    });
41};