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};