@@ -10,7 +10,7 @@ import omitDeep from 'omit-deep-lodash';
1010import { useHistory } from 'react-router' ;
1111import { Icons } from '@dhiwise/icons' ;
1212import {
13- Button , MessageNotify , Error , Loader ,
13+ Button , MessageNotify , Error , Loader , ConfirmationAlert ,
1414} from '../../../../components' ;
1515import ModelHeader from './ModelHeader' ;
1616import { updateModel } from '../../../../redux/reducers/models' ;
@@ -46,7 +46,7 @@ const ErrorNotify = () => (
4646
4747const Editor = React . memo ( ( { currentId, saveRef, loaderRef } ) => {
4848 const {
49- modelErrors, modelErrCount, isError, setModelErrors, setIsJsonError,
49+ modelErrors, modelErrCount, isError, setModelErrors, setIsJsonError, setNoChangeInTable , isSaveWarning , hideSaveWarning , changeNextEvent ,
5050 } = useModel ( ) ;
5151 const history = useHistory ( ) ;
5252 const { addErrorToast, addSuccessToast } = useToastNotifications ( ) ;
@@ -67,6 +67,7 @@ const Editor = React.memo(({ currentId, saveRef, loaderRef }) => {
6767 const [ jsonError , setJsonError ] = useState ( false ) ;
6868 // const [showError, setShowError] = useBoolean(false);
6969 const [ showError , setShowError , setHideError ] = useBoolean ( false ) ;
70+ const [ isSaveLoading , setSaveLoading , hideSaveLoading ] = useBoolean ( false ) ; // for save warning popup loading
7071 // Remove
7172 // const [, setSaveLoader, hideSaveLoader] = useBoolean(false);
7273 // saveLoader,
@@ -264,13 +265,14 @@ const Editor = React.memo(({ currentId, saveRef, loaderRef }) => {
264265 } , [ ] ) ;
265266
266267 const saveJSON = React . useCallback ( ( {
267- showMsg, tCode, tcustomSetting, indexes, tHooks, msg, isRedirect = false , tDependency,
268+ isInSaveWarning = false , showMsg, tCode, tcustomSetting, indexes, tHooks, msg, isRedirect = false , tDependency,
268269 } ) => {
269270 // Remove
270271 // isRedirect= if step remove ,remove await and async
271272 try {
272273 if ( jsonError && ! jsonError ?. isCustom && ! modelErrCount ) {
273274 // if error then open error popup
275+ if ( isInSaveWarning ) hideSaveWarning ( ) ;
274276 handleShowError ( ) ;
275277 return ;
276278 }
@@ -396,6 +398,7 @@ const Editor = React.memo(({ currentId, saveRef, loaderRef }) => {
396398 errorFlag = { name : 'Error' , message : `${ isDuplicateAttr } : ${ ERROR_MSG . duplicateAttr } ` , isCustom : true } ;
397399 }
398400 if ( errorFlag ) {
401+ if ( isInSaveWarning ) hideSaveWarning ( ) ;
399402 setJsonError ( errorFlag ) ;
400403 return ;
401404 }
@@ -510,12 +513,15 @@ const Editor = React.memo(({ currentId, saveRef, loaderRef }) => {
510513 } ) ;
511514 }
512515 if ( errorFlag ) {
516+ if ( isInSaveWarning ) hideSaveWarning ( ) ;
513517 setJsonError ( errorFlag ) ;
514518 return ;
515519 }
516520 // error handler, to read data we'll have to parse twice due to backslash escaping
517521 errorFlag = isCustomErr ( schema , null , null , { customSetting } ) ;
518522 if ( errorFlag ) {
523+ if ( isInSaveWarning ) hideSaveWarning ( ) ;
524+
519525 setJsonError ( errorFlag ) ;
520526 // setShowError();
521527 // hideSaveLoader();
@@ -616,7 +622,10 @@ const Editor = React.memo(({ currentId, saveRef, loaderRef }) => {
616622 if ( showError ) setHideError ( ) ;
617623
618624 // loaderCallBack({ isHidePopup: false });
619- loaderRef . current . setLoader ( ) ;
625+ if ( isInSaveWarning ) { setSaveLoading ( ) ; } else {
626+ loaderRef . current ?. setLoader ( ) ;
627+ }
628+
620629 apiClient ( `${ API_URLS . schema . update } /${ currentId } ` , {
621630 customJson,
622631 schemaJson : schema ,
@@ -631,7 +640,8 @@ const Editor = React.memo(({ currentId, saveRef, loaderRef }) => {
631640 } ) . then ( ( res ) => {
632641 if ( res ?. code === 'E_BAD_REQUEST' ) {
633642 // manage multiple errors
634- loaderRef . current . setLoader ( ) ;
643+ if ( isInSaveWarning ) hideSaveLoading ( ) ;
644+ else loaderRef . current ?. setLoader ( ) ;
635645
636646 if ( res . data ?. length > 0 ) { setModelErrors ( res . data ) ; }
637647 // hideSaveLoader();
@@ -643,7 +653,15 @@ const Editor = React.memo(({ currentId, saveRef, loaderRef }) => {
643653 // hideSaveLoader();
644654 // if (tableRef?.current && res?.message) addSuccessToast(res.message);
645655 // setCode(JSON.stringify(res?.data?.schemaJson || {}));
646- loaderRef . current . setLoader ( ) ;
656+ setNoChangeInTable ( ) ; // when direct save that
657+ if ( isInSaveWarning ) {
658+ changeNextEvent . current ( ) ;
659+ hideSaveLoading ( ) ;
660+
661+ hideSaveWarning ( ) ;
662+ } else {
663+ loaderRef . current ?. setLoader ( ) ;
664+ }
647665
648666 // loaderCallBack({ isHidePopup: true });
649667 if ( isRedirect ) {
@@ -653,7 +671,12 @@ const Editor = React.memo(({ currentId, saveRef, loaderRef }) => {
653671 } ) . catch ( ( err ) => {
654672 // hideSaveLoader();
655673 addErrorToast ( err ) ;
656- loaderRef . current . setLoader ( ) ;
674+ if ( isInSaveWarning ) {
675+ hideSaveLoading ( ) ;
676+ hideSaveWarning ( ) ;
677+ } else {
678+ loaderRef . current ?. setLoader ( ) ;
679+ }
657680 } ) ;
658681 updateRef . current ?. setHideEdit ( ) ;
659682 } catch ( err ) {
@@ -731,6 +754,23 @@ const Editor = React.memo(({ currentId, saveRef, loaderRef }) => {
731754 />
732755 ) : null
733756 }
757+ < ConfirmationAlert
758+ description = " Do you wish to save your data before continuing ?"
759+ handleSubmit = { ( ) => saveJSON ( { isInSaveWarning : true } ) }
760+ variant = "primary"
761+ title = { (
762+ < div className = "flex justify-center items-center mb-5" >
763+ < div className = "w-5 h-5 mr-3" >
764+ < Icons . Warring />
765+ </ div >
766+ New changes detected
767+ </ div >
768+ ) }
769+ isOpen = { isSaveWarning }
770+ okText = "Save"
771+ isLoading = { isSaveLoading }
772+ handleClose = { ( ) => { changeNextEvent . current ( ) ; hideSaveWarning ( ) ; setNoChangeInTable ( ) ; } }
773+ />
734774
735775 </ >
736776 ) ;
0 commit comments