@@ -32,6 +32,7 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti
3232  const  [ allowCompleted ,  setAllowCompleted ]  =  useState ( false ) ; 
3333  const  [ usersCompleted ,  setUsersCompleted ]  =  useState ( false ) ; 
3434  const  [ failed ,  setFailed ]  =  useState ( false ) ; 
35+   const  [ isDatabaseEmpty ,  setIsDatabaseEmpty ]  =  useState ( false ) ; 
3536
3637  useEffect ( ( )  =>  { 
3738    if  ( ! open )  { 
@@ -75,35 +76,48 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti
7576
7677  const  handleDatabaseSelect  =  ( selectedOption )  =>  { 
7778    setSelectedDatabase ( selectedOption . value ) ; 
78-     retrieveLabelsList ( driver ,  selectedOption . value ,  ( records )  =>  parseLabelsList ( selectedOption . value ,  records ) ) ; 
79+     setLabels ( [ ] ) ; 
80+     setAllowList ( [ ] ) ; 
81+     setDenyList ( [ ] ) ; 
82+     retrieveLabelsList ( driver ,  selectedOption . value ,  ( records )  =>  { 
83+       if  ( records . length  ===  0 )  { 
84+         setIsDatabaseEmpty ( true ) ; 
85+       }  else  { 
86+         parseLabelsList ( selectedOption . value ,  records ) ; 
87+         setIsDatabaseEmpty ( false ) ; 
88+       } 
89+     } ) ; 
7990  } ; 
8091
8192  const  handleSave  =  async  ( )  =>  { 
8293    createNotification ( 'Updating' ,  `Access for role '${ currentRole }  ' is being updated, please wait...` ) ; 
83-     console . log ( selectedUsers ) ; 
84-     updateUsers ( 
85-       driver , 
86-       currentRole , 
87-       neo4jUsers , 
88-       selectedUsers , 
89-       ( )  =>  setUsersCompleted ( true ) , 
90-       ( failReason )  =>  setFailed ( `Operation 'ROLE-USER ASSIGNMENT' failed.\n Reason: ${ failReason }  ` ) 
91-     ) ; 
92- 
93-     if  ( selectedDatabase )  { 
94-       const  nonFixedDenyList  =  denyList . filter ( ( n )  =>  ! fixedDenyList . includes ( n ) ) ; 
95-       const  nonFixedAllowList  =  allowList . filter ( ( n )  =>  ! fixedDenyList . includes ( n ) ) ; 
96-       updatePrivileges ( 
94+     try  { 
95+       await  updateUsers ( 
9796        driver , 
98-         selectedDatabase , 
9997        currentRole , 
100-         labels , 
101-         nonFixedDenyList , 
102-         Operation . DENY , 
103-         ( )  =>  setDenyCompleted ( true ) , 
104-         ( failReason )  =>  setFailed ( `Operation 'DENY LABEL ACCESS' failed.\n Reason: ${ failReason }  ` ) 
105-       ) . then ( ( )  =>  { 
106-         updatePrivileges ( 
98+         neo4jUsers , 
99+         selectedUsers , 
100+         ( )  =>  setUsersCompleted ( true ) , 
101+         ( failReason )  =>  setFailed ( `Operation 'ROLE-USER ASSIGNMENT' failed.\n Reason: ${ failReason }  ` ) 
102+       ) ; 
103+ 
104+       if  ( selectedDatabase  &&  labels . length  >  0 )  { 
105+         // Check if there are labels to update 
106+         const  nonFixedDenyList  =  denyList . filter ( ( n )  =>  ! fixedDenyList . includes ( n ) ) ; 
107+         const  nonFixedAllowList  =  allowList . filter ( ( n )  =>  ! fixedDenyList . includes ( n ) ) ; 
108+ 
109+         await  updatePrivileges ( 
110+           driver , 
111+           selectedDatabase , 
112+           currentRole , 
113+           labels , 
114+           nonFixedDenyList , 
115+           Operation . DENY , 
116+           ( )  =>  setDenyCompleted ( true ) , 
117+           ( failReason )  =>  setFailed ( `Operation 'DENY LABEL ACCESS' failed.\n Reason: ${ failReason }  ` ) 
118+         ) ; 
119+ 
120+         await  updatePrivileges ( 
107121          driver , 
108122          selectedDatabase , 
109123          currentRole , 
@@ -113,14 +127,18 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti
113127          ( )  =>  setAllowCompleted ( true ) , 
114128          ( failReason )  =>  setFailed ( `Operation 'ALLOW LABEL ACCESS' failed.\n Reason: ${ failReason }  ` ) 
115129        ) ; 
116-       } ) ; 
117-     }  else  { 
118-       // Since there is no database selected, we don't run the DENY/ALLOW queries. 
119-       // We just mark them as completed so the success message shows up. 
120-       setDenyCompleted ( true ) ; 
121-       setAllowCompleted ( true ) ; 
130+       }  else  { 
131+         // Since there is no database or labels selected, we don't run the DENY/ALLOW queries. 
132+         // We just mark them as completed so the success message shows up. 
133+         setDenyCompleted ( true ) ; 
134+         setAllowCompleted ( true ) ; 
135+       } 
136+     }  catch  ( error )  { 
137+       // Handle any errors that occur during the update process 
138+       createNotification ( 'error' ,  `An error occurred: ${ error . message }  ` ) ; 
139+     }  finally  { 
140+       handleClose ( ) ; 
122141    } 
123-     handleClose ( ) ; 
124142  } ; 
125143
126144  return  ( 
@@ -171,8 +189,13 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti
171189              onChange : handleDatabaseSelect , 
172190            } } 
173191          /> 
192+           { selectedDatabase  &&  isDatabaseEmpty  &&  ( 
193+             < p  style = { {  color : 'red'  } } > 
194+               This database is currently empty. Please select a different database or add labels to manage access.
195+             </ p > 
196+           ) } 
174197        </ div > 
175-         { selectedDatabase  &&  loaded  &&  ( 
198+         { selectedDatabase  &&  ! isDatabaseEmpty   &&   loaded  &&  ( 
176199          < > 
177200            < br  /> 
178201            < div  style = { {  display : 'flex' ,  justifyContent : 'space-between'  } } > 
0 commit comments