ngx-histaff-alpha 6.3.7 → 6.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-C91FUkXL.mjs → ngx-histaff-alpha-ai-hint-for-table.component-D9X0r5wC.mjs} +2 -2
  2. package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-C91FUkXL.mjs.map → ngx-histaff-alpha-ai-hint-for-table.component-D9X0r5wC.mjs.map} +1 -1
  3. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-DLEZuLXO.mjs → ngx-histaff-alpha-core-form-design.component-Jzy7HTBy.mjs} +5 -5
  4. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-DLEZuLXO.mjs.map → ngx-histaff-alpha-core-form-design.component-Jzy7HTBy.mjs.map} +1 -1
  5. package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-F2nV8jgm.mjs → ngx-histaff-alpha-core-template-editor.component-CwYRUlbM.mjs} +2 -2
  6. package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-F2nV8jgm.mjs.map → ngx-histaff-alpha-core-template-editor.component-CwYRUlbM.mjs.map} +1 -1
  7. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-yaqjJHzN.mjs → ngx-histaff-alpha-core-toast-loading.component-Byl2v6zI.mjs} +2 -2
  8. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-yaqjJHzN.mjs.map → ngx-histaff-alpha-core-toast-loading.component-Byl2v6zI.mjs.map} +1 -1
  9. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-D2txp5DP.mjs → ngx-histaff-alpha-core-workflow-consume.component-Fma_hNMb.mjs} +2 -2
  10. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-D2txp5DP.mjs.map → ngx-histaff-alpha-core-workflow-consume.component-Fma_hNMb.mjs.map} +1 -1
  11. package/fesm2022/{ngx-histaff-alpha-db-settings.component-DB6XegRZ.mjs → ngx-histaff-alpha-db-settings.component-CpjFcS3r.mjs} +5 -5
  12. package/fesm2022/{ngx-histaff-alpha-db-settings.component-DB6XegRZ.mjs.map → ngx-histaff-alpha-db-settings.component-CpjFcS3r.mjs.map} +1 -1
  13. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-DRbyCxB_.mjs → ngx-histaff-alpha-design-wrapper.component-CWPAtJdW.mjs} +5 -5
  14. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-DRbyCxB_.mjs.map → ngx-histaff-alpha-design-wrapper.component-CWPAtJdW.mjs.map} +1 -1
  15. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-CdPC_FcN.mjs → ngx-histaff-alpha-design-wrapper.route-BPTxhFez.mjs} +5 -5
  16. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-CdPC_FcN.mjs.map → ngx-histaff-alpha-design-wrapper.route-BPTxhFez.mjs.map} +1 -1
  17. package/fesm2022/{ngx-histaff-alpha-form-array-props.component-BRxQHNtj.mjs → ngx-histaff-alpha-form-array-props.component-CFQHLdzG.mjs} +3 -3
  18. package/fesm2022/{ngx-histaff-alpha-form-array-props.component-BRxQHNtj.mjs.map → ngx-histaff-alpha-form-array-props.component-CFQHLdzG.mjs.map} +1 -1
  19. package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-O8f-QHVW.mjs → ngx-histaff-alpha-hrm-schema.component-DhcmippJ.mjs} +2 -2
  20. package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-O8f-QHVW.mjs.map → ngx-histaff-alpha-hrm-schema.component-DhcmippJ.mjs.map} +1 -1
  21. package/fesm2022/{ngx-histaff-alpha-live-form.component-Dt0rgzHG.mjs → ngx-histaff-alpha-live-form.component-iX23HD-T.mjs} +4 -4
  22. package/fesm2022/{ngx-histaff-alpha-live-form.component-Dt0rgzHG.mjs.map → ngx-histaff-alpha-live-form.component-iX23HD-T.mjs.map} +1 -1
  23. package/fesm2022/{ngx-histaff-alpha-ngx-histaff-alpha-CrtUN9ex.mjs → ngx-histaff-alpha-ngx-histaff-alpha-BJ3ZVba7.mjs} +1943 -840
  24. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-BJ3ZVba7.mjs.map +1 -0
  25. package/fesm2022/{ngx-histaff-alpha-simple-chat.component-DtlcUxIS.mjs → ngx-histaff-alpha-simple-chat.component-Da4H2k5o.mjs} +2 -2
  26. package/fesm2022/{ngx-histaff-alpha-simple-chat.component-DtlcUxIS.mjs.map → ngx-histaff-alpha-simple-chat.component-Da4H2k5o.mjs.map} +1 -1
  27. package/fesm2022/{ngx-histaff-alpha-template-list.component-BXyP9Vki.mjs → ngx-histaff-alpha-template-list.component-CVK_Ewx4.mjs} +2 -2
  28. package/fesm2022/{ngx-histaff-alpha-template-list.component-BXyP9Vki.mjs.map → ngx-histaff-alpha-template-list.component-CVK_Ewx4.mjs.map} +1 -1
  29. package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-ySy7DIdC.mjs → ngx-histaff-alpha-tracker-studio.component-8tqyVAcU.mjs} +2 -2
  30. package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-ySy7DIdC.mjs.map → ngx-histaff-alpha-tracker-studio.component-8tqyVAcU.mjs.map} +1 -1
  31. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-qxz8Ozah.mjs → ngx-histaff-alpha-wf-form-assign.component-CRs1A8j_.mjs} +2 -2
  32. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-qxz8Ozah.mjs.map → ngx-histaff-alpha-wf-form-assign.component-CRs1A8j_.mjs.map} +1 -1
  33. package/fesm2022/{ngx-histaff-alpha-wf-global-config.component-DbZq1DK-.mjs → ngx-histaff-alpha-wf-global-config.component-yeFb4wxY.mjs} +19 -2
  34. package/fesm2022/ngx-histaff-alpha-wf-global-config.component-yeFb4wxY.mjs.map +1 -0
  35. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-DjFOVp06.mjs → ngx-histaff-alpha-wf-instance-status.component-Jahj4MO-.mjs} +2 -2
  36. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-DjFOVp06.mjs.map → ngx-histaff-alpha-wf-instance-status.component-Jahj4MO-.mjs.map} +1 -1
  37. package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-eT3UGhUM.mjs → ngx-histaff-alpha-wf-instance-step-react.component-Bri0bRw3.mjs} +3 -3
  38. package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-eT3UGhUM.mjs.map → ngx-histaff-alpha-wf-instance-step-react.component-Bri0bRw3.mjs.map} +1 -1
  39. package/fesm2022/ngx-histaff-alpha.mjs +1 -1
  40. package/lib/app/libraries/core-com-tree/com-party.service.d.ts +3 -2
  41. package/lib/app/libraries/core-com-tree/core-com-tree.component.d.ts +7 -5
  42. package/lib/app/libraries/core-com-tree/mokeUpLinearData.d.ts +19 -0
  43. package/lib/app/services/app-config.service.d.ts +1 -0
  44. package/package.json +2 -2
  45. package/public-api.d.ts +3 -0
  46. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-CrtUN9ex.mjs.map +0 -1
  47. package/fesm2022/ngx-histaff-alpha-wf-global-config.component-DbZq1DK-.mjs.map +0 -1
