5
5
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
6
*/
7
7
8
- import { FunctionComponent , RefObject , useCallback , useEffect , useMemo , useState } from 'react' ;
8
+ import { FunctionComponent , RefObject , useCallback , useMemo , useState } from 'react' ;
9
9
import { useIntl } from 'react-intl' ;
10
10
import { PersonAdd } from '@mui/icons-material' ;
11
11
import { GridButton , GridButtonDelete , GridTable , GridTableRef } from '../../components/Grid' ;
12
- import { GroupInfos , UpdateUserInfos , UserAdminSrv , UserInfos } from '../../services' ;
12
+ import { GroupInfos , UserAdminSrv , UserInfos } from '../../services' ;
13
13
import {
14
14
ColDef ,
15
15
GetRowIdParams ,
16
- ICellEditorParams ,
17
16
ICheckboxCellRendererParams ,
17
+ ITooltipParams ,
18
18
RowClickedEvent ,
19
19
SelectionChangedEvent ,
20
20
TextFilterParams ,
21
21
} from 'ag-grid-community' ;
22
22
import { useSnackMessage } from '@gridsuite/commons-ui' ;
23
23
import DeleteConfirmationDialog from '../common/delete-confirmation-dialog' ;
24
24
import { defaultColDef , defaultRowSelection } from '../common/table-config' ;
25
- import MultiChipsRendererComponent from '../common/multi-chips-renderer-component' ;
26
- import MultiSelectEditorComponent from '../common/multi-select-editor-component' ;
27
25
28
26
export interface UsersTableProps {
29
27
gridRef : RefObject < GridTableRef < UserInfos > > ;
@@ -37,23 +35,6 @@ const UsersTable: FunctionComponent<UsersTableProps> = (props) => {
37
35
38
36
const [ rowsSelection , setRowsSelection ] = useState < UserInfos [ ] > ( [ ] ) ;
39
37
const [ showDeletionDialog , setShowDeletionDialog ] = useState ( false ) ;
40
- const [ groupsOptions , setGroupsOptions ] = useState < string [ ] > ( [ ] ) ;
41
-
42
- useEffect ( ( ) => {
43
- // fetch available groups
44
- UserAdminSrv . fetchGroups ( )
45
- . then ( ( allGroups : GroupInfos [ ] ) => {
46
- let groups : string [ ] = [ ] ;
47
- allGroups ?. forEach ( ( g ) => groups . push ( g . name ) ) ;
48
- setGroupsOptions ( groups ) ;
49
- } )
50
- . catch ( ( error ) =>
51
- snackError ( {
52
- messageTxt : error . message ,
53
- headerId : 'users.table.error.groups' ,
54
- } )
55
- ) ;
56
- } , [ intl , snackError ] ) ;
57
38
58
39
function getRowId ( params : GetRowIdParams < UserInfos > ) : string {
59
40
return params . data . sub ?? '' ;
@@ -80,32 +61,12 @@ const UsersTable: FunctionComponent<UsersTableProps> = (props) => {
80
61
81
62
const deleteUsersDisabled = useMemo ( ( ) => rowsSelection . length <= 0 , [ rowsSelection . length ] ) ;
82
63
83
- const updateUserCallback = useCallback (
84
- ( sub : string , profileName : string | undefined , isAdmin : boolean | undefined , groups : string [ ] ) => {
85
- const newData : UpdateUserInfos = {
86
- sub : sub ,
87
- profileName : profileName ,
88
- isAdmin : isAdmin ,
89
- groups : groups ,
90
- } ;
91
- UserAdminSrv . udpateUser ( newData )
92
- . catch ( ( error ) =>
93
- snackError ( {
94
- messageTxt : error . message ,
95
- headerId : 'users.table.error.update' ,
96
- } )
97
- )
98
- . then ( ( ) => props . gridRef ?. current ?. context ?. refresh ?.( ) ) ;
99
- } ,
100
- [ props . gridRef , snackError ]
101
- ) ;
102
-
103
64
const columns = useMemo (
104
65
( ) : ColDef < UserInfos > [ ] => [
105
66
{
106
67
field : 'sub' ,
107
68
cellDataType : 'text' ,
108
- flex : 3 ,
69
+ flex : 2 ,
109
70
lockVisible : true ,
110
71
filter : true ,
111
72
headerName : intl . formatMessage ( { id : 'users.table.id' } ) ,
@@ -121,7 +82,7 @@ const UsersTable: FunctionComponent<UsersTableProps> = (props) => {
121
82
{
122
83
field : 'profileName' ,
123
84
cellDataType : 'text' ,
124
- flex : 1 ,
85
+ flex : 2 ,
125
86
filter : true ,
126
87
headerName : intl . formatMessage ( {
127
88
id : 'users.table.profileName' ,
@@ -134,26 +95,10 @@ const UsersTable: FunctionComponent<UsersTableProps> = (props) => {
134
95
trimInput : true ,
135
96
} as TextFilterParams < UserInfos > ,
136
97
} ,
137
- {
138
- field : 'isAdmin' ,
139
- cellDataType : 'boolean' ,
140
- //detected as cellRenderer: 'agCheckboxCellRenderer',
141
- cellRendererParams : {
142
- disabled : true ,
143
- } as ICheckboxCellRendererParams < UserInfos , { } > ,
144
- flex : 1 ,
145
- headerName : intl . formatMessage ( {
146
- id : 'users.table.isAdmin' ,
147
- } ) ,
148
- headerTooltip : intl . formatMessage ( {
149
- id : 'users.table.isAdmin.description' ,
150
- } ) ,
151
- filter : true ,
152
- } ,
153
98
{
154
99
field : 'groups' ,
155
100
cellDataType : 'text' ,
156
- flex : 1 ,
101
+ flex : 3 ,
157
102
filter : true ,
158
103
headerName : intl . formatMessage ( {
159
104
id : 'users.table.groups' ,
@@ -165,20 +110,38 @@ const UsersTable: FunctionComponent<UsersTableProps> = (props) => {
165
110
caseSensitive : false ,
166
111
trimInput : true ,
167
112
} as TextFilterParams < GroupInfos > ,
168
- editable : true ,
169
- cellRenderer : MultiChipsRendererComponent ,
170
- cellEditor : MultiSelectEditorComponent ,
171
- cellEditorParams : ( params : ICellEditorParams < UserInfos > ) => ( {
172
- options : groupsOptions ,
173
- setValue : ( values : string [ ] ) => {
174
- if ( params . data ?. sub ) {
175
- updateUserCallback ( params . data . sub , params . data . profileName , params . data . isAdmin , values ) ;
176
- }
177
- } ,
113
+ tooltipValueGetter : ( p : ITooltipParams ) => {
114
+ const items = p . value as string [ ] ;
115
+ if ( items == null || items . length === 0 ) {
116
+ return '' ;
117
+ }
118
+ let groupWord = intl . formatMessage ( {
119
+ id : 'form.delete.dialog.group' ,
120
+ } ) ;
121
+ if ( items . length > 1 ) {
122
+ groupWord = groupWord . concat ( 's' ) ;
123
+ }
124
+ return `${ items . length } ${ groupWord } ` ;
125
+ } ,
126
+ } ,
127
+ {
128
+ field : 'isAdmin' ,
129
+ cellDataType : 'boolean' ,
130
+ //detected as cellRenderer: 'agCheckboxCellRenderer',
131
+ cellRendererParams : {
132
+ disabled : true ,
133
+ } as ICheckboxCellRendererParams < UserInfos , { } > ,
134
+ flex : 1 ,
135
+ headerName : intl . formatMessage ( {
136
+ id : 'users.table.isAdmin' ,
178
137
} ) ,
138
+ headerTooltip : intl . formatMessage ( {
139
+ id : 'users.table.isAdmin.description' ,
140
+ } ) ,
141
+ filter : true ,
179
142
} ,
180
143
] ,
181
- [ groupsOptions , intl , updateUserCallback ]
144
+ [ intl ]
182
145
) ;
183
146
184
147
return (
@@ -193,6 +156,7 @@ const UsersTable: FunctionComponent<UsersTableProps> = (props) => {
193
156
rowSelection = { defaultRowSelection }
194
157
onRowClicked = { props . onRowClicked }
195
158
onSelectionChanged = { onSelectionChanged }
159
+ tooltipShowDelay = { 1000 }
196
160
>
197
161
< GridButton
198
162
labelId = "users.table.toolbar.add.label"
0 commit comments