1
- import { useMachine } from "@xstate/react" ;
2
1
import { FC } from "react" ;
3
2
import { Helmet } from "react-helmet-async" ;
4
3
import { useNavigate , useParams } from "react-router-dom" ;
5
4
import { pageTitle } from "utils/page" ;
6
- import { editGroupMachine } from "xServices/groups/editGroupXService" ;
7
5
import SettingsGroupPageView from "./SettingsGroupPageView" ;
6
+ import { useMutation , useQuery , useQueryClient } from "@tanstack/react-query" ;
7
+ import { group , patchGroup } from "api/queries/groups" ;
8
+ import { displayError } from "components/GlobalSnackbar/utils" ;
9
+ import { getErrorMessage } from "api/errors" ;
8
10
9
11
export const SettingsGroupPage : FC = ( ) => {
10
- const { groupId } = useParams ( ) ;
11
- if ( ! groupId ) {
12
- throw new Error ( "Group ID not defined." ) ;
13
- }
14
-
12
+ const { groupId } = useParams ( ) as { groupId : string } ;
13
+ const queryClient = useQueryClient ( ) ;
14
+ const groupQuery = useQuery ( group ( groupId ) ) ;
15
+ const patchGroupMutation = useMutation ( patchGroup ( queryClient ) ) ;
15
16
const navigate = useNavigate ( ) ;
16
17
17
18
const navigateToGroup = ( ) => {
18
19
navigate ( `/groups/${ groupId } ` ) ;
19
20
} ;
20
21
21
- const [ editState , sendEditEvent ] = useMachine ( editGroupMachine , {
22
- context : {
23
- groupId,
24
- } ,
25
- actions : {
26
- onUpdate : navigateToGroup ,
27
- } ,
28
- } ) ;
29
- const { error, group } = editState . context ;
30
-
31
22
return (
32
23
< >
33
24
< Helmet >
@@ -36,13 +27,23 @@ export const SettingsGroupPage: FC = () => {
36
27
37
28
< SettingsGroupPageView
38
29
onCancel = { navigateToGroup }
39
- onSubmit = { ( data ) => {
40
- sendEditEvent ( { type : "UPDATE" , data } ) ;
30
+ onSubmit = { async ( data ) => {
31
+ try {
32
+ await patchGroupMutation . mutateAsync ( {
33
+ groupId,
34
+ ...data ,
35
+ add_users : [ ] ,
36
+ remove_users : [ ] ,
37
+ } ) ;
38
+ navigateToGroup ( ) ;
39
+ } catch ( error ) {
40
+ displayError ( getErrorMessage ( error , "Failed to update group" ) ) ;
41
+ }
41
42
} }
42
- group = { group }
43
- formErrors = { error }
44
- isLoading = { editState . matches ( "loading" ) }
45
- isUpdating = { editState . matches ( "updating" ) }
43
+ group = { groupQuery . data }
44
+ formErrors = { groupQuery . error }
45
+ isLoading = { groupQuery . isLoading }
46
+ isUpdating = { patchGroupMutation . isLoading }
46
47
/>
47
48
</ >
48
49
) ;
0 commit comments