@@ -3881,11 +3881,12 @@ class AppInitializationService {
3881
3881
  if (window.opener && window.opener.globalPopupId) {
3882
3882
  //alert(window.opener.globalPopupId);
3883
3883
  }
3884
- fetch('../../assets/app.config.json').then(res => res.json()).then(({ APP_TYPE, APP_UIID, ALLOW_IN_APP_NOTIFICATION, SHOW_LOGIN_NOTIFICATION, IGNORE_PARTIAL_URL_MATCH_FOR_FUNCTION, IGNORE_PARTIAL_URL_MATCH_FOR_PROFILE_CENTER, USE_BUILTIN_OTP, USE_CAPTCHA, BASE_URL, BASE_URL_FOR_STATISTIC, GOLIVE_URL, DEBUG_ENABLED, USE_DEMO_AVATAR, LOGO_LOGIN, LOGO_HEADER, HOME_BACKGROUND_IMAGE, FORM_CONTROL_REQUIRED_HIGHLIGHT_COLOR, OAUTH2_OIDC_ENABLED, OAUTH2_OIDC_CLIENT_ID, OAUTH2_OIDC_LOGIN_URI, OAUTH2_OIDC_REDIRECT_URI, OAUTH2_OIDC_SCOPE, OFFICE365_DEV, OFFICE365_PROD, SAML2ADFS_ENABLED, SAML2ADFS_IDP, SAML2ADFS_IDENTIFIER, SAML2ADFS_WA_SIGNIN, SAML2ADFS_WA_SIGNOUT, SAML2ADFS_WREPLY, HANGFIRE_PATH, STATIC_FOLDER, WORKFLOW_ENABLE_DEBUG_MODE, }) => {
3884
+ fetch('../../assets/app.config.json').then(res => res.json()).then(({ APP_TYPE, APP_UIID, ALLOW_IN_APP_NOTIFICATION, SHOW_LOGIN_NOTIFICATION, FEDERATION_COM_PARTY_ENABLED, IGNORE_PARTIAL_URL_MATCH_FOR_FUNCTION, IGNORE_PARTIAL_URL_MATCH_FOR_PROFILE_CENTER, USE_BUILTIN_OTP, USE_CAPTCHA, BASE_URL, BASE_URL_FOR_STATISTIC, GOLIVE_URL, DEBUG_ENABLED, USE_DEMO_AVATAR, LOGO_LOGIN, LOGO_HEADER, HOME_BACKGROUND_IMAGE, FORM_CONTROL_REQUIRED_HIGHLIGHT_COLOR, OAUTH2_OIDC_ENABLED, OAUTH2_OIDC_CLIENT_ID, OAUTH2_OIDC_LOGIN_URI, OAUTH2_OIDC_REDIRECT_URI, OAUTH2_OIDC_SCOPE, OFFICE365_DEV, OFFICE365_PROD, SAML2ADFS_ENABLED, SAML2ADFS_IDP, SAML2ADFS_IDENTIFIER, SAML2ADFS_WA_SIGNIN, SAML2ADFS_WA_SIGNOUT, SAML2ADFS_WREPLY, HANGFIRE_PATH, STATIC_FOLDER, WORKFLOW_ENABLE_DEBUG_MODE, }) => {
3885
3885
  this.appConfigService.APP_TYPE = APP_TYPE;
3886
3886
  this.appConfigService.APP_UIID = APP_UIID;
3887
3887
  this.appConfigService.ALLOW_IN_APP_NOTIFICATION = ALLOW_IN_APP_NOTIFICATION;
3888
3888
  this.appConfigService.SHOW_LOGIN_NOTIFICATION = SHOW_LOGIN_NOTIFICATION;
3889
+ this.appConfigService.FEDERATION_COM_PARTY_ENABLED = FEDERATION_COM_PARTY_ENABLED;
3889
3890
  this.appConfigService.IGNORE_PARTIAL_URL_MATCH_FOR_FUNCTION = IGNORE_PARTIAL_URL_MATCH_FOR_FUNCTION;
3890
3891
  this.appConfigService.IGNORE_PARTIAL_URL_MATCH_FOR_PROFILE_CENTER = IGNORE_PARTIAL_URL_MATCH_FOR_PROFILE_CENTER;
3891
3892
  this.appConfigService.USE_BUILTIN_OTP = USE_BUILTIN_OTP;
@@ -9176,7 +9177,7 @@ class SocketService {
9176
9177
  .withUrl(this.appConfigService.BASE_URL + '/hubs/signal', {
9177
9178
  accessTokenFactory: () => token,
9178
9179
  skipNegotiation: true,
9179
- transport: HttpTransportType.WebSockets
9180
+ transport: HttpTransportType.WebSockets || HttpTransportType.ServerSentEvents || HttpTransportType.LongPolling
9180
9181
  })
9181
9182
  .configureLogging(LogLevel.Information)
9182
9183
  .build();
@@ -31585,7 +31586,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
31585
31586
  const hrmSchemaRoutes = [
31586
31587
  {
31587
31588
  path: '',
31588
- loadComponent: () => import('./ngx-histaff-alpha-hrm-schema.component-O8f-QHVW.mjs').then(m => m.HrmSchemaComponent)
31589
+ loadComponent: () => import('./ngx-histaff-alpha-hrm-schema.component-DhcmippJ.mjs').then(m => m.HrmSchemaComponent)
31589
31590
  }
31590
31591
  ];
31591
31592
 
@@ -33758,7 +33759,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
33758
33759
  const simpleChatRoutes = [
33759
33760
  {
33760
33761
  path: '',
33761
- loadComponent: () => import('./ngx-histaff-alpha-simple-chat.component-DtlcUxIS.mjs').then(m => m.SimpleChatComponent)
33762
+ loadComponent: () => import('./ngx-histaff-alpha-simple-chat.component-Da4H2k5o.mjs').then(m => m.SimpleChatComponent)
33762
33763
  }
33763
33764
  ];
33764
33765
 
@@ -36197,6 +36198,1743 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
36197
36198
  ], template: "<div class=\"modal-container\">\r\n <div class=\"modal-container-root\">\r\n <div class=\"edit-container\">\r\n\r\n <core-page-header [title]=\"'EDIT_ACTION_SVG_ICON'\" [hideButtonGroup]=\"true\"></core-page-header>\r\n\r\n <div class=\"object-property w-100 fw700 color-gray\">\r\n <div>{{ id }} <span> \u2022 </span> {{ code }} <span> \u2022 </span> {{ (code || '') | translate: lang }} </div>\r\n </div>\r\n\r\n <div class=\"h15\"></div>\r\n\r\n <div class=\"d-flex d-flex-between\">\r\n\r\n <div class=\"entry\">\r\n <div class=\"label\">Enter Svg element here:</div>\r\n <textarea class=\"form-control\" [(ngModel)]=\"svg\" [rows]=\"'10'\"\r\n [ngStyle]=\"{ height: 'unset'}\"></textarea>\r\n </div>\r\n <div class=\"preview d-flex d-flex-v d-flex-between\">\r\n <div class=\"label\">Preview:</div>\r\n <div class=\"preview-icon\" [innerHtml]=\"svg | stringHtml\">\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"h15\"></div>\r\n <div class=\"d-flex d-flex-end\">\r\n <core-button-group-vns [showCaption]=\"true\" [forHeader]=\"false\" (buttonClick)=\"onButtonClick($event)\"\r\n [shownItems]=\"buttonItems\" class=\"buttonGroupCustom\"></core-button-group-vns>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".edit-container{width:800px;height:400px;padding:0 15px 15px;background-color:#fff}.edit-container .entry{width:655px}.edit-container .preview{width:100px;height:100px}\n"] }]
36198
36199
  }], ctorParameters: () => [{ type: MultiLanguageService }, { type: ActionService }, { type: AppService }, { type: AlertService }] });
36199
36200
 
36201
+ const COM_MOKEUP_DATA = [
36202
+ {
36203
+ "id": 2,
36204
+ "name": "Hanoi Office Test",
36205
+ "parentId": 1,
36206
+ "orderNum": 99999,
36207
+ "protected": false,
36208
+ "level": null,
36209
+ "code": "HOT",
36210
+ "isActive": true
36211
+ },
36212
+ {
36213
+ "id": 3,
36214
+ "name": "Corporate Group ",
36215
+ "parentId": 2,
36216
+ "orderNum": 99999,
36217
+ "protected": false,
36218
+ "level": null,
36219
+ "code": "CG",
36220
+ "isActive": true
36221
+ },
36222
+ {
36223
+ "id": 4,
36224
+ "name": "BACKEND_ONLY.HU_ORGANIZATION.NAME.TI",
36225
+ "parentId": 2,
36226
+ "orderNum": 99999,
36227
+ "protected": false,
36228
+ "level": null,
36229
+ "code": "TI",
36230
+ "isActive": true
36231
+ },
36232
+ {
36233
+ "id": 5,
36234
+ "name": "Project and Investment",
36235
+ "parentId": 2,
36236
+ "orderNum": 99999,
36237
+ "protected": false,
36238
+ "level": null,
36239
+ "code": "PI",
36240
+ "isActive": true
36241
+ },
36242
+ {
36243
+ "id": 6,
36244
+ "name": "Treasury & Accounting Department",
36245
+ "parentId": 3,
36246
+ "orderNum": 99999,
36247
+ "protected": false,
36248
+ "level": null,
36249
+ "code": "TA",
36250
+ "isActive": true
36251
+ },
36252
+ {
36253
+ "id": 7,
36254
+ "name": "Legal &Risk Management department",
36255
+ "parentId": 3,
36256
+ "orderNum": 99999,
36257
+ "protected": false,
36258
+ "level": null,
36259
+ "code": "LR",
36260
+ "isActive": true
36261
+ },
36262
+ {
36263
+ "id": 8,
36264
+ "name": "Corporate Planning & Coordination department",
36265
+ "parentId": 3,
36266
+ "orderNum": 99999,
36267
+ "protected": false,
36268
+ "level": null,
36269
+ "code": "CC",
36270
+ "isActive": true
36271
+ },
36272
+ {
36273
+ "id": 9,
36274
+ "name": "Administration and Planning department",
36275
+ "parentId": 3,
36276
+ "orderNum": 99999,
36277
+ "protected": false,
36278
+ "level": null,
36279
+ "code": "Admin",
36280
+ "isActive": true
36281
+ },
36282
+ {
36283
+ "id": 10,
36284
+ "name": "Da Nang Office",
36285
+ "parentId": 3,
36286
+ "orderNum": 99999,
36287
+ "protected": false,
36288
+ "level": null,
36289
+ "code": "DN",
36290
+ "isActive": true
36291
+ },
36292
+ {
36293
+ "id": 11,
36294
+ "name": "Ha Noi Iron, Steel & Non-ferrous Metal department",
36295
+ "parentId": 4,
36296
+ "orderNum": 99999,
36297
+ "protected": false,
36298
+ "level": null,
36299
+ "code": "IS",
36300
+ "isActive": true
36301
+ },
36302
+ {
36303
+ "id": 12,
36304
+ "name": "Ha Noi Chemicals, Plastics and Mineral Resources department\n",
36305
+ "parentId": 4,
36306
+ "orderNum": 99999,
36307
+ "protected": false,
36308
+ "level": null,
36309
+ "code": "HNC",
36310
+ "isActive": true
36311
+ },
36312
+ {
36313
+ "id": 13,
36314
+ "name": "Mineral Resources department",
36315
+ "parentId": 4,
36316
+ "orderNum": 99999,
36317
+ "protected": false,
36318
+ "level": null,
36319
+ "code": "MR",
36320
+ "isActive": true
36321
+ },
36322
+ {
36323
+ "id": 14,
36324
+ "name": "BACKEND_ONLY.HU_ORGANIZATION.NAME.TP",
36325
+ "parentId": 5,
36326
+ "orderNum": 99999,
36327
+ "protected": false,
36328
+ "level": null,
36329
+ "code": "TP",
36330
+ "isActive": true
36331
+ },
36332
+ {
36333
+ "id": 15,
36334
+ "name": "Automotive Department Business ",
36335
+ "parentId": 5,
36336
+ "orderNum": 99999,
36337
+ "protected": false,
36338
+ "level": null,
36339
+ "code": "ADB",
36340
+ "isActive": true
36341
+ },
36342
+ {
36343
+ "id": 16,
36344
+ "name": "Environment & Infrastructure Project Business department\n",
36345
+ "parentId": 5,
36346
+ "orderNum": 99999,
36347
+ "protected": false,
36348
+ "level": null,
36349
+ "code": "EIPB",
36350
+ "isActive": true
36351
+ },
36352
+ {
36353
+ "id": 17,
36354
+ "name": "Power Infrastructure Business department",
36355
+ "parentId": 5,
36356
+ "orderNum": 99999,
36357
+ "protected": false,
36358
+ "level": null,
36359
+ "code": "PIB",
36360
+ "isActive": true
36361
+ },
36362
+ {
36363
+ "id": 18,
36364
+ "name": "General Director",
36365
+ "parentId": 3,
36366
+ "orderNum": 99999,
36367
+ "protected": false,
36368
+ "level": null,
36369
+ "code": "GD",
36370
+ "isActive": true
36371
+ },
36372
+ {
36373
+ "id": 30,
36374
+ "name": "Ho Chi Minh Office",
36375
+ "parentId": 1,
36376
+ "orderNum": 99999,
36377
+ "protected": false,
36378
+ "level": null,
36379
+ "code": "A",
36380
+ "isActive": true
36381
+ },
36382
+ {
36383
+ "id": 31,
36384
+ "name": "Corporate Group",
36385
+ "parentId": 30,
36386
+ "orderNum": 99999,
36387
+ "protected": false,
36388
+ "level": null,
36389
+ "code": "B",
36390
+ "isActive": true
36391
+ },
36392
+ {
36393
+ "id": 32,
36394
+ "name": "Metal, Chemical, Natural Resources & Living-related Business Group",
36395
+ "parentId": 30,
36396
+ "orderNum": 99999,
36397
+ "protected": false,
36398
+ "level": null,
36399
+ "code": "C",
36400
+ "isActive": true
36401
+ },
36402
+ {
36403
+ "id": 33,
36404
+ "name": "Project & Machinery Group",
36405
+ "parentId": 30,
36406
+ "orderNum": 99999,
36407
+ "protected": false,
36408
+ "level": null,
36409
+ "code": "D",
36410
+ "isActive": true
36411
+ },
36412
+ {
36413
+ "id": 43,
36414
+ "name": "Administration and Planning department ",
36415
+ "parentId": 31,
36416
+ "orderNum": 99999,
36417
+ "protected": false,
36418
+ "level": null,
36419
+ "code": "43",
36420
+ "isActive": true
36421
+ },
36422
+ {
36423
+ "id": 44,
36424
+ "name": "Treasury & Accounting Department",
36425
+ "parentId": 31,
36426
+ "orderNum": 99999,
36427
+ "protected": false,
36428
+ "level": null,
36429
+ "code": "E",
36430
+ "isActive": true
36431
+ },
36432
+ {
36433
+ "id": 45,
36434
+ "name": "Legal & Risk Management Department",
36435
+ "parentId": 31,
36436
+ "orderNum": 99999,
36437
+ "protected": false,
36438
+ "level": null,
36439
+ "code": "CZ",
36440
+ "isActive": true
36441
+ },
36442
+ {
36443
+ "id": 46,
36444
+ "name": "BACKEND_ONLY.HU_ORGANIZATION.NAME.TUBULARS PRODUCTS DEPT.",
36445
+ "parentId": 32,
36446
+ "orderNum": 99999,
36447
+ "protected": false,
36448
+ "level": null,
36449
+ "code": "F",
36450
+ "isActive": true
36451
+ },
36452
+ {
36453
+ "id": 47,
36454
+ "name": "Iron, Steel & Non-Ferrous Metal Dept",
36455
+ "parentId": 32,
36456
+ "orderNum": 99999,
36457
+ "protected": false,
36458
+ "level": null,
36459
+ "code": "G",
36460
+ "isActive": true
36461
+ },
36462
+ {
36463
+ "id": 48,
36464
+ "name": "Energy Dept.",
36465
+ "parentId": 32,
36466
+ "orderNum": 99999,
36467
+ "protected": false,
36468
+ "level": null,
36469
+ "code": "H",
36470
+ "isActive": true
36471
+ },
36472
+ {
36473
+ "id": 49,
36474
+ "name": "Chemicals and Plastics Dept",
36475
+ "parentId": 32,
36476
+ "orderNum": 99999,
36477
+ "protected": false,
36478
+ "level": null,
36479
+ "code": "I",
36480
+ "isActive": true
36481
+ },
36482
+ {
36483
+ "id": 50,
36484
+ "name": "Media, Food, Materials & Real Estate dept\n",
36485
+ "parentId": 32,
36486
+ "orderNum": 99999,
36487
+ "protected": false,
36488
+ "level": null,
36489
+ "code": "J",
36490
+ "isActive": true
36491
+ },
36492
+ {
36493
+ "id": 51,
36494
+ "name": "Transportation Project Dept",
36495
+ "parentId": 33,
36496
+ "orderNum": 99999,
36497
+ "protected": false,
36498
+ "level": null,
36499
+ "code": "K",
36500
+ "isActive": true
36501
+ },
36502
+ {
36503
+ "id": 52,
36504
+ "name": "Power Infrastructure Business Dept.",
36505
+ "parentId": 33,
36506
+ "orderNum": 99999,
36507
+ "protected": false,
36508
+ "level": null,
36509
+ "code": "L",
36510
+ "isActive": true
36511
+ },
36512
+ {
36513
+ "id": 2111,
36514
+ "name": "Corporate Planning and Coordination Department",
36515
+ "parentId": 31,
36516
+ "orderNum": 99999,
36517
+ "protected": false,
36518
+ "level": null,
36519
+ "code": "CPC",
36520
+ "isActive": true
36521
+ },
36522
+ {
36523
+ "id": 2131,
36524
+ "name": "Corporate Group test",
36525
+ "parentId": 3,
36526
+ "orderNum": 99999,
36527
+ "protected": false,
36528
+ "level": null,
36529
+ "code": "81",
36530
+ "isActive": true
36531
+ },
36532
+ {
36533
+ "id": 2132,
36534
+ "name": "phòng kiểm thử 34",
36535
+ "parentId": 1,
36536
+ "orderNum": 99999,
36537
+ "protected": false,
36538
+ "level": null,
36539
+ "code": "PKT34",
36540
+ "isActive": true
36541
+ },
36542
+ {
36543
+ "id": 22146,
36544
+ "name": "Hanoi Office",
36545
+ "parentId": 22145,
36546
+ "orderNum": 99999,
36547
+ "protected": false,
36548
+ "level": null,
36549
+ "code": "HNIZZ",
36550
+ "isActive": true
36551
+ },
36552
+ {
36553
+ "id": 22147,
36554
+ "name": "Business Development Department",
36555
+ "parentId": 22146,
36556
+ "orderNum": 99999,
36557
+ "protected": false,
36558
+ "level": null,
36559
+ "code": "BDD",
36560
+ "isActive": true
36561
+ },
36562
+ {
36563
+ "id": 22148,
36564
+ "name": "Corporate Group ",
36565
+ "parentId": 22146,
36566
+ "orderNum": 99999,
36567
+ "protected": false,
36568
+ "level": null,
36569
+ "code": "CU",
36570
+ "isActive": true
36571
+ },
36572
+ {
36573
+ "id": 22149,
36574
+ "name": "Human Resources Department",
36575
+ "parentId": 22148,
36576
+ "orderNum": 99999,
36577
+ "protected": false,
36578
+ "level": null,
36579
+ "code": "HRD",
36580
+ "isActive": true
36581
+ },
36582
+ {
36583
+ "id": 22150,
36584
+ "name": "Corporate Services Department",
36585
+ "parentId": 22148,
36586
+ "orderNum": 99999,
36587
+ "protected": false,
36588
+ "level": null,
36589
+ "code": "CSD",
36590
+ "isActive": true
36591
+ },
36592
+ {
36593
+ "id": 22151,
36594
+ "name": "Treasury & Accounting Department",
36595
+ "parentId": 22148,
36596
+ "orderNum": 99999,
36597
+ "protected": false,
36598
+ "level": null,
36599
+ "code": "T&AD",
36600
+ "isActive": true
36601
+ },
36602
+ {
36603
+ "id": 22152,
36604
+ "name": "Legal & Risk Department",
36605
+ "parentId": 22148,
36606
+ "orderNum": 99999,
36607
+ "protected": false,
36608
+ "level": null,
36609
+ "code": "L&RD",
36610
+ "isActive": true
36611
+ },
36612
+ {
36613
+ "id": 22153,
36614
+ "name": "Infrastructure, Automotive, Energy & Urban Business Group",
36615
+ "parentId": 22146,
36616
+ "orderNum": 99999,
36617
+ "protected": false,
36618
+ "level": null,
36619
+ "code": "IAE&UBG",
36620
+ "isActive": true
36621
+ },
36622
+ {
36623
+ "id": 22154,
36624
+ "name": "Automotive Business Department",
36625
+ "parentId": 22153,
36626
+ "orderNum": 99999,
36627
+ "protected": false,
36628
+ "level": null,
36629
+ "code": "ABD",
36630
+ "isActive": true
36631
+ },
36632
+ {
36633
+ "id": 22155,
36634
+ "name": "Energy Department",
36635
+ "parentId": 22153,
36636
+ "orderNum": 99999,
36637
+ "protected": false,
36638
+ "level": null,
36639
+ "code": "ED",
36640
+ "isActive": true
36641
+ },
36642
+ {
36643
+ "id": 22156,
36644
+ "name": "Energy Innovation Initiatives Department",
36645
+ "parentId": 22153,
36646
+ "orderNum": 99999,
36647
+ "protected": false,
36648
+ "level": null,
36649
+ "code": "EIID",
36650
+ "isActive": true
36651
+ },
36652
+ {
36653
+ "id": 22157,
36654
+ "name": "Power Infrastructure Business department",
36655
+ "parentId": 22153,
36656
+ "orderNum": 99999,
36657
+ "protected": false,
36658
+ "level": null,
36659
+ "code": "PIBD",
36660
+ "isActive": true
36661
+ },
36662
+ {
36663
+ "id": 22158,
36664
+ "name": "Social Infrastructure, Transportation & Urban Business Department",
36665
+ "parentId": 22153,
36666
+ "orderNum": 99999,
36667
+ "protected": false,
36668
+ "level": null,
36669
+ "code": "SIT&UBD",
36670
+ "isActive": true
36671
+ },
36672
+ {
36673
+ "id": 22159,
36674
+ "name": "Lifestyle & Chemicals Group",
36675
+ "parentId": 22146,
36676
+ "orderNum": 99999,
36677
+ "protected": false,
36678
+ "level": null,
36679
+ "code": "L&CG",
36680
+ "isActive": true
36681
+ },
36682
+ {
36683
+ "id": 22160,
36684
+ "name": "Lifestyle & Retail Business Department",
36685
+ "parentId": 22159,
36686
+ "orderNum": 99999,
36687
+ "protected": false,
36688
+ "level": null,
36689
+ "code": "L&RBD",
36690
+ "isActive": true
36691
+ },
36692
+ {
36693
+ "id": 22161,
36694
+ "name": "Chemicals & Plastics Department",
36695
+ "parentId": 22159,
36696
+ "orderNum": 99999,
36697
+ "protected": false,
36698
+ "level": null,
36699
+ "code": "C&PD",
36700
+ "isActive": true
36701
+ },
36702
+ {
36703
+ "id": 22162,
36704
+ "name": "Steel & Mineral Resources Group",
36705
+ "parentId": 22146,
36706
+ "orderNum": 99999,
36707
+ "protected": false,
36708
+ "level": null,
36709
+ "code": "S&MRG",
36710
+ "isActive": true
36711
+ },
36712
+ {
36713
+ "id": 22163,
36714
+ "name": "Hanoi Steel & Non-ferrous Department",
36715
+ "parentId": 22162,
36716
+ "orderNum": 99999,
36717
+ "protected": false,
36718
+ "level": null,
36719
+ "code": "HS&ND",
36720
+ "isActive": true
36721
+ },
36722
+ {
36723
+ "id": 22164,
36724
+ "name": "Ho Chi Minh City Office",
36725
+ "parentId": 22145,
36726
+ "orderNum": 99999,
36727
+ "protected": false,
36728
+ "level": null,
36729
+ "code": "HMCZZ",
36730
+ "isActive": true
36731
+ },
36732
+ {
36733
+ "id": 22165,
36734
+ "name": "Business Development Department",
36735
+ "parentId": 22164,
36736
+ "orderNum": 99999,
36737
+ "protected": false,
36738
+ "level": null,
36739
+ "code": "BD",
36740
+ "isActive": true
36741
+ },
36742
+ {
36743
+ "id": 22166,
36744
+ "name": "Infrastructure, Automotive, Energy & Urban Business Group",
36745
+ "parentId": 22164,
36746
+ "orderNum": 99999,
36747
+ "protected": false,
36748
+ "level": null,
36749
+ "code": "IAE&UB",
36750
+ "isActive": true
36751
+ },
36752
+ {
36753
+ "id": 22167,
36754
+ "name": "Lifestyle & Chemicals Group",
36755
+ "parentId": 22164,
36756
+ "orderNum": 99999,
36757
+ "protected": false,
36758
+ "level": null,
36759
+ "code": "L&C",
36760
+ "isActive": true
36761
+ },
36762
+ {
36763
+ "id": 22168,
36764
+ "name": "Steel & Mineral Resources Group",
36765
+ "parentId": 22164,
36766
+ "orderNum": 99999,
36767
+ "protected": false,
36768
+ "level": null,
36769
+ "code": "S&MR",
36770
+ "isActive": true
36771
+ },
36772
+ {
36773
+ "id": 22169,
36774
+ "name": "Automotive Business Department",
36775
+ "parentId": 22166,
36776
+ "orderNum": 99999,
36777
+ "protected": false,
36778
+ "level": null,
36779
+ "code": "AB",
36780
+ "isActive": true
36781
+ },
36782
+ {
36783
+ "id": 22170,
36784
+ "name": "Energy Department",
36785
+ "parentId": 22166,
36786
+ "orderNum": 99999,
36787
+ "protected": false,
36788
+ "level": null,
36789
+ "code": "EU",
36790
+ "isActive": true
36791
+ },
36792
+ {
36793
+ "id": 22171,
36794
+ "name": "Energy Innovation Initiatives Department",
36795
+ "parentId": 22166,
36796
+ "orderNum": 99999,
36797
+ "protected": false,
36798
+ "level": null,
36799
+ "code": "EII",
36800
+ "isActive": true
36801
+ },
36802
+ {
36803
+ "id": 22172,
36804
+ "name": "Social Infrastructure, Transportation & Urban Business Department",
36805
+ "parentId": 22166,
36806
+ "orderNum": 99999,
36807
+ "protected": false,
36808
+ "level": null,
36809
+ "code": "SIT&UB",
36810
+ "isActive": true
36811
+ },
36812
+ {
36813
+ "id": 22173,
36814
+ "name": "Chemicals & Plastics Department",
36815
+ "parentId": 22167,
36816
+ "orderNum": 99999,
36817
+ "protected": false,
36818
+ "level": null,
36819
+ "code": "C&P",
36820
+ "isActive": true
36821
+ },
36822
+ {
36823
+ "id": 22174,
36824
+ "name": "Digital & Food Related Department",
36825
+ "parentId": 22167,
36826
+ "orderNum": 99999,
36827
+ "protected": false,
36828
+ "level": null,
36829
+ "code": "D&FRD",
36830
+ "isActive": true
36831
+ },
36832
+ {
36833
+ "id": 22175,
36834
+ "name": "HCMC Steel & Non-ferrous",
36835
+ "parentId": 22168,
36836
+ "orderNum": 99999,
36837
+ "protected": false,
36838
+ "level": null,
36839
+ "code": "HS&N",
36840
+ "isActive": true
36841
+ },
36842
+ {
36843
+ "id": 22176,
36844
+ "name": "Tubular Products Department",
36845
+ "parentId": 22168,
36846
+ "orderNum": 99999,
36847
+ "protected": false,
36848
+ "level": null,
36849
+ "code": "TPD",
36850
+ "isActive": true
36851
+ },
36852
+ {
36853
+ "id": 22177,
36854
+ "name": "Energy Department",
36855
+ "parentId": 5,
36856
+ "orderNum": 99999,
36857
+ "protected": false,
36858
+ "level": null,
36859
+ "code": "EDB",
36860
+ "isActive": true
36861
+ },
36862
+ {
36863
+ "id": 22178,
36864
+ "name": "rtyrt",
36865
+ "parentId": 2134,
36866
+ "orderNum": 99999,
36867
+ "protected": false,
36868
+ "level": null,
36869
+ "code": "R",
36870
+ "isActive": true
36871
+ },
36872
+ {
36873
+ "id": 22179,
36874
+ "name": "vp test test",
36875
+ "parentId": 1,
36876
+ "orderNum": 99999,
36877
+ "protected": false,
36878
+ "level": null,
36879
+ "code": "VTT",
36880
+ "isActive": true
36881
+ },
36882
+ {
36883
+ "id": 22180,
36884
+ "name": "hưng yên ofice",
36885
+ "parentId": 22145,
36886
+ "orderNum": 99999,
36887
+ "protected": false,
36888
+ "level": null,
36889
+ "code": "HYO",
36890
+ "isActive": false
36891
+ },
36892
+ {
36893
+ "id": 22181,
36894
+ "name": "hy city",
36895
+ "parentId": 22179,
36896
+ "orderNum": 99999,
36897
+ "protected": false,
36898
+ "level": null,
36899
+ "code": "HC",
36900
+ "isActive": true
36901
+ },
36902
+ {
36903
+ "id": 22182,
36904
+ "name": "122",
36905
+ "parentId": 22147,
36906
+ "orderNum": 99999,
36907
+ "protected": false,
36908
+ "level": null,
36909
+ "code": "122",
36910
+ "isActive": true
36911
+ },
36912
+ {
36913
+ "id": 22183,
36914
+ "name": "247",
36915
+ "parentId": 22145,
36916
+ "orderNum": 99999,
36917
+ "protected": false,
36918
+ "level": null,
36919
+ "code": "247",
36920
+ "isActive": false
36921
+ },
36922
+ {
36923
+ "id": 22184,
36924
+ "name": "247",
36925
+ "parentId": 22183,
36926
+ "orderNum": 99999,
36927
+ "protected": false,
36928
+ "level": null,
36929
+ "code": "66",
36930
+ "isActive": false
36931
+ },
36932
+ {
36933
+ "id": 22185,
36934
+ "name": "zalo",
36935
+ "parentId": 22183,
36936
+ "orderNum": 99999,
36937
+ "protected": false,
36938
+ "level": null,
36939
+ "code": "Z",
36940
+ "isActive": false
36941
+ },
36942
+ {
36943
+ "id": 22186,
36944
+ "name": "vp testet",
36945
+ "parentId": 12139,
36946
+ "orderNum": 99999,
36947
+ "protected": false,
36948
+ "level": null,
36949
+ "code": "VT",
36950
+ "isActive": true
36951
+ },
36952
+ {
36953
+ "id": 22187,
36954
+ "name": "văn phòng Đà Nẵng",
36955
+ "parentId": 22164,
36956
+ "orderNum": 99999,
36957
+ "protected": false,
36958
+ "level": null,
36959
+ "code": "Đà Nẵng office",
36960
+ "isActive": false
36961
+ },
36962
+ {
36963
+ "id": 22188,
36964
+ "name": "VĂn Phòng miền nam",
36965
+ "parentId": 22145,
36966
+ "orderNum": 99999,
36967
+ "protected": false,
36968
+ "level": null,
36969
+ "code": "Miền Nam office",
36970
+ "isActive": false
36971
+ },
36972
+ {
36973
+ "id": 2134,
36974
+ "name": "Văn phòng Hà Nội",
36975
+ "parentId": 1,
36976
+ "orderNum": 99999,
36977
+ "protected": false,
36978
+ "level": null,
36979
+ "code": "VPHN",
36980
+ "isActive": true
36981
+ },
36982
+ {
36983
+ "id": 12134,
36984
+ "name": "Văn phòng Hà nội 2 ",
36985
+ "parentId": 2134,
36986
+ "orderNum": 99999,
36987
+ "protected": false,
36988
+ "level": null,
36989
+ "code": "VPHN2",
36990
+ "isActive": true
36991
+ },
36992
+ {
36993
+ "id": 12135,
36994
+ "name": "BACKEND_ONLY.HU_ORGANIZATION.NAME.TEST",
36995
+ "parentId": 1,
36996
+ "orderNum": 99999,
36997
+ "protected": false,
36998
+ "level": null,
36999
+ "code": "T",
37000
+ "isActive": false
37001
+ },
37002
+ {
37003
+ "id": 12136,
37004
+ "name": "Phòng Development",
37005
+ "parentId": 1,
37006
+ "orderNum": 99999,
37007
+ "protected": false,
37008
+ "level": null,
37009
+ "code": "PD",
37010
+ "isActive": false
37011
+ },
37012
+ {
37013
+ "id": 12137,
37014
+ "name": "Nhóm thực tập sinh BA",
37015
+ "parentId": 2132,
37016
+ "orderNum": 99999,
37017
+ "protected": false,
37018
+ "level": null,
37019
+ "code": "NTTSB",
37020
+ "isActive": false
37021
+ },
37022
+ {
37023
+ "id": 12138,
37024
+ "name": "Cá nhân ",
37025
+ "parentId": 12137,
37026
+ "orderNum": 99999,
37027
+ "protected": false,
37028
+ "level": null,
37029
+ "code": "CN",
37030
+ "isActive": false
37031
+ },
37032
+ {
37033
+ "id": 12139,
37034
+ "name": "Văn phòng Test",
37035
+ "parentId": 1,
37036
+ "orderNum": 99999,
37037
+ "protected": false,
37038
+ "level": null,
37039
+ "code": "VPT",
37040
+ "isActive": true
37041
+ },
37042
+ {
37043
+ "id": 12140,
37044
+ "name": "Phòng BA Test 1",
37045
+ "parentId": 12139,
37046
+ "orderNum": 99999,
37047
+ "protected": false,
37048
+ "level": null,
37049
+ "code": "PBT1",
37050
+ "isActive": false
37051
+ },
37052
+ {
37053
+ "id": 12141,
37054
+ "name": "Phòng BA Test 2",
37055
+ "parentId": 12139,
37056
+ "orderNum": 99999,
37057
+ "protected": false,
37058
+ "level": null,
37059
+ "code": "PBT2",
37060
+ "isActive": false
37061
+ },
37062
+ {
37063
+ "id": 12142,
37064
+ "name": "Phòng BA Test 3",
37065
+ "parentId": 12139,
37066
+ "orderNum": 99999,
37067
+ "protected": false,
37068
+ "level": null,
37069
+ "code": "PBT3",
37070
+ "isActive": false
37071
+ },
37072
+ {
37073
+ "id": 12143,
37074
+ "name": "BACKEND_ONLY.HU_ORGANIZATION.NAME.TEST 1",
37075
+ "parentId": 12139,
37076
+ "orderNum": 99999,
37077
+ "protected": false,
37078
+ "level": null,
37079
+ "code": "T1",
37080
+ "isActive": false
37081
+ },
37082
+ {
37083
+ "id": 12146,
37084
+ "name": "Văn phòng Test 2",
37085
+ "parentId": 1,
37086
+ "orderNum": 99999,
37087
+ "protected": false,
37088
+ "level": null,
37089
+ "code": "VPT2",
37090
+ "isActive": false
37091
+ },
37092
+ {
37093
+ "id": 12147,
37094
+ "name": "TEST KK",
37095
+ "parentId": 1,
37096
+ "orderNum": 99999,
37097
+ "protected": false,
37098
+ "level": null,
37099
+ "code": "TK",
37100
+ "isActive": false
37101
+ },
37102
+ {
37103
+ "id": 12149,
37104
+ "name": "Tester 3",
37105
+ "parentId": 12146,
37106
+ "orderNum": 99999,
37107
+ "protected": false,
37108
+ "level": null,
37109
+ "code": "T3",
37110
+ "isActive": false
37111
+ },
37112
+ {
37113
+ "id": 12150,
37114
+ "name": "Tester 4",
37115
+ "parentId": 12146,
37116
+ "orderNum": 99999,
37117
+ "protected": false,
37118
+ "level": null,
37119
+ "code": "T4",
37120
+ "isActive": false
37121
+ },
37122
+ {
37123
+ "id": 12151,
37124
+ "name": "Tester 5",
37125
+ "parentId": 12146,
37126
+ "orderNum": 99999,
37127
+ "protected": false,
37128
+ "level": null,
37129
+ "code": "T5",
37130
+ "isActive": false
37131
+ },
37132
+ {
37133
+ "id": 12152,
37134
+ "name": "vp test 1",
37135
+ "parentId": 1,
37136
+ "orderNum": 99999,
37137
+ "protected": false,
37138
+ "level": null,
37139
+ "code": "VT1",
37140
+ "isActive": false
37141
+ },
37142
+ {
37143
+ "id": 12155,
37144
+ "name": "Group A",
37145
+ "parentId": 12139,
37146
+ "orderNum": 99999,
37147
+ "protected": false,
37148
+ "level": null,
37149
+ "code": "GA",
37150
+ "isActive": false
37151
+ },
37152
+ {
37153
+ "id": 12156,
37154
+ "name": "vp thuongtest 3",
37155
+ "parentId": 2,
37156
+ "orderNum": 99999,
37157
+ "protected": false,
37158
+ "level": null,
37159
+ "code": "VT3",
37160
+ "isActive": false
37161
+ },
37162
+ {
37163
+ "id": 12158,
37164
+ "name": "vp thuongtest 2",
37165
+ "parentId": 1,
37166
+ "orderNum": 99999,
37167
+ "protected": false,
37168
+ "level": null,
37169
+ "code": "VT2",
37170
+ "isActive": false
37171
+ },
37172
+ {
37173
+ "id": 12159,
37174
+ "name": "vp thuong test 3",
37175
+ "parentId": 1,
37176
+ "orderNum": 99999,
37177
+ "protected": false,
37178
+ "level": null,
37179
+ "code": "VTT3",
37180
+ "isActive": true
37181
+ },
37182
+ {
37183
+ "id": 12160,
37184
+ "name": "Phong ban test data",
37185
+ "parentId": 1,
37186
+ "orderNum": 99999,
37187
+ "protected": false,
37188
+ "level": null,
37189
+ "code": "PBTD",
37190
+ "isActive": false
37191
+ },
37192
+ {
37193
+ "id": 22144,
37194
+ "name": "Testing K 1",
37195
+ "parentId": 12159,
37196
+ "orderNum": 99999,
37197
+ "protected": false,
37198
+ "level": null,
37199
+ "code": "TK1",
37200
+ "isActive": true
37201
+ },
37202
+ {
37203
+ "id": 22145,
37204
+ "name": "Sumitomo Corporation Vietnam LLC",
37205
+ "parentId": null,
37206
+ "orderNum": 2,
37207
+ "protected": false,
37208
+ "level": null,
37209
+ "code": "SCVL",
37210
+ "isActive": true
37211
+ },
37212
+ {
37213
+ "id": 2133,
37214
+ "name": "Phòng ba 1",
37215
+ "parentId": 2132,
37216
+ "orderNum": 2,
37217
+ "protected": false,
37218
+ "level": null,
37219
+ "code": "PB1",
37220
+ "isActive": true
37221
+ },
37222
+ {
37223
+ "id": 1,
37224
+ "name": "SCVN",
37225
+ "parentId": null,
37226
+ "orderNum": 1,
37227
+ "protected": false,
37228
+ "level": null,
37229
+ "code": "S",
37230
+ "isActive": true
37231
+ }
37232
+ ];
37233
+
37234
+ class ComPartyService {
37235
+ constructor(recursiveService, alertService) {
37236
+ this.recursiveService = recursiveService;
37237
+ this.alertService = alertService;
37238
+ this.instances = [];
37239
+ this.loading = true;
37240
+ this.comTreeData$ = new BehaviorSubject([]);
37241
+ this.comTreeDataWithPeople$ = new BehaviorSubject([]);
37242
+ this.linerData$ = new BehaviorSubject([]);
37243
+ this.buildTreeFlag$ = new BehaviorSubject(false);
37244
+ this.status$ = new BehaviorSubject({
37245
+ selectedKey: undefined,
37246
+ activeKeys: [],
37247
+ checkedKeys: [],
37248
+ expandedKeys: [],
37249
+ checkInheritance: true
37250
+ });
37251
+ this.linerData$.subscribe(xs => {
37252
+ const idCountMap = new Map();
37253
+ xs.forEach(item => {
37254
+ const id = item.id;
37255
+ idCountMap.set(id, (idCountMap.get(id) ?? 0) + 1);
37256
+ });
37257
+ const duplicates = Array.from(idCountMap.entries())
37258
+ .filter(([_, count]) => count > 1)
37259
+ .map(([id]) => id);
37260
+ if (!!duplicates.length) {
37261
+ if (isDevMode()) {
37262
+ alertService.error('🔁 Duplicate IDs: ' + duplicates.reduce((a, c) => a + ";" + c, ''), alertOptions);
37263
+ }
37264
+ }
37265
+ });
37266
+ }
37267
+ buildComTreeData(status = {
37268
+ selectedKey: undefined,
37269
+ activeKeys: [],
37270
+ checkedKeys: [],
37271
+ expandedKeys: [],
37272
+ checkInheritance: true
37273
+ }) {
37274
+ this.loading = true;
37275
+ const cloneCopy = JSON.parse(JSON.stringify(this.linerData$.value));
37276
+ if (typeof Worker !== 'undefined') {
37277
+ // Create a new
37278
+ console.log("🟢🟢 Worker works");
37279
+ const worker = new Worker(liner_to_nested_array_script);
37280
+ worker.addEventListener('message', ({ data }) => {
37281
+ const newData = data.list;
37282
+ this.comTreeData$.next(newData);
37283
+ this.loading = false;
37284
+ });
37285
+ worker.postMessage({
37286
+ list: cloneCopy,
37287
+ keyField: 'id',
37288
+ titleField: 'name',
37289
+ parentField: 'parentId',
37290
+ activeField: 'active',
37291
+ checkedField: 'checked',
37292
+ expandedField: 'expand',
37293
+ status
37294
+ });
37295
+ }
37296
+ else {
37297
+ // Web workers are not supported in this environment.
37298
+ // You should add a fallback so that your program still executes correctly.
37299
+ this.recursiveService
37300
+ .linerArrayToNestedArray(cloneCopy, 'id', 'name', 'parentId', 'active', 'checked', 'expand', status)
37301
+ .subscribe((obj) => {
37302
+ const newData = obj.list;
37303
+ this.comTreeData$.next(newData);
37304
+ this.loading = false;
37305
+ });
37306
+ }
37307
+ }
37308
+ getComLinearData(userId) {
37309
+ return of({
37310
+ ok: true,
37311
+ status: 200,
37312
+ body: {
37313
+ statusCode: 200,
37314
+ innerBody: COM_MOKEUP_DATA
37315
+ }
37316
+ });
37317
+ }
37318
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ComPartyService, deps: [{ token: RecursiveService }, { token: AlertService }], target: i0.ɵɵFactoryTarget.Injectable }); }
37319
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ComPartyService, providedIn: 'root' }); }
37320
+ }
37321
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ComPartyService, decorators: [{
37322
+ type: Injectable,
37323
+ args: [{
37324
+ providedIn: 'root'
37325
+ }]
37326
+ }], ctorParameters: () => [{ type: RecursiveService }, { type: AlertService }] });
37327
+
37328
+ class CoreComTreeComponent extends CoreFormControlBaseComponent {
37329
+ writeValue(obj) {
37330
+ this.value = obj;
37331
+ switch (this.accessorMode) {
37332
+ case EnumCoreOrgTreeaAccessorMode.CHECKED:
37333
+ if (!!obj) {
37334
+ const checkedKeys = [];
37335
+ this.checkedIds = obj; // <=== 24/10/2023
37336
+ obj.map(x => checkedKeys.push(x.toString()));
37337
+ this.loading = true;
37338
+ this.recursiveService.writeValueChecked(checkedKeys, this.data, this.disabledLoopExpand).subscribe(_ => {
37339
+ this.loading = false;
37340
+ if (!!this.data && !!this.data?.length)
37341
+ this.data[0].tree$Expanded = true;
37342
+ });
37343
+ }
37344
+ break;
37345
+ case EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE:
37346
+ case EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE:
37347
+ if (!!obj) {
37348
+ const activatedKeys = [];
37349
+ obj.map(x => activatedKeys.push(x.toString()));
37350
+ this.loading = true;
37351
+ this.recursiveService.writeValueActivated(activatedKeys, this.data, this.disabledLoopExpand).subscribe(_ => {
37352
+ this.loading = false;
37353
+ if (!!this.data && !!this.data?.length)
37354
+ this.data[0].tree$Expanded = true;
37355
+ });
37356
+ }
37357
+ break;
37358
+ default:
37359
+ break;
37360
+ }
37361
+ if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED) {
37362
+ }
37363
+ else /* EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE or EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE */ {
37364
+ }
37365
+ }
37366
+ setDisabledState(disabled) {
37367
+ this.disabled = disabled;
37368
+ }
37369
+ constructor(
37370
+ //public override injector: Injector,
37371
+ authService, recursiveService, mls, layoutService, coreOrgTreeService,
37372
+ // private coreOrgTreeState: CoreOrgTreeState,
37373
+ alertService, comPartyService) {
37374
+ super( /*injector*/);
37375
+ this.authService = authService;
37376
+ this.recursiveService = recursiveService;
37377
+ this.mls = mls;
37378
+ this.layoutService = layoutService;
37379
+ this.coreOrgTreeService = coreOrgTreeService;
37380
+ this.alertService = alertService;
37381
+ this.comPartyService = comPartyService;
37382
+ this.lineColor = 'transparent';
37383
+ this.accessorMode = EnumCoreOrgTreeaAccessorMode.CHECKED;
37384
+ //TO BE NEW
37385
+ this.searchMode = EnumCoreOrgTreeaSearchMode.REDUCE;
37386
+ this.excludedIds$ = new BehaviorSubject([]); // 2024-05-10: to be implemented
37387
+ this.stateIsolated$ = new BehaviorSubject(false);
37388
+ this.itemDoubleClick = new EventEmitter();
37389
+ this.itemClick = new EventEmitter();
37390
+ this.showSearch = false;
37391
+ this.hiddenToolClickStream$ = new BehaviorSubject('');
37392
+ this.value = [];
37393
+ this.appConfigService = inject(AppConfigService);
37394
+ this.activeIds = [];
37395
+ this.checkedIds = [];
37396
+ this.subscriptions = [];
37397
+ this.search$ = new Subject();
37398
+ this.searchPlaceholder = "Tìm kiếm...";
37399
+ this.checkInheritance = true; // default value is true
37400
+ this.showDissolved = false; // default value is false
37401
+ this.initializing = true;
37402
+ // this.reduced$ = this.coreOrgTreeState.coreOrgTreeReduced$;
37403
+ this.initializing = false;
37404
+ }
37405
+ ngOnChanges(changes) {
37406
+ if (changes['height']) {
37407
+ this.resizeHeight();
37408
+ }
37409
+ }
37410
+ ngOnInit() {
37411
+ super.register();
37412
+ //this.layoutService.leftbarOpen$.next(false);
37413
+ this.instanceNumber = new Date().getTime();
37414
+ const newInstance = {
37415
+ instanceNumber: this.instanceNumber,
37416
+ selectedKey$: new BehaviorSubject(undefined),
37417
+ activeKeys$: new BehaviorSubject([]),
37418
+ checkedKeys$: new BehaviorSubject([]),
37419
+ expandedKeys$: new BehaviorSubject([]),
37420
+ checkInheritance$: new BehaviorSubject(true)
37421
+ };
37422
+ this.comPartyService.instances.push(newInstance);
37423
+ // Check xem chiều cao height có được truyền vào hay không
37424
+ if (this.height === undefined) {
37425
+ if (isDevMode()) {
37426
+ //this.alertService.warn("CoreOrgTree không nhận được chiều cao (height) truyền vào từ lớp ngoài. Chiều cao mặc định sẽ được tính toán dựa vào bố cục chính.", alertOptions);
37427
+ }
37428
+ this.subscriptions.push(this.layoutService.contentContainerHeight$.subscribe(x => {
37429
+ // basicSpacing là paddingBottom của lớp content-container
37430
+ this.height = x - this.layoutService.corePageHeaderHeight - this.layoutService.basicSpacing;
37431
+ }));
37432
+ }
37433
+ this.subscriptions.push(this.comPartyService.linerData$.subscribe((x) => this.linearComArray = x));
37434
+ this.subscriptions.push(this.comPartyService.buildTreeFlag$.pipe(skip(1)).subscribe(_ => {
37435
+ this.buildComTreeData();
37436
+ }));
37437
+ this.subscriptions.push(this.stateIsolated$.subscribe(x => {
37438
+ if (x) {
37439
+ if (!!this.statusSubscription) {
37440
+ this.statusSubscription.unsubscribe();
37441
+ }
37442
+ }
37443
+ else {
37444
+ if (!this.statusSubscription) {
37445
+ this.statusSubscription = this.comPartyService.status$.subscribe((x) => {
37446
+ console.log("this.organizationService.status$ changes", x);
37447
+ const newActiveIds = [];
37448
+ x.activeKeys.map((k) => {
37449
+ newActiveIds.push(Number(k));
37450
+ });
37451
+ this.activeIds = newActiveIds;
37452
+ if (this.accessorMode !== EnumCoreOrgTreeaAccessorMode.CHECKED) {
37453
+ this.value = this.activeIds;
37454
+ this.onChange(this.activeIds);
37455
+ }
37456
+ this.selectedKey = x.selectedKey;
37457
+ });
37458
+ }
37459
+ }
37460
+ }));
37461
+ this.subscriptions.push(this.coreOrgTreeService.showSearch$.subscribe(x => this.showSearch = x));
37462
+ this.subscriptions.push(this.hiddenToolClickStream$.pipe(buffer(this.hiddenToolClickStream$.pipe(debounceTime(250))), map$1(clicks => clicks.length), filter(clicksLength => clicksLength >= 5))
37463
+ .subscribe(_ => {
37464
+ this.coreOrgTreeService.showSearch$.next(!this.coreOrgTreeService.showSearch$.value);
37465
+ }));
37466
+ this.subscriptions.push(this.search$
37467
+ .pipe(filter((x) => x !== null), debounceTime(500), distinctUntilChanged(), switchMap((text) => {
37468
+ console.log('switchMap works');
37469
+ this.loading = true;
37470
+ // AUG 2024 NEW : MUST BE TESTED
37471
+ if (this.searchMode === EnumCoreOrgTreeaSearchMode.HIGHLIGHT) {
37472
+ return this.recursiveService.findItem(text, this.data);
37473
+ }
37474
+ else {
37475
+ return of(this.recursiveService.reducingFilter(this.scrollContainer, text));
37476
+ }
37477
+ }))
37478
+ .subscribe((x) => {
37479
+ this.loading = false;
37480
+ // if (this.searchMode === EnumCoreOrgTreeaSearchMode.REDUCE) {
37481
+ // this.dataFiltered = x as IOrgTreeItem[];
37482
+ // }
37483
+ }));
37484
+ this.subscriptions.push(this.comPartyService.status$
37485
+ .pipe(filter((value) => !!!this.initializing && !!value))
37486
+ .subscribe((x) => {
37487
+ if (!!localStorage) {
37488
+ localStorage.setItem('coreOrgTreeStatus', JSON.stringify(x));
37489
+ }
37490
+ }));
37491
+ this.subscriptions.push(this.mls.lang$.subscribe((x) => (this.lang = x)));
37492
+ }
37493
+ buildComTree(comLinerData) {
37494
+ if (!this.appConfigService.FEDERATION_COM_PARTY_ENABLED)
37495
+ return;
37496
+ this.comPartyService.linerData$.next(comLinerData);
37497
+ const cloneCopy = JSON.parse(JSON.stringify(comLinerData));
37498
+ console.group("comLinerData...", comLinerData);
37499
+ if (!!comLinerData) {
37500
+ if (typeof Worker !== 'undefined') {
37501
+ console.log('🟢 Worker works');
37502
+ // Create a new
37503
+ const worker = new Worker(liner_to_nested_array_script);
37504
+ worker.addEventListener("message", ({ data }) => {
37505
+ console.log("ComTreeData calculation finished!", new Date().getTime());
37506
+ this.comPartyService.loading = false;
37507
+ this.comPartyService.comTreeData$.next(data.list);
37508
+ this.comPartyService.linerData$.next(data.rawList);
37509
+ });
37510
+ console.log("ComTreeData is being calculated by Worker...");
37511
+ console.log("this.comPartyService.status$.value", this.comPartyService.status$.value);
37512
+ worker.postMessage({
37513
+ list: cloneCopy,
37514
+ keyField: 'id',
37515
+ titleField: 'name',
37516
+ parentField: 'parentId',
37517
+ activeField: 'active',
37518
+ checkedField: 'checked',
37519
+ expandedField: 'expanded',
37520
+ status: this.comPartyService.status$.value, // <=== this had been already retrieved on app-initialization
37521
+ orderBy: 'orderNum'
37522
+ });
37523
+ }
37524
+ else {
37525
+ // Web workers are not supported in this environment.
37526
+ // You should add a fallback so that your program still executes correctly.
37527
+ console.log("this.comPartyService.status$.value", this.comPartyService.status$.value);
37528
+ this.subscriptions.push(this.recursiveService.linerArrayToNestedArray(cloneCopy, 'id', 'name', 'parentId', 'active', 'checked', 'expand', this.comPartyService.status$.value // <=== this had been already retrieved on app-initialization
37529
+ )
37530
+ .subscribe(data => {
37531
+ console.log("data", data);
37532
+ this.comPartyService.comTreeData$.next(data.list);
37533
+ this.comPartyService.linerData$.next(data.rawList);
37534
+ }));
37535
+ }
37536
+ }
37537
+ }
37538
+ resizeHeight() {
37539
+ // height is not given and the tree resize as standard
37540
+ if (!!!this.height) {
37541
+ const sizeHeaderHeight = Number(getComputedStyle(document.documentElement)
37542
+ .getPropertyValue('--size-header-height')
37543
+ .replace('px', ''));
37544
+ const sizeCorePageHeaderHeight = Number(getComputedStyle(document.documentElement)
37545
+ .getPropertyValue('--size-core-page-header-height')
37546
+ .replace('px', ''));
37547
+ const containerHeight = window.innerHeight - sizeHeaderHeight - sizeCorePageHeaderHeight;
37548
+ const pageHeaderHeight = Number(getComputedStyle(document.documentElement)
37549
+ .getPropertyValue('--size-core-page-header-height')
37550
+ .replace('px', ''));
37551
+ const paginationHeight = Number(getComputedStyle(document.documentElement)
37552
+ .getPropertyValue('--size-core-pagination-height')
37553
+ .replace('px', ''));
37554
+ const sizeMarginCorePaginationFull = Number(getComputedStyle(document.documentElement)
37555
+ .getPropertyValue('--size-margin-core-pagination')
37556
+ .replace('px', ''));
37557
+ const height = containerHeight - pageHeaderHeight - paginationHeight + sizeMarginCorePaginationFull;
37558
+ console.log(height);
37559
+ this.container?.nativeElement.style.setProperty('--height', height + 'px');
37560
+ }
37561
+ else {
37562
+ this.container?.nativeElement.style.setProperty('--height', this.height + 'px');
37563
+ }
37564
+ }
37565
+ ngAfterViewInit() {
37566
+ setTimeout(() => {
37567
+ if (!!this.authService.data$.value?.id && (!this.comPartyService.linerData$?.value || (!!this.comPartyService.linerData$?.value && !this.comPartyService.linerData$?.value.length))) {
37568
+ this.comPartyService.getComLinearData(this.authService.data$.value.id).pipe(tap$1(_ => this.loading = true), finalize$1(() => this.loading = false)).subscribe(x => {
37569
+ if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
37570
+ this.comPartyService.linerData$.next(x.body.innerBody.map(i => ({
37571
+ ...i,
37572
+ active: i.isActive
37573
+ })));
37574
+ this.comPartyService.buildTreeFlag$.next(!this.comPartyService.buildTreeFlag$.value);
37575
+ }
37576
+ });
37577
+ }
37578
+ this.subscriptions.push(this.comPartyService.comTreeData$.subscribe((x) => {
37579
+ this.data = x;
37580
+ //this.dataFiltered = JSON.parse(JSON.stringify(x));
37581
+ console.log("new Data coming", this.data, new Date().getTime());
37582
+ if (!!this.data) {
37583
+ if (!!this.data.length)
37584
+ this.data[0].tree$Expanded = true;
37585
+ }
37586
+ }));
37587
+ this.subscriptions.push(this.coreOrgTreeService.arrowFontSize$.subscribe(x => {
37588
+ this.container?.nativeElement.style.setProperty('--arrow-font-size', x + 'px');
37589
+ }));
37590
+ this.subscriptions.push(this.coreOrgTreeService.titleWrapperMaxWidth$.pipe(filter(x => !!x)).subscribe(x => {
37591
+ this.container?.nativeElement.style.setProperty('--title-wrapper-max-width', x + 'px');
37592
+ }));
37593
+ this.subscriptions.push(this.comPartyService.status$.subscribe(x => {
37594
+ if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE && !!x.activeKeys) {
37595
+ this.onChange(x.activeKeys.map(i => Number(i)));
37596
+ }
37597
+ else if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE) {
37598
+ // tạm thời bỏ qua
37599
+ }
37600
+ else if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED && !!x.checkedKeys) {
37601
+ this.onChange(x.checkedKeys.map(i => Number(i)));
37602
+ }
37603
+ }));
37604
+ });
37605
+ }
37606
+ // onItemClickLocal(e: IComTreeItem): void {
37607
+ // this.linnerOrgArray.map((x) => (x.active = false));
37608
+ // setTimeout(() => this.buildTreeData());
37609
+ // }
37610
+ onToggleItem(e) {
37611
+ const cloneCopy = JSON.parse(JSON.stringify(this.linearComArray));
37612
+ const filter = cloneCopy.filter((x) => x.id === e.id);
37613
+ if (filter.length === 1) {
37614
+ filter[0].expand = !!!e.expand;
37615
+ }
37616
+ this.linearComArray = cloneCopy;
37617
+ setTimeout(() => this.buildComTreeData());
37618
+ }
37619
+ // buildTreeData(): void {
37620
+ // this.loading = true;
37621
+ // const cloneCopy = JSON.parse(JSON.stringify(this.linnerOrgArray));
37622
+ // if (typeof Worker !== 'undefined') {
37623
+ // // Create a new
37624
+ // console.log("🟢🟢 Worker works");
37625
+ // this.worker = new Worker(liner_to_nested_array_script);
37626
+ // this.worker.addEventListener('message', ({ data }) => {
37627
+ // this.data = data.list;
37628
+ // //this.dataFiltered = JSON.parse(JSON.stringify(data.list));
37629
+ // if (!!this.data && !!this.data?.length) this.data[0].tree$Expanded = true;
37630
+ // this.loading = false;
37631
+ // });
37632
+ // this.worker.postMessage({
37633
+ // list: cloneCopy,
37634
+ // keyField: 'id',
37635
+ // titleField: 'name',
37636
+ // parentField: 'parentId',
37637
+ // activeField: 'active',
37638
+ // //inheritantActiveField: 'inheritantActive',
37639
+ // checkedField: 'checked',
37640
+ // expandedField: 'expand',
37641
+ // });
37642
+ // } else {
37643
+ // // Web workers are not supported in this environment.
37644
+ // // You should add a fallback so that your program still executes correctly.
37645
+ // const status = this.organizationService.status$.value;
37646
+ // this.subscriptions.push(
37647
+ // this.recursiveService
37648
+ // .linerArrayToNestedArray(
37649
+ // cloneCopy,
37650
+ // 'id',
37651
+ // 'name',
37652
+ // 'parentId',
37653
+ // 'active',
37654
+ // 'checked',
37655
+ // 'expand',
37656
+ // //status
37657
+ // )
37658
+ // .subscribe((obj) => {
37659
+ // this.data = obj.list;
37660
+ // //this.dataFiltered = JSON.parse(JSON.stringify(obj.list));
37661
+ // if (!!this.data && !!this.data?.length) this.data[0].tree$Expanded = true;
37662
+ // this.loading = false;
37663
+ // })
37664
+ // );
37665
+ // }
37666
+ // }
37667
+ buildComTreeData() {
37668
+ this.loading = true;
37669
+ const cloneCopy = JSON.parse(JSON.stringify(this.linearComArray));
37670
+ // ✅ ADD THIS FILTER
37671
+ const filteredList = !this.showDissolved
37672
+ ? cloneCopy.filter(x => x.active === true)
37673
+ : cloneCopy;
37674
+ if (typeof Worker !== 'undefined') {
37675
+ this.worker = new Worker(liner_to_nested_array_script);
37676
+ this.worker.addEventListener('message', ({ data }) => {
37677
+ this.data = data.list;
37678
+ if (!!this.data?.length)
37679
+ this.data[0].tree$Expanded = true;
37680
+ this.loading = false;
37681
+ });
37682
+ // ✅ USE filteredList INSTEAD OF cloneCopy
37683
+ this.worker.postMessage({
37684
+ list: filteredList,
37685
+ keyField: 'id',
37686
+ titleField: 'name',
37687
+ parentField: 'parentId',
37688
+ activeField: 'active',
37689
+ checkedField: 'checked',
37690
+ expandedField: 'expand',
37691
+ });
37692
+ }
37693
+ else {
37694
+ this.subscriptions.push(this.recursiveService
37695
+ .linerArrayToNestedArray(filteredList, // ✅ use filteredList
37696
+ 'id', 'name', 'parentId', 'active', 'checked', 'expand')
37697
+ .subscribe((obj) => {
37698
+ this.data = obj.list;
37699
+ if (!!this.data?.length)
37700
+ this.data[0].tree$Expanded = true;
37701
+ this.loading = false;
37702
+ }));
37703
+ }
37704
+ }
37705
+ onExpandTogglerClick(e, event) {
37706
+ event.stopPropagation();
37707
+ const newValue = !e.tree$Expanded;
37708
+ e.tree$Expanded = newValue;
37709
+ // updating status with newValue
37710
+ const currentExpandedIds = this.comPartyService.status$.value?.expandedKeys;
37711
+ let newExpandedIds = currentExpandedIds?.filter((_) => !!!currentExpandedIds.includes(e.id.toString()));
37712
+ if (newValue) {
37713
+ newExpandedIds?.push(e.id.toString());
37714
+ }
37715
+ newExpandedIds?.sort();
37716
+ const newExpandedKeys = [];
37717
+ newExpandedIds.map((x) => newExpandedKeys.push(x.toString()));
37718
+ this.comPartyService.status$.next({
37719
+ ...this.comPartyService.status$.value,
37720
+ expandedKeys: newExpandedKeys,
37721
+ });
37722
+ }
37723
+ onItemCheck(e, newValue) {
37724
+ this.itemClick?.emit(e);
37725
+ if (this.accessorMode !== EnumCoreOrgTreeaAccessorMode.CHECKED)
37726
+ return;
37727
+ // We have this var to hold nodes that are being changed
37728
+ let toggledIds;
37729
+ // We should calculate a new state into this var:
37730
+ const newCheckedIds = JSON.parse(JSON.stringify(this.checkedIds));
37731
+ // We will call this function after toggledIds changed
37732
+ const changeValue = () => {
37733
+ // If newValue === true, we will disctintly push changed ids to the state
37734
+ // Otherwise we will remove them from the state
37735
+ if (!!newValue) {
37736
+ toggledIds.map(x => {
37737
+ if (!!!newCheckedIds.includes(x)) {
37738
+ newCheckedIds.push(x);
37739
+ }
37740
+ });
37741
+ // Then asign the state to the newCheckedIds
37742
+ this.checkedIds = newCheckedIds;
37743
+ }
37744
+ else {
37745
+ const filter = newCheckedIds.filter(x => !!!toggledIds.includes(x));
37746
+ // Then asign the state to the filter
37747
+ this.checkedIds = filter;
37748
+ }
37749
+ // After the cases of if/else, make the control change with onChange
37750
+ this.value = this.checkedIds;
37751
+ this.onChange(this.checkedIds);
37752
+ this.markAsTouched();
37753
+ };
37754
+ /* start: THIS CODE SCOPE calculates toggledIds */
37755
+ if (this.checkInheritance) {
37756
+ // If true, all the nested items will be checked/unchecked
37757
+ this.recursiveService
37758
+ .nestedToggleCheck(e, newValue, this.showDissolved)
37759
+ .then((x) => {
37760
+ let currentCheckedKeys = this.comPartyService.status$.value.checkedKeys || [];
37761
+ if (!!newValue) {
37762
+ x.map(item => {
37763
+ if (currentCheckedKeys.filter(i => i === item.toString()).length === 0) {
37764
+ currentCheckedKeys.push(item.toString());
37765
+ }
37766
+ });
37767
+ }
37768
+ else {
37769
+ currentCheckedKeys = currentCheckedKeys.filter(i => !x.includes(Number(i)));
37770
+ }
37771
+ this.comPartyService.status$.next({
37772
+ ...this.comPartyService.status$.value,
37773
+ checkedKeys: currentCheckedKeys //x.map(item => item.toString())
37774
+ });
37775
+ // The ids have been changed
37776
+ toggledIds = x;
37777
+ // Now toggledIds were set. We call the function we declared
37778
+ changeValue();
37779
+ })
37780
+ .catch((x) => {
37781
+ console.error(x);
37782
+ });
37783
+ }
37784
+ else {
37785
+ // Otherwise we simply toggle check for current item only
37786
+ toggledIds = [e.id];
37787
+ // Now toggledIds were set. We call the function we declared
37788
+ changeValue();
37789
+ }
37790
+ /* end: THIS CODE SCOPE calculates toggledIds */
37791
+ // That is. Happy debugging!
37792
+ }
37793
+ onCheckIncludeDissolvedChange(value) {
37794
+ console.log("onCheckIncludeDissolvedChange", value);
37795
+ }
37796
+ onCheckInheritanceChange(value) {
37797
+ this.comPartyService.status$.next({
37798
+ ...this.comPartyService.status$.value,
37799
+ checkInheritance: value,
37800
+ });
37801
+ }
37802
+ onObjectClick(e, event) {
37803
+ // remove highlight class
37804
+ // TO DO
37805
+ if (!!e.protected)
37806
+ return;
37807
+ this.itemClick?.emit(e);
37808
+ if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED)
37809
+ return;
37810
+ let activeIds = [];
37811
+ this.data.map((item) => (item.active = false));
37812
+ if (this.accessorMode ===
37813
+ EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE ||
37814
+ !!!this.accessorMode) {
37815
+ // If true, all the nested items will be active, the others are inactive
37816
+ this.recursiveService
37817
+ .nestedResetActive(e, true)
37818
+ .then((x) => {
37819
+ activeIds = x;
37820
+ activeIds.sort();
37821
+ const newActiveKeys = [];
37822
+ activeIds.map((x) => newActiveKeys.push(x.toString()));
37823
+ this.comPartyService.status$.next({
37824
+ ...this.comPartyService.status$.value,
37825
+ activeKeys: newActiveKeys,
37826
+ selectedKey: e.id.toString()
37827
+ });
37828
+ this.activeIds = activeIds;
37829
+ console.log(this.activeIds);
37830
+ this.onChange(activeIds);
37831
+ })
37832
+ .catch((x) => {
37833
+ console.error(x);
37834
+ });
37835
+ }
37836
+ else {
37837
+ // ACTIVATED_SINGLE
37838
+ // Otherwise we simply set current item to be active only
37839
+ activeIds = [e.id];
37840
+ this.activeIds = activeIds;
37841
+ this.comPartyService.status$.next({
37842
+ ...this.comPartyService.status$.value,
37843
+ activeKeys: [e.id.toString()],
37844
+ selectedKey: e.id.toString(),
37845
+ });
37846
+ this.onChange(activeIds);
37847
+ }
37848
+ const { detail } = event;
37849
+ if (detail === 2) {
37850
+ console.log('This was a dblclick');
37851
+ this.itemDoubleClick.emit(e);
37852
+ }
37853
+ this.selectedItem = e;
37854
+ }
37855
+ onSearchChange(text) {
37856
+ this.search$.next(text);
37857
+ }
37858
+ onHiddenToolClick(e) {
37859
+ e.stopPropagation();
37860
+ this.hiddenToolClickStream$.next(crypto.randomUUID());
37861
+ }
37862
+ ngOnDestroy() {
37863
+ if (this.worker) {
37864
+ this.worker.terminate();
37865
+ }
37866
+ this.subscriptions.map((x) => x?.unsubscribe());
37867
+ if (!!this.instanceNumber) {
37868
+ const tryToFind = this.comPartyService.instances.filter((x) => x.instanceNumber === this.instanceNumber);
37869
+ if (!!tryToFind.length) {
37870
+ const newInstances = this.comPartyService.instances.filter((x) => x.instanceNumber !== this.instanceNumber);
37871
+ this.comPartyService.instances = newInstances;
37872
+ }
37873
+ }
37874
+ }
37875
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreComTreeComponent, deps: [{ token: AuthService }, { token: RecursiveService }, { token: MultiLanguageService }, { token: LayoutService }, { token: CoreOrgTreeService }, { token: AlertService }, { token: ComPartyService }], target: i0.ɵɵFactoryTarget.Component }); }
37876
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreComTreeComponent, isStandalone: true, selector: "core-com-tree", inputs: { lineColor: "lineColor", fullWidthMode: "fullWidthMode", accessorMode: "accessorMode", searchMode: "searchMode", fullRendering: "fullRendering", height: "height", disabledLoopExpand: "disabledLoopExpand", showCheckInheritance: "showCheckInheritance", excludedIds$: "excludedIds$", stateIsolated$: "stateIsolated$" }, outputs: { itemDoubleClick: "itemDoubleClick", itemClick: "itemClick" }, providers: [
37877
+ {
37878
+ provide: NG_VALUE_ACCESSOR,
37879
+ useExisting: forwardRef(() => CoreComTreeComponent),
37880
+ multi: true
37881
+ }
37882
+ ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "displayContent", first: true, predicate: ["displayContent"], descendants: true }, { propertyName: "reducedIconWrapper", first: true, predicate: ["reducedIconWrapper"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" \r\n [style.position]=\"'relative'\"\r\n [style.width]=\"'100%'\"\r\n [style.minWidth]=\"'310px'\"\r\n [style.height]=\"height + 'px'\"\r\n >\r\n <div #displayContent class=\"custom-org-tree\">\r\n @if (showSearch) {\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n }\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" \r\n [style.height]=\"height - layoutService.coreOrgTreeTopHeight * (showSearch ? 1 : 0) - layoutService.coreOrgTreeBottomHeight + 'px'\" \r\n [style.overflow]=\"'scroll'\" \r\n >\r\n <div class=\"hidden-tool\" (click)=\"onHiddenToolClick($event)\"></div>\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @if (!!data && !!data.length) {\r\n @for (root of data; track $index) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n }\r\n } @else {\r\n No items\r\n }\r\n </div>\r\n <div \r\n [style.display]=\"'block'\"\r\n [style.position]=\"'absolute'\"\r\n [style.bottom]=\"'0px'\"\r\n [style.left]=\"'0px'\"\r\n [style.right]=\"'0px'\"\r\n [style.height]=\"layoutService.corePaginationHeight + 'px'\"\r\n [style.paddingLeft]=\"layoutService.basicSpacing + 'px'\"\r\n [style.paddingRight]=\"layoutService.basicSpacing + 'px'\"\r\n [style.lineHeight]=\"layoutService.corePaginationHeight + 'px'\"\r\n [style.overflow]=\"'hidden'\"\r\n >\r\n <div \r\n [style.height]=\"layoutService.corePaginationHeight + 'px'\"\r\n [style.position]=\"'relative'\"\r\n [style.display]=\"'flex'\"\r\n [style.alignItems]=\"'center'\"\r\n [style.justifyContent]=\"'space-between'\"\r\n >\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n @if (accessorMode === 'CHECKED') {\r\n <div class=\"check-inheritance-wrapper\">\r\n @if (showCheckInheritance) {\r\n <core-checkbox [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler feather-chevron-down\" (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"accessorMode != 'CHECKED' && selectedKey===id.toString()\"\r\n [class.highlighted]=\"highlighted\" [class.dissolved]=\"!isActive\"\r\n [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }] }); }
37883
+ }
37884
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreComTreeComponent, decorators: [{
37885
+ type: Component,
37886
+ args: [{ selector: 'core-com-tree', imports: [
37887
+ FormsModule,
37888
+ NgIf,
37889
+ CoreCheckboxComponent,
37890
+ CoreLoadingSurfaceComponent,
37891
+ TranslatePipe,
37892
+ TooltipDirective,
37893
+ ], providers: [
37894
+ {
37895
+ provide: NG_VALUE_ACCESSOR,
37896
+ useExisting: forwardRef(() => CoreComTreeComponent),
37897
+ multi: true
37898
+ }
37899
+ ], template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" \r\n [style.position]=\"'relative'\"\r\n [style.width]=\"'100%'\"\r\n [style.minWidth]=\"'310px'\"\r\n [style.height]=\"height + 'px'\"\r\n >\r\n <div #displayContent class=\"custom-org-tree\">\r\n @if (showSearch) {\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n }\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" \r\n [style.height]=\"height - layoutService.coreOrgTreeTopHeight * (showSearch ? 1 : 0) - layoutService.coreOrgTreeBottomHeight + 'px'\" \r\n [style.overflow]=\"'scroll'\" \r\n >\r\n <div class=\"hidden-tool\" (click)=\"onHiddenToolClick($event)\"></div>\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @if (!!data && !!data.length) {\r\n @for (root of data; track $index) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n }\r\n } @else {\r\n No items\r\n }\r\n </div>\r\n <div \r\n [style.display]=\"'block'\"\r\n [style.position]=\"'absolute'\"\r\n [style.bottom]=\"'0px'\"\r\n [style.left]=\"'0px'\"\r\n [style.right]=\"'0px'\"\r\n [style.height]=\"layoutService.corePaginationHeight + 'px'\"\r\n [style.paddingLeft]=\"layoutService.basicSpacing + 'px'\"\r\n [style.paddingRight]=\"layoutService.basicSpacing + 'px'\"\r\n [style.lineHeight]=\"layoutService.corePaginationHeight + 'px'\"\r\n [style.overflow]=\"'hidden'\"\r\n >\r\n <div \r\n [style.height]=\"layoutService.corePaginationHeight + 'px'\"\r\n [style.position]=\"'relative'\"\r\n [style.display]=\"'flex'\"\r\n [style.alignItems]=\"'center'\"\r\n [style.justifyContent]=\"'space-between'\"\r\n >\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n @if (accessorMode === 'CHECKED') {\r\n <div class=\"check-inheritance-wrapper\">\r\n @if (showCheckInheritance) {\r\n <core-checkbox [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler feather-chevron-down\" (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"accessorMode != 'CHECKED' && selectedKey===id.toString()\"\r\n [class.highlighted]=\"highlighted\" [class.dissolved]=\"!isActive\"\r\n [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>" }]
37900
+ }], ctorParameters: () => [{ type: AuthService }, { type: RecursiveService }, { type: MultiLanguageService }, { type: LayoutService }, { type: CoreOrgTreeService }, { type: AlertService }, { type: ComPartyService }], propDecorators: { lineColor: [{
37901
+ type: Input
37902
+ }], fullWidthMode: [{
37903
+ type: Input
37904
+ }], accessorMode: [{
37905
+ type: Input
37906
+ }], searchMode: [{
37907
+ type: Input
37908
+ }], fullRendering: [{
37909
+ type: Input
37910
+ }], height: [{
37911
+ type: Input
37912
+ }], disabledLoopExpand: [{
37913
+ type: Input
37914
+ }], showCheckInheritance: [{
37915
+ type: Input
37916
+ }], excludedIds$: [{
37917
+ type: Input
37918
+ }], stateIsolated$: [{
37919
+ type: Input
37920
+ }], itemDoubleClick: [{
37921
+ type: Output
37922
+ }], itemClick: [{
37923
+ type: Output
37924
+ }], container: [{
37925
+ type: ViewChild,
37926
+ args: ['container']
37927
+ }], scrollContainer: [{
37928
+ type: ViewChild,
37929
+ args: ['scrollContainer']
37930
+ }], displayContent: [{
37931
+ type: ViewChild,
37932
+ args: ['displayContent']
37933
+ }], reducedIconWrapper: [{
37934
+ type: ViewChild,
37935
+ args: ['reducedIconWrapper']
37936
+ }] } });
37937
+
36200
37938
  class CorePaginationComponent {
36201
37939
  constructor() {
36202
37940
  this.$currentPage = input.required();
@@ -36754,860 +38492,221 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
36754
38492
  args: [{ selector: 'confirm-dialog-state', standalone: false, template: "<div class=\"confirm-dialog-state-container\">\r\n <div class=\"container container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4 label\">busy</div>\r\n <div class=\"col-md-8 font-bold\">{{ ds.busy }}</div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 label\">showConfirmDialog</div>\r\n <div class=\"col-md-8 font-bold\">{{ ds.showConfirmDialog$.value }}</div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 label\">dialogConfirmed</div>\r\n <div class=\"col-md-8 font-bold\">{{ ds.dialogConfirmed$.value }}</div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 label\">title</div>\r\n <div class=\"col-md-8 font-bold\">{{ ds.title$.value }}</div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 label\">body</div>\r\n <div class=\"col-md-8 font-bold\">{{ ds.body$.value }}</div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!--\r\n\r\n busy!: boolean;\r\n\r\n showConfirmDialog$ = new BehaviorSubject<boolean | undefined>(undefined);\r\n canDeactivate$ = new Subject<boolean>;\r\n dialogConfirmed$ = new BehaviorSubject<IDialogConfirmModel | undefined>(undefined);\r\n\r\n title$ = new Subject<EnumTranslateKey>;\r\n body$ = new Subject<EnumTranslateKey>;\r\n okButtonText$ = new Subject<EnumTranslateKey>;\r\n cancelButtonText$ = new Subject<EnumTranslateKey>;\r\n showCancelOnly$ = new Subject<boolean>;\r\n informationLines$ = new Subject<string[]>;\r\n-->", styles: [".confirm-dialog-state-container{position:fixed;display:block;top:calc(var(--size-header-height) + var(--size-layout-block-cell-spacing));left:var(--size-layout-block-cell-spacing);z-index:9999999;width:320px;height:320px}\n"] }]
36755
38493
  }], ctorParameters: () => [{ type: DialogService }] });
