1- import React , { useCallback , useEffect , useMemo , useState } from 'react' ;
1+ import React , { useCallback , useEffect , useMemo } from 'react' ;
22import { InteractionManager , View } from 'react-native' ;
33import type { OnyxCollection } from 'react-native-onyx' ;
44import ActivityIndicator from '@components/ActivityIndicator' ;
55import Button from '@components/Button' ;
66import type { DropdownOption , WorkspaceDistanceRatesBulkActionType } from '@components/ButtonWithDropdownMenu/types' ;
7- import ConfirmModal from '@components/ConfirmModal' ;
87import HeaderWithBackButton from '@components/HeaderWithBackButton' ;
98import { loadIllustration } from '@components/Icon/IllustrationLoader' ;
109import type { IllustrationName } from '@components/Icon/IllustrationLoader' ;
10+ import { ModalActions } from '@components/Modal/Global/ModalContext' ;
1111import ScreenWrapper from '@components/ScreenWrapper' ;
1212import SearchBar from '@components/SearchBar' ;
1313import TableListItem from '@components/SelectionList/ListItem/TableListItem' ;
@@ -16,6 +16,7 @@ import SelectionListWithModal from '@components/SelectionListWithModal';
1616import CustomListHeader from '@components/SelectionListWithModal/CustomListHeader' ;
1717import Switch from '@components/Switch' ;
1818import Text from '@components/Text' ;
19+ import useConfirmModal from '@hooks/useConfirmModal' ;
1920import useFilteredSelection from '@hooks/useFilteredSelection' ;
2021import { useMemoizedLazyAsset , useMemoizedLazyExpensifyIcons } from '@hooks/useLazyAsset' ;
2122import useLocalize from '@hooks/useLocalize' ;
@@ -67,8 +68,7 @@ function PolicyDistanceRatesPage({
6768 const { shouldUseNarrowLayout} = useResponsiveLayout ( ) ;
6869 const styles = useThemeStyles ( ) ;
6970 const { translate, localeCompare} = useLocalize ( ) ;
70- const [ isWarningModalVisible , setIsWarningModalVisible ] = useState ( false ) ;
71- const [ isDeleteModalVisible , setIsDeleteModalVisible ] = useState ( false ) ;
71+ const { showConfirmModal} = useConfirmModal ( ) ;
7272 const policy = usePolicy ( policyID ) ;
7373 useWorkspaceDocumentTitle ( policy ?. name , 'workspace.common.distanceRates' ) ;
7474 const isMobileSelectionModeEnabled = useMobileSelectionMode ( ) ;
@@ -200,6 +200,15 @@ function PolicyDistanceRatesPage({
200200 [ customUnit ?. rates ] ,
201201 ) ;
202202
203+ const showWarningModal = useCallback ( ( ) => {
204+ showConfirmModal ( {
205+ title : translate ( 'workspace.distanceRates.oopsNotSoFast' ) ,
206+ prompt : translate ( 'workspace.distanceRates.workspaceNeeds' ) ,
207+ confirmText : translate ( 'common.buttonConfirm' ) ,
208+ shouldShowCancelButton : false ,
209+ } ) ;
210+ } , [ showConfirmModal , translate ] ) ;
211+
203212 const updateDistanceRateEnabled = useCallback (
204213 ( value : boolean , rateID : string ) => {
205214 if ( ! customUnit ) {
@@ -210,10 +219,10 @@ function PolicyDistanceRatesPage({
210219 if ( ! rate ?. enabled || canDisableOrDeleteRate ( rateID ) ) {
211220 setPolicyDistanceRatesEnabled ( policyID , customUnit , [ { ...rate , enabled : value } ] ) ;
212221 } else {
213- setIsWarningModalVisible ( true ) ;
222+ showWarningModal ( ) ;
214223 }
215224 } ,
216- [ canDisableOrDeleteRate , customUnit , policyID ] ,
225+ [ canDisableOrDeleteRate , customUnit , policyID , showWarningModal ] ,
217226 ) ;
218227
219228 const unitTranslation = translate ( `common.${ customUnit ?. attributes ?. unit ?? CONST . CUSTOM_UNITS . DISTANCE_UNIT_MILES } ` ) ;
@@ -314,7 +323,6 @@ function PolicyDistanceRatesPage({
314323 const transactionIDsAffected = selectedDistanceRates . flatMap ( ( rateID ) => eligibleTransactionsData ?. rateIDToTransactionIDsMap ?. [ rateID ] ?? [ ] ) ;
315324
316325 deletePolicyDistanceRates ( policyID , customUnit , selectedDistanceRates , transactionIDsAffected , transactionViolations ) ;
317- setIsDeleteModalVisible ( false ) ;
318326
319327 // eslint-disable-next-line @typescript-eslint/no-deprecated
320328 InteractionManager . runAfterInteractions ( ( ) => {
@@ -363,7 +371,22 @@ function PolicyDistanceRatesPage({
363371 text : translate ( 'workspace.distanceRates.deleteRates' , { count : selectedDistanceRates . length } ) ,
364372 value : CONST . POLICY . BULK_ACTION_TYPES . DELETE ,
365373 icon : icons . Trashcan ,
366- onSelected : ( ) => ( canDisableOrDeleteSelectedRates ? setIsDeleteModalVisible ( true ) : setIsWarningModalVisible ( true ) ) ,
374+ onSelected : async ( ) => {
375+ if ( ! canDisableOrDeleteSelectedRates ) {
376+ showWarningModal ( ) ;
377+ return ;
378+ }
379+ const { action} = await showConfirmModal ( {
380+ title : translate ( 'workspace.distanceRates.deleteDistanceRate' ) ,
381+ prompt : translate ( 'workspace.distanceRates.areYouSureDelete' , { count : selectedDistanceRates . length } ) ,
382+ confirmText : translate ( 'common.delete' ) ,
383+ cancelText : translate ( 'common.cancel' ) ,
384+ danger : true ,
385+ } ) ;
386+ if ( action === ModalActions . CONFIRM ) {
387+ deleteRates ( ) ;
388+ }
389+ } ,
367390 } ,
368391 ] ;
369392
@@ -373,7 +396,7 @@ function PolicyDistanceRatesPage({
373396 text : translate ( 'workspace.distanceRates.disableRates' , { count : enabledRates . length } ) ,
374397 value : CONST . POLICY . BULK_ACTION_TYPES . DISABLE ,
375398 icon : icons . Close ,
376- onSelected : ( ) => ( canDisableOrDeleteSelectedRates ? disableRates ( ) : setIsWarningModalVisible ( true ) ) ,
399+ onSelected : ( ) => ( canDisableOrDeleteSelectedRates ? disableRates ( ) : showWarningModal ( ) ) ,
377400 } ) ;
378401 }
379402
@@ -526,25 +549,6 @@ function PolicyDistanceRatesPage({
526549 shouldShowRightCaret
527550 />
528551 ) }
529- < ConfirmModal
530- onConfirm = { ( ) => setIsWarningModalVisible ( false ) }
531- onCancel = { ( ) => setIsWarningModalVisible ( false ) }
532- isVisible = { isWarningModalVisible }
533- title = { translate ( 'workspace.distanceRates.oopsNotSoFast' ) }
534- prompt = { translate ( 'workspace.distanceRates.workspaceNeeds' ) }
535- confirmText = { translate ( 'common.buttonConfirm' ) }
536- shouldShowCancelButton = { false }
537- />
538- < ConfirmModal
539- title = { translate ( 'workspace.distanceRates.deleteDistanceRate' ) }
540- isVisible = { isDeleteModalVisible }
541- onConfirm = { deleteRates }
542- onCancel = { ( ) => setIsDeleteModalVisible ( false ) }
543- prompt = { translate ( 'workspace.distanceRates.areYouSureDelete' , { count : selectedDistanceRates . length } ) }
544- confirmText = { translate ( 'common.delete' ) }
545- cancelText = { translate ( 'common.cancel' ) }
546- danger
547- />
548552 </ ScreenWrapper >
549553 </ AccessOrNotFoundWrapper >
550554 ) ;
0 commit comments