gitscope
← marzneshin / v0.7.1 / dashboard/src/modules/nodes/api/nodes.query.ts
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/nodes/api/nodes.query.ts · TypeScript
Blame Raw
 1import type { NodeType } from "@marzneshin/modules/nodes";
 2import { useQuery } from "@tanstack/react-query";
 3import { fetch } from "@marzneshin/common/utils";
 4import type {
 5    EntityQueryKeyType,
 6    UseEntityQueryProps,
 7    FetchEntityReturn
 8} from "@marzneshin/libs/entity-table";
 9
10export async function fetchNodes({
11    queryKey,
12}: EntityQueryKeyType): FetchEntityReturn<NodeType> {
13    const pagination = queryKey[1];
14    const primaryFilter = queryKey[2];
15    const filters = queryKey[4].filters;
16    return fetch('/nodes', {
17        query: {
18            ...pagination,
19            ...filters,
20            name: primaryFilter,
21            descending: queryKey[3].desc,
22            order_by: queryKey[3].sortBy,
23        }
24    }).then((result) => {
25        return {
26            entities: result.items,
27            pageCount: result.pages,
28        };
29    });
30}
31
32export const NodesQueryFetchKey = "nodes";
33
34export const useNodesQuery = ({
35    page, size, sortBy = "created_at", desc = false, filters = {}
36}: UseEntityQueryProps) => {
37    return useQuery({
38        queryKey: [NodesQueryFetchKey, { page, size }, filters?.username ?? "", { sortBy, desc }, { filters }],
39        queryFn: fetchNodes,
40        initialData: { entities: [], pageCount: 0 },
41    });
42};