36756
38494
 
36757
- class CoreLazyMountComponent {
36758
- constructor() {
36759
- this.vcRef = inject(ViewContainerRef);
36760
- }
36761
- set props(value) {
36762
- this._props = value;
36763
- this.assignInputs();
36764
- }
36765
- async ngOnInit() {
36766
- if (this.loadComponent) {
36767
- const componentType = await this.loadComponent();
36768
- this.componentRef = this.vcRef.createComponent(componentType);
36769
- this.assignInputs();
36770
- }
36771
- }
36772
- assignInputs() {
36773
- if (this.componentRef && this._props) {
36774
- Object.assign(this.componentRef.instance, this._props);
36775
- this.componentRef.changeDetectorRef.markForCheck();
36776
- }
36777
- }
36778
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreLazyMountComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36779
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: CoreLazyMountComponent, isStandalone: true, selector: "core-lazy-mount", inputs: { loadComponent: "loadComponent", props: "props" }, ngImport: i0, template: "", styles: [""] }); }
36780
- }
36781
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreLazyMountComponent, decorators: [{
36782
- type: Component,
36783
- args: [{ selector: 'core-lazy-mount', imports: [], template: "" }]
36784
- }], propDecorators: { loadComponent: [{
36785
- type: Input
36786
- }], props: [{
36787
- type: Input
36788
- }] } });
36789
-
36790
- class ModuleItemComponent extends BaseComponent {
36791
- constructor(mls, navigatorService, cdr, menuService) {
36792
- super(mls);
36793
- this.mls = mls;
36794
- this.navigatorService = navigatorService;
36795
- this.cdr = cdr;
36796
- this.menuService = menuService;
36797
- this.$item = input.required();
36798
- this.$itemPadding = input(5);
36799
- this.$width = input.required();
36800
- this.$height = input.required();
36801
- this.$iconTextVerticalMargin = input(25);
36802
- this.$active = signal(false);
36803
- this.iconClickStream$ = new BehaviorSubject('');
36804
- }
36805
- ngOnInit() {
36806
- this.subscriptions.push(this.mls.lang$.subscribe(x => {
36807
- this.lang = x;
36808
- this.cdr.markForCheck();
36809
- }));
36810
- if (!!localStorage) {
36811
- const activeRootMenuItemId = Number(localStorage.getItem('activeRootMenuItemId') || '0');
36812
- const active = activeRootMenuItemId === this.$item()?.id;
36813
- this.$active.set(active);
36814
- }
36815
- }
36816
- onClick(e, item) {
36817
- this.iconClickStream$.next(crypto.randomUUID());
36818
- if (!!item) {
36819
- this.navigatorService.clickedItem$.next(item);
36820
- }
36821
- if (localStorage.getItem('moduleDesignMode') === 'on')
36822
- return;
36823
- this.navigatorService.activeRootMenuItemId$.next(item?.id);
36824
- if (!!localStorage) {
36825
- localStorage.setItem('activeRootMenuItemId', (item?.id || 0).toString());
36826
- }
36827
- this.menuService.isOpen$.next(true); // trigger the LeftBar to be opened at the first time
36828
- }
36829
- ngAfterViewInit() {
36830
- this.subscriptions.push(this.navigatorService.activeRootMenuItemId$.subscribe(x => {
36831
- const active = x === this.$item()?.id;
36832
- this.$active.set(active);
36833
- }));
36834
- this.subscriptions.push(this.iconClickStream$.pipe(buffer(this.iconClickStream$.pipe(debounceTime(250))), map$1(clicks => clicks.length), filter(clicksLength => clicksLength >= 5))
36835
- .subscribe(_ => {
36836
- this.navigatorService.showEditSvg$.next(true);
36837
- }));
36838
- }
36839
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ModuleItemComponent, deps: [{ token: MultiLanguageService }, { token: NavigatorService }, { token: i0.ChangeDetectorRef }, { token: MenuService }], target: i0.ɵɵFactoryTarget.Component }); }
36840
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: ModuleItemComponent, isStandalone: true, selector: "app-module-item", inputs: { $item: { classPropertyName: "$item", publicName: "$item", isSignal: true, isRequired: true, transformFunction: null }, $itemPadding: { classPropertyName: "$itemPadding", publicName: "$itemPadding", isSignal: true, isRequired: false, transformFunction: null }, $width: { classPropertyName: "$width", publicName: "$width", isSignal: true, isRequired: true, transformFunction: null }, $height: { classPropertyName: "$height", publicName: "$height", isSignal: true, isRequired: true, transformFunction: null }, $iconTextVerticalMargin: { classPropertyName: "$iconTextVerticalMargin", publicName: "$iconTextVerticalMargin", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div class=\"menu-item-wrapper\" \r\n [class.active] = \"$active()\"\r\n (click)=\"onClick($event, $item())\" [ngStyle]=\"{\r\n width: $width() + 'px',\r\n height: $height() + 'px',\r\n padding: $itemPadding() + 'px',\r\n visibility: !!$item() ? 'visible' : 'hidden'\r\n}\">\r\n @if (!!$item()) {\r\n <div class=\"d-flex d-flex-v d-flex-center\">\r\n @if ($item()!.iconSvg) {\r\n <div class=\"d-block\">\r\n <i class=\"module-icon\">\r\n <span [innerHtml]=\"$item()!.iconSvg! | stringHtml\"></span>\r\n </i>\r\n </div>\r\n } @else if ($item()!.iconClass) {\r\n <div>\r\n <i [class]=\"$item()!.iconClass + ' module-icon'\"></i>\r\n </div>\r\n }\r\n <div [ngStyle]=\"{\r\n height: $iconTextVerticalMargin() + 'px'\r\n }\"></div>\r\n <div class=\"module-code\" [appTooltip]=\"$item()!.code! | translate: lang\" [ngStyle]=\"{\r\n width: $width() - $itemPadding() * 2 + 'px'\r\n }\">{{ $item()!.code! | translate: lang}}</div>\r\n </div>\r\n }\r\n</div>", styles: [".menu-item-wrapper{display:flex;align-items:center;justify-content:center;box-sizing:border-box;-webkit-user-select:none;user-select:none}.menu-item-wrapper:not(.active){cursor:pointer}.menu-item-wrapper:not(.active):hover{background-color:var(--color-bg-main)}.menu-item-wrapper.active{color:var(--color-basic-orange)}.module-code{font-size:var(--typo-basic-font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:center}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "pipe", type: StringHtmlPipe, name: "stringHtml" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36841
- }
36842
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ModuleItemComponent, decorators: [{
36843
- type: Component,
36844
- args: [{ selector: 'app-module-item', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
36845
- NgStyle,
36846
- TooltipDirective,
36847
- StringHtmlPipe,
36848
- TranslatePipe,
36849
- ], template: "<div class=\"menu-item-wrapper\" \r\n [class.active] = \"$active()\"\r\n (click)=\"onClick($event, $item())\" [ngStyle]=\"{\r\n width: $width() + 'px',\r\n height: $height() + 'px',\r\n padding: $itemPadding() + 'px',\r\n visibility: !!$item() ? 'visible' : 'hidden'\r\n}\">\r\n @if (!!$item()) {\r\n <div class=\"d-flex d-flex-v d-flex-center\">\r\n @if ($item()!.iconSvg) {\r\n <div class=\"d-block\">\r\n <i class=\"module-icon\">\r\n <span [innerHtml]=\"$item()!.iconSvg! | stringHtml\"></span>\r\n </i>\r\n </div>\r\n } @else if ($item()!.iconClass) {\r\n <div>\r\n <i [class]=\"$item()!.iconClass + ' module-icon'\"></i>\r\n </div>\r\n }\r\n <div [ngStyle]=\"{\r\n height: $iconTextVerticalMargin() + 'px'\r\n }\"></div>\r\n <div class=\"module-code\" [appTooltip]=\"$item()!.code! | translate: lang\" [ngStyle]=\"{\r\n width: $width() - $itemPadding() * 2 + 'px'\r\n }\">{{ $item()!.code! | translate: lang}}</div>\r\n </div>\r\n }\r\n</div>", styles: [".menu-item-wrapper{display:flex;align-items:center;justify-content:center;box-sizing:border-box;-webkit-user-select:none;user-select:none}.menu-item-wrapper:not(.active){cursor:pointer}.menu-item-wrapper:not(.active):hover{background-color:var(--color-bg-main)}.menu-item-wrapper.active{color:var(--color-basic-orange)}.module-code{font-size:var(--typo-basic-font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:center}\n"] }]
36850
- }], ctorParameters: () => [{ type: MultiLanguageService }, { type: NavigatorService }, { type: i0.ChangeDetectorRef }, { type: MenuService }] });
36851
-
36852
- class CoreRootMenuItemPickerComponent extends BaseComponent {
36853
- constructor(mls, ahs, renderer, navigatorService, layoutService, domService, menuService, sysMenuService, authService, appConfigService) {
36854
- super(mls);
36855
- this.mls = mls;
36856
- this.ahs = ahs;
36857
- this.renderer = renderer;
36858
- this.navigatorService = navigatorService;
36859
- this.layoutService = layoutService;
36860
- this.domService = domService;
36861
- this.menuService = menuService;
36862
- this.sysMenuService = sysMenuService;
36863
- this.authService = authService;
36864
- this.appConfigService = appConfigService;
36865
- this.logoPath = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTE1IiBoZWlnaHQ9IjI5IiB2aWV3Qm94PSIwIDAgMTE1IDI5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wIDI4LjU1MjhWOC41NzY4NkgyLjU2MzI5VjE2LjgxMzRIMTIuNTIzNVY4LjU3Njg2SDE1LjA4NjhWMjguNTMzOUgxMi41MjM1VjE5LjE0MjNIMi41ODE2VjI4LjUzMzlIMFYyOC41NTI4Wk0xOS4wNzgyIDExLjM2MDJWOC41NzY4NkgyMS40NTg0VjExLjM2MDJIMTkuMDc4MlpNMTkuMDc4MiAyOC41NTI4VjE0LjA4NjhIMjEuNDU4NFYyOC41NTI4SDE5LjA3ODJaTTI0LjIyMzEgMjIuMDc3MkwyOC4wMzE1IDIxLjY3OTZDMjguMjUxMiAyMi45ODYxIDI4LjcyNzIgMjMuOTUxNyAyOS40MjMgMjQuNTc2NkMzMC4xMTg3IDI1LjIwMTQgMzEuMDcwOCAyNS41MDQ0IDMyLjI0MjYgMjUuNTA0NEMzMy40ODc2IDI1LjUwNDQgMzQuNDIxNCAyNS4yMjAzIDM1LjA2MjIgMjQuNjcxMkMzNS43MDMgMjQuMTIyMSAzNi4wMTQzIDIzLjQ5NzMgMzYuMDE0MyAyMi43NTg5QzM2LjAxNDMgMjIuMjg1NSAzNS44ODYxIDIxLjg2ODkgMzUuNjExNSAyMS41NDdDMzUuMzM2OCAyMS4yMjUyIDM0Ljg3OTEgMjAuOTIyMiAzNC4yMiAyMC42NzYxQzMzLjc2MjIgMjAuNTI0NiAzMi43MzY5IDIwLjIyMTYgMzEuMTI1NyAxOS44MDUxQzI5LjAzODUgMTkuMjc0OSAyNy41NzM3IDE4LjYxMjIgMjYuNzQ5OCAxNy44MTY5QzI1LjU1OTcgMTYuNzE4NyAyNC45OTIxIDE1LjM3NDQgMjQuOTkyMSAxMy44MDI4QzI0Ljk5MjEgMTIuNzgwMyAyNS4yNjY4IDExLjgxNDcgMjUuODE2IDEwLjk0MzdDMjYuMzgzNiAxMC4wNTM4IDI3LjE3MDkgOS4zNzIxMSAyOC4yMTQ1IDguOTE3NjhDMjkuMjc2NSA4LjQ0NDMyIDMwLjUyMTUgOC4yMTcxIDMyLjAwNDYgOC4yMTcxQzM0LjQyMTQgOC4yMTcxIDM2LjIzNCA4Ljc2NjIgMzcuNDYwNyA5Ljg2NDQxQzM4LjY4NzQgMTAuOTgxNSAzOS4zMDk5IDEyLjQ1ODQgMzkuMzgzMiAxNC4zMTRMMzUuNDgzMyAxNC40NjU1QzM1LjMxODUgMTMuNDI0MSAzNC45NzA3IDEyLjY4NTcgMzQuNDIxNCAxMi4yNTAyQzMzLjg3MjEgMTEuODE0NyAzMy4wNjY1IDExLjU2ODUgMzEuOTY3OSAxMS41Njg1QzMwLjg1MTEgMTEuNTY4NSAyOS45NzIyIDExLjgxNDcgMjkuMzMxNCAxMi4yODhDMjguOTI4NiAxMi42MDk5IDI4LjcwODkgMTMuMDI2NSAyOC43MDg5IDEzLjUzNzdDMjguNzA4OSAxNC4wMTExIDI4LjkxMDMgMTQuNDI3NiAyOS4yOTQ4IDE0Ljc0OTVDMjkuNzcwOCAxNS4xODUgMzAuOTc5MiAxNS42Mzk1IDMyLjg2NTEgMTYuMTEyOEMzNC43NTA5IDE2LjU2NzIgMzYuMTYwOCAxNy4wNDA2IDM3LjA1NzkgMTcuNTUxOEMzNy45NTUxIDE4LjA0NDEgMzguNjY5MSAxOC43MjU4IDM5LjE4MTggMTkuNTc3OEMzOS42OTQ0IDIwLjQ0ODggMzkuOTUwOCAyMS40OTAyIDM5Ljk1MDggMjIuNzU4OUMzOS45NTA4IDIzLjg5NDkgMzkuNjM5NSAyNC45NzQyIDM5LjAxNyAyNS45Nzc3QzM4LjQxMjggMjYuOTgxMyAzNy41MzQgMjcuNzE5NyAzNi40MTcxIDI4LjE5MzFDMzUuMzAwMiAyOC42ODU0IDMzLjkwODcgMjguOTEyNiAzMi4yMjQzIDI4LjkxMjZDMjkuNzg5MSAyOC45MTI2IDI3LjkwMzMgMjguMzI1NiAyNi42MDMzIDI3LjE3MDZDMjUuMjY2OCAyNS45OTY3IDI0LjQ3OTUgMjQuMjkyNiAyNC4yMjMxIDIyLjA3NzJaTTQ5LjU4MTQgMTQuMDY3OVYxNy4wOTc0SDQ3LjA1NDhWMjIuOTY3MUM0Ny4wNTQ4IDI0LjE0MTEgNDcuMDczMSAyNC44NDE3IDQ3LjEwOTcgMjUuMDQ5OUM0Ny4xNjQ2IDI1LjIzOTMgNDcuMjc0NSAyNS40MDk3IDQ3LjQ1NzYgMjUuNTQyMkM0Ny42MjIzIDI1LjY3NDggNDcuODIzNyAyNS43MzE2IDQ4LjA4MDEgMjUuNzMxNkM0OC40MjggMjUuNzMxNiA0OC45MjIzIDI1LjU5OSA0OS41NjMxIDI1LjM3MThMNDkuODc0NCAyOC4zNDQ2QzQ5LjAxMzkgMjguNzIzMiA0OC4wNjE4IDI4LjkxMjYgNDYuOTYzMiAyOC45MTI2QzQ2LjMwNDEgMjguOTEyNiA0NS42OTk5IDI4Ljc5OSA0NS4xNjg5IDI4LjU3MThDNDQuNjM3OSAyOC4zNDQ2IDQ0LjIzNTEgMjguMDQxNiA0My45Nzg4IDI3LjY2MjlDNDMuNzQwOCAyNy4zMDMyIDQzLjU1NzcgMjYuNzkxOSA0My40NjYxIDI2LjE2NzFDNDMuMzkyOSAyNS43MTI2IDQzLjM1NjMgMjQuODIyNyA0My4zNTYzIDIzLjQ1OTRWMTcuMTE2NEg0MS42NzE4VjE0LjA4NjhINDMuMzU2M1YxMS4yMDg4TDQ3LjA1NDggOC45NTU1NVYxNC4wODY4SDQ5LjU4MTRWMTQuMDY3OVpNNTQuOTI3NyAxOC41MzY0TDUxLjU3NzEgMTcuOTMwNUM1MS45NjE2IDE2LjUxMDQgNTIuNjAyNSAxNS40NjkgNTMuNTE3OSAxNC43ODc0QzU0LjQ1MTcgMTQuMTI0NyA1NS44MjQ5IDEzLjc4MzkgNTcuNjM3NSAxMy43ODM5QzU5LjI4NTMgMTMuNzgzOSA2MC41MTIxIDEzLjk3MzIgNjEuMzE3NyAxNC4zODk4QzYyLjEyMzMgMTQuNzg3NCA2Mi42OTA5IDE1LjI5ODYgNjMuMDIwNCAxNS45MjM1QzYzLjM1IDE2LjU0ODMgNjMuNTE0OCAxNy42ODQ0IDYzLjUxNDggMTkuMzMxN0w2My40NTk4IDIzLjgwMDNDNjMuNDU5OCAyNS4wNjg5IDYzLjUxNDggMjUuOTk2NyA2My42NDI5IDI2LjYwMjZDNjMuNzUyOCAyNy4yMDg1IDYzLjk5MDggMjcuODcxMiA2NC4zMDIxIDI4LjU1MjhINjAuNjQwMkM2MC41MzA0IDI4LjMwNjcgNjAuNDIwNSAyNy45MjggNjAuMjkyMyAyNy40MzU3QzYwLjIzNzQgMjcuMjA4NSA2MC4xODI1IDI3LjA1NyA2MC4xNDU5IDI2Ljk4MTNDNTkuNTIzNCAyNy42MjUgNTguODQ1OSAyOC4wOTg0IDU4LjEzMTkgMjguNDIwM0M1Ny40MTc4IDI4Ljc0MjIgNTYuNjQ4OCAyOC44OTM3IDU1Ljg0MzIgMjguODkzN0M1NC40MTUxIDI4Ljg5MzcgNTMuMjc5OSAyOC40OTYgNTIuNDU2IDI3LjY4MThDNTEuNjMyMSAyNi44ODY2IDUxLjIxMSAyNS44NjQxIDUxLjIxMSAyNC42MTQ0QzUxLjIxMSAyMy44MDAzIDUxLjM5NDEgMjMuMDgwNyA1MS43Nzg1IDIyLjQzN0M1Mi4xNjMgMjEuODEyMSA1Mi42NzU3IDIxLjMwMDkgNTMuMzcxNCAyMC45NjAxQzU0LjA0ODkgMjAuNjM4MiA1NS4wMTkzIDIwLjMzNTIgNTYuMzAwOSAyMC4wNzAxQzU4LjAyMiAxOS43NDgzIDU5LjIzMDQgMTkuNDI2NCA1OS44ODk1IDE5LjE0MjNWMTguNzYzN0M1OS44ODk1IDE4LjAwNjMgNTkuNzA2NSAxNy40OTUgNTkuMzc2OSAxNy4xNzMyQzU5LjAyOSAxNi44NTEzIDU4LjM1MTYgMTYuNjgwOSA1Ny4zODEyIDE2LjY4MDlDNTYuNzIyIDE2LjY4MDkgNTYuMjA5NCAxNi44MzIzIDU1Ljg0MzIgMTcuMDk3NEM1NS40NDA0IDE3LjM4MTQgNTUuMTQ3NCAxNy44NTQ4IDU0LjkyNzcgMTguNTM2NFpNNTkuODg5NSAyMS42NDE3QzU5LjQxMzUgMjEuNzkzMiA1OC42NjI4IDIyLjAwMTUgNTcuNjM3NSAyMi4yMjg3QzU2LjYxMjIgMjIuNDU1OSA1NS45NTMxIDIyLjY4MzEgNTUuNjIzNSAyMi44OTE0QzU1LjE0NzQgMjMuMjUxMiA1NC44OTExIDIzLjY4NjYgNTQuODkxMSAyNC4yMzU3QzU0Ljg5MTEgMjQuNzg0OSA1NS4wNzQyIDI1LjIzOTMgNTUuNDc3IDI1LjYzNjlDNTUuODYxNSAyNi4wMzQ1IDU2LjMzNzUgMjYuMjIzOSA1Ni45NDE3IDI2LjIyMzlDNTcuNjE5MiAyNi4yMjM5IDU4LjI2IDI1Ljk5NjcgNTguODY0MiAyNS41NDIyQzU5LjMwMzYgMjUuMjAxNCA1OS41OTY2IDI0Ljc4NDkgNTkuNzQzMSAyNC4yNzM2QzU5LjgzNDYgMjMuOTUxNyA1OS44ODk1IDIzLjMwOCA1OS44ODk1IDIyLjM5OTFWMjEuNjQxN1pNNjUuNTQ3MSAxNC4wNjc5SDY3LjU5NzdWMTIuOTg4NkM2Ny41OTc3IDExLjc1NzkgNjcuNzI1OSAxMC44Njc5IDY3Ljk4MjIgMTAuMjYyQzY4LjIzODYgOS42NTYxMyA2OC42OTYzIDkuMTYzODMgNjkuMzczNyA4Ljc4NTE0QzcwLjA1MTIgOC40MDY0NSA3MC45MTE3IDguMjE3MSA3MS45MzcgOC4yMTcxQzcyLjk5OSA4LjIxNzEgNzQuMDQyNiA4LjM2ODU4IDc1LjA0OTYgOC43MDk0TDc0LjU3MzYgMTEuMzYwMkM3My45Njk0IDExLjIwODggNzMuMzgzNSAxMS4xMzMgNzIuODUyNSAxMS4xMzNDNzIuMzAzMiAxMS4xMzMgNzEuOTE4NyAxMS4yNjU2IDcxLjY2MjQgMTEuNTMwN0M3MS40MDYxIDExLjc5NTcgNzEuMzE0NSAxMi4yODggNzEuMzE0NSAxMy4wNDU0VjE0LjA2NzlINzQuMDc5MlYxNy4wNzg1SDcxLjMxNDVWMjguNTMzOUg2Ny42MTZWMTcuMDc4NUg2NS41NjU0VjE0LjA2NzlINjUuNTQ3MVpNNzQuNTE4NiAxNC4wNjc5SDc2LjU2OTNWMTIuOTg4NkM3Ni41NjkzIDExLjc1NzkgNzYuNjk3NCAxMC44Njc5IDc2Ljk1MzggMTAuMjYyQzc3LjIxMDEgOS42NTYxMyA3Ny42Njc4IDkuMTYzODMgNzguMzQ1MyA4Ljc4NTE0Qzc5LjAyMjcgOC40MDY0NSA3OS44ODMyIDguMjE3MSA4MC45MDg2IDguMjE3MUM4MS45NzA1IDguMjE3MSA4My4wMTQxIDguMzY4NTggODQuMDIxMSA4LjcwOTRMODMuNTQ1MSAxMS4zNjAyQzgyLjk0MDkgMTEuMjA4OCA4Mi4zNTUgMTEuMTMzIDgxLjgwNTcgMTEuMTMzQzgxLjI1NjQgMTEuMTMzIDgwLjg3MTkgMTEuMjY1NiA4MC42MTU2IDExLjUzMDdDODAuMzk1OSAxMS43OTU3IDgwLjI2NzcgMTIuMjg4IDgwLjI2NzcgMTMuMDQ1NFYxNC4wNjc5SDgzLjAzMjRWMTcuMDc4NUg4MC4yNjc3VjI4LjUzMzlINzYuNTY5M1YxNy4wNzg1SDc0LjUxODZWMTQuMDY3OVoiIGZpbGw9ImJsYWNrIi8+DQo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTk4LjY0OTggNS4yNDQ3N0M5Ny45NTQgMi43ODMyOCA5NS42NDcxIDIuNDA0NTkgOTMuNzI0NiAzLjc2Nzg4QzkxLjc0NzIgNS4xNjkwMyA5MC40Mjg5IDguMTk4NTcgOTEuMTA2NCAxMC42MjIyQzkxLjgwMjEgMTMuMDgzNyA5NC4xMDkxIDEzLjQ2MjQgOTYuMDMxNiAxMi4xMThDOTguMDA5IDEwLjcxNjkgOTkuMzI3MiA3LjY2ODQgOTguNjQ5OCA1LjI0NDc3WiIgZmlsbD0iI0YzNzU0MCIvPg0KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05MS4xNDI4IDI3LjgxNDlDOTEuOTMwMSAyNy4xMTQzIDkyLjk3MzggMjYuNDUxNiA5My44MTYgMjUuODgzNkw5NS40NjM4IDI0LjgyMzJDOTcuODQ0IDIwLjAzMjggMTAxLjA0OCAxNS41NDUzIDEwNC40MTcgMTEuNDU1NEMxMDcuNDkzIDcuNjg3NDQgMTExLjA4MiAzLjc0OTA1IDExNSAwLjkwODg2TDExNC4zNDEgMEMxMTAuMTQ4IDIuMjkxMDggMTA2LjMwMyA1LjQxNTI5IDEwMi44NDIgOC43NjY3MUM5OS4xOTg5IDEyLjMwNzUgOTUuODQ4MyAxNi4yMjY5IDkzLjE1NjggMjAuNTgxOUw5My4wNDcgMjAuNzMzNEw5Mi4yNzggMTkuMDY3MUM5MS43MTA0IDE3Ljg1NTMgOTAuMTM1OCAxNC42NTU0IDg4LjU0MjkgMTQuNjU1NEM4Ni45NSAxNC42NTU0IDg1LjQzMDMgMTUuODI5MyA4NC4zMTM1IDE2Ljk0NjRDODUuMzAyMiAxNy4zMDYyIDg2LjEyNjEgMTcuOTg3OCA4Ni43ODUyIDE4LjgyMUM4Ny44MTA1IDIwLjA3MDYgODguNjM0NSAyMS43NzQ4IDg5LjI5MzYgMjMuMjcwNkw4OS45MTYxIDI0LjY3MTdDOTAuMzE4OSAyNS42NzUzIDkwLjgxMzMgMjYuNzkyNCA5MS4xNDI4IDI3LjgxNDlaIiBmaWxsPSIjRjM3NTQwIi8+DQo8L3N2Zz4NCg==';
36866
- this.itemsPerRow = 4;
36867
- this.iconTextVerticalMargin = 25;
36868
- this.items = [[]];
36869
- this.zIndex = 1;
36870
- this.imageErrorResolverType = EnumImageResolverType.LOGO;
36871
- this.headerHeight = 0;
36872
- this.width = 400;
36873
- this.layoutService.modulePanelWidth$.subscribe(x => this.width = x);
36874
- }
36875
- ngOnInit() {
36876
- this.subscriptions.push(this.mls.lang$.subscribe(x => this.lang = x));
36877
- this.subscriptions.push(this.authService.data$.subscribe(x => this.isRoot = !!x?.isRoot));
36878
- this.scrollWidth = this.layoutService.modulePanelWidth$.value - this.layoutService.basicSpacing * 2;
36879
- this.scrollHeight = window.innerHeight - this.layoutService.headerHeight$.value - this.layoutService.basicSpacing * 2;
36880
- this.itemWidth = this.scrollWidth / 4;
36881
- }
36882
- transformTo2DArray(flatList) {
36883
- const result = [];
36884
- for (let i = 0; i < flatList.length; i += this.itemsPerRow) {
36885
- const row = flatList.slice(i, i + this.itemsPerRow);
36886
- // If the last row has fewer than itemsPerRow, pad it with undefineds
36887
- while (row.length < this.itemsPerRow) {
36888
- row.push(undefined);
36889
- }
36890
- result.push(row);
36891
- }
36892
- return result;
36893
- }
36894
- ngAfterViewInit() {
36895
- setTimeout(() => {
36896
- this.designMode = localStorage.getItem('moduleDesignMode') === 'on';
36897
- this.zIndex = this.domService.getMaxZIndex() + 1;
36898
- // this.listenerFn = this.renderer.listen('window', 'click', (e: Event) => {
36899
- // if (!this.designMode) {
36900
- // if (this.container && !!!this.container.nativeElement.contains(e.target)) {
36901
- // this.ahs.activeKey$.next(undefined);
36902
- // }
36903
- // }
36904
- // });
36905
- this.subscriptions.push(this.navigatorService.rootNavigatorItems$.subscribe(x => {
36906
- // Transform the flat list into a 2D array
36907
- this.items = this.transformTo2DArray(x);
36908
- }));
36909
- this.subscriptions.push(this.layoutService.headerHeight$.subscribe(x => {
36910
- this.headerHeight = x;
36911
- }));
36912
- if (!!localStorage) {
36913
- const activeRootMenuItemId = Number(localStorage.getItem('activeRootMenuItemId') || '0');
36914
- this.navigatorService.activeRootMenuItemId$.next(activeRootMenuItemId);
36915
- }
36916
- if (window.innerWidth < this.layoutService.modulePanelWidth$.value) {
36917
- this.layoutService.modulePanelWidth$.next(window.innerWidth);
36918
- }
36919
- });
36920
- }
36921
- onDesignModeClick(e) {
36922
- e.stopPropagation();
36923
- if (localStorage.getItem('moduleDesignMode') === 'on') {
36924
- localStorage.setItem('moduleDesignMode', 'off');
36925
- this.designMode = false;
36926
- }
36927
- else {
36928
- localStorage.setItem('moduleDesignMode', 'on');
36929
- this.designMode = true;
36930
- }
36931
- }
36932
- ngOnDestroy() {
36933
- this.subscriptions.map(x => x?.unsubscribe());
36934
- if (this.listenerFn)
36935
- this.listenerFn();
36936
- }
36937
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerComponent, deps: [{ token: MultiLanguageService }, { token: ApplicationHelpService }, { token: i0.Renderer2 }, { token: NavigatorService }, { token: LayoutService }, { token: DomService }, { token: MenuService }, { token: SysMenuService }, { token: AuthService }, { token: AppConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
36938
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreRootMenuItemPickerComponent, isStandalone: true, selector: "core-root-menu-item-picker", inputs: { logoPath: "logoPath", itemsPerRow: "itemsPerRow", iconTextVerticalMargin: "iconTextVerticalMargin" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-root-menu-item-picker-container\" [ngStyle]=\"{\r\n zIndex: zIndex,\r\n}\">\r\n <div class=\"mudule-picker-header d-flex d-flex-between\" [ngStyle]=\"{\r\n height: 59 + 'px'\r\n }\">\r\n <div class=\"HEADER_LOGO\">\r\n <div class=\"logo-wrapper d-flex\">\r\n <img src=\"logoPath\" class=\"lg\" [ngStyle]=\"{\r\n width: '130px',\r\n height: '59px',\r\n transform: 'translate(0, -5px)'\r\n }\" appImageErrorResolver [type]=\"imageErrorResolverType\">\r\n </div>\r\n </div>\r\n @if (!!isRoot) {\r\n <i \r\n [class.feather-square]=\"!designMode\" \r\n [class.feather-play]=\"!!designMode\" \r\n class=\"stop-mode-icon\" \r\n (click)=\"onDesignModeClick($event)\"\r\n [appTooltip]=\"!designMode ? 'Chuy\u1EC3n sang ch\u1EBF \u0111\u1ED9 thi\u1EBFt k\u1EBF' : 'Chuy\u1EC3n v\u1EC1 ch\u1EBF \u0111\u1ED9 b\u00ECnh th\u01B0\u1EDDng'\"\r\n ></i>\r\n }\r\n </div>\r\n\r\n <div class=\"header-bottom\" [ngStyle]=\"{\r\n width: width + 'px'\r\n }\">\r\n <core-line></core-line>\r\n </div>\r\n\r\n <div class=\"h15\"></div>\r\n\r\n <div class=\"scroll\" [ngStyle]=\"{\r\n width: width + 'px',\r\n height: scrollHeight + 'px'\r\n }\">\r\n @for (row of items; track $index) {\r\n <div class=\"menu-row\">\r\n @for (item of row; track $index) {\r\n <app-module-item [$item]=\"item\" [$width]=\"itemWidth\" [$height]=\"100\" [$iconTextVerticalMargin]=\"iconTextVerticalMargin\"></app-module-item>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n</div>", styles: [".core-root-menu-item-picker-container .header-bottom{position:absolute;top:59px;left:0}.core-root-menu-item-picker-container .scroll{overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column;align-items:flex-start;flex-wrap:wrap;-ms-overflow-style:none}.core-root-menu-item-picker-container .scroll::-webkit-scrollbar{display:none}.core-root-menu-item-picker-container .menu-row{display:flex;flex-wrap:nowrap;justify-content:space-between}.core-root-menu-item-picker-container .stop-mode-icon{cursor:pointer;width:24px;height:24px;font-size:24px}\n"], dependencies: [{ kind: "component", type: CoreLineComponent, selector: "core-line" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ModuleItemComponent, selector: "app-module-item", inputs: ["$item", "$itemPadding", "$width", "$height", "$iconTextVerticalMargin"] }, { kind: "directive", type: ImageErrorResolverDirective, selector: "[appImageErrorResolver]", inputs: ["type", "isFemale"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }] }); }
36939
- }
36940
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerComponent, decorators: [{
36941
- type: Component,
36942
- args: [{ selector: 'core-root-menu-item-picker', imports: [
36943
- CoreLineComponent,
36944
- NgStyle,
36945
- ModuleItemComponent,
36946
- ImageErrorResolverDirective,
36947
- TooltipDirective,
36948
- ], template: "<div #container class=\"core-root-menu-item-picker-container\" [ngStyle]=\"{\r\n zIndex: zIndex,\r\n}\">\r\n <div class=\"mudule-picker-header d-flex d-flex-between\" [ngStyle]=\"{\r\n height: 59 + 'px'\r\n }\">\r\n <div class=\"HEADER_LOGO\">\r\n <div class=\"logo-wrapper d-flex\">\r\n <img src=\"logoPath\" class=\"lg\" [ngStyle]=\"{\r\n width: '130px',\r\n height: '59px',\r\n transform: 'translate(0, -5px)'\r\n }\" appImageErrorResolver [type]=\"imageErrorResolverType\">\r\n </div>\r\n </div>\r\n @if (!!isRoot) {\r\n <i \r\n [class.feather-square]=\"!designMode\" \r\n [class.feather-play]=\"!!designMode\" \r\n class=\"stop-mode-icon\" \r\n (click)=\"onDesignModeClick($event)\"\r\n [appTooltip]=\"!designMode ? 'Chuy\u1EC3n sang ch\u1EBF \u0111\u1ED9 thi\u1EBFt k\u1EBF' : 'Chuy\u1EC3n v\u1EC1 ch\u1EBF \u0111\u1ED9 b\u00ECnh th\u01B0\u1EDDng'\"\r\n ></i>\r\n }\r\n </div>\r\n\r\n <div class=\"header-bottom\" [ngStyle]=\"{\r\n width: width + 'px'\r\n }\">\r\n <core-line></core-line>\r\n </div>\r\n\r\n <div class=\"h15\"></div>\r\n\r\n <div class=\"scroll\" [ngStyle]=\"{\r\n width: width + 'px',\r\n height: scrollHeight + 'px'\r\n }\">\r\n @for (row of items; track $index) {\r\n <div class=\"menu-row\">\r\n @for (item of row; track $index) {\r\n <app-module-item [$item]=\"item\" [$width]=\"itemWidth\" [$height]=\"100\" [$iconTextVerticalMargin]=\"iconTextVerticalMargin\"></app-module-item>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n</div>", styles: [".core-root-menu-item-picker-container .header-bottom{position:absolute;top:59px;left:0}.core-root-menu-item-picker-container .scroll{overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column;align-items:flex-start;flex-wrap:wrap;-ms-overflow-style:none}.core-root-menu-item-picker-container .scroll::-webkit-scrollbar{display:none}.core-root-menu-item-picker-container .menu-row{display:flex;flex-wrap:nowrap;justify-content:space-between}.core-root-menu-item-picker-container .stop-mode-icon{cursor:pointer;width:24px;height:24px;font-size:24px}\n"] }]
36949
- }], ctorParameters: () => [{ type: MultiLanguageService }, { type: ApplicationHelpService }, { type: i0.Renderer2 }, { type: NavigatorService }, { type: LayoutService }, { type: DomService }, { type: MenuService }, { type: SysMenuService }, { type: AuthService }, { type: AppConfigService }], propDecorators: { logoPath: [{
36950
- type: Input
36951
- }], itemsPerRow: [{
36952
- type: Input
36953
- }], iconTextVerticalMargin: [{
36954
- type: Input
36955
- }], container: [{
36956
- type: ViewChild,
36957
- args: ['container']
36958
- }] } });
36959
-
36960
- class CoreRootMenuItemPickerService {
36961
- constructor() { }
36962
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
36963
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, providedIn: 'root' }); }
36964
- }
36965
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, decorators: [{
36966
- type: Injectable,
36967
- args: [{
36968
- providedIn: 'root'
36969
- }]
36970
- }], ctorParameters: () => [] });
36971
-
36972
- class ComPartyService {
36973
- constructor(recursiveService, alertService) {
36974
- this.recursiveService = recursiveService;
36975
- this.alertService = alertService;
36976
- this.instances = [];
36977
- this.loading = true;
36978
- this.comTreeData$ = new BehaviorSubject([]);
36979
- this.comTreeDataWithPeople$ = new BehaviorSubject([]);
36980
- this.linerData$ = new BehaviorSubject([]);
36981
- this.buildTreeFlag$ = new BehaviorSubject(false);
36982
- this.status$ = new BehaviorSubject({
36983
- selectedKey: undefined,
36984
- activeKeys: [],
36985
- checkedKeys: [],
36986
- expandedKeys: [],
36987
- checkInheritance: true
36988
- });
36989
- this.linerData$.subscribe(xs => {
36990
- const idCountMap = new Map();
36991
- xs.forEach(item => {
36992
- const id = item.id;
36993
- idCountMap.set(id, (idCountMap.get(id) ?? 0) + 1);
36994
- });
36995
- const duplicates = Array.from(idCountMap.entries())
36996
- .filter(([_, count]) => count > 1)
36997
- .map(([id]) => id);
36998
- if (!!duplicates.length) {
36999
- if (isDevMode()) {
37000
- alertService.error('🔁 Duplicate IDs: ' + duplicates.reduce((a, c) => a + ";" + c, ''), alertOptions);
37001
- }
37002
- }
37003
- });
37004
- }
37005
- buildTreeData(status = {
37006
- selectedKey: undefined,
37007
- activeKeys: [],
37008
- checkedKeys: [],
37009
- expandedKeys: [],
37010
- checkInheritance: true
37011
- }) {
37012
- this.loading = true;
37013
- const cloneCopy = JSON.parse(JSON.stringify(this.linerData$.value));
37014
- if (typeof Worker !== 'undefined') {
37015
- // Create a new
37016
- console.log("🟢🟢 Worker works");
37017
- const worker = new Worker(liner_to_nested_array_script);
37018
- worker.addEventListener('message', ({ data }) => {
37019
- const newData = data.list;
37020
- this.comTreeData$.next(newData);
37021
- this.loading = false;
37022
- });
37023
- worker.postMessage({
37024
- list: cloneCopy,
37025
- keyField: 'id',
37026
- titleField: 'name',
37027
- parentField: 'parentId',
37028
- activeField: 'active',
37029
- checkedField: 'checked',
37030
- expandedField: 'expand',
37031
- status
37032
- });
37033
- }
37034
- else {
37035
- // Web workers are not supported in this environment.
37036
- // You should add a fallback so that your program still executes correctly.
37037
- this.recursiveService
37038
- .linerArrayToNestedArray(cloneCopy, 'id', 'name', 'parentId', 'active', 'checked', 'expand', status)
37039
- .subscribe((obj) => {
37040
- const newData = obj.list;
37041
- this.comTreeData$.next(newData);
37042
- this.loading = false;
37043
- });
37044
- }
37045
- }
37046
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ComPartyService, deps: [{ token: RecursiveService }, { token: AlertService }], target: i0.ɵɵFactoryTarget.Injectable }); }
37047
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ComPartyService, providedIn: 'root' }); }
37048
- }
37049
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ComPartyService, decorators: [{
37050
- type: Injectable,
37051
- args: [{
37052
- providedIn: 'root'
37053
- }]
37054
- }], ctorParameters: () => [{ type: RecursiveService }, { type: AlertService }] });
37055
-
37056
- class CoreComTreeComponent extends CoreFormControlBaseComponent {
37057
- writeValue(obj) {
37058
- this.value = obj;
37059
- switch (this.accessorMode) {
37060
- case EnumCoreOrgTreeaAccessorMode.CHECKED:
37061
- if (!!obj) {
37062
- const checkedKeys = [];
37063
- this.checkedIds = obj; // <=== 24/10/2023
37064
- obj.map(x => checkedKeys.push(x.toString()));
37065
- this.loading = true;
37066
- this.recursiveService.writeValueChecked(checkedKeys, this.data, this.disabledLoopExpand).subscribe(_ => {
37067
- this.loading = false;
37068
- if (!!this.data && !!this.data?.length)
37069
- this.data[0].tree$Expanded = true;
37070
- });
37071
- }
37072
- break;
37073
- case EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE:
37074
- case EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE:
37075
- if (!!obj) {
37076
- const activatedKeys = [];
37077
- obj.map(x => activatedKeys.push(x.toString()));
37078
- this.loading = true;
37079
- this.recursiveService.writeValueActivated(activatedKeys, this.data, this.disabledLoopExpand).subscribe(_ => {
37080
- this.loading = false;
37081
- if (!!this.data && !!this.data?.length)
37082
- this.data[0].tree$Expanded = true;
37083
- });
37084
- }
37085
- break;
37086
- default:
37087
- break;
37088
- }
37089
- if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED) {
37090
- }
37091
- else /* EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE or EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE */ {
37092
- }
37093
- }
37094
- setDisabledState(disabled) {
37095
- this.disabled = disabled;
37096
- }
37097
- constructor(
37098
- //public override injector: Injector,
37099
- authService, recursiveService, mls, layoutService, coreOrgTreeService,
37100
- // private coreOrgTreeState: CoreOrgTreeState,
37101
- alertService, organizationService) {
37102
- super( /*injector*/);
37103
- this.authService = authService;
37104
- this.recursiveService = recursiveService;
37105
- this.mls = mls;
37106
- this.layoutService = layoutService;
37107
- this.coreOrgTreeService = coreOrgTreeService;
37108
- this.alertService = alertService;
37109
- this.organizationService = organizationService;
37110
- this.lineColor = 'transparent';
37111
- this.accessorMode = EnumCoreOrgTreeaAccessorMode.CHECKED;
37112
- //TO BE NEW
37113
- this.searchMode = EnumCoreOrgTreeaSearchMode.REDUCE;
37114
- this.excludedIds$ = new BehaviorSubject([]); // 2024-05-10: to be implemented
37115
- this.stateIsolated$ = new BehaviorSubject(false);
37116
- this.itemDoubleClick = new EventEmitter();
37117
- this.itemClick = new EventEmitter();
37118
- this.showSearch = false;
37119
- this.hiddenToolClickStream$ = new BehaviorSubject('');
37120
- this.value = [];
37121
- this.activeIds = [];
37122
- this.checkedIds = [];
37123
- this.subscriptions = [];
37124
- this.search$ = new Subject();
37125
- this.searchPlaceholder = "Tìm kiếm...";
37126
- this.checkInheritance = true; // default value is true
37127
- this.showDissolved = false; // default value is false
37128
- this.initializing = true;
37129
- // this.reduced$ = this.coreOrgTreeState.coreOrgTreeReduced$;
37130
- this.initializing = false;
37131
- }
37132
- ngOnChanges(changes) {
37133
- if (changes['height']) {
37134
- this.resizeHeight();
37135
- }
37136
- }
37137
- ngOnInit() {
37138
- super.register();
37139
- //this.layoutService.leftbarOpen$.next(false);
37140
- this.instanceNumber = new Date().getTime();
37141
- const newInstance = {
37142
- instanceNumber: this.instanceNumber,
37143
- selectedKey$: new BehaviorSubject(undefined),
37144
- activeKeys$: new BehaviorSubject([]),
37145
- checkedKeys$: new BehaviorSubject([]),
37146
- expandedKeys$: new BehaviorSubject([]),
37147
- checkInheritance$: new BehaviorSubject(true)
37148
- };
37149
- this.organizationService.instances.push(newInstance);
37150
- // Check xem chiều cao height có được truyền vào hay không
37151
- if (this.height === undefined) {
37152
- if (isDevMode()) {
37153
- //this.alertService.warn("CoreOrgTree không nhận được chiều cao (height) truyền vào từ lớp ngoài. Chiều cao mặc định sẽ được tính toán dựa vào bố cục chính.", alertOptions);
37154
- }
37155
- this.subscriptions.push(this.layoutService.contentContainerHeight$.subscribe(x => {
37156
- // basicSpacing là paddingBottom của lớp content-container
37157
- this.height = x - this.layoutService.corePageHeaderHeight - this.layoutService.basicSpacing;
37158
- }));
37159
- }
37160
- this.subscriptions.push(this.organizationService.linerData$.subscribe((x) => {
37161
- this.linnerOrgArray = x;
37162
- }));
37163
- this.subscriptions.push(this.organizationService.buildTreeFlag$.pipe(skip(1)).subscribe(_ => {
37164
- this.buildTreeData();
37165
- }));
37166
- this.subscriptions.push(this.stateIsolated$.subscribe(x => {
37167
- if (x) {
37168
- if (!!this.statusSubscription) {
37169
- this.statusSubscription.unsubscribe();
37170
- }
37171
- }
37172
- else {
37173
- if (!this.statusSubscription) {
37174
- this.statusSubscription = this.organizationService.status$.subscribe((x) => {
37175
- console.log("this.organizationService.status$ changes", x);
37176
- const newActiveIds = [];
37177
- x.activeKeys.map((k) => {
37178
- newActiveIds.push(Number(k));
37179
- });
37180
- this.activeIds = newActiveIds;
37181
- if (this.accessorMode !== EnumCoreOrgTreeaAccessorMode.CHECKED) {
37182
- this.value = this.activeIds;
37183
- this.onChange(this.activeIds);
37184
- }
37185
- this.selectedKey = x.selectedKey;
37186
- });
37187
- }
37188
- }
37189
- }));
37190
- this.subscriptions.push(this.coreOrgTreeService.showSearch$.subscribe(x => this.showSearch = x));
37191
- this.subscriptions.push(this.hiddenToolClickStream$.pipe(buffer(this.hiddenToolClickStream$.pipe(debounceTime(250))), map$1(clicks => clicks.length), filter(clicksLength => clicksLength >= 5))
37192
- .subscribe(_ => {
37193
- this.coreOrgTreeService.showSearch$.next(!this.coreOrgTreeService.showSearch$.value);
37194
- }));
37195
- this.subscriptions.push(this.search$
37196
- .pipe(filter((x) => x !== null), debounceTime(500), distinctUntilChanged(), switchMap((text) => {
37197
- console.log('switchMap works');
37198
- this.loading = true;
37199
- // AUG 2024 NEW : MUST BE TESTED
37200
- if (this.searchMode === EnumCoreOrgTreeaSearchMode.HIGHLIGHT) {
37201
- return this.recursiveService.findItem(text, this.data);
37202
- }
37203
- else {
37204
- return of(this.recursiveService.reducingFilter(this.scrollContainer, text));
37205
- }
37206
- }))
37207
- .subscribe((x) => {
37208
- this.loading = false;
37209
- // if (this.searchMode === EnumCoreOrgTreeaSearchMode.REDUCE) {
37210
- // this.dataFiltered = x as IOrgTreeItem[];
37211
- // }
37212
- }));
37213
- this.subscriptions.push(this.organizationService.status$
37214
- .pipe(filter((value) => !!!this.initializing && !!value))
37215
- .subscribe((x) => {
37216
- if (!!localStorage) {
37217
- localStorage.setItem('coreOrgTreeStatus', JSON.stringify(x));
37218
- }
37219
- }));
37220
- this.subscriptions.push(this.mls.lang$.subscribe((x) => (this.lang = x)));
37221
- }
37222
- resizeHeight() {
37223
- // height is not given and the tree resize as standard
37224
- if (!!!this.height) {
37225
- const sizeHeaderHeight = Number(getComputedStyle(document.documentElement)
37226
- .getPropertyValue('--size-header-height')
37227
- .replace('px', ''));
37228
- const sizeCorePageHeaderHeight = Number(getComputedStyle(document.documentElement)
37229
- .getPropertyValue('--size-core-page-header-height')
37230
- .replace('px', ''));
37231
- const containerHeight = window.innerHeight - sizeHeaderHeight - sizeCorePageHeaderHeight;
37232
- const pageHeaderHeight = Number(getComputedStyle(document.documentElement)
37233
- .getPropertyValue('--size-core-page-header-height')
37234
- .replace('px', ''));
37235
- const paginationHeight = Number(getComputedStyle(document.documentElement)
37236
- .getPropertyValue('--size-core-pagination-height')
37237
- .replace('px', ''));
37238
- const sizeMarginCorePaginationFull = Number(getComputedStyle(document.documentElement)
37239
- .getPropertyValue('--size-margin-core-pagination')
37240
- .replace('px', ''));
37241
- const height = containerHeight - pageHeaderHeight - paginationHeight + sizeMarginCorePaginationFull;
37242
- console.log(height);
37243
- this.container?.nativeElement.style.setProperty('--height', height + 'px');
37244
- }
37245
- else {
37246
- this.container?.nativeElement.style.setProperty('--height', this.height + 'px');
38495
+ class CoreLazyMountComponent {
38496
+ constructor() {
38497
+ this.vcRef = inject(ViewContainerRef);
38498
+ }
38499
+ set props(value) {
38500
+ this._props = value;
38501
+ this.assignInputs();
38502
+ }
38503
+ async ngOnInit() {
38504
+ if (this.loadComponent) {
38505
+ const componentType = await this.loadComponent();
38506
+ this.componentRef = this.vcRef.createComponent(componentType);
38507
+ this.assignInputs();
37247
38508
  }
37248
38509
  }
37249
- ngAfterViewInit() {
37250
- setTimeout(() => {
37251
- this.subscriptions.push(this.organizationService.comTreeData$.subscribe((x) => {
37252
- this.data = x;
37253
- //this.dataFiltered = JSON.parse(JSON.stringify(x));
37254
- console.log("new Data coming", this.data, new Date().getTime());
37255
- if (!!this.data) {
37256
- if (!!this.data.length)
37257
- this.data[0].tree$Expanded = true;
37258
- }
37259
- }));
37260
- this.subscriptions.push(this.coreOrgTreeService.arrowFontSize$.subscribe(x => {
37261
- this.container?.nativeElement.style.setProperty('--arrow-font-size', x + 'px');
37262
- }));
37263
- this.subscriptions.push(this.coreOrgTreeService.titleWrapperMaxWidth$.pipe(filter(x => !!x)).subscribe(x => {
37264
- this.container?.nativeElement.style.setProperty('--title-wrapper-max-width', x + 'px');
37265
- }));
37266
- this.subscriptions.push(this.organizationService.status$.subscribe(x => {
37267
- if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE && !!x.activeKeys) {
37268
- this.onChange(x.activeKeys.map(i => Number(i)));
37269
- }
37270
- else if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE) {
37271
- // tạm thời bỏ qua
37272
- }
37273
- else if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED && !!x.checkedKeys) {
37274
- this.onChange(x.checkedKeys.map(i => Number(i)));
37275
- }
37276
- }));
37277
- });
38510
+ assignInputs() {
38511
+ if (this.componentRef && this._props) {
38512
+ Object.assign(this.componentRef.instance, this._props);
38513
+ this.componentRef.changeDetectorRef.markForCheck();
38514
+ }
37278
38515
  }
37279
- onItemClickLocal(e) {
37280
- this.linnerOrgArray.map((x) => (x.active = false));
37281
- setTimeout(() => this.buildTreeData());
38516
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreLazyMountComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
38517
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: CoreLazyMountComponent, isStandalone: true, selector: "core-lazy-mount", inputs: { loadComponent: "loadComponent", props: "props" }, ngImport: i0, template: "", styles: [""] }); }
38518
+ }
38519
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreLazyMountComponent, decorators: [{
38520
+ type: Component,
38521
+ args: [{ selector: 'core-lazy-mount', imports: [], template: "" }]
38522
+ }], propDecorators: { loadComponent: [{
38523
+ type: Input
38524
+ }], props: [{
38525
+ type: Input
38526
+ }] } });
38527
+
38528
+ class ModuleItemComponent extends BaseComponent {
38529
+ constructor(mls, navigatorService, cdr, menuService) {
38530
+ super(mls);
38531
+ this.mls = mls;
38532
+ this.navigatorService = navigatorService;
38533
+ this.cdr = cdr;
38534
+ this.menuService = menuService;
38535
+ this.$item = input.required();
38536
+ this.$itemPadding = input(5);
38537
+ this.$width = input.required();
38538
+ this.$height = input.required();
38539
+ this.$iconTextVerticalMargin = input(25);
38540
+ this.$active = signal(false);
38541
+ this.iconClickStream$ = new BehaviorSubject('');
37282
38542
  }
37283
- onToggleItem(e) {
37284
- const cloneCopy = JSON.parse(JSON.stringify(this.linnerOrgArray));
37285
- const filter = cloneCopy.filter((x) => x.id === e.id);
37286
- if (filter.length === 1) {
37287
- filter[0].expand = !!!e.expand;
38543
+ ngOnInit() {
38544
+ this.subscriptions.push(this.mls.lang$.subscribe(x => {
38545
+ this.lang = x;
38546
+ this.cdr.markForCheck();
38547
+ }));
38548
+ if (!!localStorage) {
38549
+ const activeRootMenuItemId = Number(localStorage.getItem('activeRootMenuItemId') || '0');
38550
+ const active = activeRootMenuItemId === this.$item()?.id;
38551
+ this.$active.set(active);
37288
38552
  }
37289
- this.linnerOrgArray = cloneCopy;
37290
- setTimeout(() => this.buildTreeData());
37291
38553
  }
37292
- // buildTreeData(): void {
37293
- // this.loading = true;
37294
- // const cloneCopy = JSON.parse(JSON.stringify(this.linnerOrgArray));
37295
- // if (typeof Worker !== 'undefined') {
37296
- // // Create a new
37297
- // console.log("🟢🟢 Worker works");
37298
- // this.worker = new Worker(liner_to_nested_array_script);
37299
- // this.worker.addEventListener('message', ({ data }) => {
37300
- // this.data = data.list;
37301
- // //this.dataFiltered = JSON.parse(JSON.stringify(data.list));
37302
- // if (!!this.data && !!this.data?.length) this.data[0].tree$Expanded = true;
37303
- // this.loading = false;
37304
- // });
37305
- // this.worker.postMessage({
37306
- // list: cloneCopy,
37307
- // keyField: 'id',
37308
- // titleField: 'name',
37309
- // parentField: 'parentId',
37310
- // activeField: 'active',
37311
- // //inheritantActiveField: 'inheritantActive',
37312
- // checkedField: 'checked',
37313
- // expandedField: 'expand',
37314
- // });
37315
- // } else {
37316
- // // Web workers are not supported in this environment.
37317
- // // You should add a fallback so that your program still executes correctly.
37318
- // const status = this.organizationService.status$.value;
37319
- // this.subscriptions.push(
37320
- // this.recursiveService
37321
- // .linerArrayToNestedArray(
37322
- // cloneCopy,
37323
- // 'id',
37324
- // 'name',
37325
- // 'parentId',
37326
- // 'active',
37327
- // 'checked',
37328
- // 'expand',
37329
- // //status
37330
- // )
37331
- // .subscribe((obj) => {
37332
- // this.data = obj.list;
37333
- // //this.dataFiltered = JSON.parse(JSON.stringify(obj.list));
37334
- // if (!!this.data && !!this.data?.length) this.data[0].tree$Expanded = true;
37335
- // this.loading = false;
37336
- // })
37337
- // );
37338
- // }
37339
- // }
37340
- buildTreeData() {
37341
- this.loading = true;
37342
- const cloneCopy = JSON.parse(JSON.stringify(this.linnerOrgArray));
37343
- // ✅ ADD THIS FILTER
37344
- const filteredList = !this.showDissolved
37345
- ? cloneCopy.filter(x => x.active === true)
37346
- : cloneCopy;
37347
- if (typeof Worker !== 'undefined') {
37348
- this.worker = new Worker(liner_to_nested_array_script);
37349
- this.worker.addEventListener('message', ({ data }) => {
37350
- this.data = data.list;
37351
- if (!!this.data?.length)
37352
- this.data[0].tree$Expanded = true;
37353
- this.loading = false;
37354
- });
37355
- // ✅ USE filteredList INSTEAD OF cloneCopy
37356
- this.worker.postMessage({
37357
- list: filteredList,
37358
- keyField: 'id',
37359
- titleField: 'name',
37360
- parentField: 'parentId',
37361
- activeField: 'active',
37362
- checkedField: 'checked',
37363
- expandedField: 'expand',
37364
- });
38554
+ onClick(e, item) {
38555
+ this.iconClickStream$.next(crypto.randomUUID());
38556
+ if (!!item) {
38557
+ this.navigatorService.clickedItem$.next(item);
37365
38558
  }
37366
- else {
37367
- this.subscriptions.push(this.recursiveService
37368
- .linerArrayToNestedArray(filteredList, // ✅ use filteredList
37369
- 'id', 'name', 'parentId', 'active', 'checked', 'expand')
37370
- .subscribe((obj) => {
37371
- this.data = obj.list;
37372
- if (!!this.data?.length)
37373
- this.data[0].tree$Expanded = true;
37374
- this.loading = false;
37375
- }));
38559
+ if (localStorage.getItem('moduleDesignMode') === 'on')
38560
+ return;
38561
+ this.navigatorService.activeRootMenuItemId$.next(item?.id);
38562
+ if (!!localStorage) {
38563
+ localStorage.setItem('activeRootMenuItemId', (item?.id || 0).toString());
37376
38564
  }
38565
+ this.menuService.isOpen$.next(true); // trigger the LeftBar to be opened at the first time
37377
38566
  }
37378
- onExpandTogglerClick(e, event) {
37379
- event.stopPropagation();
37380
- const newValue = !e.tree$Expanded;
37381
- e.tree$Expanded = newValue;
37382
- // updating status with newValue
37383
- const currentExpandedIds = this.organizationService.status$.value?.expandedKeys;
37384
- let newExpandedIds = currentExpandedIds?.filter((_) => !!!currentExpandedIds.includes(e.id.toString()));
37385
- if (newValue) {
37386
- newExpandedIds?.push(e.id.toString());
37387
- }
37388
- newExpandedIds?.sort();
37389
- const newExpandedKeys = [];
37390
- newExpandedIds.map((x) => newExpandedKeys.push(x.toString()));
37391
- this.organizationService.status$.next({
37392
- ...this.organizationService.status$.value,
37393
- expandedKeys: newExpandedKeys,
37394
- });
38567
+ ngAfterViewInit() {
38568
+ this.subscriptions.push(this.navigatorService.activeRootMenuItemId$.subscribe(x => {
38569
+ const active = x === this.$item()?.id;
38570
+ this.$active.set(active);
38571
+ }));
38572
+ this.subscriptions.push(this.iconClickStream$.pipe(buffer(this.iconClickStream$.pipe(debounceTime(250))), map$1(clicks => clicks.length), filter(clicksLength => clicksLength >= 5))
38573
+ .subscribe(_ => {
38574
+ this.navigatorService.showEditSvg$.next(true);
38575
+ }));
37395
38576
  }
37396
- onItemCheck(e, newValue) {
37397
- this.itemClick?.emit(e);
37398
- if (this.accessorMode !== EnumCoreOrgTreeaAccessorMode.CHECKED)
37399
- return;
37400
- // We have this var to hold nodes that are being changed
37401
- let toggledIds;
37402
- // We should calculate a new state into this var:
37403
- const newCheckedIds = JSON.parse(JSON.stringify(this.checkedIds));
37404
- // We will call this function after toggledIds changed
37405
- const changeValue = () => {
37406
- // If newValue === true, we will disctintly push changed ids to the state
37407
- // Otherwise we will remove them from the state
37408
- if (!!newValue) {
37409
- toggledIds.map(x => {
37410
- if (!!!newCheckedIds.includes(x)) {
37411
- newCheckedIds.push(x);
37412
- }
37413
- });
37414
- // Then asign the state to the newCheckedIds
37415
- this.checkedIds = newCheckedIds;
37416
- }
37417
- else {
37418
- const filter = newCheckedIds.filter(x => !!!toggledIds.includes(x));
37419
- // Then asign the state to the filter
37420
- this.checkedIds = filter;
38577
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ModuleItemComponent, deps: [{ token: MultiLanguageService }, { token: NavigatorService }, { token: i0.ChangeDetectorRef }, { token: MenuService }], target: i0.ɵɵFactoryTarget.Component }); }
38578
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: ModuleItemComponent, isStandalone: true, selector: "app-module-item", inputs: { $item: { classPropertyName: "$item", publicName: "$item", isSignal: true, isRequired: true, transformFunction: null }, $itemPadding: { classPropertyName: "$itemPadding", publicName: "$itemPadding", isSignal: true, isRequired: false, transformFunction: null }, $width: { classPropertyName: "$width", publicName: "$width", isSignal: true, isRequired: true, transformFunction: null }, $height: { classPropertyName: "$height", publicName: "$height", isSignal: true, isRequired: true, transformFunction: null }, $iconTextVerticalMargin: { classPropertyName: "$iconTextVerticalMargin", publicName: "$iconTextVerticalMargin", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div class=\"menu-item-wrapper\" \r\n [class.active] = \"$active()\"\r\n (click)=\"onClick($event, $item())\" [ngStyle]=\"{\r\n width: $width() + 'px',\r\n height: $height() + 'px',\r\n padding: $itemPadding() + 'px',\r\n visibility: !!$item() ? 'visible' : 'hidden'\r\n}\">\r\n @if (!!$item()) {\r\n <div class=\"d-flex d-flex-v d-flex-center\">\r\n @if ($item()!.iconSvg) {\r\n <div class=\"d-block\">\r\n <i class=\"module-icon\">\r\n <span [innerHtml]=\"$item()!.iconSvg! | stringHtml\"></span>\r\n </i>\r\n </div>\r\n } @else if ($item()!.iconClass) {\r\n <div>\r\n <i [class]=\"$item()!.iconClass + ' module-icon'\"></i>\r\n </div>\r\n }\r\n <div [ngStyle]=\"{\r\n height: $iconTextVerticalMargin() + 'px'\r\n }\"></div>\r\n <div class=\"module-code\" [appTooltip]=\"$item()!.code! | translate: lang\" [ngStyle]=\"{\r\n width: $width() - $itemPadding() * 2 + 'px'\r\n }\">{{ $item()!.code! | translate: lang}}</div>\r\n </div>\r\n }\r\n</div>", styles: [".menu-item-wrapper{display:flex;align-items:center;justify-content:center;box-sizing:border-box;-webkit-user-select:none;user-select:none}.menu-item-wrapper:not(.active){cursor:pointer}.menu-item-wrapper:not(.active):hover{background-color:var(--color-bg-main)}.menu-item-wrapper.active{color:var(--color-basic-orange)}.module-code{font-size:var(--typo-basic-font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:center}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "pipe", type: StringHtmlPipe, name: "stringHtml" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38579
+ }
38580
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ModuleItemComponent, decorators: [{
38581
+ type: Component,
38582
+ args: [{ selector: 'app-module-item', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
38583
+ NgStyle,
38584
+ TooltipDirective,
38585
+ StringHtmlPipe,
38586
+ TranslatePipe,
38587
+ ], template: "<div class=\"menu-item-wrapper\" \r\n [class.active] = \"$active()\"\r\n (click)=\"onClick($event, $item())\" [ngStyle]=\"{\r\n width: $width() + 'px',\r\n height: $height() + 'px',\r\n padding: $itemPadding() + 'px',\r\n visibility: !!$item() ? 'visible' : 'hidden'\r\n}\">\r\n @if (!!$item()) {\r\n <div class=\"d-flex d-flex-v d-flex-center\">\r\n @if ($item()!.iconSvg) {\r\n <div class=\"d-block\">\r\n <i class=\"module-icon\">\r\n <span [innerHtml]=\"$item()!.iconSvg! | stringHtml\"></span>\r\n </i>\r\n </div>\r\n } @else if ($item()!.iconClass) {\r\n <div>\r\n <i [class]=\"$item()!.iconClass + ' module-icon'\"></i>\r\n </div>\r\n }\r\n <div [ngStyle]=\"{\r\n height: $iconTextVerticalMargin() + 'px'\r\n }\"></div>\r\n <div class=\"module-code\" [appTooltip]=\"$item()!.code! | translate: lang\" [ngStyle]=\"{\r\n width: $width() - $itemPadding() * 2 + 'px'\r\n }\">{{ $item()!.code! | translate: lang}}</div>\r\n </div>\r\n }\r\n</div>", styles: [".menu-item-wrapper{display:flex;align-items:center;justify-content:center;box-sizing:border-box;-webkit-user-select:none;user-select:none}.menu-item-wrapper:not(.active){cursor:pointer}.menu-item-wrapper:not(.active):hover{background-color:var(--color-bg-main)}.menu-item-wrapper.active{color:var(--color-basic-orange)}.module-code{font-size:var(--typo-basic-font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:center}\n"] }]
38588
+ }], ctorParameters: () => [{ type: MultiLanguageService }, { type: NavigatorService }, { type: i0.ChangeDetectorRef }, { type: MenuService }] });
38589
+
38590
+ class CoreRootMenuItemPickerComponent extends BaseComponent {
38591
+ constructor(mls, ahs, renderer, navigatorService, layoutService, domService, menuService, sysMenuService, authService, appConfigService) {
38592
+ super(mls);
38593
+ this.mls = mls;
38594
+ this.ahs = ahs;
38595
+ this.renderer = renderer;
38596
+ this.navigatorService = navigatorService;
38597
+ this.layoutService = layoutService;
38598
+ this.domService = domService;
38599
+ this.menuService = menuService;
38600
+ this.sysMenuService = sysMenuService;
38601
+ this.authService = authService;
38602
+ this.appConfigService = appConfigService;
38603
+ this.logoPath = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTE1IiBoZWlnaHQ9IjI5IiB2aWV3Qm94PSIwIDAgMTE1IDI5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wIDI4LjU1MjhWOC41NzY4NkgyLjU2MzI5VjE2LjgxMzRIMTIuNTIzNVY4LjU3Njg2SDE1LjA4NjhWMjguNTMzOUgxMi41MjM1VjE5LjE0MjNIMi41ODE2VjI4LjUzMzlIMFYyOC41NTI4Wk0xOS4wNzgyIDExLjM2MDJWOC41NzY4NkgyMS40NTg0VjExLjM2MDJIMTkuMDc4MlpNMTkuMDc4MiAyOC41NTI4VjE0LjA4NjhIMjEuNDU4NFYyOC41NTI4SDE5LjA3ODJaTTI0LjIyMzEgMjIuMDc3MkwyOC4wMzE1IDIxLjY3OTZDMjguMjUxMiAyMi45ODYxIDI4LjcyNzIgMjMuOTUxNyAyOS40MjMgMjQuNTc2NkMzMC4xMTg3IDI1LjIwMTQgMzEuMDcwOCAyNS41MDQ0IDMyLjI0MjYgMjUuNTA0NEMzMy40ODc2IDI1LjUwNDQgMzQuNDIxNCAyNS4yMjAzIDM1LjA2MjIgMjQuNjcxMkMzNS43MDMgMjQuMTIyMSAzNi4wMTQzIDIzLjQ5NzMgMzYuMDE0MyAyMi43NTg5QzM2LjAxNDMgMjIuMjg1NSAzNS44ODYxIDIxLjg2ODkgMzUuNjExNSAyMS41NDdDMzUuMzM2OCAyMS4yMjUyIDM0Ljg3OTEgMjAuOTIyMiAzNC4yMiAyMC42NzYxQzMzLjc2MjIgMjAuNTI0NiAzMi43MzY5IDIwLjIyMTYgMzEuMTI1NyAxOS44MDUxQzI5LjAzODUgMTkuMjc0OSAyNy41NzM3IDE4LjYxMjIgMjYuNzQ5OCAxNy44MTY5QzI1LjU1OTcgMTYuNzE4NyAyNC45OTIxIDE1LjM3NDQgMjQuOTkyMSAxMy44MDI4QzI0Ljk5MjEgMTIuNzgwMyAyNS4yNjY4IDExLjgxNDcgMjUuODE2IDEwLjk0MzdDMjYuMzgzNiAxMC4wNTM4IDI3LjE3MDkgOS4zNzIxMSAyOC4yMTQ1IDguOTE3NjhDMjkuMjc2NSA4LjQ0NDMyIDMwLjUyMTUgOC4yMTcxIDMyLjAwNDYgOC4yMTcxQzM0LjQyMTQgOC4yMTcxIDM2LjIzNCA4Ljc2NjIgMzcuNDYwNyA5Ljg2NDQxQzM4LjY4NzQgMTAuOTgxNSAzOS4zMDk5IDEyLjQ1ODQgMzkuMzgzMiAxNC4zMTRMMzUuNDgzMyAxNC40NjU1QzM1LjMxODUgMTMuNDI0MSAzNC45NzA3IDEyLjY4NTcgMzQuNDIxNCAxMi4yNTAyQzMzLjg3MjEgMTEuODE0NyAzMy4wNjY1IDExLjU2ODUgMzEuOTY3OSAxMS41Njg1QzMwLjg1MTEgMTEuNTY4NSAyOS45NzIyIDExLjgxNDcgMjkuMzMxNCAxMi4yODhDMjguOTI4NiAxMi42MDk5IDI4LjcwODkgMTMuMDI2NSAyOC43MDg5IDEzLjUzNzdDMjguNzA4OSAxNC4wMTExIDI4LjkxMDMgMTQuNDI3NiAyOS4yOTQ4IDE0Ljc0OTVDMjkuNzcwOCAxNS4xODUgMzAuOTc5MiAxNS42Mzk1IDMyLjg2NTEgMTYuMTEyOEMzNC43NTA5IDE2LjU2NzIgMzYuMTYwOCAxNy4wNDA2IDM3LjA1NzkgMTcuNTUxOEMzNy45NTUxIDE4LjA0NDEgMzguNjY5MSAxOC43MjU4IDM5LjE4MTggMTkuNTc3OEMzOS42OTQ0IDIwLjQ0ODggMzkuOTUwOCAyMS40OTAyIDM5Ljk1MDggMjIuNzU4OUMzOS45NTA4IDIzLjg5NDkgMzkuNjM5NSAyNC45NzQyIDM5LjAxNyAyNS45Nzc3QzM4LjQxMjggMjYuOTgxMyAzNy41MzQgMjcuNzE5NyAzNi40MTcxIDI4LjE5MzFDMzUuMzAwMiAyOC42ODU0IDMzLjkwODcgMjguOTEyNiAzMi4yMjQzIDI4LjkxMjZDMjkuNzg5MSAyOC45MTI2IDI3LjkwMzMgMjguMzI1NiAyNi42MDMzIDI3LjE3MDZDMjUuMjY2OCAyNS45OTY3IDI0LjQ3OTUgMjQuMjkyNiAyNC4yMjMxIDIyLjA3NzJaTTQ5LjU4MTQgMTQuMDY3OVYxNy4wOTc0SDQ3LjA1NDhWMjIuOTY3MUM0Ny4wNTQ4IDI0LjE0MTEgNDcuMDczMSAyNC44NDE3IDQ3LjEwOTcgMjUuMDQ5OUM0Ny4xNjQ2IDI1LjIzOTMgNDcuMjc0NSAyNS40MDk3IDQ3LjQ1NzYgMjUuNTQyMkM0Ny42MjIzIDI1LjY3NDggNDcuODIzNyAyNS43MzE2IDQ4LjA4MDEgMjUuNzMxNkM0OC40MjggMjUuNzMxNiA0OC45MjIzIDI1LjU5OSA0OS41NjMxIDI1LjM3MThMNDkuODc0NCAyOC4zNDQ2QzQ5LjAxMzkgMjguNzIzMiA0OC4wNjE4IDI4LjkxMjYgNDYuOTYzMiAyOC45MTI2QzQ2LjMwNDEgMjguOTEyNiA0NS42OTk5IDI4Ljc5OSA0NS4xNjg5IDI4LjU3MThDNDQuNjM3OSAyOC4zNDQ2IDQ0LjIzNTEgMjguMDQxNiA0My45Nzg4IDI3LjY2MjlDNDMuNzQwOCAyNy4zMDMyIDQzLjU1NzcgMjYuNzkxOSA0My40NjYxIDI2LjE2NzFDNDMuMzkyOSAyNS43MTI2IDQzLjM1NjMgMjQuODIyNyA0My4zNTYzIDIzLjQ1OTRWMTcuMTE2NEg0MS42NzE4VjE0LjA4NjhINDMuMzU2M1YxMS4yMDg4TDQ3LjA1NDggOC45NTU1NVYxNC4wODY4SDQ5LjU4MTRWMTQuMDY3OVpNNTQuOTI3NyAxOC41MzY0TDUxLjU3NzEgMTcuOTMwNUM1MS45NjE2IDE2LjUxMDQgNTIuNjAyNSAxNS40NjkgNTMuNTE3OSAxNC43ODc0QzU0LjQ1MTcgMTQuMTI0NyA1NS44MjQ5IDEzLjc4MzkgNTcuNjM3NSAxMy43ODM5QzU5LjI4NTMgMTMuNzgzOSA2MC41MTIxIDEzLjk3MzIgNjEuMzE3NyAxNC4zODk4QzYyLjEyMzMgMTQuNzg3NCA2Mi42OTA5IDE1LjI5ODYgNjMuMDIwNCAxNS45MjM1QzYzLjM1IDE2LjU0ODMgNjMuNTE0OCAxNy42ODQ0IDYzLjUxNDggMTkuMzMxN0w2My40NTk4IDIzLjgwMDNDNjMuNDU5OCAyNS4wNjg5IDYzLjUxNDggMjUuOTk2NyA2My42NDI5IDI2LjYwMjZDNjMuNzUyOCAyNy4yMDg1IDYzLjk5MDggMjcuODcxMiA2NC4zMDIxIDI4LjU1MjhINjAuNjQwMkM2MC41MzA0IDI4LjMwNjcgNjAuNDIwNSAyNy45MjggNjAuMjkyMyAyNy40MzU3QzYwLjIzNzQgMjcuMjA4NSA2MC4xODI1IDI3LjA1NyA2MC4xNDU5IDI2Ljk4MTNDNTkuNTIzNCAyNy42MjUgNTguODQ1OSAyOC4wOTg0IDU4LjEzMTkgMjguNDIwM0M1Ny40MTc4IDI4Ljc0MjIgNTYuNjQ4OCAyOC44OTM3IDU1Ljg0MzIgMjguODkzN0M1NC40MTUxIDI4Ljg5MzcgNTMuMjc5OSAyOC40OTYgNTIuNDU2IDI3LjY4MThDNTEuNjMyMSAyNi44ODY2IDUxLjIxMSAyNS44NjQxIDUxLjIxMSAyNC42MTQ0QzUxLjIxMSAyMy44MDAzIDUxLjM5NDEgMjMuMDgwNyA1MS43Nzg1IDIyLjQzN0M1Mi4xNjMgMjEuODEyMSA1Mi42NzU3IDIxLjMwMDkgNTMuMzcxNCAyMC45NjAxQzU0LjA0ODkgMjAuNjM4MiA1NS4wMTkzIDIwLjMzNTIgNTYuMzAwOSAyMC4wNzAxQzU4LjAyMiAxOS43NDgzIDU5LjIzMDQgMTkuNDI2NCA1OS44ODk1IDE5LjE0MjNWMTguNzYzN0M1OS44ODk1IDE4LjAwNjMgNTkuNzA2NSAxNy40OTUgNTkuMzc2OSAxNy4xNzMyQzU5LjAyOSAxNi44NTEzIDU4LjM1MTYgMTYuNjgwOSA1Ny4zODEyIDE2LjY4MDlDNTYuNzIyIDE2LjY4MDkgNTYuMjA5NCAxNi44MzIzIDU1Ljg0MzIgMTcuMDk3NEM1NS40NDA0IDE3LjM4MTQgNTUuMTQ3NCAxNy44NTQ4IDU0LjkyNzcgMTguNTM2NFpNNTkuODg5NSAyMS42NDE3QzU5LjQxMzUgMjEuNzkzMiA1OC42NjI4IDIyLjAwMTUgNTcuNjM3NSAyMi4yMjg3QzU2LjYxMjIgMjIuNDU1OSA1NS45NTMxIDIyLjY4MzEgNTUuNjIzNSAyMi44OTE0QzU1LjE0NzQgMjMuMjUxMiA1NC44OTExIDIzLjY4NjYgNTQuODkxMSAyNC4yMzU3QzU0Ljg5MTEgMjQuNzg0OSA1NS4wNzQyIDI1LjIzOTMgNTUuNDc3IDI1LjYzNjlDNTUuODYxNSAyNi4wMzQ1IDU2LjMzNzUgMjYuMjIzOSA1Ni45NDE3IDI2LjIyMzlDNTcuNjE5MiAyNi4yMjM5IDU4LjI2IDI1Ljk5NjcgNTguODY0MiAyNS41NDIyQzU5LjMwMzYgMjUuMjAxNCA1OS41OTY2IDI0Ljc4NDkgNTkuNzQzMSAyNC4yNzM2QzU5LjgzNDYgMjMuOTUxNyA1OS44ODk1IDIzLjMwOCA1OS44ODk1IDIyLjM5OTFWMjEuNjQxN1pNNjUuNTQ3MSAxNC4wNjc5SDY3LjU5NzdWMTIuOTg4NkM2Ny41OTc3IDExLjc1NzkgNjcuNzI1OSAxMC44Njc5IDY3Ljk4MjIgMTAuMjYyQzY4LjIzODYgOS42NTYxMyA2OC42OTYzIDkuMTYzODMgNjkuMzczNyA4Ljc4NTE0QzcwLjA1MTIgOC40MDY0NSA3MC45MTE3IDguMjE3MSA3MS45MzcgOC4yMTcxQzcyLjk5OSA4LjIxNzEgNzQuMDQyNiA4LjM2ODU4IDc1LjA0OTYgOC43MDk0TDc0LjU3MzYgMTEuMzYwMkM3My45Njk0IDExLjIwODggNzMuMzgzNSAxMS4xMzMgNzIuODUyNSAxMS4xMzNDNzIuMzAzMiAxMS4xMzMgNzEuOTE4NyAxMS4yNjU2IDcxLjY2MjQgMTEuNTMwN0M3MS40MDYxIDExLjc5NTcgNzEuMzE0NSAxMi4yODggNzEuMzE0NSAxMy4wNDU0VjE0LjA2NzlINzQuMDc5MlYxNy4wNzg1SDcxLjMxNDVWMjguNTMzOUg2Ny42MTZWMTcuMDc4NUg2NS41NjU0VjE0LjA2NzlINjUuNTQ3MVpNNzQuNTE4NiAxNC4wNjc5SDc2LjU2OTNWMTIuOTg4NkM3Ni41NjkzIDExLjc1NzkgNzYuNjk3NCAxMC44Njc5IDc2Ljk1MzggMTAuMjYyQzc3LjIxMDEgOS42NTYxMyA3Ny42Njc4IDkuMTYzODMgNzguMzQ1MyA4Ljc4NTE0Qzc5LjAyMjcgOC40MDY0NSA3OS44ODMyIDguMjE3MSA4MC45MDg2IDguMjE3MUM4MS45NzA1IDguMjE3MSA4My4wMTQxIDguMzY4NTggODQuMDIxMSA4LjcwOTRMODMuNTQ1MSAxMS4zNjAyQzgyLjk0MDkgMTEuMjA4OCA4Mi4zNTUgMTEuMTMzIDgxLjgwNTcgMTEuMTMzQzgxLjI1NjQgMTEuMTMzIDgwLjg3MTkgMTEuMjY1NiA4MC42MTU2IDExLjUzMDdDODAuMzk1OSAxMS43OTU3IDgwLjI2NzcgMTIuMjg4IDgwLjI2NzcgMTMuMDQ1NFYxNC4wNjc5SDgzLjAzMjRWMTcuMDc4NUg4MC4yNjc3VjI4LjUzMzlINzYuNTY5M1YxNy4wNzg1SDc0LjUxODZWMTQuMDY3OVoiIGZpbGw9ImJsYWNrIi8+DQo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTk4LjY0OTggNS4yNDQ3N0M5Ny45NTQgMi43ODMyOCA5NS42NDcxIDIuNDA0NTkgOTMuNzI0NiAzLjc2Nzg4QzkxLjc0NzIgNS4xNjkwMyA5MC40Mjg5IDguMTk4NTcgOTEuMTA2NCAxMC42MjIyQzkxLjgwMjEgMTMuMDgzNyA5NC4xMDkxIDEzLjQ2MjQgOTYuMDMxNiAxMi4xMThDOTguMDA5IDEwLjcxNjkgOTkuMzI3MiA3LjY2ODQgOTguNjQ5OCA1LjI0NDc3WiIgZmlsbD0iI0YzNzU0MCIvPg0KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05MS4xNDI4IDI3LjgxNDlDOTEuOTMwMSAyNy4xMTQzIDkyLjk3MzggMjYuNDUxNiA5My44MTYgMjUuODgzNkw5NS40NjM4IDI0LjgyMzJDOTcuODQ0IDIwLjAzMjggMTAxLjA0OCAxNS41NDUzIDEwNC40MTcgMTEuNDU1NEMxMDcuNDkzIDcuNjg3NDQgMTExLjA4MiAzLjc0OTA1IDExNSAwLjkwODg2TDExNC4zNDEgMEMxMTAuMTQ4IDIuMjkxMDggMTA2LjMwMyA1LjQxNTI5IDEwMi44NDIgOC43NjY3MUM5OS4xOTg5IDEyLjMwNzUgOTUuODQ4MyAxNi4yMjY5IDkzLjE1NjggMjAuNTgxOUw5My4wNDcgMjAuNzMzNEw5Mi4yNzggMTkuMDY3MUM5MS43MTA0IDE3Ljg1NTMgOTAuMTM1OCAxNC42NTU0IDg4LjU0MjkgMTQuNjU1NEM4Ni45NSAxNC42NTU0IDg1LjQzMDMgMTUuODI5MyA4NC4zMTM1IDE2Ljk0NjRDODUuMzAyMiAxNy4zMDYyIDg2LjEyNjEgMTcuOTg3OCA4Ni43ODUyIDE4LjgyMUM4Ny44MTA1IDIwLjA3MDYgODguNjM0NSAyMS43NzQ4IDg5LjI5MzYgMjMuMjcwNkw4OS45MTYxIDI0LjY3MTdDOTAuMzE4OSAyNS42NzUzIDkwLjgxMzMgMjYuNzkyNCA5MS4xNDI4IDI3LjgxNDlaIiBmaWxsPSIjRjM3NTQwIi8+DQo8L3N2Zz4NCg==';
38604
+ this.itemsPerRow = 4;
38605
+ this.iconTextVerticalMargin = 25;
38606
+ this.items = [[]];
38607
+ this.zIndex = 1;
38608
+ this.imageErrorResolverType = EnumImageResolverType.LOGO;
38609
+ this.headerHeight = 0;
38610
+ this.width = 400;
38611
+ this.layoutService.modulePanelWidth$.subscribe(x => this.width = x);
38612
+ }
38613
+ ngOnInit() {
38614
+ this.subscriptions.push(this.mls.lang$.subscribe(x => this.lang = x));
38615
+ this.subscriptions.push(this.authService.data$.subscribe(x => this.isRoot = !!x?.isRoot));
38616
+ this.scrollWidth = this.layoutService.modulePanelWidth$.value - this.layoutService.basicSpacing * 2;
38617
+ this.scrollHeight = window.innerHeight - this.layoutService.headerHeight$.value - this.layoutService.basicSpacing * 2;
38618
+ this.itemWidth = this.scrollWidth / 4;
38619
+ }
38620
+ transformTo2DArray(flatList) {
38621
+ const result = [];
38622
+ for (let i = 0; i < flatList.length; i += this.itemsPerRow) {
38623
+ const row = flatList.slice(i, i + this.itemsPerRow);
38624
+ // If the last row has fewer than itemsPerRow, pad it with undefineds
38625
+ while (row.length < this.itemsPerRow) {
38626
+ row.push(undefined);
37421
38627
  }
37422
- // After the cases of if/else, make the control change with onChange
37423
- this.value = this.checkedIds;
37424
- this.onChange(this.checkedIds);
37425
- this.markAsTouched();
37426
- };
37427
- /* start: THIS CODE SCOPE calculates toggledIds */
37428
- if (this.checkInheritance) {
37429
- // If true, all the nested items will be checked/unchecked
37430
- this.recursiveService
37431
- .nestedToggleCheck(e, newValue, this.showDissolved)
37432
- .then((x) => {
37433
- let currentCheckedKeys = this.organizationService.status$.value.checkedKeys || [];
37434
- if (!!newValue) {
37435
- x.map(item => {
37436
- if (currentCheckedKeys.filter(i => i === item.toString()).length === 0) {
37437
- currentCheckedKeys.push(item.toString());
37438
- }
37439
- });
37440
- }
37441
- else {
37442
- currentCheckedKeys = currentCheckedKeys.filter(i => !x.includes(Number(i)));
37443
- }
37444
- this.organizationService.status$.next({
37445
- ...this.organizationService.status$.value,
37446
- checkedKeys: currentCheckedKeys //x.map(item => item.toString())
37447
- });
37448
- // The ids have been changed
37449
- toggledIds = x;
37450
- // Now toggledIds were set. We call the function we declared
37451
- changeValue();
37452
- })
37453
- .catch((x) => {
37454
- console.error(x);
37455
- });
37456
- }
37457
- else {
37458
- // Otherwise we simply toggle check for current item only
37459
- toggledIds = [e.id];
37460
- // Now toggledIds were set. We call the function we declared
37461
- changeValue();
38628
+ result.push(row);
37462
38629
  }
37463
- /* end: THIS CODE SCOPE calculates toggledIds */
37464
- // That is. Happy debugging!
37465
- }
37466
- onCheckIncludeDissolvedChange(value) {
37467
- console.log("onCheckIncludeDissolvedChange", value);
38630
+ return result;
37468
38631
  }
37469
- onCheckInheritanceChange(value) {
37470
- this.organizationService.status$.next({
37471
- ...this.organizationService.status$.value,
37472
- checkInheritance: value,
38632
+ ngAfterViewInit() {
38633
+ setTimeout(() => {
38634
+ this.designMode = localStorage.getItem('moduleDesignMode') === 'on';
38635
+ this.zIndex = this.domService.getMaxZIndex() + 1;
38636
+ // this.listenerFn = this.renderer.listen('window', 'click', (e: Event) => {
38637
+ // if (!this.designMode) {
38638
+ // if (this.container && !!!this.container.nativeElement.contains(e.target)) {
38639
+ // this.ahs.activeKey$.next(undefined);
38640
+ // }
38641
+ // }
38642
+ // });
38643
+ this.subscriptions.push(this.navigatorService.rootNavigatorItems$.subscribe(x => {
38644
+ // Transform the flat list into a 2D array
38645
+ this.items = this.transformTo2DArray(x);
38646
+ }));
38647
+ this.subscriptions.push(this.layoutService.headerHeight$.subscribe(x => {
38648
+ this.headerHeight = x;
38649
+ }));
38650
+ if (!!localStorage) {
38651
+ const activeRootMenuItemId = Number(localStorage.getItem('activeRootMenuItemId') || '0');
38652
+ this.navigatorService.activeRootMenuItemId$.next(activeRootMenuItemId);
38653
+ }
38654
+ if (window.innerWidth < this.layoutService.modulePanelWidth$.value) {
38655
+ this.layoutService.modulePanelWidth$.next(window.innerWidth);
38656
+ }
37473
38657
  });
37474
38658
  }
37475
- onObjectClick(e, event) {
37476
- // remove highlight class
37477
- // TO DO
37478
- if (!!e.protected)
37479
- return;
37480
- this.itemClick?.emit(e);
37481
- if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED)
37482
- return;
37483
- let activeIds = [];
37484
- this.data.map((item) => (item.active = false));
37485
- if (this.accessorMode ===
37486
- EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE ||
37487
- !!!this.accessorMode) {
37488
- // If true, all the nested items will be active, the others are inactive
37489
- this.recursiveService
37490
- .nestedResetActive(e, true)
37491
- .then((x) => {
37492
- activeIds = x;
37493
- activeIds.sort();
37494
- const newActiveKeys = [];
37495
- activeIds.map((x) => newActiveKeys.push(x.toString()));
37496
- this.organizationService.status$.next({
37497
- ...this.organizationService.status$.value,
37498
- activeKeys: newActiveKeys,
37499
- selectedKey: e.id.toString()
37500
- });
37501
- this.activeIds = activeIds;
37502
- console.log(this.activeIds);
37503
- this.onChange(activeIds);
37504
- })
37505
- .catch((x) => {
37506
- console.error(x);
37507
- });
38659
+ onDesignModeClick(e) {
38660
+ e.stopPropagation();
38661
+ if (localStorage.getItem('moduleDesignMode') === 'on') {
38662
+ localStorage.setItem('moduleDesignMode', 'off');
38663
+ this.designMode = false;
37508
38664
  }
37509
38665
  else {
37510
- // ACTIVATED_SINGLE
37511
- // Otherwise we simply set current item to be active only
37512
- activeIds = [e.id];
37513
- this.activeIds = activeIds;
37514
- this.organizationService.status$.next({
37515
- ...this.organizationService.status$.value,
37516
- activeKeys: [e.id.toString()],
37517
- selectedKey: e.id.toString(),
37518
- });
37519
- this.onChange(activeIds);
37520
- }
37521
- const { detail } = event;
37522
- if (detail === 2) {
37523
- console.log('This was a dblclick');
37524
- this.itemDoubleClick.emit(e);
38666
+ localStorage.setItem('moduleDesignMode', 'on');
38667
+ this.designMode = true;
37525
38668
  }
37526
- this.selectedItem = e;
37527
- }
37528
- onSearchChange(text) {
37529
- this.search$.next(text);
37530
- }
37531
- onHiddenToolClick(e) {
37532
- e.stopPropagation();
37533
- this.hiddenToolClickStream$.next(crypto.randomUUID());
37534
38669
  }
37535
38670
  ngOnDestroy() {
37536
- if (this.worker) {
37537
- this.worker.terminate();
37538
- }
37539
- this.subscriptions.map((x) => x?.unsubscribe());
37540
- if (!!this.instanceNumber) {
37541
- const tryToFind = this.organizationService.instances.filter((x) => x.instanceNumber === this.instanceNumber);
37542
- if (!!tryToFind.length) {
37543
- const newInstances = this.organizationService.instances.filter((x) => x.instanceNumber !== this.instanceNumber);
37544
- this.organizationService.instances = newInstances;
37545
- }
37546
- }
38671
+ this.subscriptions.map(x => x?.unsubscribe());
38672
+ if (this.listenerFn)
38673
+ this.listenerFn();
37547
38674
  }
37548
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreComTreeComponent, deps: [{ token: AuthService }, { token: RecursiveService }, { token: MultiLanguageService }, { token: LayoutService }, { token: CoreOrgTreeService }, { token: AlertService }, { token: ComPartyService }], target: i0.ɵɵFactoryTarget.Component }); }
37549
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreComTreeComponent, isStandalone: true, selector: "core-com-tree", inputs: { lineColor: "lineColor", fullWidthMode: "fullWidthMode", accessorMode: "accessorMode", searchMode: "searchMode", fullRendering: "fullRendering", height: "height", disabledLoopExpand: "disabledLoopExpand", showCheckInheritance: "showCheckInheritance", excludedIds$: "excludedIds$", stateIsolated$: "stateIsolated$" }, outputs: { itemDoubleClick: "itemDoubleClick", itemClick: "itemClick" }, providers: [
37550
- {
37551
- provide: NG_VALUE_ACCESSOR,
37552
- useExisting: forwardRef(() => CoreComTreeComponent),
37553
- multi: true
37554
- }
37555
- ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "displayContent", first: true, predicate: ["displayContent"], descendants: true }, { propertyName: "reducedIconWrapper", first: true, predicate: ["reducedIconWrapper"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n minWidth: '310px',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n @if (showSearch) {\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n }\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight * (showSearch ? 1 : 0) - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <div class=\"hidden-tool\" (click)=\"onHiddenToolClick($event)\"></div>\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track $index) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n @if (accessorMode === 'CHECKED') {\r\n <div class=\"check-inheritance-wrapper\">\r\n @if (showCheckInheritance) {\r\n <core-checkbox [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler feather-chevron-down\" (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"accessorMode != 'CHECKED' && selectedKey===id.toString()\"\r\n [class.highlighted]=\"highlighted\" [class.dissolved]=\"!isActive\"\r\n [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }] }); }
38675
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerComponent, deps: [{ token: MultiLanguageService }, { token: ApplicationHelpService }, { token: i0.Renderer2 }, { token: NavigatorService }, { token: LayoutService }, { token: DomService }, { token: MenuService }, { token: SysMenuService }, { token: AuthService }, { token: AppConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
38676
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreRootMenuItemPickerComponent, isStandalone: true, selector: "core-root-menu-item-picker", inputs: { logoPath: "logoPath", itemsPerRow: "itemsPerRow", iconTextVerticalMargin: "iconTextVerticalMargin" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-root-menu-item-picker-container\" [ngStyle]=\"{\r\n zIndex: zIndex,\r\n}\">\r\n <div class=\"mudule-picker-header d-flex d-flex-between\" [ngStyle]=\"{\r\n height: 59 + 'px'\r\n }\">\r\n <div class=\"HEADER_LOGO\">\r\n <div class=\"logo-wrapper d-flex\">\r\n <img src=\"logoPath\" class=\"lg\" [ngStyle]=\"{\r\n width: '130px',\r\n height: '59px',\r\n transform: 'translate(0, -5px)'\r\n }\" appImageErrorResolver [type]=\"imageErrorResolverType\">\r\n </div>\r\n </div>\r\n @if (!!isRoot) {\r\n <i \r\n [class.feather-square]=\"!designMode\" \r\n [class.feather-play]=\"!!designMode\" \r\n class=\"stop-mode-icon\" \r\n (click)=\"onDesignModeClick($event)\"\r\n [appTooltip]=\"!designMode ? 'Chuy\u1EC3n sang ch\u1EBF \u0111\u1ED9 thi\u1EBFt k\u1EBF' : 'Chuy\u1EC3n v\u1EC1 ch\u1EBF \u0111\u1ED9 b\u00ECnh th\u01B0\u1EDDng'\"\r\n ></i>\r\n }\r\n </div>\r\n\r\n <div class=\"header-bottom\" [ngStyle]=\"{\r\n width: width + 'px'\r\n }\">\r\n <core-line></core-line>\r\n </div>\r\n\r\n <div class=\"h15\"></div>\r\n\r\n <div class=\"scroll\" [ngStyle]=\"{\r\n width: width + 'px',\r\n height: scrollHeight + 'px'\r\n }\">\r\n @for (row of items; track $index) {\r\n <div class=\"menu-row\">\r\n @for (item of row; track $index) {\r\n <app-module-item [$item]=\"item\" [$width]=\"itemWidth\" [$height]=\"100\" [$iconTextVerticalMargin]=\"iconTextVerticalMargin\"></app-module-item>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n</div>", styles: [".core-root-menu-item-picker-container .header-bottom{position:absolute;top:59px;left:0}.core-root-menu-item-picker-container .scroll{overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column;align-items:flex-start;flex-wrap:wrap;-ms-overflow-style:none}.core-root-menu-item-picker-container .scroll::-webkit-scrollbar{display:none}.core-root-menu-item-picker-container .menu-row{display:flex;flex-wrap:nowrap;justify-content:space-between}.core-root-menu-item-picker-container .stop-mode-icon{cursor:pointer;width:24px;height:24px;font-size:24px}\n"], dependencies: [{ kind: "component", type: CoreLineComponent, selector: "core-line" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ModuleItemComponent, selector: "app-module-item", inputs: ["$item", "$itemPadding", "$width", "$height", "$iconTextVerticalMargin"] }, { kind: "directive", type: ImageErrorResolverDirective, selector: "[appImageErrorResolver]", inputs: ["type", "isFemale"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }] }); }
37556
38677
  }
37557
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreComTreeComponent, decorators: [{
38678
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerComponent, decorators: [{
37558
38679
  type: Component,
37559
- args: [{ selector: 'core-com-tree', imports: [
37560
- FormsModule,
38680
+ args: [{ selector: 'core-root-menu-item-picker', imports: [
38681
+ CoreLineComponent,
37561
38682
  NgStyle,
37562
- CoreCheckboxComponent,
37563
- CoreLoadingSurfaceComponent,
37564
- TranslatePipe,
38683
+ ModuleItemComponent,
38684
+ ImageErrorResolverDirective,
37565
38685
  TooltipDirective,
37566
- ], providers: [
37567
- {
37568
- provide: NG_VALUE_ACCESSOR,
37569
- useExisting: forwardRef(() => CoreComTreeComponent),
37570
- multi: true
37571
- }
37572
- ], template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n minWidth: '310px',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n @if (showSearch) {\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n }\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight * (showSearch ? 1 : 0) - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <div class=\"hidden-tool\" (click)=\"onHiddenToolClick($event)\"></div>\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track $index) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n @if (accessorMode === 'CHECKED') {\r\n <div class=\"check-inheritance-wrapper\">\r\n @if (showCheckInheritance) {\r\n <core-checkbox [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler feather-chevron-down\" (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"accessorMode != 'CHECKED' && selectedKey===id.toString()\"\r\n [class.highlighted]=\"highlighted\" [class.dissolved]=\"!isActive\"\r\n [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>" }]
37573
- }], ctorParameters: () => [{ type: AuthService }, { type: RecursiveService }, { type: MultiLanguageService }, { type: LayoutService }, { type: CoreOrgTreeService }, { type: AlertService }, { type: ComPartyService }], propDecorators: { lineColor: [{
37574
- type: Input
37575
- }], fullWidthMode: [{
37576
- type: Input
37577
- }], accessorMode: [{
37578
- type: Input
37579
- }], searchMode: [{
37580
- type: Input
37581
- }], fullRendering: [{
37582
- type: Input
37583
- }], height: [{
37584
- type: Input
37585
- }], disabledLoopExpand: [{
37586
- type: Input
37587
- }], showCheckInheritance: [{
38686
+ ], template: "<div #container class=\"core-root-menu-item-picker-container\" [ngStyle]=\"{\r\n zIndex: zIndex,\r\n}\">\r\n <div class=\"mudule-picker-header d-flex d-flex-between\" [ngStyle]=\"{\r\n height: 59 + 'px'\r\n }\">\r\n <div class=\"HEADER_LOGO\">\r\n <div class=\"logo-wrapper d-flex\">\r\n <img src=\"logoPath\" class=\"lg\" [ngStyle]=\"{\r\n width: '130px',\r\n height: '59px',\r\n transform: 'translate(0, -5px)'\r\n }\" appImageErrorResolver [type]=\"imageErrorResolverType\">\r\n </div>\r\n </div>\r\n @if (!!isRoot) {\r\n <i \r\n [class.feather-square]=\"!designMode\" \r\n [class.feather-play]=\"!!designMode\" \r\n class=\"stop-mode-icon\" \r\n (click)=\"onDesignModeClick($event)\"\r\n [appTooltip]=\"!designMode ? 'Chuy\u1EC3n sang ch\u1EBF \u0111\u1ED9 thi\u1EBFt k\u1EBF' : 'Chuy\u1EC3n v\u1EC1 ch\u1EBF \u0111\u1ED9 b\u00ECnh th\u01B0\u1EDDng'\"\r\n ></i>\r\n }\r\n </div>\r\n\r\n <div class=\"header-bottom\" [ngStyle]=\"{\r\n width: width + 'px'\r\n }\">\r\n <core-line></core-line>\r\n </div>\r\n\r\n <div class=\"h15\"></div>\r\n\r\n <div class=\"scroll\" [ngStyle]=\"{\r\n width: width + 'px',\r\n height: scrollHeight + 'px'\r\n }\">\r\n @for (row of items; track $index) {\r\n <div class=\"menu-row\">\r\n @for (item of row; track $index) {\r\n <app-module-item [$item]=\"item\" [$width]=\"itemWidth\" [$height]=\"100\" [$iconTextVerticalMargin]=\"iconTextVerticalMargin\"></app-module-item>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n</div>", styles: [".core-root-menu-item-picker-container .header-bottom{position:absolute;top:59px;left:0}.core-root-menu-item-picker-container .scroll{overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column;align-items:flex-start;flex-wrap:wrap;-ms-overflow-style:none}.core-root-menu-item-picker-container .scroll::-webkit-scrollbar{display:none}.core-root-menu-item-picker-container .menu-row{display:flex;flex-wrap:nowrap;justify-content:space-between}.core-root-menu-item-picker-container .stop-mode-icon{cursor:pointer;width:24px;height:24px;font-size:24px}\n"] }]
38687
+ }], ctorParameters: () => [{ type: MultiLanguageService }, { type: ApplicationHelpService }, { type: i0.Renderer2 }, { type: NavigatorService }, { type: LayoutService }, { type: DomService }, { type: MenuService }, { type: SysMenuService }, { type: AuthService }, { type: AppConfigService }], propDecorators: { logoPath: [{
37588
38688
  type: Input
37589
- }], excludedIds$: [{
38689
+ }], itemsPerRow: [{
37590
38690
  type: Input
37591
- }], stateIsolated$: [{
38691
+ }], iconTextVerticalMargin: [{
37592
38692
  type: Input
37593
- }], itemDoubleClick: [{
37594
- type: Output
37595
- }], itemClick: [{
37596
- type: Output
37597
38693
  }], container: [{
37598
38694
  type: ViewChild,
37599
38695
  args: ['container']
37600
- }], scrollContainer: [{
37601
- type: ViewChild,
37602
- args: ['scrollContainer']
37603
- }], displayContent: [{
37604
- type: ViewChild,
37605
- args: ['displayContent']
37606
- }], reducedIconWrapper: [{
37607
- type: ViewChild,
37608
- args: ['reducedIconWrapper']
37609
38696
  }] } });
37610
38697
 
38698
+ class CoreRootMenuItemPickerService {
38699
+ constructor() { }
38700
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
38701
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, providedIn: 'root' }); }
38702
+ }
38703
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, decorators: [{
38704
+ type: Injectable,
38705
+ args: [{
38706
+ providedIn: 'root'
38707
+ }]
38708
+ }], ctorParameters: () => [] });
38709
+
37611
38710
  class CoreComProfileComponent extends BaseComponent {
37612
38711
  ngOnChanges(changes) {
37613
38712
  this.cdr.markForCheck();
@@ -38037,11 +39136,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
38037
39136
  const coreDocGenRoutes = [
38038
39137
  {
38039
39138
  path: 'template-list',
38040
- loadComponent: () => import('./ngx-histaff-alpha-template-list.component-BXyP9Vki.mjs').then(m => m.TemplateListComponent),
39139
+ loadComponent: () => import('./ngx-histaff-alpha-template-list.component-CVK_Ewx4.mjs').then(m => m.TemplateListComponent),
38041
39140
  },
38042
39141
  {
38043
39142
  path: ":id",
38044
- loadComponent: () => import('./ngx-histaff-alpha-core-template-editor.component-F2nV8jgm.mjs').then(m => m.CoreTemplateEditorComponent),
39143
+ loadComponent: () => import('./ngx-histaff-alpha-core-template-editor.component-CwYRUlbM.mjs').then(m => m.CoreTemplateEditorComponent),
38045
39144
  canDeactivate: [CanDeactivateGuard]
38046
39145
  },
38047
39146
  {
@@ -38070,7 +39169,7 @@ const coreFormDesignRoutes = [
38070
39169
  },
38071
39170
  {
38072
39171
  path: ':id',
38073
- loadComponent: () => import('./ngx-histaff-alpha-core-form-design.component-DLEZuLXO.mjs').then(function (n) { return n.c; }).then(m => m.CoreFormDesignComponent)
39172
+ loadComponent: () => import('./ngx-histaff-alpha-core-form-design.component-Jzy7HTBy.mjs').then(function (n) { return n.c; }).then(m => m.CoreFormDesignComponent)
38074
39173
  }
38075
39174
  ];
38076
39175
 
@@ -38963,7 +40062,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
38963
40062
  const coreNavigationTrackerRoutes = [
38964
40063
  {
38965
40064
  path: '',
38966
- loadComponent: () => import('./ngx-histaff-alpha-tracker-studio.component-ySy7DIdC.mjs').then(m => m.TrackerStudioComponent)
40065
+ loadComponent: () => import('./ngx-histaff-alpha-tracker-studio.component-8tqyVAcU.mjs').then(m => m.TrackerStudioComponent)
38967
40066
  }
38968
40067
  ];
38969
40068
 
@@ -41552,33 +42651,33 @@ const coreWorkflowRoutes = [
41552
42651
  {
41553
42652
  path: 'form-assign/:id',
41554
42653
  outlet: "formAssignAux",
41555
- loadComponent: () => import('./ngx-histaff-alpha-wf-form-assign.component-qxz8Ozah.mjs').then(m => m.WfFormAssignComponent),
42654
+ loadComponent: () => import('./ngx-histaff-alpha-wf-form-assign.component-CRs1A8j_.mjs').then(m => m.WfFormAssignComponent),
41556
42655
  canDeactivate: [CanDeactivateGuard]
41557
42656
  }
41558
42657
  ]
41559
42658
  },
41560
42659
  {
41561
42660
  path: 'global-config',
41562
- loadComponent: () => import('./ngx-histaff-alpha-wf-global-config.component-DbZq1DK-.mjs').then(m => m.WfGlobalConfigComponent)
42661
+ loadComponent: () => import('./ngx-histaff-alpha-wf-global-config.component-yeFb4wxY.mjs').then(m => m.WfGlobalConfigComponent)
41563
42662
  },
41564
42663
  {
41565
42664
  path: 'db-settings',
41566
- loadComponent: () => import('./ngx-histaff-alpha-db-settings.component-DB6XegRZ.mjs').then(m => m.DbSettingsComponent)
42665
+ loadComponent: () => import('./ngx-histaff-alpha-db-settings.component-CpjFcS3r.mjs').then(m => m.DbSettingsComponent)
41567
42666
  },
41568
42667
  {
41569
42668
  path: 'workflow-consume',
41570
- loadComponent: () => import('./ngx-histaff-alpha-core-workflow-consume.component-D2txp5DP.mjs').then(m => m.CoreWorkflowConsumeComponent),
42669
+ loadComponent: () => import('./ngx-histaff-alpha-core-workflow-consume.component-Fma_hNMb.mjs').then(m => m.CoreWorkflowConsumeComponent),
41571
42670
  children: [
41572
42671
  {
41573
42672
  path: ':id',
41574
42673
  outlet: "workflowConsume",
41575
- loadComponent: () => import('./ngx-histaff-alpha-live-form.component-Dt0rgzHG.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
42674
+ loadComponent: () => import('./ngx-histaff-alpha-live-form.component-iX23HD-T.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
41576
42675
  }
41577
42676
  ]
41578
42677
  },
41579
42678
  {
41580
42679
  path: 'workflow-consume/:id',
41581
- loadComponent: () => import('./ngx-histaff-alpha-live-form.component-Dt0rgzHG.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
42680
+ loadComponent: () => import('./ngx-histaff-alpha-live-form.component-iX23HD-T.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
41582
42681
  },
41583
42682
  {
41584
42683
  path: 'workflow-group-edit/:id',
@@ -41588,17 +42687,17 @@ const coreWorkflowRoutes = [
41588
42687
  },
41589
42688
  {
41590
42689
  path: 'design/:id',
41591
- loadChildren: () => import('./ngx-histaff-alpha-design-wrapper.route-CdPC_FcN.mjs').then(m => m.wfDesignWrapperRoutes),
42690
+ loadChildren: () => import('./ngx-histaff-alpha-design-wrapper.route-BPTxhFez.mjs').then(m => m.wfDesignWrapperRoutes),
41592
42691
  },
41593
42692
  ]
41594
42693
  },
41595
42694
  {
41596
42695
  path: 'react/:id',
41597
- loadComponent: () => import('./ngx-histaff-alpha-wf-instance-step-react.component-eT3UGhUM.mjs').then(m => m.WfInstanceStepReactComponent)
42696
+ loadComponent: () => import('./ngx-histaff-alpha-wf-instance-step-react.component-Bri0bRw3.mjs').then(m => m.WfInstanceStepReactComponent)
41598
42697
  },
41599
42698
  {
41600
42699
  path: 'status/:id',
41601
- loadComponent: () => import('./ngx-histaff-alpha-wf-instance-status.component-DjFOVp06.mjs').then(m => m.WfInstanceStatusComponent)
42700
+ loadComponent: () => import('./ngx-histaff-alpha-wf-instance-status.component-Jahj4MO-.mjs').then(m => m.WfInstanceStatusComponent)
41602
42701
  }
41603
42702
  ];
41604
42703
 
@@ -43459,7 +44558,11 @@ class NavigatorComponent {
43459
44558
  else if (this.menuClickedItem?.tree$Tier == 3) { //nếu là 3 cấp
43460
44559
  array = x.filter(y => y.id == this.menuClickedItem.id);
43461
44560
  arrayParrent = x.filter(y => y.id == this.menuClickedItem.tree$Parent);
44561
+ if (!arrayParrent.length)
44562
+ return;
43462
44563
  let arrayGrandParrent = x.filter(z => z.id == arrayParrent[0].parent);
44564
+ if (!arrayGrandParrent.length)
44565
+ return;
43463
44566
  let element = document.getElementById('main-menu-' + arrayParrent[0].id);
43464
44567
  let element2 = document.getElementById('main-menu-' + arrayGrandParrent[0].id);
43465
44568
  array[0].tree$Selected = true;
@@ -44219,5 +45322,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
44219
45322
  * Generated bundle index. Do not edit.
44220
45323
  */
44221
45324
 
44222
- export { CoreButtonGroupVnsComponent as $, AppService as A, BaseComponent as B, ChatService as C, DialogService as D, EnumCoreTablePipeType as E, FullscreenModalLoaderComponent as F, CoreDatePickerComponent as G, CoreFormControlSeekerComponent as H, ImageErrorResolverDirective as I, CoreCurrencyInputComponent as J, EnumActorSourceType as K, CoreParamControlComponent as L, MultiLanguageService as M, CoreRadioGroupComponent as N, GptService as O, ApplicationHelpService as P, HotKeysDirective as Q, EnumCorePageEditMode as R, SocketService as S, TranslatePipe as T, CoreFormComponent as U, NavigatorService as V, JsonService as W, AppConfigService as X, EnumCoreButtonVNSCode as Y, READONLY_WORKFLOW_FIELDS as Z, noneAutoClosedAlertOptions as _, CorePageListComponent as a, CommonHttpRequestService as a$, CoreStickerCollectionComponent as a0, HtmlTooltipDirective as a1, CoreControlNoFormArrayComponent as a2, EnumFormDesignMode as a3, CoreControlComponent as a4, JsonSafePipe as a5, CoreAttachmentComponent as a6, CoreMonthSelectorComponent as a7, EnumImageResolverType as a8, NormalizeHumanNamePipe as a9, EnumStyleButtonClass as aA, CanActivateFunctionUrlMapperGuard as aB, InitializationCanActivateFn as aC, InitializationCanMatchFn as aD, httpInterceptorProviders as aE, InterceptorSkipHeader as aF, appTypeInterceptor as aG, baseUrlInterceptor as aH, authInterceptor as aI, graphInterceptor as aJ, tokenInterceptor as aK, responseInterceptor as aL, timeZoneInterceptor as aM, cachingInterceptor as aN, langInterceptor as aO, EnumFilterOperator as aP, OnlineUsersComponent as aQ, ActionService as aR, AppInitializationService as aS, AuthService as aT, CacheService as aU, EnumSwUpdateVersionUpdatesEventType as aV, CheckForUpdateService as aW, EnumDeviceType as aX, EnumBrowserType as aY, EnumOsType as aZ, ClientService as a_, CoreIosSwitcherComponent as aa, SunnyRotatingComponent as ab, MapAppdemoToServerPipePipe as ac, MapAttachmentToServerPipe as ad, MapNewsfeedMediaToServerPipe as ae, StringHtmlPipe as af, UploadedFilenameCutoffPipe as ag, DialogStateComponent as ah, FooterComponent as ai, RightchatComponent as aj, WaittingScreenComponent as ak, longAlertOptions as al, attachmentOptions as am, CORE_VNS_BUTTONS as an, defaultPaging as ao, DESKTOP_SCREEN_HEDER_HEIGHT as ap, MOBILE_SCREEN_HEDER_HEIGHT as aq, themeBlue as ar, DATE_VALUE_ACCESSOR as as, DateValueAccessor as at, EnumDragType as au, EnumErrorType as av, EnumIconClass as aw, EnumProfileInfoSector as ax, EnumSignalRType as ay, EnumSortDirection as az, CoreCheckboxComponent as b, MutationViewComponent as b$, TLA_CONFIG as b0, ConfigService as b1, CoreTableService as b2, DndService as b3, DocxMergeService as b4, FilterKitService as b5, GrpcService as b6, HeaderService as b7, HistoryService as b8, HttpErrorHandler as b9, TopicPermissionService as bA, TopicTreeService as bB, UploadedFileService as bC, UrlService as bD, UserActivityService as bE, EvaluateDialogService as bF, EnumWorkScheduleViewMode as bG, WorkShiftDndService as bH, AtShiftPatternComponent as bI, AtShiftPatternApplyComponent as bJ, AtShiftPatternEditComponent as bK, AtWorksignComponent as bL, AtWorksignService as bM, FunctionComponent as bN, IndividualScheduleApplyComponent as bO, FunctionEditComponent as bP, FunctionIgnoreComponent as bQ, FunctionIgnoreEditComponent as bR, GroupFunctionComponent as bS, GroupFunctionEditComponent as bT, hrmSchemaRoutes as bU, InMemoryComponent as bV, LanguageComponent as bW, LanguageEditComponent as bX, MenuComponent as bY, MenuEditComponent as bZ, MutationLogComponent as b_, HubConnectionService as ba, IpServiceService as bb, LayoutService as bc, LiquidJsService as bd, MapService as be, MenuService as bf, MessageService as bg, ModalService as bh, OrganizationService as bi, PkceService as bj, PositionTransferService as bk, EnumNotificationDir as bl, NotificationActionType as bm, PushNotificationService as bn, RandomAvatarService as bo, RequestCache as bp, RequestCacheWithMap as bq, ResponseService as br, RoutingService as bs, EnumSsrsExpressFileExtension as bt, EnumSsrsExpressExportFormat as bu, SsrsExpressService as bv, StatisticService as bw, StatisticAuthService as bx, SysMenuService as by, TimeSheetService as bz, BaseEditComponent as c, CoreEmployeeSeekerComponent as c$, PaSalaryPolicyComponent as c0, PaSalaryPolicyEditComponent as c1, PortalRouteComponent as c2, ScheduleOverviewComponent as c3, simpleChatRoutes as c4, PortalRouteEditComponent as c5, SysOtherListComponent as c6, SysOtherListEditComponent as c7, SysOtherListTypeComponent as c8, SysOtherListTypeEditComponent as c9, NewlyCreatedTokenService as cA, CoreApiProgressComponent as cB, CoreButtonGroupComponent as cC, EnumCoreButtonCode as cD, ActionSvgEditComponent as cE, CoreButtonGroupService as cF, CoreButtonVnsComponent as cG, CoreCommonParamKitComponent as cH, CoreCompareDbPipelineComponent as cI, CoreCompositionState as cJ, CoreCompositionService as cK, CoreCompositionComponent as cL, CoreConfirmDialogComponent as cM, ConfirmDialogStateComponent as cN, CoreLazyMountComponent as cO, CoreRootMenuItemPickerComponent as cP, CoreRootMenuItemPickerService as cQ, ECoreTableToolCode as cR, ECoreTableToolClass as cS, CoreTableComponent as cT, CoreComProfileComponent as cU, CoreContractSeekerComponent as cV, CoreControlNoGridBufferComponent as cW, CoreControlNoSeekerComponent as cX, coreDocGenRoutes as cY, CoreDocgenToolbarComponent as cZ, CoreEmployeeScheduleComponent as c_, SysActionComponent as ca, SysActionEditComponent as cb, SysFunctionActionComponent as cc, SysFunctionActionEditComponent as cd, SysFunctionActionMapperComponent as ce, SysFunctionUrlMapperComponent as cf, FunctionEditService as cg, SysModuleComponent as ch, SysModuleEditComponent as ci, SysRouteAccessComponent as cj, liner_to_nested_array_script as ck, blob_to_base64_script as cl, AlertComponent as cm, EnumAlertType as cn, IAlertOptions as co, AnimatedTextService as cp, AnimatedTextComponent as cq, BaseDropdownComponent as cr, ButtonGroupModule as cs, ButtonGroupService as ct, ButtonGroupComponent as cu, EnumButtonCaptionCode as cv, CoreButtonComponent as cw, CoreAccordionComponent as cx, CoreAccordionService as cy, CoreActiveUserCountComponent as cz, EnumFormBaseContolType as d, CorePermissionActionsComponent as d$, EnumCoreFileUploaderType as d0, CoreFileUploaderComponent as d1, CoreFilterHubComponent as d2, CoreFilterHubService as d3, ControlBase as d4, Textbox as d5, CoreControlService as d6, CustomValidators as d7, URL_PATTERN as d8, coreFormDesignRoutes as d9, CoreOauthCallbackOffice365Component as dA, EnumCoreOrgTreeaAccessorMode as dB, EnumCoreOrgTreeaSearchMode as dC, CoreOrgTreeComponent as dD, CoreOrgTreeState as dE, CoreOrgTreeService as dF, CoreOrgUnitSeekerComponent as dG, CoreOrgchartflexComponent as dH, CoreOrgParamComponent as dI, EnumCorePageEditBootstrapClass as dJ, EnumCorePageEditFieldType as dK, CorePageEditService as dL, CorePageEditLiteComponent as dM, CorePageEditTabComponent as dN, EnumExType as dO, CorePageListService as dP, CorePageListState as dQ, CorePageListContentComponent as dR, EnumCoreViewItemType as dS, CorePageViewComponent as dT, CorePaginationComponent as dU, CorePaginationFullComponent as dV, CorePaginationFullService as dW, CoreFileFormatPickerComponent as dX, CorePermissionService as dY, EnumPermissionObjectType as dZ, CorePermissionComponent as d_, CoreFormTabComponent as da, CoreFormLiteComponent as db, CoreFormControlBaseComponent as dc, EnumCoreSeekerColumnJob as dd, EnumCoreSeekerColumnStaffProfile as de, EnumCoreSeekerColumnContract as df, EnumCoreSeekerColumnWorking as dg, EnumCoreSeekerColumnWage as dh, EnumCoreSeekerColumnPosition as di, EnumCoreSeekerColumnPositionConcurrent as dj, EnumCoreSeekerColumnAutoForm as dk, SeekerService as dl, CoreGridBufferComponent as dm, CoreHeaderParamsComponent as dn, CoreHelperComponent as dp, CoreLineComponent as dq, CoreLiquidWysiwygComponent as dr, CoreListComponent as ds, CoreListLazyComponent as dt, CoreLoadingSurfaceComponent as du, CoreMccComponent as dv, CoreMonthPickerComponent as dw, CoreNavigationTrackerComponent as dx, coreNavigationTrackerRoutes as dy, CoreOauthCallbackComponent as dz, CorePageEditComponent as e, StringService as e$, CorePositionConcurrentSeekerComponent as e0, CorePositionSeekerComponent as e1, CoreQrcodeComponent as e2, EnumOparator as e3, CoreQueryBuilderComponent as e4, CoreReducerIconComponent as e5, CoreRotatingTextComponent as e6, CoreRouteAccumulatorComponent as e7, CoreRoutingHistoryComponent as e8, CoreSalaryPolicyPickerComponent as e9, CoreD3Service as eA, CorePieComponent as eB, CoreScatterPlotComponent as eC, EnumHrComparisonCode as eD, EnumICoreStatisticWidgetDataType as eE, CoreStatisticWidgetComponent as eF, DecisionComponent as eG, EvaluateDialogComponent as eH, HuconcurrentlyComponent as eI, JobComponent as eJ, LanguageChangerComponent as eK, DEFAULT_SVG as eL, ItemComponent as eM, NavigatorComponent as eN, OtpInputComponent as eO, OtpInputService as eP, PageTitleComponent as eQ, PaginationComponent as eR, FilterPipe as eS, normalizeHumanName as eT, PositionComponent as eU, PositionEditService as eV, CoreDatetimeService as eW, FileService as eX, LongTaskService as eY, EnumRecursiveFields as eZ, RecursiveService as e_, CoreScrollComponent as ea, CoreScrollLazyComponent as eb, CoreSeenByComponent as ec, CoreShiftCardComponent as ed, CoreShiftCellComponent as ee, CoreShiftCollectionComponent as ef, CoreShiftStickerComponent as eg, STICKER_COLOR_SCHEMA as eh, CoreStatusStickerComponent as ei, CoreSubFormGroupComponent as ej, CoreTabListComponent as ek, CoreTagsComponent as el, CoreTopicPickerComponent as em, EnumCoreArticleCategoryTreeaAccessorMode as en, CoreTopicTreeComponent as eo, CoreTreeComponent as ep, EnumCoreTreeGridEditMode as eq, CoreTreeGridComponent as er, CoreWageSeekerComponent as es, CoreWorkingSeekerComponent as et, coreWorkflowRoutes as eu, CoreWorkflowBuilderComponent as ev, CoreWorkflowGroupEditComponent as ew, CoreYearPickerComponent as ex, CoreYearSelectorComponent as ey, EnumCoreD3ScaleType as ez, CorePageHeaderComponent as f, UnicodeService as f0, StaffProfileComponent as f1, ThreedotsComponent as f2, TooltipComponent as f3, UserActivityComponent as f4, WageComponent as f5, tooltip_directive as f6, coreStickerCollection_component as f7, dragReorder_directive as f8, CoreTabsComponent as g, CoreWorkflowService as h, EnumCoreFormControlSeekerSourceType as i, AlertService as j, CoreFormService as k, DbService as l, AiHintForColumnComponent as m, CoreWorkflowListComponent as n, TooltipDirective as o, DragReorderDirective as p, CanDeactivateGuard as q, TableCellPipe as r, MapAvatarToServerPipe as s, alertOptions as t, CoreTerminalSpinnerComponent as u, CoreFormDesignService as v, EnumWorkflowStepType as w, DomService as x, CoreDropdownComponent as y, CoreChecklistComponent as z };
44223
- //# sourceMappingURL=ngx-histaff-alpha-ngx-histaff-alpha-CrtUN9ex.mjs.map
45325
+ export { CoreButtonGroupVnsComponent as $, AppService as A, BaseComponent as B, ChatService as C, DialogService as D, EnumCoreTablePipeType as E, FullscreenModalLoaderComponent as F, CoreDatePickerComponent as G, CoreFormControlSeekerComponent as H, ImageErrorResolverDirective as I, CoreCurrencyInputComponent as J, EnumActorSourceType as K, CoreParamControlComponent as L, MultiLanguageService as M, CoreRadioGroupComponent as N, GptService as O, ApplicationHelpService as P, HotKeysDirective as Q, EnumCorePageEditMode as R, SocketService as S, TranslatePipe as T, CoreFormComponent as U, NavigatorService as V, JsonService as W, AppConfigService as X, EnumCoreButtonVNSCode as Y, READONLY_WORKFLOW_FIELDS as Z, noneAutoClosedAlertOptions as _, CorePageListComponent as a, CommonHttpRequestService as a$, CoreStickerCollectionComponent as a0, HtmlTooltipDirective as a1, CoreControlNoFormArrayComponent as a2, EnumFormDesignMode as a3, CoreControlComponent as a4, JsonSafePipe as a5, CoreAttachmentComponent as a6, CoreMonthSelectorComponent as a7, EnumImageResolverType as a8, NormalizeHumanNamePipe as a9, EnumStyleButtonClass as aA, CanActivateFunctionUrlMapperGuard as aB, InitializationCanActivateFn as aC, InitializationCanMatchFn as aD, httpInterceptorProviders as aE, InterceptorSkipHeader as aF, appTypeInterceptor as aG, baseUrlInterceptor as aH, authInterceptor as aI, graphInterceptor as aJ, tokenInterceptor as aK, responseInterceptor as aL, timeZoneInterceptor as aM, cachingInterceptor as aN, langInterceptor as aO, EnumFilterOperator as aP, OnlineUsersComponent as aQ, ActionService as aR, AppInitializationService as aS, AuthService as aT, CacheService as aU, EnumSwUpdateVersionUpdatesEventType as aV, CheckForUpdateService as aW, EnumDeviceType as aX, EnumBrowserType as aY, EnumOsType as aZ, ClientService as a_, CoreIosSwitcherComponent as aa, SunnyRotatingComponent as ab, MapAppdemoToServerPipePipe as ac, MapAttachmentToServerPipe as ad, MapNewsfeedMediaToServerPipe as ae, StringHtmlPipe as af, UploadedFilenameCutoffPipe as ag, DialogStateComponent as ah, FooterComponent as ai, RightchatComponent as aj, WaittingScreenComponent as ak, longAlertOptions as al, attachmentOptions as am, CORE_VNS_BUTTONS as an, defaultPaging as ao, DESKTOP_SCREEN_HEDER_HEIGHT as ap, MOBILE_SCREEN_HEDER_HEIGHT as aq, themeBlue as ar, DATE_VALUE_ACCESSOR as as, DateValueAccessor as at, EnumDragType as au, EnumErrorType as av, EnumIconClass as aw, EnumProfileInfoSector as ax, EnumSignalRType as ay, EnumSortDirection as az, CoreCheckboxComponent as b, MutationViewComponent as b$, TLA_CONFIG as b0, ConfigService as b1, CoreTableService as b2, DndService as b3, DocxMergeService as b4, FilterKitService as b5, GrpcService as b6, HeaderService as b7, HistoryService as b8, HttpErrorHandler as b9, TopicPermissionService as bA, TopicTreeService as bB, UploadedFileService as bC, UrlService as bD, UserActivityService as bE, EvaluateDialogService as bF, EnumWorkScheduleViewMode as bG, WorkShiftDndService as bH, AtShiftPatternComponent as bI, AtShiftPatternApplyComponent as bJ, AtShiftPatternEditComponent as bK, AtWorksignComponent as bL, AtWorksignService as bM, FunctionComponent as bN, IndividualScheduleApplyComponent as bO, FunctionEditComponent as bP, FunctionIgnoreComponent as bQ, FunctionIgnoreEditComponent as bR, GroupFunctionComponent as bS, GroupFunctionEditComponent as bT, hrmSchemaRoutes as bU, InMemoryComponent as bV, LanguageComponent as bW, LanguageEditComponent as bX, MenuComponent as bY, MenuEditComponent as bZ, MutationLogComponent as b_, HubConnectionService as ba, IpServiceService as bb, LayoutService as bc, LiquidJsService as bd, MapService as be, MenuService as bf, MessageService as bg, ModalService as bh, OrganizationService as bi, PkceService as bj, PositionTransferService as bk, EnumNotificationDir as bl, NotificationActionType as bm, PushNotificationService as bn, RandomAvatarService as bo, RequestCache as bp, RequestCacheWithMap as bq, ResponseService as br, RoutingService as bs, EnumSsrsExpressFileExtension as bt, EnumSsrsExpressExportFormat as bu, SsrsExpressService as bv, StatisticService as bw, StatisticAuthService as bx, SysMenuService as by, TimeSheetService as bz, BaseEditComponent as c, CoreDocgenToolbarComponent as c$, PaSalaryPolicyComponent as c0, PaSalaryPolicyEditComponent as c1, PortalRouteComponent as c2, ScheduleOverviewComponent as c3, simpleChatRoutes as c4, PortalRouteEditComponent as c5, SysOtherListComponent as c6, SysOtherListEditComponent as c7, SysOtherListTypeComponent as c8, SysOtherListTypeEditComponent as c9, NewlyCreatedTokenService as cA, CoreApiProgressComponent as cB, CoreButtonGroupComponent as cC, EnumCoreButtonCode as cD, ActionSvgEditComponent as cE, CoreButtonGroupService as cF, CoreButtonVnsComponent as cG, CoreComTreeComponent as cH, ComPartyService as cI, CoreCommonParamKitComponent as cJ, CoreCompareDbPipelineComponent as cK, CoreCompositionState as cL, CoreCompositionService as cM, CoreCompositionComponent as cN, CoreConfirmDialogComponent as cO, ConfirmDialogStateComponent as cP, CoreLazyMountComponent as cQ, CoreRootMenuItemPickerComponent as cR, CoreRootMenuItemPickerService as cS, ECoreTableToolCode as cT, ECoreTableToolClass as cU, CoreTableComponent as cV, CoreComProfileComponent as cW, CoreContractSeekerComponent as cX, CoreControlNoGridBufferComponent as cY, CoreControlNoSeekerComponent as cZ, coreDocGenRoutes as c_, SysActionComponent as ca, SysActionEditComponent as cb, SysFunctionActionComponent as cc, SysFunctionActionEditComponent as cd, SysFunctionActionMapperComponent as ce, SysFunctionUrlMapperComponent as cf, FunctionEditService as cg, SysModuleComponent as ch, SysModuleEditComponent as ci, SysRouteAccessComponent as cj, liner_to_nested_array_script as ck, blob_to_base64_script as cl, AlertComponent as cm, EnumAlertType as cn, IAlertOptions as co, AnimatedTextService as cp, AnimatedTextComponent as cq, BaseDropdownComponent as cr, ButtonGroupModule as cs, ButtonGroupService as ct, ButtonGroupComponent as cu, EnumButtonCaptionCode as cv, CoreButtonComponent as cw, CoreAccordionComponent as cx, CoreAccordionService as cy, CoreActiveUserCountComponent as cz, EnumFormBaseContolType as d, EnumPermissionObjectType as d$, CoreEmployeeScheduleComponent as d0, CoreEmployeeSeekerComponent as d1, EnumCoreFileUploaderType as d2, CoreFileUploaderComponent as d3, CoreFilterHubComponent as d4, CoreFilterHubService as d5, ControlBase as d6, Textbox as d7, CoreControlService as d8, CustomValidators as d9, coreNavigationTrackerRoutes as dA, CoreOauthCallbackComponent as dB, CoreOauthCallbackOffice365Component as dC, EnumCoreOrgTreeaAccessorMode as dD, EnumCoreOrgTreeaSearchMode as dE, CoreOrgTreeComponent as dF, CoreOrgTreeState as dG, CoreOrgTreeService as dH, CoreOrgUnitSeekerComponent as dI, CoreOrgchartflexComponent as dJ, CoreOrgParamComponent as dK, EnumCorePageEditBootstrapClass as dL, EnumCorePageEditFieldType as dM, CorePageEditService as dN, CorePageEditLiteComponent as dO, CorePageEditTabComponent as dP, EnumExType as dQ, CorePageListService as dR, CorePageListState as dS, CorePageListContentComponent as dT, EnumCoreViewItemType as dU, CorePageViewComponent as dV, CorePaginationComponent as dW, CorePaginationFullComponent as dX, CorePaginationFullService as dY, CoreFileFormatPickerComponent as dZ, CorePermissionService as d_, URL_PATTERN as da, coreFormDesignRoutes as db, CoreFormTabComponent as dc, CoreFormLiteComponent as dd, CoreFormControlBaseComponent as de, EnumCoreSeekerColumnJob as df, EnumCoreSeekerColumnStaffProfile as dg, EnumCoreSeekerColumnContract as dh, EnumCoreSeekerColumnWorking as di, EnumCoreSeekerColumnWage as dj, EnumCoreSeekerColumnPosition as dk, EnumCoreSeekerColumnPositionConcurrent as dl, EnumCoreSeekerColumnAutoForm as dm, SeekerService as dn, CoreGridBufferComponent as dp, CoreHeaderParamsComponent as dq, CoreHelperComponent as dr, CoreLineComponent as ds, CoreLiquidWysiwygComponent as dt, CoreListComponent as du, CoreListLazyComponent as dv, CoreLoadingSurfaceComponent as dw, CoreMccComponent as dx, CoreMonthPickerComponent as dy, CoreNavigationTrackerComponent as dz, CorePageEditComponent as e, EnumRecursiveFields as e$, CorePermissionComponent as e0, CorePermissionActionsComponent as e1, CorePositionConcurrentSeekerComponent as e2, CorePositionSeekerComponent as e3, CoreQrcodeComponent as e4, EnumOparator as e5, CoreQueryBuilderComponent as e6, CoreReducerIconComponent as e7, CoreRotatingTextComponent as e8, CoreRouteAccumulatorComponent as e9, CoreYearSelectorComponent as eA, EnumCoreD3ScaleType as eB, CoreD3Service as eC, CorePieComponent as eD, CoreScatterPlotComponent as eE, EnumHrComparisonCode as eF, EnumICoreStatisticWidgetDataType as eG, CoreStatisticWidgetComponent as eH, DecisionComponent as eI, EvaluateDialogComponent as eJ, HuconcurrentlyComponent as eK, JobComponent as eL, LanguageChangerComponent as eM, DEFAULT_SVG as eN, ItemComponent as eO, NavigatorComponent as eP, OtpInputComponent as eQ, OtpInputService as eR, PageTitleComponent as eS, PaginationComponent as eT, FilterPipe as eU, normalizeHumanName as eV, PositionComponent as eW, PositionEditService as eX, CoreDatetimeService as eY, FileService as eZ, LongTaskService as e_, CoreRoutingHistoryComponent as ea, CoreSalaryPolicyPickerComponent as eb, CoreScrollComponent as ec, CoreScrollLazyComponent as ed, CoreSeenByComponent as ee, CoreShiftCardComponent as ef, CoreShiftCellComponent as eg, CoreShiftCollectionComponent as eh, CoreShiftStickerComponent as ei, STICKER_COLOR_SCHEMA as ej, CoreStatusStickerComponent as ek, CoreSubFormGroupComponent as el, CoreTabListComponent as em, CoreTagsComponent as en, CoreTopicPickerComponent as eo, EnumCoreArticleCategoryTreeaAccessorMode as ep, CoreTopicTreeComponent as eq, CoreTreeComponent as er, EnumCoreTreeGridEditMode as es, CoreTreeGridComponent as et, CoreWageSeekerComponent as eu, CoreWorkingSeekerComponent as ev, coreWorkflowRoutes as ew, CoreWorkflowBuilderComponent as ex, CoreWorkflowGroupEditComponent as ey, CoreYearPickerComponent as ez, CorePageHeaderComponent as f, RecursiveService as f0, StringService as f1, UnicodeService as f2, StaffProfileComponent as f3, ThreedotsComponent as f4, TooltipComponent as f5, UserActivityComponent as f6, WageComponent as f7, tooltip_directive as f8, coreStickerCollection_component as f9, dragReorder_directive as fa, CoreTabsComponent as g, CoreWorkflowService as h, EnumCoreFormControlSeekerSourceType as i, AlertService as j, CoreFormService as k, DbService as l, AiHintForColumnComponent as m, CoreWorkflowListComponent as n, TooltipDirective as o, DragReorderDirective as p, CanDeactivateGuard as q, TableCellPipe as r, MapAvatarToServerPipe as s, alertOptions as t, CoreTerminalSpinnerComponent as u, CoreFormDesignService as v, EnumWorkflowStepType as w, DomService as x, CoreDropdownComponent as y, CoreChecklistComponent as z };
45326
+ //# sourceMappingURL=ngx-histaff-alpha-ngx-histaff-alpha-BJ3ZVba7.mjs.map