@@ -14,44 +14,93 @@ import {
1414 Grid ,
1515 GridItem ,
1616 Text ,
17- useDisclosure
18- } from '@chakra-ui/react'
17+ useDisclosure ,
18+ FormControl ,
19+ FormHelperText ,
20+ Input
21+ } from '@chakra-ui/react'
1922
20- const DeleteAlertDialog = ( { isOpen, cancelRef, onClose, enclaveName , setEnclaveName , handleDeleteClick} ) => {
23+ const DeleteAlertDialog = ( { isOpen, cancelRef, onClose, enclaveToDelete , setEnclave , handleDeleteClick} ) => {
2124 const [ deleting , setDeleting ] = useState ( false ) ;
22-
25+ const [ value , setValue ] = useState ( "" )
26+ const [ error , setError ] = useState ( false )
27+
28+ const enclaveName = enclaveToDelete . name ;
2329 const handleClose = ( action ) => {
24- const maybeDeleteRequest = async ( action ) => {
30+
31+ const clickCancel = ( ) => {
32+ setError ( false )
33+ setEnclave ( { } )
34+ onClose ( )
35+ }
36+
37+ const clickDelete = async ( ) => {
38+ setDeleting ( true )
39+ await handleDeleteClick ( enclaveName )
40+ setDeleting ( false )
41+ setError ( false )
42+ clickCancel ( )
43+ }
44+
45+ const maybeDeleteRequest = async ( ) => {
2546 if ( action === "delete" ) {
26- setDeleting ( true )
27- await handleDeleteClick ( enclaveName )
28- setDeleting ( false )
47+ if ( value === enclaveName ) {
48+ await clickDelete ( )
49+ } else {
50+ setError ( true )
51+ setValue ( "" )
52+ }
53+ } else {
54+ clickCancel ( )
2955 }
30- setEnclaveName ( "" )
31- onClose ( )
3256 }
33- maybeDeleteRequest ( action )
57+
58+ maybeDeleteRequest ( )
59+ }
60+
61+ const handleInputChange = ( val ) => {
62+ if ( error ) {
63+ setError ( false )
64+ }
65+ setValue ( val )
3466 }
3567
3668 return (
3769 < AlertDialog
3870 isOpen = { isOpen }
3971 leastDestructiveRef = { cancelRef }
40- onClose = { onClose }
72+ onClose = { ( ) => {
73+ setError ( false )
74+ setValue ( "" ) ;
75+ onClose ( ) ;
76+ } }
4177 isCentered
4278 >
4379 < AlertDialogOverlay >
44- < AlertDialogContent >
45- < AlertDialogHeader fontSize = 'lg' >
80+ < AlertDialogContent backgroundColor = { "white" } >
81+ < AlertDialogHeader fontSize = 'lg' color = { "black" } >
4682 Delete Enclave: < Text fontSize = 'lg' fontWeight = 'bold' as = 'i' > { enclaveName } </ Text >
4783 </ AlertDialogHeader >
4884
4985 < AlertDialogBody >
50- Are you sure? You can't undo this action afterwards.
86+ {
87+ enclaveToDelete . mode ?
88+ < FormControl >
89+ < Input onChange = { ( e ) => handleInputChange ( e . target . value ) } isInvalid = { error } borderColor = { "black" } color = { "black" } />
90+ < FormHelperText color = { error ? "red.600" : "black" } fontSize = { "sm" } >
91+ { error ?
92+ "Please verify that the input matches the enclave name" :
93+ "Enter the enclave name to delete the enclave"
94+ }
95+ </ FormHelperText >
96+ </ FormControl > :
97+ < Text > Are you sure? You can't undo this action afterwards. </ Text >
98+ }
99+
51100 </ AlertDialogBody >
52101
53102 < AlertDialogFooter >
54- < Button ref = { cancelRef } onClick = { ( ) => handleClose ( "cancel" ) } >
103+ < Button ref = { cancelRef } onClick = { ( ) => handleClose ( "cancel" ) } color = { "black" } >
55104 Cancel
56105 </ Button >
57106 < Button bg = "red.600" _hover = { { bg : "red.700" } } color = "white" onClick = { ( ) => handleClose ( "delete" ) } ml = { 3 } isLoading = { deleting } >
@@ -64,7 +113,7 @@ const DeleteAlertDialog = ({isOpen, cancelRef, onClose, enclaveName, setEnclaveN
64113 )
65114}
66115
67- const Enclave = ( { name, status, created , handleClick, handleDeleteClick , onOpen , setEnclaveName } ) => {
116+ const Enclave = ( { name, status, handleClick, onOpen , mode , setEnclave } ) => {
68117 const backgroundColor = status === 1 ? "bg-[#24BA27]" : "bg-red-500"
69118 return (
70119 < Grid
@@ -76,7 +125,7 @@ const Enclave = ({name, status, created, handleClick, handleDeleteClick, onOpen,
76125 < GridItem colSpan = { 4 } align = { "right" } style = { { "zIndex" :100 } } >
77126 < Button bg = "red.600" _hover = { { bg : "red.700" } } color = "white" mr = "2" onClick = { ( e ) => {
78127 e . stopPropagation ( )
79- setEnclaveName ( name )
128+ setEnclave ( { mode : mode , name : name } )
80129 onOpen ( )
81130 } } > Delete </ Button >
82131 </ GridItem >
@@ -91,7 +140,7 @@ const Enclave = ({name, status, created, handleClick, handleDeleteClick, onOpen,
91140 )
92141}
93142
94- const EnclaveMainComponent = ( { onOpen, enclaves, handleClick, handleDeleteClick, setEnclaveName } ) => (
143+ const EnclaveMainComponent = ( { onOpen, enclaves, handleClick, handleDeleteClick, setEnclave } ) => (
95144 < div className = 'grid grid-cols-2 gap-4 flex-1' >
96145 {
97146 enclaves . map ( enclave => {
@@ -104,15 +153,16 @@ const EnclaveMainComponent = ({onOpen, enclaves, handleClick, handleDeleteClick,
104153 created = { enclave . created }
105154 handleClick = { handleClick }
106155 handleDeleteClick = { handleDeleteClick }
107- setEnclaveName = { setEnclaveName }
156+ setEnclave = { setEnclave }
157+ mode = { enclave . mode ? enclave . mode : false }
108158 />
109159 )
110160 } )
111161 }
112162 </ div >
113163)
114164
115- const EnclaveComponent = ( { onOpen, enclaves, handleClick, handleCreateEnvClick, handleDeleteClick, setEnclaveName } ) => {
165+ const EnclaveComponent = ( { onOpen, enclaves, handleClick, handleCreateEnvClick, handleDeleteClick, setEnclave } ) => {
116166 return (
117167 < div className = "flex-1 bg-[#171923] overflow-auto" >
118168 {
@@ -132,7 +182,7 @@ const EnclaveComponent = ({onOpen, enclaves, handleClick, handleCreateEnvClick,
132182 </ div >
133183 </ div >
134184 :
135- < EnclaveMainComponent setEnclaveName = { setEnclaveName } onOpen = { onOpen } enclaves = { enclaves } handleClick = { handleClick } handleDeleteClick = { handleDeleteClick } />
185+ < EnclaveMainComponent setEnclave = { setEnclave } onOpen = { onOpen } enclaves = { enclaves } handleClick = { handleClick } handleDeleteClick = { handleDeleteClick } />
136186 }
137187 </ div >
138188 )
@@ -141,7 +191,7 @@ const EnclaveComponent = ({onOpen, enclaves, handleClick, handleCreateEnvClick,
141191const Enclaves = ( { enclaves, isLoading, handleDeleteClick} ) => {
142192 const navigate = useNavigate ( )
143193 const cancelRef = useRef ( )
144- const [ enclaveName , setEnclaveName ] = useState ( "" )
194+ const [ enclaveToDelete , setEnclave ] = useState ( { } )
145195 const { isOpen, onOpen, onClose } = useDisclosure ( )
146196
147197 const handleCreateEnvClick = ( ) => {
@@ -155,15 +205,15 @@ const Enclaves = ({enclaves, isLoading, handleDeleteClick}) => {
155205 return (
156206 < div className = "flex h-full flex-grow" >
157207 {
158- ( isLoading ) ? < LoadingOverlay /> : < EnclaveComponent setEnclaveName = { setEnclaveName } onOpen = { onOpen } enclaves = { enclaves } handleClick = { handleClick } handleCreateEnvClick = { handleCreateEnvClick } handleDeleteClick = { handleDeleteClick } />
208+ ( isLoading ) ? < LoadingOverlay /> : < EnclaveComponent setEnclave = { setEnclave } onOpen = { onOpen } enclaves = { enclaves } handleClick = { handleClick } handleCreateEnvClick = { handleCreateEnvClick } handleDeleteClick = { handleDeleteClick } />
159209 }
160210 < DeleteAlertDialog
161211 isOpen = { isOpen }
162212 onOpen = { onOpen }
163213 onClose = { onClose }
164214 cancelRef = { cancelRef }
165- enclaveName = { enclaveName }
166- setEnclaveName = { setEnclaveName }
215+ enclaveToDelete = { enclaveToDelete }
216+ setEnclave = { setEnclave }
167217 handleDeleteClick = { handleDeleteClick }
168218 />
169219 </ div >
0 commit comments