gitscope
← marzneshin / v0.4.1 / dashboard/src/features/users/services/users.query.ts
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/users/services/users.query.ts · TypeScript
Blame Raw
 1import { useQuery } from "@tanstack/react-query";
 2import { fetch } from "@marzneshin/utils";
 3import { UserType } from "../types";
 4import {
 5    FetchEntityReturn,
 6    UseEntityQueryProps,
 7    SortableEntitySortQueryProps,
 8    EntityQueryKeyType
 9} from "@marzneshin/features/entity-table";
10
11export type SortUserBy = "username" | "used_traffic" | "data_limit" | "expire_date" | "created_at"
12
13export async function fetchUsers({ queryKey }: EntityQueryKeyType): FetchEntityReturn<UserType> {
14    return fetch(`/users`, {
15        query: {
16            page: queryKey[1],
17            size: queryKey[2],
18            username: queryKey[3],
19            descending: queryKey[5],
20            order_by: queryKey[4]
21        }
22    }).then((result) => {
23        return {
24            entity: result.items,
25            pageCount: result.pages
26        };
27    });
28}
29
30export const UsersQueryFetchKey = "users";
31
32export const useUsersQuery = ({
33    page, size, search = "", sortBy = "created_at", desc = false
34}: UseEntityQueryProps & SortableEntitySortQueryProps) => {
35    return useQuery({
36        queryKey: [UsersQueryFetchKey, page, size, search, sortBy, desc],
37        queryFn: fetchUsers,
38        initialData: { entity: [], pageCount: 0 }
39    })
40}