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}