4
4
*
5
5
* Copyright © 2024 Extremely Heavy Industries Inc.
6
6
*/
7
+ import { RecategorizeDialogModel } from '@xh/hoist/admin/tabs/userData/roles/recategorize/RecategorizeDialogModel' ;
7
8
import { FilterChooserModel } from '@xh/hoist/cmp/filter' ;
8
9
import { GridModel , tagsRenderer , TreeStyle } from '@xh/hoist/cmp/grid' ;
9
10
import * as Col from '@xh/hoist/cmp/grid/columns' ;
@@ -34,6 +35,7 @@ export class RoleModel extends HoistModel {
34
35
@managed gridModel : GridModel ;
35
36
@managed filterChooserModel : FilterChooserModel ;
36
37
@managed readonly roleEditorModel = new RoleEditorModel ( this ) ;
38
+ @managed recategorizeDialogModel = new RecategorizeDialogModel ( this ) ;
37
39
38
40
@observable . ref allRoles : HoistRole [ ] = [ ] ;
39
41
@observable . ref moduleConfig : RoleModuleConfig ;
@@ -75,7 +77,9 @@ export class RoleModel extends HoistModel {
75
77
const { data} = await XH . fetchJson ( { url : 'roleAdmin/list' , loadSpec} ) ;
76
78
if ( loadSpec . isStale ) return ;
77
79
78
- runInAction ( ( ) => ( this . allRoles = this . processRolesFromServer ( data ) ) ) ;
80
+ runInAction ( ( ) => {
81
+ this . allRoles = this . processRolesFromServer ( data ) ;
82
+ } ) ;
79
83
this . displayRoles ( ) ;
80
84
await this . gridModel . preSelectFirstAsync ( ) ;
81
85
} catch ( e ) {
@@ -158,7 +162,7 @@ export class RoleModel extends HoistModel {
158
162
disabled : ! record || record . data . isGroupRow
159
163
} ) ,
160
164
actionFn : ( { record} ) => this . editAsync ( record . data as HoistRole ) ,
161
- recordsRequired : true
165
+ recordsRequired : 1
162
166
} ;
163
167
}
164
168
@@ -170,7 +174,7 @@ export class RoleModel extends HoistModel {
170
174
disabled : ! record || record . data . isGroupRow
171
175
} ) ,
172
176
actionFn : ( { record} ) => this . createAsync ( record . data as HoistRole ) ,
173
- recordsRequired : true
177
+ recordsRequired : 1
174
178
} ;
175
179
}
176
180
@@ -186,7 +190,7 @@ export class RoleModel extends HoistModel {
186
190
this . deleteAsync ( record . data as HoistRole )
187
191
. catchDefault ( )
188
192
. linkTo ( this . loadModel ) ,
189
- recordsRequired : true
193
+ recordsRequired : 1
190
194
} ;
191
195
}
192
196
@@ -269,6 +273,7 @@ export class RoleModel extends HoistModel {
269
273
treeMode : true ,
270
274
treeStyle : TreeStyle . HIGHLIGHTS_AND_BORDERS ,
271
275
autosizeOptions : { mode : 'managed' } ,
276
+ selModel : 'multiple' ,
272
277
emptyText : 'No roles found.' ,
273
278
colChooserModel : true ,
274
279
sortBy : 'name' ,
@@ -334,17 +339,7 @@ export class RoleModel extends HoistModel {
334
339
{ field : { name : 'lastUpdatedBy' , type : 'string' } , hidden : true } ,
335
340
{ field : { name : 'notes' , type : 'string' } , filterable : false , flex : 1 }
336
341
] ,
337
- contextMenu : this . readonly
338
- ? [ this . groupByAction ( ) , ...GridModel . defaultContextMenu ]
339
- : [
340
- this . addAction ( ) ,
341
- this . editAction ( ) ,
342
- this . cloneAction ( ) ,
343
- this . deleteAction ( ) ,
344
- '-' ,
345
- this . groupByAction ( ) ,
346
- ...GridModel . defaultContextMenu
347
- ] ,
342
+ contextMenu : ( ) => this . getContextMenuItems ( ) ,
348
343
onRowDoubleClicked : ( { data : record } ) => {
349
344
if ( record && ! record . data . isGroupRow ) {
350
345
this . editAsync ( record . data as HoistRole ) ;
@@ -353,6 +348,21 @@ export class RoleModel extends HoistModel {
353
348
} ) ;
354
349
}
355
350
351
+ private getContextMenuItems ( ) {
352
+ return this . readonly
353
+ ? [ this . groupByAction ( ) , ...GridModel . defaultContextMenu ]
354
+ : [
355
+ this . addAction ( ) ,
356
+ this . editAction ( ) ,
357
+ this . cloneAction ( ) ,
358
+ this . deleteAction ( ) ,
359
+ this . recategorizeDialogModel . recategorizeAction ( ) ,
360
+ '-' ,
361
+ this . groupByAction ( ) ,
362
+ ...GridModel . defaultContextMenu
363
+ ] ;
364
+ }
365
+
356
366
private createFilterChooserModel ( ) : FilterChooserModel {
357
367
const config = this . moduleConfig ;
358
368
return new FilterChooserModel ( {
0 commit comments