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 ...pagination,
19 ...filters,
20 username: primaryFilter,
21 descending: queryKey[3].desc,
22 order_by: queryKey[3].sortBy,
23 }
24 }).then((result) => {
25 return {
26 entity: result.items,
27 pageCount: result.pages
28 };
29 });
30}
31
32export const UsersQueryFetchKey = "users";
33
34export const useUsersQuery = ({
35 page, size, sortBy = "created_at", desc = false, filters = {}
36}: UseEntityQueryProps) => {
37 return useQuery({
38 queryKey: [UsersQueryFetchKey, { page, size }, filters?.username ?? "", { sortBy, desc }, { filters }],
39 queryFn: fetchUsers,
40 initialData: { entity: [], pageCount: 0 }
41 })
42}