gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/users/services/users.query.ts · v0.3.0-alpha8
Source
1 3b7feef Mrdn 2y ago import { useQuery } from "@tanstack/react-query";
2 3b7feef Mrdn 2y ago import { fetch } from "@marzneshin/utils";
3 3b7feef Mrdn 2y ago import { UserType } from "../types";
4 cfe497c Mrdn 2y ago import {
5 cfe497c Mrdn 2y ago FetchEntityReturn,
6 cfe497c Mrdn 2y ago UseEntityQueryProps,
7 cfe497c Mrdn 2y ago SortableEntitySortQueryProps,
8 cfe497c Mrdn 2y ago EntityQueryKeyType
9 cfe497c Mrdn 2y ago } from "@marzneshin/components";
10 cfe497c Mrdn 2y ago
11 cfe497c Mrdn 2y ago export type SortUserBy = "username" | "used_traffic" | "data_limit" | "expire" | "created_at"
12 3b7feef Mrdn 2y ago
13 3b7feef Mrdn 2y ago interface UserResponse extends UserType {
14 3b7feef Mrdn 2y ago service_ids: number[]
15 3b7feef Mrdn 2y ago services: any[]
16 3b7feef Mrdn 2y ago }
17 3b7feef Mrdn 2y ago
18 578311c Mrdn 2y ago export async function fetchUsers({ queryKey }: EntityQueryKeyType): FetchEntityReturn<UserType> {
19 cfe497c Mrdn 2y ago return fetch(`/users`, {
20 cfe497c Mrdn 2y ago query: {
21 cfe497c Mrdn 2y ago page: queryKey[1],
22 cfe497c Mrdn 2y ago size: queryKey[2],
23 cfe497c Mrdn 2y ago username: queryKey[3],
24 cfe497c Mrdn 2y ago descending: queryKey[5],
25 cfe497c Mrdn 2y ago order_by: queryKey[4]
26 cfe497c Mrdn 2y ago }
27 cfe497c Mrdn 2y ago }).then((result) => {
28 3b7feef Mrdn 2y ago const users: UserType[] = result.items.map((fetchedUser: UserResponse) => {
29 3b7feef Mrdn 2y ago const user: UserType = fetchedUser;
30 3b7feef Mrdn 2y ago user.services = fetchedUser.service_ids
31 3b7feef Mrdn 2y ago return user
32 3b7feef Mrdn 2y ago })
33 578311c Mrdn 2y ago return {
34 578311c Mrdn 2y ago entity: users,
35 578311c Mrdn 2y ago pageCount: result.pages
36 578311c Mrdn 2y ago };
37 3b7feef Mrdn 2y ago });
38 3b7feef Mrdn 2y ago }
39 3b7feef Mrdn 2y ago
40 3b7feef Mrdn 2y ago export const UsersQueryFetchKey = "users";
41 3b7feef Mrdn 2y ago
42 cfe497c Mrdn 2y ago export const useUsersQuery = ({
43 cfe497c Mrdn 2y ago page, size, search = "", sortBy = "created_at", desc = false
44 cfe497c Mrdn 2y ago }: UseEntityQueryProps & SortableEntitySortQueryProps) => {
45 3b7feef Mrdn 2y ago return useQuery({
46 cfe497c Mrdn 2y ago queryKey: [UsersQueryFetchKey, page, size, search, sortBy, desc],
47 3b7feef Mrdn 2y ago queryFn: fetchUsers,
48 578311c Mrdn 2y ago initialData: { entity: [], pageCount: 0 }
49 3b7feef Mrdn 2y ago })
50 3b7feef Mrdn 2y ago }