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