1import { useQuery } from "@tanstack/react-query";
2import { fetch } from "@marzneshin/utils";
3import { UserType } from "../types";
4import {
5 FetchEntityReturn,
6 UseEntityQueryProps,
7 EntityQueryKeyType
8} from "@marzneshin/features/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}