1
- import React , { useState , useEffect , useCallback } from 'react' ;
2
- import { useSnackbar } from 'notistack' ;
1
+ import React , { useState , useCallback } from 'react' ;
2
+ import { useQuery , useMutation , useQueryClient } from 'react-query' ;
3
+ import snackbar from '@/services/SnackbarUtils' ;
3
4
4
5
import DataTable from '@/components/DataTable' ;
5
6
import api from '@/services/api' ;
6
7
import AddEditTemplate from './components/AddEditTemplate' ;
7
8
import columnDefs from './columnDefs' ;
8
9
10
+ const fetchTemplates = async ( ) => api . get ( '/templates' , { } ) . request ( ) ;
11
+
12
+ const deleteTemplate = async ( ident : string ) => {
13
+ await api . del ( `/templates/${ ident } /signature-types` , { } , { } ) . request ( ) ;
14
+ return api . del ( `/templates/${ ident } ` , { } , { } ) . request ( ) ;
15
+ } ;
16
+
9
17
const TemplateView = ( ) : JSX . Element => {
10
18
const [ showDialog , setShowDialog ] = useState ( false ) ;
11
- const [ templates , setTemplates ] = useState ( [ ] ) ;
12
19
const [ selectedRow , setSelectedRow ] = useState ( ) ;
20
+ const queryClient = useQueryClient ( ) ;
13
21
14
- const snackbar = useSnackbar ( ) ;
22
+ const { data : templates = [ ] } = useQuery ( {
23
+ queryKey : [ 'templates' ] ,
24
+ queryFn : fetchTemplates ,
25
+ } ) ;
15
26
16
- useEffect ( ( ) => {
17
- const getData = async ( ) => {
18
- const templatesResp = await api . get ( '/templates' , { } ) . request ( ) ;
19
- setTemplates ( templatesResp ) ;
20
- } ;
21
- getData ( ) ;
22
- } , [ ] ) ;
27
+ const deleteMutation = useMutation ( {
28
+ mutationFn : deleteTemplate ,
29
+ onSuccess : ( ) => {
30
+ queryClient . invalidateQueries ( { queryKey : [ 'templates' ] } ) ;
31
+ snackbar . success ( 'Template deleted' ) ;
32
+ } ,
33
+ onError : ( err ) => {
34
+ snackbar . error ( `Error deleting template: ${ err } ` ) ;
35
+ } ,
36
+ } ) ;
23
37
24
38
const handleEditStart = ( rowData ) => {
25
39
setShowDialog ( true ) ;
@@ -31,28 +45,19 @@ const TemplateView = (): JSX.Element => {
31
45
const handleDialogClose = useCallback ( ( newData ) => {
32
46
setShowDialog ( false ) ;
33
47
if ( newData ) {
34
- const templateIndex = templates . findIndex ( ( template ) => template . ident === newData . ident ) ;
35
- if ( templateIndex !== - 1 ) {
36
- const newTemplates = [ ...templates ] ;
37
- newTemplates [ templateIndex ] = newData ;
38
- setTemplates ( newTemplates ) ;
39
- } else {
40
- setTemplates ( ( prevVal ) => [ ...prevVal , newData ] ) ;
41
- }
48
+ queryClient . invalidateQueries ( { queryKey : [ 'templates' ] } ) ;
42
49
}
43
50
setSelectedRow ( null ) ;
44
- } , [ templates ] ) ;
51
+ } , [ queryClient ] ) ;
45
52
46
53
const handleDelete = useCallback ( async ( rowData ) => {
47
54
try {
48
- await api . del ( `/templates/${ rowData . ident } /signature-types` , { } , { } ) . request ( ) ;
49
- await api . del ( `/templates/${ rowData . ident } ` , { } , { } ) . request ( ) ;
50
- setTemplates ( ( prevVal ) => prevVal . filter ( ( template ) => template . ident !== rowData . ident ) ) ;
51
- snackbar . enqueueSnackbar ( 'Template deleted' ) ;
55
+ deleteMutation . mutate ( rowData . ident ) ;
56
+ snackbar . success ( 'Template deleted' ) ;
52
57
} catch ( err ) {
53
- snackbar . enqueueSnackbar ( `Error deleting template: ${ err } ` ) ;
58
+ snackbar . error ( `Error deleting template: ${ err } ` ) ;
54
59
}
55
- } , [ snackbar ] ) ;
60
+ } , [ deleteMutation ] ) ;
56
61
57
62
return (
58
63
< div >
0 commit comments