@@ -141,16 +141,18 @@ function AddEditGWEnvironment(props) {
141
141
const [ invalidRoles , setInvalidRoles ] = useState ( [ ] ) ;
142
142
const [ roleValidity , setRoleValidity ] = useState ( true ) ;
143
143
const { gatewayTypes } = settings ;
144
- const [ initialState , setInitialState ] = useState ( {
145
- displayName : '' ,
146
- description : '' ,
147
- gatewayType : gatewayTypes && gatewayTypes . length > 1 ? 'Regular' : gatewayTypes [ 0 ] ,
148
- type : 'hybrid' ,
149
- vhosts : [ defaultVhost ] ,
150
- permissions : {
151
- roles : [ ] ,
152
- permissionType : 'PUBLIC' ,
153
- } ,
144
+ const initialPermissions = dataRow && dataRow . permissions
145
+ ? dataRow . permissions
146
+ : { roles : [ ] , permissionType : 'PUBLIC' } ;
147
+ const [ initialState , setInitialState ] = useState ( ( ) => {
148
+ return {
149
+ displayName : '' ,
150
+ description : '' ,
151
+ gatewayType : gatewayTypes && gatewayTypes . length > 1 ? 'Regular' : gatewayTypes [ 0 ] ,
152
+ type : 'hybrid' ,
153
+ vhosts : [ defaultVhost ] ,
154
+ permissions : initialPermissions ,
155
+ } ;
154
156
} ) ;
155
157
const [ editMode , setIsEditMode ] = useState ( false ) ;
156
158
@@ -159,6 +161,14 @@ function AddEditGWEnvironment(props) {
159
161
name, displayName, description, vhosts, type, gatewayType, permissions,
160
162
} = state ;
161
163
164
+ const [ roles , setRoles ] = useState ( [ ] ) ;
165
+
166
+ useEffect ( ( ) => {
167
+ if ( permissions && permissions . roles ) {
168
+ setRoles ( permissions . roles ) ;
169
+ }
170
+ } , [ permissions ] ) ;
171
+
162
172
let permissionType = '' ;
163
173
if ( permissions ) {
164
174
permissionType = state . permissions . permissionType ;
@@ -170,6 +180,8 @@ function AddEditGWEnvironment(props) {
170
180
if ( invalidRolesArray . length === 0 ) {
171
181
setRoleValidity ( true ) ;
172
182
}
183
+ } else if ( roles . includes ( role ) ) {
184
+ setRoles ( roles . filter ( ( existingRole ) => existingRole !== role ) ) ;
173
185
} else {
174
186
setValidRoles ( validRoles . filter ( ( existingRole ) => existingRole !== role ) ) ;
175
187
}
@@ -180,6 +192,12 @@ function AddEditGWEnvironment(props) {
180
192
const promise = restApi . validateSystemRole ( base64url . encode ( role ) ) ;
181
193
promise
182
194
. then ( ( ) => {
195
+ // Check if the role is already added
196
+ if ( roles . includes ( role ) || validRoles . includes ( role ) || invalidRoles . includes ( role ) ) {
197
+ Alert . error ( 'Role already added: ' + role ) ;
198
+ return ;
199
+ }
200
+
183
201
setValidRoles ( validRoles . concat ( role ) ) ;
184
202
if ( invalidRoles . length === 0 ) {
185
203
setRoleValidity ( true ) ;
@@ -197,6 +215,7 @@ function AddEditGWEnvironment(props) {
197
215
}
198
216
} ) ;
199
217
} ;
218
+
200
219
const onChange = ( e ) => {
201
220
if ( e . target . name === 'GatewayPermissionRestrict' ) {
202
221
permissionType = e . target . value ;
@@ -398,7 +417,7 @@ function AddEditGWEnvironment(props) {
398
417
} ) ;
399
418
}
400
419
permissions . permissionType = state . permissions . permissionType ;
401
- permissions . roles = validRoles ;
420
+ permissions . roles = roles . concat ( validRoles ) ;
402
421
let promiseAPICall ;
403
422
if ( dataRow ) {
404
423
// assign the update promise to the promiseAPICall
@@ -761,7 +780,7 @@ function AddEditGWEnvironment(props) {
761
780
} }
762
781
name = 'GatewayEnvironmentPermissions'
763
782
variant = 'outlined'
764
- value = { validRoles . concat ( invalidRoles ) }
783
+ value = { roles . concat ( validRoles , invalidRoles ) }
765
784
alwaysShowPlaceholder = { false }
766
785
placeholder = 'Enter roles and press Enter'
767
786
blurBehavior = 'clear'
0 commit comments