1
1
import { useMachine } from "@xstate/react" ;
2
2
import { User } from "api/typesGenerated" ;
3
3
import { DeleteDialog } from "components/Dialogs/DeleteDialog/DeleteDialog" ;
4
- import {
5
- getPaginationContext ,
6
- nonInitialPage ,
7
- } from "components/PaginationWidget/utils" ;
4
+ import { nonInitialPage } from "components/PaginationWidget/utils" ;
8
5
import { useMe } from "hooks/useMe" ;
9
6
import { usePermissions } from "hooks/usePermissions" ;
10
- import { FC , ReactNode , useEffect } from "react" ;
7
+ import { FC , ReactNode } from "react" ;
11
8
import { Helmet } from "react-helmet-async" ;
12
9
import { useSearchParams , useNavigate } from "react-router-dom" ;
13
10
import { usersMachine } from "xServices/users/usersXService" ;
@@ -22,6 +19,9 @@ import { useQuery } from "@tanstack/react-query";
22
19
import { getAuthMethods } from "api/api" ;
23
20
import { roles } from "api/queries/roles" ;
24
21
import { deploymentConfig } from "api/queries/deployment" ;
22
+ import { prepareQuery } from "utils/filters" ;
23
+ import { usePagination } from "hooks" ;
24
+ import * as UsersQuery from "api/queries/users" ;
25
25
26
26
export const Language = {
27
27
suspendDialogTitle : "Suspend user" ,
@@ -39,28 +39,27 @@ export const UsersPage: FC<{ children?: ReactNode }> = () => {
39
39
const navigate = useNavigate ( ) ;
40
40
const searchParamsResult = useSearchParams ( ) ;
41
41
const { entitlements } = useDashboard ( ) ;
42
- const [ searchParams , setSearchParams ] = searchParamsResult ;
42
+ const [ searchParams ] = searchParamsResult ;
43
43
const filter = searchParams . get ( "filter" ) ?? "" ;
44
- const [ usersState , usersSend ] = useMachine ( usersMachine , {
45
- context : {
46
- filter,
47
- paginationContext : getPaginationContext ( searchParams ) ,
48
- } ,
49
- actions : {
50
- updateURL : ( context , event ) =>
51
- setSearchParams ( { page : event . page , filter : context . filter } ) ,
52
- } ,
44
+ const [ usersState , usersSend ] = useMachine ( usersMachine ) ;
45
+ const pagination = usePagination ( {
46
+ searchParamsResult,
53
47
} ) ;
48
+ const usersQuery = useQuery (
49
+ UsersQuery . users ( {
50
+ q : prepareQuery ( filter ) ,
51
+ limit : pagination . limit ,
52
+ offset : pagination . offset ,
53
+ } ) ,
54
+ ) ;
55
+ const users = usersQuery . data ?. users ;
56
+ const count = usersQuery . data ?. count ;
54
57
const {
55
- users,
56
- getUsersError,
57
58
usernameToDelete,
58
59
usernameToSuspend,
59
60
usernameToActivate,
60
61
userIdToResetPassword,
61
62
newUserPassword,
62
- paginationRef,
63
- count,
64
63
} = usersState . context ;
65
64
const { updateUsers : canEditUsers , viewDeploymentValues } = usePermissions ( ) ;
66
65
const rolesQuery = useQuery ( { ...roles ( ) , enabled : canEditUsers } ) ;
@@ -77,12 +76,9 @@ export const UsersPage: FC<{ children?: ReactNode }> = () => {
77
76
const useFilterResult = useFilter ( {
78
77
searchParamsResult,
79
78
onUpdate : ( ) => {
80
- usersSend ( { type : "UPDATE_PAGE" , page : "1" } ) ;
79
+ pagination . goToPage ( 1 ) ;
81
80
} ,
82
81
} ) ;
83
- useEffect ( ( ) => {
84
- usersSend ( { type : "UPDATE_FILTER" , query : useFilterResult . query } ) ;
85
- } , [ useFilterResult . query , usersSend ] ) ;
86
82
const statusMenu = useStatusFilterMenu ( {
87
83
value : useFilterResult . values . status ,
88
84
onChange : ( option ) =>
@@ -97,13 +93,8 @@ export const UsersPage: FC<{ children?: ReactNode }> = () => {
97
93
return getAuthMethods ( ) ;
98
94
} ,
99
95
} ) ;
100
- // Is loading if
101
- // - users are loading or
102
- // - the user can edit the users but the roles are loading
103
96
const isLoading =
104
- usersState . matches ( "gettingUsers" ) ||
105
- rolesQuery . isLoading ||
106
- authMethods . isLoading ;
97
+ usersQuery . isLoading || rolesQuery . isLoading || authMethods . isLoading ;
107
98
108
99
return (
109
100
< >
@@ -115,7 +106,6 @@ export const UsersPage: FC<{ children?: ReactNode }> = () => {
115
106
roles = { rolesQuery . data }
116
107
users = { users }
117
108
authMethods = { authMethods . data }
118
- count = { count }
119
109
onListWorkspaces = { ( user ) => {
120
110
navigate (
121
111
"/workspaces?filter=" +
@@ -162,16 +152,19 @@ export const UsersPage: FC<{ children?: ReactNode }> = () => {
162
152
isLoading = { isLoading }
163
153
canEditUsers = { canEditUsers }
164
154
canViewActivity = { entitlements . features . audit_log . enabled }
165
- paginationRef = { paginationRef }
166
155
isNonInitialPage = { nonInitialPage ( searchParams ) }
167
156
actorID = { me . id }
168
157
filterProps = { {
169
158
filter : useFilterResult ,
170
- error : getUsersError ,
159
+ error : usersQuery . error ,
171
160
menus : {
172
161
status : statusMenu ,
173
162
} ,
174
163
} }
164
+ count = { count }
165
+ page = { pagination . page }
166
+ limit = { pagination . limit }
167
+ onPageChange = { pagination . goToPage }
175
168
/>
176
169
177
170
< DeleteDialog
0 commit comments