@@ -10,17 +10,25 @@ import { getFormsSheet } from 'services/FormCAC';
1010import { openNotification } from 'services/notificationService/notificationSlice' ;
1111import { formatToUTC } from 'utils/helpers/dateHelper' ;
1212import { downloadFile } from 'utils' ;
13+ import { DeleteEngagementModal } from './DeleteEngagementModal' ;
1314
1415interface ActionDropDownItem {
1516 value : number ;
1617 label : string ;
1718 action ?: ( ) => void ;
1819 condition ?: boolean ;
1920}
20- export const ActionsDropDown = ( { engagement } : { engagement : Engagement } ) => {
21+ export const ActionsDropDown = ( {
22+ engagement,
23+ onEngagementDeleted,
24+ } : {
25+ engagement : Engagement ;
26+ onEngagementDeleted : ( id : number ) => void ;
27+ } ) => {
2128 const navigate = useNavigate ( ) ;
2229 const dispatch = useAppDispatch ( ) ;
2330 const [ isExportingCacForms , setIsExportingCacForms ] = useState ( false ) ;
31+ const [ deleteModalOpen , setDeleteModalOpen ] = useState ( false ) ;
2432 const { roles, assignedEngagements } = useAppSelector ( ( state ) => state . user ) ;
2533 const submissionHasBeenOpened = [ SubmissionStatus . Open , SubmissionStatus . Closed ] . includes (
2634 engagement . submission_status ,
@@ -89,6 +97,23 @@ export const ActionsDropDown = ({ engagement }: { engagement: Engagement }) => {
8997 }
9098 } ;
9199
100+ const canDeleteEngagement : boolean = useMemo ( ( ) => {
101+ if ( ! roles . includes ( USER_ROLES . CREATE_ADMIN_USER ) ) {
102+ return false ;
103+ }
104+
105+ const today = new Date ( ) . toISOString ( ) . slice ( 0 , 10 ) ;
106+ if ( engagement . engagement_status . id === EngagementStatus . Unpublished && today < engagement . start_date ) {
107+ return true ;
108+ }
109+
110+ return false ;
111+ } , [ engagement . engagement_status . id , engagement . start_date , roles ] ) ;
112+
113+ const handleEngagementDeleted = ( ) => {
114+ onEngagementDeleted ( engagement . id ) ;
115+ } ;
116+
92117 const ITEMS : ActionDropDownItem [ ] = useMemo (
93118 ( ) => [
94119 {
@@ -151,6 +176,14 @@ export const ActionsDropDown = ({ engagement }: { engagement: Engagement }) => {
151176 ( roles . includes ( USER_ROLES . EXPORT_CAC_FORM_TO_SHEET ) &&
152177 assignedEngagements . includes ( engagement . id ) ) ,
153178 } ,
179+ {
180+ value : 7 ,
181+ label : 'Delete Engagement' ,
182+ action : ( ) => {
183+ setDeleteModalOpen ( true ) ;
184+ } ,
185+ condition : canDeleteEngagement ,
186+ } ,
154187 ] ,
155188 [ engagement . id ] ,
156189 ) ;
@@ -160,21 +193,29 @@ export const ActionsDropDown = ({ engagement }: { engagement: Engagement }) => {
160193 }
161194
162195 return (
163- < Select
164- id = { `action-drop-down-${ engagement . id } ` }
165- value = { 0 }
166- fullWidth
167- size = "small"
168- sx = { { backgroundColor : 'white' , color : Palette . info . main } }
169- >
170- < MenuItem value = { 0 } sx = { { fontStyle : 'italic' , height : '2em' } } color = "info" disabled >
171- { '(Select One)' }
172- </ MenuItem >
173- { ITEMS . filter ( ( item ) => item . condition ) . map ( ( item ) => (
174- < MenuItem key = { item . value } value = { item . value } onClick = { item . action } >
175- { item . label }
196+ < >
197+ < Select
198+ id = { `action-drop-down-${ engagement . id } ` }
199+ value = { 0 }
200+ fullWidth
201+ size = "small"
202+ sx = { { backgroundColor : 'white' , color : Palette . info . main } }
203+ >
204+ < MenuItem value = { 0 } sx = { { fontStyle : 'italic' , height : '2em' } } color = "info" disabled >
205+ { '(Select One)' }
176206 </ MenuItem >
177- ) ) }
178- </ Select >
207+ { ITEMS . filter ( ( item ) => item . condition ) . map ( ( item ) => (
208+ < MenuItem key = { item . value } value = { item . value } onClick = { item . action } >
209+ { item . label }
210+ </ MenuItem >
211+ ) ) }
212+ </ Select >
213+ < DeleteEngagementModal
214+ open = { deleteModalOpen }
215+ onClose = { ( ) => setDeleteModalOpen ( false ) }
216+ onDelete = { handleEngagementDeleted }
217+ engagement = { engagement }
218+ />
219+ </ >
179220 ) ;
180221} ;
0 commit comments