@@ -42,7 +42,12 @@ export default function Home(): JSX.Element {
42
42
const { allocators, selectedAllocator, setSelectedAllocator } = useAllocator ( )
43
43
const session = useSession ( )
44
44
45
- const { data, isLoading, error } = useQuery ( {
45
+ const {
46
+ data,
47
+ isLoading : isDataLoading ,
48
+ error,
49
+ refetch,
50
+ } = useQuery ( {
46
51
queryKey : [ 'application' , selectedAllocator , session . status ] ,
47
52
queryFn : async ( ) => {
48
53
if (
@@ -84,6 +89,8 @@ export default function Home(): JSX.Element {
84
89
const [ searchResults , setSearchResults ] = useState < Application [ ] > ( [ ] )
85
90
86
91
const [ openDialog , setOpenDialog ] = useState ( false )
92
+ const [ isModalLoading , setIsModalLoading ] = useState ( false )
93
+ const [ isLoading , setIsLoading ] = useState ( false )
87
94
88
95
const searchParams = useSearchParams ( )
89
96
const notification = searchParams . get ( 'notification' )
@@ -123,7 +130,7 @@ export default function Home(): JSX.Element {
123
130
} , [ notification , router , searchParams , pathName ] )
124
131
125
132
useEffect ( ( ) => {
126
- if ( isLoading || data == null ) return
133
+ if ( isDataLoading || data == null ) return
127
134
128
135
const debounceTimeout = setTimeout ( ( ) => {
129
136
const filteredData = data ?. filter (
@@ -150,17 +157,22 @@ export default function Home(): JSX.Element {
150
157
return ( ) => {
151
158
clearTimeout ( debounceTimeout )
152
159
}
153
- } , [ searchTerm , filter , data , isLoading ] )
160
+ } , [ searchTerm , filter , data , isDataLoading ] )
154
161
155
162
const handleRenewal = async ( ) : Promise < void > => {
156
163
try {
157
164
if ( selectedAllocator && selectedAllocator !== 'all' ) {
165
+ setIsModalLoading ( true )
158
166
const { owner, repo } = selectedAllocator
159
167
const data = await cacheRenewal ( owner , repo )
160
168
161
169
if ( data ) {
162
170
toast . success ( 'Renewal successful' )
171
+ setIsModalLoading ( false )
163
172
setOpenDialog ( false )
173
+ setIsLoading ( true )
174
+ await refetch ( )
175
+ setIsLoading ( false )
164
176
}
165
177
}
166
178
} catch ( error ) {
@@ -169,7 +181,7 @@ export default function Home(): JSX.Element {
169
181
}
170
182
}
171
183
172
- if ( isLoading )
184
+ if ( isDataLoading || isLoading )
173
185
return (
174
186
< div className = "fixed inset-0 flex items-center justify-center z-50 bg-black bg-opacity-20" >
175
187
< Spinner />
@@ -317,7 +329,12 @@ export default function Home(): JSX.Element {
317
329
< DialogTrigger asChild >
318
330
< Button variant = "default" > Renew cache</ Button >
319
331
</ DialogTrigger >
320
- < DialogContent className = "sm:max-w-[500px]" >
332
+ < DialogContent className = "sm:max-w-[500px] border-none" >
333
+ { isModalLoading && (
334
+ < div className = "fixed inset-0 flex items-center justify-center z-50 bg-black bg-opacity-50" >
335
+ < Spinner />
336
+ </ div >
337
+ ) }
321
338
< DialogHeader >
322
339
< DialogTitle > Renew cache</ DialogTitle >
323
340
< DialogDescription >
0 commit comments