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