1
1
import type { IRoom } from '@rocket.chat/core-typings' ;
2
2
import { useEffectEvent } from '@rocket.chat/fuselage-hooks' ;
3
3
import { useEndpoint , useTranslation , useToastMessageDispatch } from '@rocket.chat/ui-contexts' ;
4
+ import { useQuery } from '@tanstack/react-query' ;
4
5
import type { ReactElement } from 'react' ;
5
6
import { useState , useEffect } from 'react' ;
6
7
7
8
import InviteUsers from './InviteUsers' ;
9
+ import InviteUsersError from './InviteUsersError' ;
10
+ import InviteUsersLoading from './InviteUsersLoading' ;
8
11
import { useFormatDateAndTime } from '../../../../../hooks/useFormatDateAndTime' ;
9
12
import { useRoomToolbox } from '../../../contexts/RoomToolboxContext' ;
10
13
@@ -19,18 +22,12 @@ const InviteUsersWithData = ({ rid, onClickBack }: InviteUsersWithDataProps): Re
19
22
const [
20
23
{
21
24
isEditing,
22
- url,
23
- caption,
24
- error,
25
25
daysAndMaxUses : { days, maxUses } ,
26
26
} ,
27
27
setInviteState ,
28
28
] = useState ( {
29
29
isEditing : false ,
30
30
daysAndMaxUses : { days : '1' , maxUses : '0' } ,
31
- url : '' ,
32
- caption : '' ,
33
- error : undefined as Error | undefined ,
34
31
} ) ;
35
32
36
33
const { closeTab } = useRoomToolbox ( ) ;
@@ -41,7 +38,7 @@ const InviteUsersWithData = ({ rid, onClickBack }: InviteUsersWithDataProps): Re
41
38
const handleBackToLink = useEffectEvent ( ( ) => setInviteState ( ( prevState ) => ( { ...prevState , isEditing : false } ) ) ) ;
42
39
43
40
const linkExpirationText = useEffectEvent (
44
- ( data : {
41
+ ( data ? : {
45
42
days : number ;
46
43
maxUses : number ;
47
44
rid : string ;
@@ -79,36 +76,47 @@ const InviteUsersWithData = ({ rid, onClickBack }: InviteUsersWithDataProps): Re
79
76
} ,
80
77
) ;
81
78
79
+ const { data, isSuccess, error, isError, isLoading } = useQuery ( {
80
+ queryKey : [ 'findOrCreateInvite' , days , maxUses ] ,
81
+ queryFn : async ( ) => findOrCreateInvite ( { rid, days : Number ( days ) , maxUses : Number ( maxUses ) } ) ,
82
+ } ) ;
83
+
82
84
useEffect ( ( ) => {
83
- ( async ( ) : Promise < void > => {
84
- try {
85
- const data = await findOrCreateInvite ( { rid, days : Number ( days ) , maxUses : Number ( maxUses ) } ) ;
86
- setInviteState ( ( prevState ) => ( { ...prevState , url : data ?. url , caption : linkExpirationText ( data ) } ) ) ;
87
- dispatchToastMessage ( { type : 'success' , message : t ( 'Invite_link_generated' ) } ) ;
88
- } catch ( error ) {
89
- setInviteState ( ( prevState ) => ( { ...prevState , error : error as Error } ) ) ;
90
- }
91
- } ) ( ) ;
92
- } , [ dispatchToastMessage , t , findOrCreateInvite , linkExpirationText , rid , days , maxUses ] ) ;
85
+ if ( isSuccess ) {
86
+ setInviteState ( ( prevState ) => ( { ...prevState , url : data ?. url , caption : linkExpirationText ( data ) } ) ) ;
87
+ dispatchToastMessage ( { type : 'success' , message : t ( 'Invite_link_generated' ) } ) ;
88
+ }
89
+ } , [ dispatchToastMessage , linkExpirationText , data , isSuccess , t ] ) ;
93
90
94
91
const handleGenerateLink = useEffectEvent ( ( daysAndMaxUses : { days : string ; maxUses : string } ) => {
95
92
setInviteState ( ( prevState ) => ( { ...prevState , daysAndMaxUses, isEditing : false } ) ) ;
96
93
} ) ;
97
94
98
- return (
99
- < InviteUsers
100
- isEditing = { isEditing }
101
- error = { error }
102
- linkText = { url }
103
- captionText = { caption }
104
- daysAndMaxUses = { { days, maxUses } }
105
- onClose = { closeTab }
106
- onClickBackMembers = { onClickBack }
107
- onClickBackLink = { handleBackToLink }
108
- onClickEdit = { handleEdit }
109
- onClickNewLink = { handleGenerateLink }
110
- />
111
- ) ;
95
+ if ( isError ) {
96
+ return < InviteUsersError error = { error } onClose = { closeTab } /> ;
97
+ }
98
+
99
+ if ( isLoading ) {
100
+ return < InviteUsersLoading onClose = { closeTab } /> ;
101
+ }
102
+
103
+ if ( isSuccess && data ) {
104
+ return (
105
+ < InviteUsers
106
+ isEditing = { isEditing }
107
+ linkText = { data ?. url }
108
+ captionText = { linkExpirationText ( data ) }
109
+ daysAndMaxUses = { { days, maxUses } }
110
+ onClose = { closeTab }
111
+ onClickBackMembers = { onClickBack }
112
+ onClickBackLink = { handleBackToLink }
113
+ onClickEdit = { handleEdit }
114
+ onClickNewLink = { handleGenerateLink }
115
+ />
116
+ ) ;
117
+ }
118
+
119
+ return < InviteUsersError error = { new Error ( t ( 'Something_Went_Wrong' ) ) } onClose = { closeTab } /> ;
112
120
} ;
113
121
114
122
export default InviteUsersWithData ;
0 commit comments