@@ -12,6 +12,7 @@ import { RulesBoard } from "./RulesBoard";
1212import { RulesItem } from "./RulesItem" ;
1313import { toast } from "react-hot-toast" ;
1414import { Toast } from "../shared/NotificationProvider" ;
15+ import { useFetch } from "../../hooks/useFetch" ;
1516
1617export interface CreateOrUpdateFlagDialogProps {
1718 open : boolean ;
@@ -31,6 +32,7 @@ export const CreateOrUpdateFlagDialog: React.FC<
3132 const [ enabled , setEnabled ] = useState ( false ) ;
3233 const [ showDelete , setShowDelete ] = useState ( false ) ;
3334 const [ rules , setRules ] = useState < RuleModel [ ] > ( [ ] ) ;
35+ const { doFetch } = useFetch ( ) ;
3436
3537 useEffect ( ( ) => {
3638 if ( ! props . flag || ! props . open ) {
@@ -59,39 +61,27 @@ export const CreateOrUpdateFlagDialog: React.FC<
5961 formData . append ( "flagDescription" , descriptionRef . current . value ) ;
6062 }
6163
62- fetch ( `${ keys . CLIENT_HOME_PAGE_URL } /api/flags/` , {
64+ doFetch < unknown , { message : string } > ( {
65+ url : `${ keys . CLIENT_HOME_PAGE_URL } /api/flags/` ,
6366 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." ;
9074 }
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+ } ) ;
9585 } ;
9686
9787 const onConfirmDelete = ( ) : void => {
@@ -100,30 +90,19 @@ export const CreateOrUpdateFlagDialog: React.FC<
10090 formData . append ( "flagKey" , props . flag . key ) ;
10191 }
10292
103- fetch ( `${ keys . CLIENT_HOME_PAGE_URL } /api/flags/` , {
93+ doFetch < unknown , { message : string } > ( {
94+ url : `${ keys . CLIENT_HOME_PAGE_URL } /api/flags/` ,
10495 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 : ( ) => {
12598 toast . error ( "Error deleting flag." ) ;
126- } ) ;
99+ } ,
100+ onSuccess : ( ) => {
101+ setShowDelete ( false ) ;
102+ props . refreshAll ( ) ;
103+ toast . success ( "Flag deleted." ) ;
104+ } ,
105+ } ) ;
127106 } ;
128107
129108 const deleteFlagProps : ConfirmationDialogProps = {
0 commit comments