@@ -17,13 +17,14 @@ import { connect } from 'react-redux';
1717import { IconButton , Tooltip } from '@material-ui/core' ;
1818import EditIcon from '@material-ui/icons/Edit' ;
1919import DeleteIcon from '@material-ui/icons/Delete' ;
20+ import UndoIcon from '@material-ui/icons/Undo' ;
2021import {
2122 DEFAULT_PAGE_SIZE ,
2223 RIGHT_BENEFIT_PLAN_DELETE ,
2324 RIGHT_BENEFIT_PLAN_UPDATE ,
2425 ROWS_PER_PAGE_OPTIONS ,
2526} from '../constants' ;
26- import { deleteBenefitPlan , fetchBenefitPlans } from '../actions' ;
27+ import { deleteBenefitPlan , undoDeleteBenefitPlan , fetchBenefitPlans } from '../actions' ;
2728import BenefitPlanFilter from './BenefitPlanFilter' ;
2829
2930function BenefitPlanSearcher ( {
@@ -39,6 +40,7 @@ function BenefitPlanSearcher({
3940 mutation,
4041 fetchBenefitPlans,
4142 deleteBenefitPlan,
43+ undoDeleteBenefitPlan,
4244 fetchingBenefitPlans,
4345 errorBenefitPlans,
4446 benefitPlans,
@@ -49,7 +51,10 @@ function BenefitPlanSearcher({
4951 beneficiaryStatus,
5052} ) {
5153 const [ benefitPlanToDelete , setBenefitPlanToDelete ] = useState ( null ) ;
54+ const [ benefitPlanToUndo , setBenefitPlanToUndo ] = useState ( null ) ;
5255 const [ deletedBenefitPlanUuids , setDeletedBenefitPlanUuids ] = useState ( [ ] ) ;
56+ const [ undoBenefitPlanUuids , setUndoBenefitPlanUuids ] = useState ( [ ] ) ;
57+ const [ activeFilters , setActiveFilters ] = useState ( [ ] ) ;
5358 const prevSubmittingMutationRef = useRef ( ) ;
5459
5560 const openDeleteBenefitPlanConfirmDialog = ( ) => coreConfirm (
@@ -60,7 +65,16 @@ function BenefitPlanSearcher({
6065 formatMessage ( intl , 'socialProtection' , 'benefitPlan.delete.confirm.message' ) ,
6166 ) ;
6267
68+ const openUndoBenefitPlanConfirmDialog = ( ) => coreConfirm (
69+ formatMessageWithValues ( intl , 'socialProtection' , 'benefitPlan.undo.confirm.title' , {
70+ code : benefitPlanToUndo . code ,
71+ name : benefitPlanToUndo . name ,
72+ } ) ,
73+ formatMessage ( intl , 'socialProtection' , 'benefitPlan.undo.confirm.message' ) ,
74+ ) ;
75+
6376 useEffect ( ( ) => benefitPlanToDelete && openDeleteBenefitPlanConfirmDialog ( ) , [ benefitPlanToDelete ] ) ;
77+ useEffect ( ( ) => benefitPlanToUndo && openUndoBenefitPlanConfirmDialog ( ) , [ benefitPlanToUndo ] ) ;
6478
6579 useEffect ( ( ) => {
6680 if ( benefitPlanToDelete && confirmed ) {
@@ -72,9 +86,21 @@ function BenefitPlanSearcher({
7286 ) ;
7387 setDeletedBenefitPlanUuids ( [ ...deletedBenefitPlanUuids , benefitPlanToDelete . id ] ) ;
7488 }
89+ if ( benefitPlanToUndo && confirmed ) {
90+ undoDeleteBenefitPlan (
91+ benefitPlanToUndo ,
92+ formatMessageWithValues ( intl , 'socialProtection' , 'benefitPlan.undo.mutationLabel' , {
93+ name : benefitPlanToUndo ?. name ,
94+ } ) ,
95+ ) ;
96+ setUndoBenefitPlanUuids ( [ ...undoBenefitPlanUuids , benefitPlanToUndo . id ] ) ;
97+ }
7598 if ( benefitPlanToDelete && confirmed !== null ) {
7699 setBenefitPlanToDelete ( null ) ;
77100 }
101+ if ( benefitPlanToUndo && confirmed !== null ) {
102+ setBenefitPlanToUndo ( null ) ;
103+ }
78104 return ( ) => confirmed && clearConfirm ( false ) ;
79105 } , [ confirmed ] ) ;
80106
@@ -102,6 +128,9 @@ function BenefitPlanSearcher({
102128 if ( rights . includes ( RIGHT_BENEFIT_PLAN_UPDATE ) ) {
103129 headers . push ( 'emptyLabel' ) ;
104130 }
131+ if ( rights . includes ( RIGHT_BENEFIT_PLAN_DELETE ) ) {
132+ headers . push ( 'emptyLabel' ) ;
133+ }
105134 return headers ;
106135 } ;
107136
@@ -115,6 +144,7 @@ function BenefitPlanSearcher({
115144 && historyPush ( modulesManager , history , 'socialProtection.route.benefitPlan' , [ benefitPlan ?. id ] , newTab ) ;
116145
117146 const onDelete = ( benefitPlan ) => setBenefitPlanToDelete ( benefitPlan ) ;
147+ const onUndo = ( benefitPlan ) => setBenefitPlanToUndo ( benefitPlan ) ;
118148
119149 const itemFormatters = ( ) => {
120150 const formatters = [
@@ -139,16 +169,25 @@ function BenefitPlanSearcher({
139169 ) ) ;
140170 }
141171 if ( rights . includes ( RIGHT_BENEFIT_PLAN_DELETE ) ) {
142- formatters . push ( ( benefitPlan ) => (
143- < Tooltip title = { formatMessage ( intl , 'benefitPlan ' , 'deleteButtonTooltip' ) } >
172+ formatters . push ( ( benefitPlan ) => ( ! benefitPlan ?. isDeleted ? (
173+ < Tooltip title = { formatMessage ( intl , 'socialProtection ' , 'deleteButtonTooltip' ) } >
144174 < IconButton
145175 onClick = { ( ) => onDelete ( benefitPlan ) }
146176 disabled = { deletedBenefitPlanUuids . includes ( benefitPlan . id ) }
147177 >
148178 < DeleteIcon />
149179 </ IconButton >
150180 </ Tooltip >
151- ) ) ;
181+ ) : (
182+ < Tooltip title = { formatMessage ( intl , 'socialProtection' , 'undoButtonTooltip' ) } >
183+ < IconButton
184+ onClick = { ( ) => onUndo ( benefitPlan ) }
185+ disabled = { undoBenefitPlanUuids . includes ( benefitPlan . id ) }
186+ >
187+ < UndoIcon />
188+ </ IconButton >
189+ </ Tooltip >
190+ ) ) ) ;
152191 }
153192 return formatters ;
154193 } ;
@@ -164,7 +203,8 @@ function BenefitPlanSearcher({
164203 [ 'maxBeneficiaries' , true ] ,
165204 ] ;
166205
167- const isRowDisabled = ( _ , benefitPlan ) => deletedBenefitPlanUuids . includes ( benefitPlan . id ) ;
206+ const isRowDisabled = ( _ , benefitPlan ) => deletedBenefitPlanUuids . includes ( benefitPlan . id )
207+ || undoBenefitPlanUuids . includes ( benefitPlan . id ) ;
168208
169209 const defaultFilters = ( ) => ( {
170210 isDeleted : {
@@ -201,12 +241,23 @@ function BenefitPlanSearcher({
201241 />
202242 ) ;
203243
244+ const onFiltersApplied = ( appliedFilters ) => {
245+ setActiveFilters ( appliedFilters ) ;
246+ setDeletedBenefitPlanUuids ( [ ] ) ;
247+ setUndoBenefitPlanUuids ( [ ] ) ;
248+ } ;
249+
250+ const isDeletedFilterActive = ! ! activeFilters ?. isDeleted ?. value ;
251+ const items = benefitPlans . filter ( ( bp ) => (
252+ isDeletedFilterActive ? ! undoBenefitPlanUuids . includes ( bp . id ) : ! deletedBenefitPlanUuids . includes ( bp . id )
253+ ) ) ;
254+
204255 return (
205256 < Searcher
206257 module = "socialProtection"
207258 FilterPane = { benefitPlanFilter }
208259 fetch = { fetch }
209- items = { benefitPlans }
260+ items = { items }
210261 itemsPageInfo = { benefitPlansPageInfo }
211262 fetchedItems = { fetchingBenefitPlans }
212263 errorItems = { errorBenefitPlans }
@@ -224,6 +275,7 @@ function BenefitPlanSearcher({
224275 defaultFilters = { defaultFilters ( ) }
225276 rowDisabled = { isRowDisabled }
226277 rowLocked = { isRowDisabled }
278+ onFiltersApplied = { onFiltersApplied }
227279 />
228280 ) ;
229281}
@@ -243,6 +295,7 @@ const mapDispatchToProps = (dispatch) => bindActionCreators(
243295 {
244296 fetchBenefitPlans,
245297 deleteBenefitPlan,
298+ undoDeleteBenefitPlan,
246299 coreConfirm,
247300 clearConfirm,
248301 journalize,
0 commit comments