11import { Button , ButtonDomRef , Menu , MenuItem , Ui5CustomEvent , MenuDomRef } from '@ui5/webcomponents-react' ;
22import type { ButtonClickEventDetail } from '@ui5/webcomponents/dist/Button.js' ;
3- import { Dispatch , FC , SetStateAction , useRef , useState } from 'react' ;
3+ import { FC , useRef , useState } from 'react' ;
44import '@ui5/webcomponents-icons/dist/copy' ;
55import '@ui5/webcomponents-icons/dist/accept' ;
66
77import { useTranslation } from 'react-i18next' ;
8+ import { DeleteConfirmationDialog } from '../Dialogs/DeleteConfirmationDialog.tsx' ;
9+
10+ import { useToast } from '../../context/ToastContext.tsx' ;
11+ import { useApiResourceMutation } from '../../lib/api/useApiResource.ts' ;
12+ import { DeleteWorkspaceType } from '../../lib/api/types/crate/deleteWorkspace.ts' ;
13+ import { DeleteProjectResource } from '../../lib/api/types/crate/deleteProject.ts' ;
814
915type ProjectsListItemMenuProps = {
10- setDialogDeleteProjectIsOpen : Dispatch < SetStateAction < boolean > > ;
16+ projectName : string ;
1117} ;
1218
13- export const ProjectsListItemMenu : FC < ProjectsListItemMenuProps > = ( { setDialogDeleteProjectIsOpen } ) => {
19+ export const ProjectsListItemMenu : FC < ProjectsListItemMenuProps > = ( { projectName } ) => {
1420 const popoverRef = useRef < MenuDomRef > ( null ) ;
1521 const [ open , setOpen ] = useState ( false ) ;
16-
22+ const [ dialogDeleteProjectIsOpen , setDialogDeleteProjectIsOpen ] = useState ( false ) ;
1723 const { t } = useTranslation ( ) ;
18-
24+ const toast = useToast ( ) ;
25+ const { trigger } = useApiResourceMutation < DeleteWorkspaceType > ( DeleteProjectResource ( projectName ) ) ;
1926 const handleOpenerClick = ( e : Ui5CustomEvent < ButtonDomRef , ButtonClickEventDetail > ) => {
27+ e . stopImmediatePropagation ( ) ;
28+ e . stopPropagation ( ) ;
2029 if ( popoverRef . current && e . currentTarget ) {
2130 popoverRef . current . opener = e . currentTarget as HTMLElement ;
2231 setOpen ( ( prev ) => ! prev ) ;
@@ -30,6 +39,8 @@ export const ProjectsListItemMenu: FC<ProjectsListItemMenuProps> = ({ setDialogD
3039 ref = { popoverRef }
3140 open = { open }
3241 onItemClick = { ( event ) => {
42+ event . stopImmediatePropagation ( ) ;
43+ event . stopPropagation ( ) ;
3344 const action = ( event . detail . item as HTMLElement ) . dataset . action ;
3445 if ( action === 'deleteProject' ) {
3546 setDialogDeleteProjectIsOpen ( true ) ;
@@ -38,8 +49,24 @@ export const ProjectsListItemMenu: FC<ProjectsListItemMenuProps> = ({ setDialogD
3849 setOpen ( false ) ;
3950 } }
4051 >
41- < MenuItem key = { 'delete' } text = { t ( 'Project .deleteProject' ) } data-action = "deleteProject" icon = "delete" />
52+ < MenuItem key = { 'delete' } text = { t ( 'ProjectsListView .deleteProject' ) } data-action = "deleteProject" icon = "delete" />
4253 </ Menu >
54+
55+ { dialogDeleteProjectIsOpen && (
56+ < DeleteConfirmationDialog
57+ resourceName = { projectName }
58+ kubectl = {
59+ // <KubectlDeleteWorkspace projectName={projectName} resourceName={workspaceName} />
60+ < div />
61+ }
62+ isOpen = { dialogDeleteProjectIsOpen }
63+ setIsOpen = { setDialogDeleteProjectIsOpen }
64+ onDeletionConfirmed = { async ( ) => {
65+ await trigger ( ) ;
66+ toast . show ( t ( 'ProjectsListView.deleteConfirmationDialog' ) ) ;
67+ } }
68+ />
69+ ) }
4370 </ div >
4471 ) ;
4572} ;
0 commit comments