@@ -12,6 +12,7 @@ import { RulesBoard } from "./RulesBoard";
12
12
import { RulesItem } from "./RulesItem" ;
13
13
import { toast } from "react-hot-toast" ;
14
14
import { Toast } from "../shared/NotificationProvider" ;
15
+ import { useFetch } from "../../hooks/useFetch" ;
15
16
16
17
export interface CreateOrUpdateFlagDialogProps {
17
18
open : boolean ;
@@ -31,6 +32,7 @@ export const CreateOrUpdateFlagDialog: React.FC<
31
32
const [ enabled , setEnabled ] = useState ( false ) ;
32
33
const [ showDelete , setShowDelete ] = useState ( false ) ;
33
34
const [ rules , setRules ] = useState < RuleModel [ ] > ( [ ] ) ;
35
+ const { doFetch } = useFetch ( ) ;
34
36
35
37
useEffect ( ( ) => {
36
38
if ( ! props . flag || ! props . open ) {
@@ -59,39 +61,27 @@ export const CreateOrUpdateFlagDialog: React.FC<
59
61
formData . append ( "flagDescription" , descriptionRef . current . value ) ;
60
62
}
61
63
62
- fetch ( `${ keys . CLIENT_HOME_PAGE_URL } /api/flags/` , {
64
+ doFetch < unknown , { message : string } > ( {
65
+ url : `${ keys . CLIENT_HOME_PAGE_URL } /api/flags/` ,
63
66
method : props . flag ? "PUT" : "POST" ,
64
- credentials : "include" ,
65
- headers : {
66
- Accept : "application/json" ,
67
- "Access-Control-Allow-Credentials" : "true" ,
68
- "Access-Control-Allow-Origin" : "true" ,
69
- } ,
70
- body : formData ,
71
- } )
72
- . then ( async ( resp ) => {
73
- return resp . json ( ) ;
74
- } )
75
- . then ( ( respJson ) => {
76
- if ( respJson . success as boolean ) {
77
- props . refreshAll ( ) ;
78
- props . setOpen ( false ) ;
79
- toast . success ( `Flag operation successful!` , {
80
- subMessage : `Flag: ${ props . flag ?. name } ` ,
81
- } as Toast ) ;
82
- } else {
83
- let msg = "Generic error occurred, please try again." ;
84
- if ( respJson . errorCode === "error_input" ) {
85
- msg = "One or more required information are missing." ;
86
- } else if ( respJson . errorCode === "error_alreadysaved" ) {
87
- msg = "There is already a flag with the same name." ;
88
- }
89
- toast . error ( msg ) ;
67
+ reqBody : formData ,
68
+ onError : ( respJson ) => {
69
+ let msg = "Generic error occurred, please try again." ;
70
+ if ( respJson . message === "error_input" ) {
71
+ msg = "One or more required information are missing." ;
72
+ } else if ( respJson . message === "error_alreadysaved" ) {
73
+ msg = "There is already a flag with the same name." ;
90
74
}
91
- } )
92
- . catch ( ( error ) => {
93
- console . log ( error ) ;
94
- } ) ;
75
+ toast . error ( msg ) ;
76
+ } ,
77
+ onSuccess : ( ) => {
78
+ props . refreshAll ( ) ;
79
+ props . setOpen ( false ) ;
80
+ toast . success ( `Flag operation successful!` , {
81
+ subMessage : `Flag: ${ props . flag ?. name } ` ,
82
+ } as Toast ) ;
83
+ } ,
84
+ } ) ;
95
85
} ;
96
86
97
87
const onConfirmDelete = ( ) : void => {
@@ -100,30 +90,19 @@ export const CreateOrUpdateFlagDialog: React.FC<
100
90
formData . append ( "flagKey" , props . flag . key ) ;
101
91
}
102
92
103
- fetch ( `${ keys . CLIENT_HOME_PAGE_URL } /api/flags/` , {
93
+ doFetch < unknown , { message : string } > ( {
94
+ url : `${ keys . CLIENT_HOME_PAGE_URL } /api/flags/` ,
104
95
method : "DELETE" ,
105
- credentials : "include" ,
106
- headers : {
107
- Accept : "application/json" ,
108
- "Access-Control-Allow-Credentials" : "true" ,
109
- "Access-Control-Allow-Origin" : "true" ,
110
- } ,
111
- body : formData ,
112
- } )
113
- . then ( async ( resp ) => {
114
- return resp . json ( ) ;
115
- } )
116
- . then ( ( respJson ) => {
117
- if ( respJson . success as boolean ) {
118
- setShowDelete ( false ) ;
119
- props . refreshAll ( ) ;
120
- toast . success ( "Flag deleted." ) ;
121
- }
122
- } )
123
- . catch ( ( error ) => {
124
- console . log ( error ) ;
96
+ reqBody : formData ,
97
+ onError : ( ) => {
125
98
toast . error ( "Error deleting flag." ) ;
126
- } ) ;
99
+ } ,
100
+ onSuccess : ( ) => {
101
+ setShowDelete ( false ) ;
102
+ props . refreshAll ( ) ;
103
+ toast . success ( "Flag deleted." ) ;
104
+ } ,
105
+ } ) ;
127
106
} ;
128
107
129
108
const deleteFlagProps : ConfirmationDialogProps = {
0 commit comments