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