@@ -21,6 +21,7 @@ import { UIConstants } from "@wso2is/admin.core.v1/constants/ui-constants";
21
21
import { UserBasicInterface , UserRoleInterface } from "@wso2is/admin.core.v1/models/users" ;
22
22
import { useUsersList } from "@wso2is/admin.users.v1/api" ;
23
23
import { UserManagementUtils } from "@wso2is/admin.users.v1/utils" ;
24
+ import { UserStoreDropdownItem } from "@wso2is/admin.userstores.v1/models" ;
24
25
import { getUserNameWithoutDomain } from "@wso2is/core/helpers" ;
25
26
import { AlertLevels , IdentifiableComponentInterface , RolesInterface } from "@wso2is/core/models" ;
26
27
import { addAlert } from "@wso2is/core/store" ;
@@ -39,7 +40,7 @@ import React, { FormEvent, FunctionComponent, ReactElement, useCallback, useEffe
39
40
import { useTranslation } from "react-i18next" ;
40
41
import { useDispatch } from "react-redux" ;
41
42
import { Dispatch } from "redux" ;
42
- import { Grid , Modal } from "semantic-ui-react" ;
43
+ import { Dropdown , DropdownProps , Grid , GridColumn , Modal } from "semantic-ui-react" ;
43
44
44
45
/**
45
46
* Proptypes for the group users list component.
@@ -50,13 +51,15 @@ interface AddRoleUserModalProps extends IdentifiableComponentInterface {
50
51
handleCloseAddNewUserModal : ( ) => void ;
51
52
showAddNewUserModal : boolean ;
52
53
userstore : string ;
54
+ availableUserStores : UserStoreDropdownItem [ ] ;
53
55
}
54
56
55
57
export const AddRoleUserModal : FunctionComponent < AddRoleUserModalProps > = (
56
58
props : AddRoleUserModalProps
57
59
) : ReactElement => {
58
60
59
61
const {
62
+ availableUserStores,
60
63
[ "data-componentid" ] : componentId = "edit-role-users-add-user-modal" ,
61
64
handleAddUserSubmit,
62
65
handleCloseAddNewUserModal,
@@ -76,6 +79,7 @@ export const AddRoleUserModal: FunctionComponent<AddRoleUserModalProps> = (
76
79
const [ userList , setUserList ] = useState < UserBasicInterface [ ] > ( [ ] ) ;
77
80
const [ selectedUsers , setSelectedUsers ] = useState < UserBasicInterface [ ] > ( [ ] ) ;
78
81
const [ searchQuery , setSearchQuery ] = useState < string > ( null ) ;
82
+ const [ selectedUserstore , setSelectedUserStore ] = useState < string > ( userstore ) ;
79
83
80
84
/**
81
85
* Fetch the user list.
@@ -90,7 +94,7 @@ export const AddRoleUserModal: FunctionComponent<AddRoleUserModalProps> = (
90
94
0 ,
91
95
searchQuery ,
92
96
null ,
93
- userstore ,
97
+ selectedUserstore ,
94
98
null
95
99
) ;
96
100
@@ -231,63 +235,90 @@ export const AddRoleUserModal: FunctionComponent<AddRoleUserModalProps> = (
231
235
}
232
236
</ Heading >
233
237
</ Modal . Header >
234
- < Modal . Content image >
235
- { alert && alertComponent }
236
- < TransferComponent
237
- compact
238
- basic
239
- bordered
240
- className = "one-column-selection"
241
- selectionComponent
242
- searchPlaceholder = { t ( "groups:edit.users.searchUsers" ) }
243
- isLoading = { isUserListFetchRequestLoading || isUserListFetchRequestValidating }
244
- handleHeaderCheckboxChange = { ( ) => selectAllAssignedList ( ) }
245
- isHeaderCheckboxChecked = { isSelectAllUsers }
246
- handleUnelectedListSearch = { ( e : FormEvent < HTMLInputElement > , { value } : { value : string } ) => {
247
- handleSearchFieldChange ( e , value ) ;
248
- } }
249
- showSelectAllCheckbox = { ! isUserListFetchRequestLoading && userList . length > 0 }
250
- data-componentid = { `${ componentId } -transfer-component` }
251
- >
252
- < TransferList
238
+ < Modal . Content >
239
+ < Grid >
240
+ { alert && alertComponent }
241
+ < TransferComponent
242
+ compact
243
+ basic
244
+ bordered
245
+ className = "one-column-selection"
253
246
selectionComponent
254
- isListEmpty = { isEmpty ( userList ) || userList . length <= 0 }
247
+ searchPlaceholder = { t ( "groups:edit.users.searchUsers" ) }
255
248
isLoading = { isUserListFetchRequestLoading || isUserListFetchRequestValidating }
256
- listType = "unselected"
257
- selectAllCheckboxLabel = { t ( "groups:edit.users.selectAllUsers" ) }
258
- data-componentid = { `${ componentId } -unselected-transfer-list` }
259
- emptyPlaceholderContent = { t ( "roles:edit.users.placeholders.emptySearchResult" ) }
260
- emptyPlaceholderDefaultContent = { t ( "transferList:list."
261
- + "emptyPlaceholders.default" ) }
249
+ handleHeaderCheckboxChange = { ( ) => selectAllAssignedList ( ) }
250
+ isHeaderCheckboxChecked = { isSelectAllUsers }
251
+ handleUnelectedListSearch = { ( e : FormEvent < HTMLInputElement > , { value } : { value : string } ) => {
252
+ handleSearchFieldChange ( e , value ) ;
253
+ } }
254
+ showSelectAllCheckbox = { ! isUserListFetchRequestLoading && userList . length > 0 }
255
+ data-componentid = { `${ componentId } -transfer-component` }
256
+ leftActionPanel = { (
257
+ < GridColumn width = { 1 } >
258
+ < Dropdown
259
+ fluid
260
+ selection
261
+ labeled
262
+ options = { availableUserStores }
263
+ data-testid = "user-mgt-add-user-form-userstore-dropdown"
264
+ name = "userstore"
265
+ disabled = { false }
266
+ value = { selectedUserstore }
267
+ onChange = {
268
+ ( e : React . ChangeEvent < HTMLInputElement > , data : DropdownProps ) => {
269
+ setSelectedUserStore ( data . value as string ) ;
270
+ }
271
+ }
272
+ tabIndex = { 1 }
273
+ maxLength = { 60 }
274
+ />
275
+ </ GridColumn >
276
+ ) }
262
277
>
263
- {
264
- userList ?. map ( ( user : UserBasicInterface , index : number ) => {
265
- const resolvedGivenName : string = UserManagementUtils . resolveUserListSubheader ( user ) ;
266
- const resolvedUsername : string = getUserNameWithoutDomain ( user ?. userName ) ;
278
+ < TransferList
279
+ selectionComponent
280
+ isListEmpty = { isEmpty ( userList ) || userList . length <= 0 }
281
+ isLoading = { isUserListFetchRequestLoading || isUserListFetchRequestValidating }
282
+ listType = "unselected"
283
+ selectAllCheckboxLabel = { t ( "groups:edit.users.selectAllUsers" ) }
284
+ data-componentid = { `${ componentId } -unselected-transfer-list` }
285
+ emptyPlaceholderContent = { isEmpty ( searchQuery )
286
+ ? t ( "roles:edit.users.placeholders.beginSearch" )
287
+ : t ( "roles:edit.users.placeholders.emptySearchResult" ) }
288
+ emptyPlaceholderDefaultContent = { t ( "transferList:list."
289
+ + "emptyPlaceholders.default" ) }
290
+ >
291
+ {
292
+ userList ?. map ( ( user : UserBasicInterface , index : number ) => {
293
+ const resolvedGivenName : string =
294
+ UserManagementUtils . resolveUserListSubheader ( user ) ;
295
+ const resolvedUsername : string = getUserNameWithoutDomain ( user ?. userName ) ;
267
296
268
- return (
269
- < TransferListItem
270
- handleItemChange = { ( ) => handleItemCheckboxChange ( user ) }
271
- key = { index }
272
- listItem = { resolvedGivenName ?? resolvedUsername }
273
- listItemId = { user . id }
274
- listItemIndex = { index }
275
- isItemChecked = {
276
- selectedUsers ?. findIndex ( ( selectedUser : UserBasicInterface ) =>
277
- selectedUser . id === user . id ) !== - 1
278
- }
279
- showSecondaryActions = { false }
280
- showListSubItem = { true }
281
- listSubItem = { resolvedGivenName && (
282
- < Code compact withBackground = { false } > { resolvedUsername } </ Code >
283
- ) }
284
- data-componentid = { `${ componentId } -unselected-transfer-list-item-${ index } ` }
285
- />
286
- ) ;
287
- } )
288
- }
289
- </ TransferList >
290
- </ TransferComponent >
297
+ return (
298
+ < TransferListItem
299
+ handleItemChange = { ( ) => handleItemCheckboxChange ( user ) }
300
+ key = { index }
301
+ listItem = { resolvedGivenName ?? resolvedUsername }
302
+ listItemId = { user . id }
303
+ listItemIndex = { index }
304
+ isItemChecked = {
305
+ selectedUsers ?. findIndex ( ( selectedUser : UserBasicInterface ) =>
306
+ selectedUser . id === user . id ) !== - 1
307
+ }
308
+ showSecondaryActions = { false }
309
+ showListSubItem = { true }
310
+ listSubItem = { resolvedGivenName && (
311
+ < Code compact withBackground = { false } > { resolvedUsername } </ Code >
312
+ ) }
313
+ data-componentid = {
314
+ `${ componentId } -unselected-transfer-list-item-${ index } ` }
315
+ />
316
+ ) ;
317
+ } )
318
+ }
319
+ </ TransferList >
320
+ </ TransferComponent >
321
+ </ Grid >
291
322
</ Modal . Content >
292
323
< Modal . Actions >
293
324
< Grid >
0 commit comments