ngx-histaff-alpha 6.3.7 → 6.3.9

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-B8fivxy1.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-B8fivxy1.mjs.map} +1 -1
  3. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-DLEZuLXO.mjs → ngx-histaff-alpha-core-form-design.component-DQUPb25c.mjs} +5 -5
  4. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-DLEZuLXO.mjs.map → ngx-histaff-alpha-core-form-design.component-DQUPb25c.mjs.map} +1 -1
  5. package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-F2nV8jgm.mjs → ngx-histaff-alpha-core-template-editor.component-DOZibiVG.mjs} +2 -2
  6. package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-F2nV8jgm.mjs.map → ngx-histaff-alpha-core-template-editor.component-DOZibiVG.mjs.map} +1 -1
  7. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-yaqjJHzN.mjs → ngx-histaff-alpha-core-toast-loading.component-CqBRrU5R.mjs} +2 -2
  8. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-yaqjJHzN.mjs.map → ngx-histaff-alpha-core-toast-loading.component-CqBRrU5R.mjs.map} +1 -1
  9. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-D2txp5DP.mjs → ngx-histaff-alpha-core-workflow-consume.component-DJN5n0Y-.mjs} +2 -2
  10. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-D2txp5DP.mjs.map → ngx-histaff-alpha-core-workflow-consume.component-DJN5n0Y-.mjs.map} +1 -1
  11. package/fesm2022/{ngx-histaff-alpha-db-settings.component-DB6XegRZ.mjs → ngx-histaff-alpha-db-settings.component-CQc3XpNh.mjs} +5 -5
  12. package/fesm2022/{ngx-histaff-alpha-db-settings.component-DB6XegRZ.mjs.map → ngx-histaff-alpha-db-settings.component-CQc3XpNh.mjs.map} +1 -1
  13. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-DRbyCxB_.mjs → ngx-histaff-alpha-design-wrapper.component-C0U6ewY7.mjs} +5 -5
  14. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-DRbyCxB_.mjs.map → ngx-histaff-alpha-design-wrapper.component-C0U6ewY7.mjs.map} +1 -1
  15. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-CdPC_FcN.mjs → ngx-histaff-alpha-design-wrapper.route-COZXQaNQ.mjs} +5 -5
  16. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-CdPC_FcN.mjs.map → ngx-histaff-alpha-design-wrapper.route-COZXQaNQ.mjs.map} +1 -1
  17. package/fesm2022/{ngx-histaff-alpha-form-array-props.component-BRxQHNtj.mjs → ngx-histaff-alpha-form-array-props.component-LQdzcY-m.mjs} +3 -3
  18. package/fesm2022/{ngx-histaff-alpha-form-array-props.component-BRxQHNtj.mjs.map → ngx-histaff-alpha-form-array-props.component-LQdzcY-m.mjs.map} +1 -1
  19. package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-O8f-QHVW.mjs → ngx-histaff-alpha-hrm-schema.component-C4FXeBSE.mjs} +2 -2
  20. package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-O8f-QHVW.mjs.map → ngx-histaff-alpha-hrm-schema.component-C4FXeBSE.mjs.map} +1 -1
  21. package/fesm2022/{ngx-histaff-alpha-live-form.component-Dt0rgzHG.mjs → ngx-histaff-alpha-live-form.component-2kAqtlyo.mjs} +4 -4
  22. package/fesm2022/{ngx-histaff-alpha-live-form.component-Dt0rgzHG.mjs.map → ngx-histaff-alpha-live-form.component-2kAqtlyo.mjs.map} +1 -1
  23. package/fesm2022/{ngx-histaff-alpha-ngx-histaff-alpha-CrtUN9ex.mjs → ngx-histaff-alpha-ngx-histaff-alpha-ByIs02SI.mjs} +1243 -1156
  24. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-ByIs02SI.mjs.map +1 -0
  25. package/fesm2022/{ngx-histaff-alpha-simple-chat.component-DtlcUxIS.mjs → ngx-histaff-alpha-simple-chat.component-DQJmpxIo.mjs} +2 -2
  26. package/fesm2022/{ngx-histaff-alpha-simple-chat.component-DtlcUxIS.mjs.map → ngx-histaff-alpha-simple-chat.component-DQJmpxIo.mjs.map} +1 -1
  27. package/fesm2022/{ngx-histaff-alpha-template-list.component-BXyP9Vki.mjs → ngx-histaff-alpha-template-list.component-B8DQ5E2P.mjs} +2 -2
  28. package/fesm2022/{ngx-histaff-alpha-template-list.component-BXyP9Vki.mjs.map → ngx-histaff-alpha-template-list.component-B8DQ5E2P.mjs.map} +1 -1
  29. package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-ySy7DIdC.mjs → ngx-histaff-alpha-tracker-studio.component-cnxgZ6An.mjs} +2 -2
  30. package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-ySy7DIdC.mjs.map → ngx-histaff-alpha-tracker-studio.component-cnxgZ6An.mjs.map} +1 -1
  31. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-qxz8Ozah.mjs → ngx-histaff-alpha-wf-form-assign.component-BfZAeogE.mjs} +2 -2
  32. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-qxz8Ozah.mjs.map → ngx-histaff-alpha-wf-form-assign.component-BfZAeogE.mjs.map} +1 -1
  33. package/fesm2022/{ngx-histaff-alpha-wf-global-config.component-DbZq1DK-.mjs → ngx-histaff-alpha-wf-global-config.component-BmZ9RmJD.mjs} +19 -2
  34. package/fesm2022/ngx-histaff-alpha-wf-global-config.component-BmZ9RmJD.mjs.map +1 -0
  35. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-DjFOVp06.mjs → ngx-histaff-alpha-wf-instance-status.component-DeRlJp4L.mjs} +2 -2
  36. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-DjFOVp06.mjs.map → ngx-histaff-alpha-wf-instance-status.component-DeRlJp4L.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-BsBX4QJV.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-BsBX4QJV.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 +5 -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;
@@ -4924,8 +4925,14 @@ class LangInterceptor {
4924
4925
  this.mls = mls;
4925
4926
  }
4926
4927
  intercept(req, next) {
4928
+ // const modifiedReq = req.clone({
4929
+ // headers: req.headers.set('Client-Languague', this.mls.lang$.value),
4930
+ // });
4927
4931
  const modifiedReq = req.clone({
4928
- headers: req.headers.set('Client-Languague', this.mls.lang$.value),
4932
+ setHeaders: {
4933
+ 'Client-Languague': this.mls.lang$.value, // giữ
4934
+ 'Client-Language': this.mls.lang$.value // mới
4935
+ }
4929
4936
  });
4930
4937
  return next.handle(modifiedReq);
4931
4938
  }
@@ -4938,8 +4945,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
4938
4945
  // Fn style
4939
4946
  function langInterceptor(req, next) {
4940
4947
  const mls = inject(MultiLanguageService);
4948
+ // const modifiedReq = req.clone({
4949
+ // headers: req.headers.set('Client-Languague', mls.lang$.value),
4950
+ // });
4941
4951
  const modifiedReq = req.clone({
4942
- headers: req.headers.set('Client-Languague', mls.lang$.value),
4952
+ setHeaders: {
4953
+ 'Client-Languague': mls.lang$.value, // giữ
4954
+ 'Client-Language': mls.lang$.value // mới
4955
+ }
4943
4956
  });
4944
4957
  return next(modifiedReq);
4945
4958
  }
@@ -9176,7 +9189,7 @@ class SocketService {
9176
9189
  .withUrl(this.appConfigService.BASE_URL + '/hubs/signal', {
9177
9190
  accessTokenFactory: () => token,
9178
9191
  skipNegotiation: true,
9179
- transport: HttpTransportType.WebSockets
9192
+ transport: HttpTransportType.WebSockets || HttpTransportType.ServerSentEvents || HttpTransportType.LongPolling
9180
9193
  })
9181
9194
  .configureLogging(LogLevel.Information)
9182
9195
  .build();
@@ -31585,7 +31598,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
31585
31598
  const hrmSchemaRoutes = [
31586
31599
  {
31587
31600
  path: '',
31588
- loadComponent: () => import('./ngx-histaff-alpha-hrm-schema.component-O8f-QHVW.mjs').then(m => m.HrmSchemaComponent)
31601
+ loadComponent: () => import('./ngx-histaff-alpha-hrm-schema.component-C4FXeBSE.mjs').then(m => m.HrmSchemaComponent)
31589
31602
  }
31590
31603
  ];
31591
31604
 
@@ -33758,7 +33771,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
33758
33771
  const simpleChatRoutes = [
33759
33772
  {
33760
33773
  path: '',
33761
- loadComponent: () => import('./ngx-histaff-alpha-simple-chat.component-DtlcUxIS.mjs').then(m => m.SimpleChatComponent)
33774
+ loadComponent: () => import('./ngx-histaff-alpha-simple-chat.component-DQJmpxIo.mjs').then(m => m.SimpleChatComponent)
33762
33775
  }
33763
33776
  ];
33764
33777
 
@@ -36197,335 +36210,1044 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
36197
36210
  ], 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
36211
  }], ctorParameters: () => [{ type: MultiLanguageService }, { type: ActionService }, { type: AppService }, { type: AlertService }] });
36199
36212
 
36200
- class CorePaginationComponent {
36201
- constructor() {
36202
- this.$currentPage = input.required();
36203
- this.$height = input.required();
36204
- this.$pageCount = input.required();
36205
- this.$loading = input.required();
36206
- this.$suspendCurrentPageSubscription = input();
36207
- this.$showAdd = input();
36208
- this.$background = input();
36209
- this.$fixedPageSize = input();
36210
- this.$onClickAdd = output();
36211
- this.$container = viewChild('container');
36212
- this.$current = viewChild('current');
36213
- this.$aperture = viewChild('aperture');
36214
- this.$currentButtonContent = signal('1');
36215
- this.$suspendCurrentPage = signal(true);
36216
- this.$navigationDirection = signal(1);
36217
- this.subscriptions = [];
36218
- }
36219
- ngOnInit() { }
36220
- goFirst() {
36221
- this.$navigationDirection.set(-1);
36222
- this.$suspendCurrentPage.set(false);
36223
- setTimeout(() => {
36224
- if (!!this.$pageCount())
36225
- this.$currentPage().next(1);
36226
- this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotatebackwards');
36227
- });
36228
- }
36229
- goLast() {
36230
- this.$navigationDirection.set(1);
36231
- this.$suspendCurrentPage.set(false);
36232
- setTimeout(() => {
36233
- if (!!this.$pageCount())
36234
- this.$currentPage().next(this.$pageCount());
36235
- this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotateforwards');
36236
- });
36237
- }
36238
- goPrevious() {
36239
- this.$navigationDirection.set(-1);
36240
- this.$suspendCurrentPage.set(false);
36241
- setTimeout(() => {
36242
- if (!!this.$pageCount())
36243
- this.$currentPage().next(this.$currentPage().value - 1);
36244
- this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotatebackwards');
36213
+ class ComPartyService {
36214
+ constructor(recursiveService, alertService) {
36215
+ this.recursiveService = recursiveService;
36216
+ this.alertService = alertService;
36217
+ this.instances = [];
36218
+ this.loading = true;
36219
+ this.comTreeData$ = new BehaviorSubject([]);
36220
+ this.comTreeDataWithPeople$ = new BehaviorSubject([]);
36221
+ this.linerData$ = new BehaviorSubject([]);
36222
+ this.buildTreeFlag$ = new BehaviorSubject(false);
36223
+ this.status$ = new BehaviorSubject({
36224
+ selectedKey: undefined,
36225
+ activeKeys: [],
36226
+ checkedKeys: [],
36227
+ expandedKeys: [],
36228
+ checkInheritance: true
36245
36229
  });
36246
- }
36247
- goNext() {
36248
- this.$navigationDirection.set(1);
36249
- this.$suspendCurrentPage.set(false);
36250
- setTimeout(() => {
36251
- if (!!this.$pageCount())
36252
- this.$currentPage().next(this.$currentPage().value + 1);
36253
- this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotateforwards');
36230
+ this.appService = inject(AppService);
36231
+ this.linerData$.subscribe(xs => {
36232
+ const idCountMap = new Map();
36233
+ xs.forEach(item => {
36234
+ const id = item.id;
36235
+ idCountMap.set(id, (idCountMap.get(id) ?? 0) + 1);
36236
+ });
36237
+ const duplicates = Array.from(idCountMap.entries())
36238
+ .filter(([_, count]) => count > 1)
36239
+ .map(([id]) => id);
36240
+ if (!!duplicates.length) {
36241
+ if (isDevMode()) {
36242
+ alertService.error('🔁 Duplicate IDs: ' + duplicates.reduce((a, c) => a + ";" + c, ''), alertOptions);
36243
+ }
36244
+ }
36254
36245
  });
36255
36246
  }
36256
- onClickAddLocal() {
36257
- this.$onClickAdd.emit();
36258
- }
36259
- ngAfterViewInit() {
36260
- setTimeout(() => {
36261
- this.subscriptions.push(this.$currentPage().subscribe(x => this.$currentButtonContent.set(x.toString())));
36262
- this.mouseDownStream$ = fromEvent(this.$current().nativeElement, 'mousedown', _ => {
36263
- this.$currentButtonContent.set(`${this.$currentPage().value}/${this.$pageCount()}`);
36264
- });
36265
- this.touchStartStream$ = fromEvent(this.$current().nativeElement, 'touchstart', _ => {
36266
- this.$currentButtonContent.set(`${this.$currentPage().value}/${this.$pageCount()}`);
36247
+ buildComTreeData(status = {
36248
+ selectedKey: undefined,
36249
+ activeKeys: [],
36250
+ checkedKeys: [],
36251
+ expandedKeys: [],
36252
+ checkInheritance: true
36253
+ }) {
36254
+ this.loading = true;
36255
+ const cloneCopy = JSON.parse(JSON.stringify(this.linerData$.value));
36256
+ if (typeof Worker !== 'undefined') {
36257
+ // Create a new
36258
+ console.log("🟢🟢 Worker works");
36259
+ const worker = new Worker(liner_to_nested_array_script);
36260
+ worker.addEventListener('message', ({ data }) => {
36261
+ const newData = data.list;
36262
+ this.comTreeData$.next(newData);
36263
+ this.loading = false;
36267
36264
  });
36268
- this.mouseUpStream$ = fromEvent(this.$current().nativeElement, 'mouseup', _ => {
36269
- this.$currentButtonContent.set(`${this.$currentPage().value}`);
36265
+ worker.postMessage({
36266
+ list: cloneCopy,
36267
+ keyField: 'id',
36268
+ titleField: 'name',
36269
+ parentField: 'parentId',
36270
+ activeField: 'active',
36271
+ checkedField: 'checked',
36272
+ expandedField: 'expand',
36273
+ status
36270
36274
  });
36271
- this.touchEndStream$ = fromEvent(this.$current().nativeElement, 'touchend', _ => {
36272
- this.$currentButtonContent.set(`${this.$currentPage().value}`);
36275
+ }
36276
+ else {
36277
+ // Web workers are not supported in this environment.
36278
+ // You should add a fallback so that your program still executes correctly.
36279
+ this.recursiveService
36280
+ .linerArrayToNestedArray(cloneCopy, 'id', 'name', 'parentId', 'active', 'checked', 'expand', status)
36281
+ .subscribe((obj) => {
36282
+ const newData = obj.list;
36283
+ this.comTreeData$.next(newData);
36284
+ this.loading = false;
36273
36285
  });
36274
- this.mouseDownSubscription$ = this.mouseDownStream$.subscribe();
36275
- this.touchStartSubscription$ = this.touchStartStream$.subscribe();
36276
- this.mouseUpSubscription$ = this.mouseUpStream$.subscribe();
36277
- this.touchEndSubscription$ = this.touchEndStream$.subscribe();
36278
- if (this.$background())
36279
- setTimeout(() => this.$container().nativeElement.style.setProperty('--bg', this.$background()));
36280
- if (this.$height())
36281
- this.$container()?.nativeElement.style.setProperty('--height', this.$height() + 'px');
36282
- });
36286
+ }
36283
36287
  }
36284
- ngOnDestroy() {
36285
- if (this.mouseDownSubscription$)
36286
- this.mouseDownSubscription$.unsubscribe();
36287
- if (this.touchStartSubscription$)
36288
- this.touchStartSubscription$.unsubscribe();
36289
- if (this.mouseUpSubscription$)
36290
- this.mouseUpSubscription$.unsubscribe();
36291
- if (this.touchEndSubscription$)
36292
- this.touchEndSubscription$.unsubscribe();
36288
+ getComLinearData(userId) {
36289
+ return this.appService.getFullUrl("/api/ComUnit/GetAll");
36290
+ // return of(
36291
+ // {
36292
+ // ok: true,
36293
+ // status: 200,
36294
+ // body: {
36295
+ // statusCode: 200,
36296
+ // innerBody: COM_MOKEUP_DATA
36297
+ // } as IFormatedResponse
36298
+ // }
36299
+ // )
36293
36300
  }
36294
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CorePaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36295
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CorePaginationComponent, isStandalone: true, selector: "core-pagination", inputs: { $currentPage: { classPropertyName: "$currentPage", publicName: "$currentPage", isSignal: true, isRequired: true, transformFunction: null }, $height: { classPropertyName: "$height", publicName: "$height", isSignal: true, isRequired: true, transformFunction: null }, $pageCount: { classPropertyName: "$pageCount", publicName: "$pageCount", isSignal: true, isRequired: true, transformFunction: null }, $loading: { classPropertyName: "$loading", publicName: "$loading", isSignal: true, isRequired: true, transformFunction: null }, $suspendCurrentPageSubscription: { classPropertyName: "$suspendCurrentPageSubscription", publicName: "$suspendCurrentPageSubscription", isSignal: true, isRequired: false, transformFunction: null }, $showAdd: { classPropertyName: "$showAdd", publicName: "$showAdd", isSignal: true, isRequired: false, transformFunction: null }, $background: { classPropertyName: "$background", publicName: "$background", isSignal: true, isRequired: false, transformFunction: null }, $fixedPageSize: { classPropertyName: "$fixedPageSize", publicName: "$fixedPageSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { $onClickAdd: "$onClickAdd" }, viewQueries: [{ propertyName: "$container", first: true, predicate: ["container"], descendants: true, isSignal: true }, { propertyName: "$current", first: true, predicate: ["current"], descendants: true, isSignal: true }, { propertyName: "$aperture", first: true, predicate: ["aperture"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #container class=\"pagination-container d-flex-between\">\r\n <div class=\"pagination-container\">\r\n <div class=\"first\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goFirst()\"></div>\r\n <div class=\"previous\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goPrevious()\"></div>\r\n <div #current class=\"current\">\r\n <div class=\"d-flex-center\">\r\n <i #aperture class=\"feather-aperture aperture \" [class.visible]=\"$loading()\"></i>\r\n @if (!$loading()) {\r\n <span class=\"current-text\">{{ $currentButtonContent() }}</span>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"next\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goNext()\"></div>\r\n <div class=\"last\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goLast()\"></div>\r\n </div>\r\n @if ($showAdd()) {\r\n <a (click)=\"onClickAddLocal()\">\r\n <div class=\"add\"></div>\r\n </a>\r\n }\r\n</div>", styles: [".pagination-container{--bg: #848484;--color: white;--height: 38px;--button-size: 50px;--font-size: 18px;--aperture-size: 30px}@keyframes rotateforwards{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotatebackwards{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}.pagination-container .add:before{font-family:feather;content:\"\\e9b1\";font-weight:700;font-size:var(--font-size);color:#fff;background:var(--bg);width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center;border-top-right-radius:50%;border-bottom-right-radius:50%}.pagination-container .pagination-container{height:var(--height);display:flex}.pagination-container .pagination-container>div{display:inline-block;cursor:pointer;margin-right:2px}.pagination-container .pagination-container .disable{cursor:default;opacity:.5!important}.pagination-container .pagination-container .current{border-radius:50%;margin:0 5px;opacity:1;transition:2s}.pagination-container .pagination-container .aperture{width:var(--aperture-size);height:var(--aperture-size);opacity:0;transition:.25s ease-out;animation:rotateforwards 1s linear infinite}.pagination-container .pagination-container .aperture:before{font-size:var(--aperture-size)}.pagination-container .pagination-container .visible{opacity:1;transition:.25s ease-out}.pagination-container .pagination-container .current,.pagination-container .pagination-container .loading{width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color)}.pagination-container .pagination-container .current-text{position:absolute}.pagination-container .pagination-container .current>div{width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container div:before{font-family:feather;font-size:var(--font-size);width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container .first:before{content:\"\\e933\"}.pagination-container .pagination-container .previous:before{content:\"\\e92f\"}.pagination-container .pagination-container .next:before{content:\"\\e930\"}.pagination-container .pagination-container .last:before{content:\"\\e934\"}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36301
+ 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 }); }
36302
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ComPartyService, providedIn: 'root' }); }
36296
36303
  }
36297
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CorePaginationComponent, decorators: [{
36298
- type: Component,
36299
- args: [{ selector: 'core-pagination', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
36300
- NgStyle,
36301
- AsyncPipe,
36302
- ], template: "<div #container class=\"pagination-container d-flex-between\">\r\n <div class=\"pagination-container\">\r\n <div class=\"first\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goFirst()\"></div>\r\n <div class=\"previous\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goPrevious()\"></div>\r\n <div #current class=\"current\">\r\n <div class=\"d-flex-center\">\r\n <i #aperture class=\"feather-aperture aperture \" [class.visible]=\"$loading()\"></i>\r\n @if (!$loading()) {\r\n <span class=\"current-text\">{{ $currentButtonContent() }}</span>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"next\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goNext()\"></div>\r\n <div class=\"last\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goLast()\"></div>\r\n </div>\r\n @if ($showAdd()) {\r\n <a (click)=\"onClickAddLocal()\">\r\n <div class=\"add\"></div>\r\n </a>\r\n }\r\n</div>", styles: [".pagination-container{--bg: #848484;--color: white;--height: 38px;--button-size: 50px;--font-size: 18px;--aperture-size: 30px}@keyframes rotateforwards{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotatebackwards{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}.pagination-container .add:before{font-family:feather;content:\"\\e9b1\";font-weight:700;font-size:var(--font-size);color:#fff;background:var(--bg);width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center;border-top-right-radius:50%;border-bottom-right-radius:50%}.pagination-container .pagination-container{height:var(--height);display:flex}.pagination-container .pagination-container>div{display:inline-block;cursor:pointer;margin-right:2px}.pagination-container .pagination-container .disable{cursor:default;opacity:.5!important}.pagination-container .pagination-container .current{border-radius:50%;margin:0 5px;opacity:1;transition:2s}.pagination-container .pagination-container .aperture{width:var(--aperture-size);height:var(--aperture-size);opacity:0;transition:.25s ease-out;animation:rotateforwards 1s linear infinite}.pagination-container .pagination-container .aperture:before{font-size:var(--aperture-size)}.pagination-container .pagination-container .visible{opacity:1;transition:.25s ease-out}.pagination-container .pagination-container .current,.pagination-container .pagination-container .loading{width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color)}.pagination-container .pagination-container .current-text{position:absolute}.pagination-container .pagination-container .current>div{width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container div:before{font-family:feather;font-size:var(--font-size);width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container .first:before{content:\"\\e933\"}.pagination-container .pagination-container .previous:before{content:\"\\e92f\"}.pagination-container .pagination-container .next:before{content:\"\\e930\"}.pagination-container .pagination-container .last:before{content:\"\\e934\"}\n"] }]
36303
- }], ctorParameters: () => [] });
36304
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ComPartyService, decorators: [{
36305
+ type: Injectable,
36306
+ args: [{
36307
+ providedIn: 'root'
36308
+ }]
36309
+ }], ctorParameters: () => [{ type: RecursiveService }, { type: AlertService }] });
36304
36310
 
36305
- class CoreCompareDbPipelineComponent extends BaseComponent {
36306
- constructor(mls, appService) {
36307
- super(mls);
36311
+ class CoreComTreeComponent extends CoreFormControlBaseComponent {
36312
+ writeValue(obj) {
36313
+ this.value = obj;
36314
+ switch (this.accessorMode) {
36315
+ case EnumCoreOrgTreeaAccessorMode.CHECKED:
36316
+ if (!!obj) {
36317
+ const checkedKeys = [];
36318
+ this.checkedIds = obj; // <=== 24/10/2023
36319
+ obj.map(x => checkedKeys.push(x.toString()));
36320
+ this.loading = true;
36321
+ this.recursiveService.writeValueChecked(checkedKeys, this.data, this.disabledLoopExpand).subscribe(_ => {
36322
+ this.loading = false;
36323
+ if (!!this.data && !!this.data?.length)
36324
+ this.data[0].tree$Expanded = true;
36325
+ });
36326
+ }
36327
+ break;
36328
+ case EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE:
36329
+ case EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE:
36330
+ if (!!obj) {
36331
+ const activatedKeys = [];
36332
+ obj.map(x => activatedKeys.push(x.toString()));
36333
+ this.loading = true;
36334
+ this.recursiveService.writeValueActivated(activatedKeys, this.data, this.disabledLoopExpand).subscribe(_ => {
36335
+ this.loading = false;
36336
+ if (!!this.data && !!this.data?.length)
36337
+ this.data[0].tree$Expanded = true;
36338
+ });
36339
+ }
36340
+ break;
36341
+ default:
36342
+ break;
36343
+ }
36344
+ if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED) {
36345
+ }
36346
+ else /* EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE or EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE */ {
36347
+ }
36348
+ }
36349
+ setDisabledState(disabled) {
36350
+ this.disabled = disabled;
36351
+ }
36352
+ constructor(
36353
+ //public override injector: Injector,
36354
+ authService, recursiveService, mls, layoutService, coreOrgTreeService,
36355
+ // private coreOrgTreeState: CoreOrgTreeState,
36356
+ alertService, comPartyService) {
36357
+ super( /*injector*/);
36358
+ this.authService = authService;
36359
+ this.recursiveService = recursiveService;
36308
36360
  this.mls = mls;
36309
- this.appService = appService;
36310
- this.data = [];
36311
- this.tabHeaders = ["Dev-Test-Live", "Dev-Extended"];
36312
- this.activeTabIndex = 0;
36313
- this.columns = [
36314
- {
36315
- field: 'id',
36316
- type: 'string',
36317
- caption: 'id',
36318
- align: 'left',
36319
- hidden: true,
36320
- width: 0
36321
- },
36322
- {
36323
- field: 'difference',
36324
- type: 'string',
36325
- caption: 'Problem',
36326
- align: 'left',
36327
- sortDisabled: true,
36328
- width: 300
36329
- },
36330
- {
36331
- field: 'conflictType',
36332
- type: 'string',
36333
- caption: 'Marker',
36334
- align: 'center',
36335
- width: 50
36336
- },
36337
- {
36338
- field: 'sourceAlias',
36339
- type: 'string',
36340
- caption: 'Source',
36341
- align: 'left',
36342
- sortDisabled: true,
36343
- width: 60
36344
- },
36345
- {
36346
- field: 'targetAlias',
36347
- type: 'string',
36348
- caption: 'Target',
36349
- align: 'left',
36350
- sortDisabled: true,
36351
- width: 200
36352
- },
36353
- {
36354
- field: 'tableName',
36355
- type: 'string',
36356
- caption: 'Table',
36357
- align: 'left',
36358
- sortDisabled: true,
36359
- width: 200
36360
- },
36361
- {
36362
- field: 'columnName',
36363
- type: 'string',
36364
- caption: 'Column',
36365
- align: 'left',
36366
- sortDisabled: true,
36367
- width: 200
36368
- },
36369
- {
36370
- field: 'sourceType',
36371
- type: 'string',
36372
- caption: 'Source type',
36373
- align: 'left',
36374
- sortDisabled: true,
36375
- width: 100
36376
- },
36377
- {
36378
- field: 'sourceIsPrimaryKey',
36379
- type: 'boolean',
36380
- caption: 'Source is PK',
36381
- align: 'center',
36382
- sortDisabled: true,
36383
- width: 60
36384
- },
36385
- {
36386
- field: 'sourceIsIdentityColumn',
36387
- type: 'boolean',
36388
- caption: 'Source is Identity',
36389
- align: 'center',
36390
- sortDisabled: true,
36391
- width: 60
36392
- },
36393
- {
36394
- field: 'sourceNullability',
36395
- type: 'boolean',
36396
- caption: 'Source nullability',
36397
- align: 'center',
36398
- sortDisabled: true,
36399
- width: 70
36400
- },
36401
- {
36402
- field: 'sourceSize',
36403
- type: 'string',
36404
- caption: 'Source size',
36405
- align: 'right',
36406
- sortDisabled: true,
36407
- width: 100
36408
- },
36409
- {
36410
- field: 'sourcePrecision',
36411
- type: 'string',
36412
- caption: 'Source precision',
36413
- align: 'right',
36414
- sortDisabled: true,
36415
- width: 50
36416
- },
36417
- {
36418
- field: 'sourceScale',
36419
- type: 'string',
36420
- caption: 'Source scale',
36421
- align: 'right',
36422
- sortDisabled: true,
36423
- width: 50
36424
- },
36425
- {
36426
- field: 'targetType',
36427
- type: 'string',
36428
- caption: 'Target type',
36429
- align: 'left',
36430
- sortDisabled: true,
36431
- width: 100
36432
- },
36433
- {
36434
- field: 'targetIsPrimaryKey',
36435
- type: 'boolean',
36436
- caption: 'Target is PK',
36437
- align: 'center',
36438
- sortDisabled: true,
36439
- width: 60
36440
- },
36441
- {
36442
- field: 'targetIsIdentityColumn',
36443
- type: 'boolean',
36444
- caption: 'Target is Identity',
36445
- align: 'center',
36446
- sortDisabled: true,
36447
- width: 60
36448
- },
36449
- {
36450
- field: 'targetNullability',
36451
- type: 'boolean',
36452
- caption: 'Target nullability',
36453
- align: 'center',
36454
- sortDisabled: true,
36455
- width: 70
36456
- },
36457
- {
36458
- field: 'targetSize',
36459
- type: 'string',
36460
- caption: 'Targer size',
36461
- align: 'right',
36462
- sortDisabled: true,
36463
- width: 100
36464
- },
36465
- {
36466
- field: 'targetPrecision',
36467
- type: 'string',
36468
- caption: 'Target precision',
36469
- align: 'right',
36470
- sortDisabled: true,
36471
- width: 50
36472
- },
36473
- {
36474
- field: 'targetScale',
36475
- type: 'string',
36476
- caption: 'Target scale',
36477
- align: 'right',
36478
- sortDisabled: true,
36479
- width: 50
36480
- },
36481
- ];
36482
- this.tableHeight = 500;
36483
- this.longApiRunning = false;
36484
- this.defaultRequest = {
36485
- pageNumber: 1,
36486
- pageSize: 50
36487
- };
36488
- this.request$ = new BehaviorSubject(this.defaultRequest);
36489
- this.currentPage$ = new BehaviorSubject(1);
36490
- this.pageSize$ = new BehaviorSubject(50);
36491
- this.pageCount = 0;
36492
- this.suspendCurrentPageSubscription$ = new BehaviorSubject(false);
36493
- this.sqlCommand = '';
36494
- this.resolverSessionId = '';
36495
- this.conflictTotal = 0;
36496
- this.controller = null;
36361
+ this.layoutService = layoutService;
36362
+ this.coreOrgTreeService = coreOrgTreeService;
36363
+ this.alertService = alertService;
36364
+ this.comPartyService = comPartyService;
36365
+ this.lineColor = 'transparent';
36366
+ this.accessorMode = EnumCoreOrgTreeaAccessorMode.CHECKED;
36367
+ //TO BE NEW
36368
+ this.searchMode = EnumCoreOrgTreeaSearchMode.REDUCE;
36369
+ this.excludedIds$ = new BehaviorSubject([]); // 2024-05-10: to be implemented
36370
+ this.stateIsolated$ = new BehaviorSubject(false);
36371
+ this.itemDoubleClick = new EventEmitter();
36372
+ this.itemClick = new EventEmitter();
36373
+ this.showSearch = false;
36374
+ this.hiddenToolClickStream$ = new BehaviorSubject('');
36375
+ this.value = [];
36376
+ this.appConfigService = inject(AppConfigService);
36377
+ this.activeIds = [];
36378
+ this.checkedIds = [];
36379
+ this.subscriptions = [];
36380
+ this.search$ = new Subject();
36381
+ this.searchPlaceholder = "Tìm kiếm...";
36382
+ this.checkInheritance = true; // default value is true
36383
+ this.showDissolved = false; // default value is false
36384
+ this.initializing = true;
36385
+ // this.reduced$ = this.coreOrgTreeState.coreOrgTreeReduced$;
36386
+ this.initializing = false;
36497
36387
  }
36498
- refreshList() {
36499
- this.controller = new AbortController();
36500
- this.longApiRunning = true;
36501
- this.subscriptions.push(this.appService.post('/api/SqlServerPipeline/CompareDbStructure?usehub=true', this.request$.value, this.controller.signal)
36502
- .subscribe(x => {
36503
- this.longApiRunning = false;
36504
- if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
36505
- this.data = x.body.innerBody.data;
36506
- this.pageCount = Math.ceil(x.body.innerBody.count / this.pageSize$.value);
36507
- this.currentPage$.next(x.body.innerBody.pageNumber);
36508
- this.conflictTotal = x.body.innerBody.count || 0;
36509
- }
36510
- }));
36388
+ ngOnChanges(changes) {
36389
+ if (changes['height']) {
36390
+ this.resizeHeight();
36391
+ }
36511
36392
  }
36512
- ngAfterViewInit() {
36513
- setTimeout(() => {
36514
- const tryFilterConflictType = this.columns.filter(x => x.field === 'conflictType');
36515
- if (!!tryFilterConflictType.length) {
36516
- tryFilterConflictType[0].templateRef = this.conflictType;
36517
- }
36518
- const tryFilterDifference = this.columns.filter(x => x.field === 'difference');
36519
- if (!!tryFilterDifference.length) {
36520
- tryFilterDifference[0].templateRef = this.toolBlock;
36393
+ ngOnInit() {
36394
+ super.register();
36395
+ //this.layoutService.leftbarOpen$.next(false);
36396
+ this.instanceNumber = new Date().getTime();
36397
+ const newInstance = {
36398
+ instanceNumber: this.instanceNumber,
36399
+ selectedKey$: new BehaviorSubject(undefined),
36400
+ activeKeys$: new BehaviorSubject([]),
36401
+ checkedKeys$: new BehaviorSubject([]),
36402
+ expandedKeys$: new BehaviorSubject([]),
36403
+ checkInheritance$: new BehaviorSubject(true)
36404
+ };
36405
+ this.comPartyService.instances.push(newInstance);
36406
+ // Check xem chiều cao height có được truyền vào hay không
36407
+ if (this.height === undefined) {
36408
+ if (isDevMode()) {
36409
+ //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);
36521
36410
  }
36522
- const tryFilterSourceIsPrimaryKey = this.columns.filter(x => x.field === 'sourceIsPrimaryKey');
36523
- if (!!tryFilterSourceIsPrimaryKey.length) {
36524
- tryFilterSourceIsPrimaryKey[0].templateRef = this.sourceIsPrimaryKey;
36411
+ this.subscriptions.push(this.layoutService.contentContainerHeight$.subscribe(x => {
36412
+ // basicSpacing là paddingBottom của lớp content-container
36413
+ this.height = x - this.layoutService.corePageHeaderHeight - this.layoutService.basicSpacing;
36414
+ }));
36415
+ }
36416
+ this.subscriptions.push(this.comPartyService.linerData$.subscribe((x) => this.linearComArray = x));
36417
+ this.subscriptions.push(this.comPartyService.buildTreeFlag$.pipe(skip(1)).subscribe(_ => {
36418
+ this.buildComTreeData();
36419
+ }));
36420
+ this.subscriptions.push(this.stateIsolated$.subscribe(x => {
36421
+ if (x) {
36422
+ if (!!this.statusSubscription) {
36423
+ this.statusSubscription.unsubscribe();
36424
+ }
36525
36425
  }
36526
- const tryFilterTargetIsPrimaryKey = this.columns.filter(x => x.field === 'targetIsPrimaryKey');
36527
- if (!!tryFilterTargetIsPrimaryKey.length) {
36528
- tryFilterTargetIsPrimaryKey[0].templateRef = this.targetIsPrimaryKey;
36426
+ else {
36427
+ if (!this.statusSubscription) {
36428
+ this.statusSubscription = this.comPartyService.status$.subscribe((x) => {
36429
+ console.log("this.organizationService.status$ changes", x);
36430
+ const newActiveIds = [];
36431
+ x.activeKeys.map((k) => {
36432
+ newActiveIds.push(Number(k));
36433
+ });
36434
+ this.activeIds = newActiveIds;
36435
+ if (this.accessorMode !== EnumCoreOrgTreeaAccessorMode.CHECKED) {
36436
+ this.value = this.activeIds;
36437
+ this.onChange(this.activeIds);
36438
+ }
36439
+ this.selectedKey = x.selectedKey;
36440
+ });
36441
+ }
36442
+ }
36443
+ }));
36444
+ this.subscriptions.push(this.coreOrgTreeService.showSearch$.subscribe(x => this.showSearch = x));
36445
+ this.subscriptions.push(this.hiddenToolClickStream$.pipe(buffer(this.hiddenToolClickStream$.pipe(debounceTime(250))), map$1(clicks => clicks.length), filter(clicksLength => clicksLength >= 5))
36446
+ .subscribe(_ => {
36447
+ this.coreOrgTreeService.showSearch$.next(!this.coreOrgTreeService.showSearch$.value);
36448
+ }));
36449
+ this.subscriptions.push(this.search$
36450
+ .pipe(filter((x) => x !== null), debounceTime(500), distinctUntilChanged(), switchMap((text) => {
36451
+ console.log('switchMap works');
36452
+ this.loading = true;
36453
+ // AUG 2024 NEW : MUST BE TESTED
36454
+ if (this.searchMode === EnumCoreOrgTreeaSearchMode.HIGHLIGHT) {
36455
+ return this.recursiveService.findItem(text, this.data);
36456
+ }
36457
+ else {
36458
+ return of(this.recursiveService.reducingFilter(this.scrollContainer, text));
36459
+ }
36460
+ }))
36461
+ .subscribe((x) => {
36462
+ this.loading = false;
36463
+ // if (this.searchMode === EnumCoreOrgTreeaSearchMode.REDUCE) {
36464
+ // this.dataFiltered = x as IOrgTreeItem[];
36465
+ // }
36466
+ }));
36467
+ this.subscriptions.push(this.comPartyService.status$
36468
+ .pipe(filter((value) => !!!this.initializing && !!value))
36469
+ .subscribe((x) => {
36470
+ if (!!localStorage) {
36471
+ localStorage.setItem('coreOrgTreeStatus', JSON.stringify(x));
36472
+ }
36473
+ }));
36474
+ this.subscriptions.push(this.mls.lang$.subscribe((x) => (this.lang = x)));
36475
+ }
36476
+ buildComTree(comLinerData) {
36477
+ if (!this.appConfigService.FEDERATION_COM_PARTY_ENABLED)
36478
+ return;
36479
+ this.comPartyService.linerData$.next(comLinerData);
36480
+ const cloneCopy = JSON.parse(JSON.stringify(comLinerData));
36481
+ console.group("comLinerData...", comLinerData);
36482
+ if (!!comLinerData) {
36483
+ if (typeof Worker !== 'undefined') {
36484
+ console.log('🟢 Worker works');
36485
+ // Create a new
36486
+ const worker = new Worker(liner_to_nested_array_script);
36487
+ worker.addEventListener("message", ({ data }) => {
36488
+ console.log("ComTreeData calculation finished!", new Date().getTime());
36489
+ this.comPartyService.loading = false;
36490
+ this.comPartyService.comTreeData$.next(data.list);
36491
+ this.comPartyService.linerData$.next(data.rawList);
36492
+ });
36493
+ console.log("ComTreeData is being calculated by Worker...");
36494
+ console.log("this.comPartyService.status$.value", this.comPartyService.status$.value);
36495
+ worker.postMessage({
36496
+ list: cloneCopy,
36497
+ keyField: 'id',
36498
+ titleField: 'name',
36499
+ parentField: 'parentId',
36500
+ activeField: 'active',
36501
+ checkedField: 'checked',
36502
+ expandedField: 'expanded',
36503
+ status: this.comPartyService.status$.value, // <=== this had been already retrieved on app-initialization
36504
+ orderBy: 'orderNum'
36505
+ });
36506
+ }
36507
+ else {
36508
+ // Web workers are not supported in this environment.
36509
+ // You should add a fallback so that your program still executes correctly.
36510
+ console.log("this.comPartyService.status$.value", this.comPartyService.status$.value);
36511
+ 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
36512
+ )
36513
+ .subscribe(data => {
36514
+ console.log("data", data);
36515
+ this.comPartyService.comTreeData$.next(data.list);
36516
+ this.comPartyService.linerData$.next(data.rawList);
36517
+ }));
36518
+ }
36519
+ }
36520
+ }
36521
+ resizeHeight() {
36522
+ // height is not given and the tree resize as standard
36523
+ if (!!!this.height) {
36524
+ const sizeHeaderHeight = Number(getComputedStyle(document.documentElement)
36525
+ .getPropertyValue('--size-header-height')
36526
+ .replace('px', ''));
36527
+ const sizeCorePageHeaderHeight = Number(getComputedStyle(document.documentElement)
36528
+ .getPropertyValue('--size-core-page-header-height')
36529
+ .replace('px', ''));
36530
+ const containerHeight = window.innerHeight - sizeHeaderHeight - sizeCorePageHeaderHeight;
36531
+ const pageHeaderHeight = Number(getComputedStyle(document.documentElement)
36532
+ .getPropertyValue('--size-core-page-header-height')
36533
+ .replace('px', ''));
36534
+ const paginationHeight = Number(getComputedStyle(document.documentElement)
36535
+ .getPropertyValue('--size-core-pagination-height')
36536
+ .replace('px', ''));
36537
+ const sizeMarginCorePaginationFull = Number(getComputedStyle(document.documentElement)
36538
+ .getPropertyValue('--size-margin-core-pagination')
36539
+ .replace('px', ''));
36540
+ const height = containerHeight - pageHeaderHeight - paginationHeight + sizeMarginCorePaginationFull;
36541
+ console.log(height);
36542
+ this.container?.nativeElement.style.setProperty('--height', height + 'px');
36543
+ }
36544
+ else {
36545
+ this.container?.nativeElement.style.setProperty('--height', this.height + 'px');
36546
+ }
36547
+ }
36548
+ ngAfterViewInit() {
36549
+ setTimeout(() => {
36550
+ if (!!this.authService.data$.value?.id && (!this.comPartyService.linerData$?.value || (!!this.comPartyService.linerData$?.value && !this.comPartyService.linerData$?.value.length))) {
36551
+ this.comPartyService.getComLinearData(this.authService.data$.value.id).pipe(tap$1(_ => this.loading = true), finalize$1(() => this.loading = false)).subscribe(x => {
36552
+ if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
36553
+ this.comPartyService.linerData$.next(x.body.innerBody.map(i => ({
36554
+ ...i,
36555
+ active: i.isActive
36556
+ })));
36557
+ this.comPartyService.buildTreeFlag$.next(!this.comPartyService.buildTreeFlag$.value);
36558
+ }
36559
+ });
36560
+ }
36561
+ this.subscriptions.push(this.comPartyService.comTreeData$.subscribe((x) => {
36562
+ this.data = x;
36563
+ //this.dataFiltered = JSON.parse(JSON.stringify(x));
36564
+ console.log("new comtree Data coming", this.data, new Date().getTime());
36565
+ if (!!this.data) {
36566
+ if (!!this.data.length)
36567
+ this.data[0].tree$Expanded = true;
36568
+ }
36569
+ }));
36570
+ this.subscriptions.push(this.coreOrgTreeService.arrowFontSize$.subscribe(x => {
36571
+ this.container?.nativeElement.style.setProperty('--arrow-font-size', x + 'px');
36572
+ }));
36573
+ this.subscriptions.push(this.coreOrgTreeService.titleWrapperMaxWidth$.pipe(filter(x => !!x)).subscribe(x => {
36574
+ this.container?.nativeElement.style.setProperty('--title-wrapper-max-width', x + 'px');
36575
+ }));
36576
+ this.subscriptions.push(this.comPartyService.status$.subscribe(x => {
36577
+ if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE && !!x.activeKeys) {
36578
+ this.onChange(x.activeKeys.map(i => Number(i)));
36579
+ }
36580
+ else if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE) {
36581
+ // tạm thời bỏ qua
36582
+ }
36583
+ else if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED && !!x.checkedKeys) {
36584
+ this.onChange(x.checkedKeys.map(i => Number(i)));
36585
+ }
36586
+ }));
36587
+ });
36588
+ }
36589
+ // onItemClickLocal(e: IComTreeItem): void {
36590
+ // this.linnerOrgArray.map((x) => (x.active = false));
36591
+ // setTimeout(() => this.buildTreeData());
36592
+ // }
36593
+ onToggleItem(e) {
36594
+ const cloneCopy = JSON.parse(JSON.stringify(this.linearComArray));
36595
+ const filter = cloneCopy.filter((x) => x.id === e.id);
36596
+ if (filter.length === 1) {
36597
+ filter[0].expand = !!!e.expand;
36598
+ }
36599
+ this.linearComArray = cloneCopy;
36600
+ setTimeout(() => this.buildComTreeData());
36601
+ }
36602
+ // buildTreeData(): void {
36603
+ // this.loading = true;
36604
+ // const cloneCopy = JSON.parse(JSON.stringify(this.linnerOrgArray));
36605
+ // if (typeof Worker !== 'undefined') {
36606
+ // // Create a new
36607
+ // console.log("🟢🟢 Worker works");
36608
+ // this.worker = new Worker(liner_to_nested_array_script);
36609
+ // this.worker.addEventListener('message', ({ data }) => {
36610
+ // this.data = data.list;
36611
+ // //this.dataFiltered = JSON.parse(JSON.stringify(data.list));
36612
+ // if (!!this.data && !!this.data?.length) this.data[0].tree$Expanded = true;
36613
+ // this.loading = false;
36614
+ // });
36615
+ // this.worker.postMessage({
36616
+ // list: cloneCopy,
36617
+ // keyField: 'id',
36618
+ // titleField: 'name',
36619
+ // parentField: 'parentId',
36620
+ // activeField: 'active',
36621
+ // //inheritantActiveField: 'inheritantActive',
36622
+ // checkedField: 'checked',
36623
+ // expandedField: 'expand',
36624
+ // });
36625
+ // } else {
36626
+ // // Web workers are not supported in this environment.
36627
+ // // You should add a fallback so that your program still executes correctly.
36628
+ // const status = this.organizationService.status$.value;
36629
+ // this.subscriptions.push(
36630
+ // this.recursiveService
36631
+ // .linerArrayToNestedArray(
36632
+ // cloneCopy,
36633
+ // 'id',
36634
+ // 'name',
36635
+ // 'parentId',
36636
+ // 'active',
36637
+ // 'checked',
36638
+ // 'expand',
36639
+ // //status
36640
+ // )
36641
+ // .subscribe((obj) => {
36642
+ // this.data = obj.list;
36643
+ // //this.dataFiltered = JSON.parse(JSON.stringify(obj.list));
36644
+ // if (!!this.data && !!this.data?.length) this.data[0].tree$Expanded = true;
36645
+ // this.loading = false;
36646
+ // })
36647
+ // );
36648
+ // }
36649
+ // }
36650
+ buildComTreeData() {
36651
+ this.loading = true;
36652
+ const cloneCopy = JSON.parse(JSON.stringify(this.linearComArray));
36653
+ // ✅ ADD THIS FILTER
36654
+ const filteredList = !this.showDissolved
36655
+ ? cloneCopy.filter(x => x.active === true)
36656
+ : cloneCopy;
36657
+ if (typeof Worker !== 'undefined') {
36658
+ this.worker = new Worker(liner_to_nested_array_script);
36659
+ this.worker.addEventListener('message', ({ data }) => {
36660
+ this.data = data.list;
36661
+ if (!!this.data?.length)
36662
+ this.data[0].tree$Expanded = true;
36663
+ this.loading = false;
36664
+ });
36665
+ // ✅ USE filteredList INSTEAD OF cloneCopy
36666
+ this.worker.postMessage({
36667
+ list: filteredList,
36668
+ keyField: 'id',
36669
+ titleField: 'name',
36670
+ parentField: 'parentId',
36671
+ activeField: 'active',
36672
+ checkedField: 'checked',
36673
+ expandedField: 'expand',
36674
+ });
36675
+ }
36676
+ else {
36677
+ this.subscriptions.push(this.recursiveService
36678
+ .linerArrayToNestedArray(filteredList, // ✅ use filteredList
36679
+ 'id', 'name', 'parentId', 'active', 'checked', 'expand')
36680
+ .subscribe((obj) => {
36681
+ this.data = obj.list;
36682
+ if (!!this.data?.length)
36683
+ this.data[0].tree$Expanded = true;
36684
+ this.loading = false;
36685
+ }));
36686
+ }
36687
+ }
36688
+ onExpandTogglerClick(e, event) {
36689
+ event.stopPropagation();
36690
+ const newValue = !e.tree$Expanded;
36691
+ e.tree$Expanded = newValue;
36692
+ // updating status with newValue
36693
+ const currentExpandedIds = this.comPartyService.status$.value?.expandedKeys;
36694
+ let newExpandedIds = currentExpandedIds?.filter((_) => !!!currentExpandedIds.includes(e.id.toString()));
36695
+ if (newValue) {
36696
+ newExpandedIds?.push(e.id.toString());
36697
+ }
36698
+ newExpandedIds?.sort();
36699
+ const newExpandedKeys = [];
36700
+ newExpandedIds.map((x) => newExpandedKeys.push(x.toString()));
36701
+ this.comPartyService.status$.next({
36702
+ ...this.comPartyService.status$.value,
36703
+ expandedKeys: newExpandedKeys,
36704
+ });
36705
+ }
36706
+ onItemCheck(e, newValue) {
36707
+ this.itemClick?.emit(e);
36708
+ if (this.accessorMode !== EnumCoreOrgTreeaAccessorMode.CHECKED)
36709
+ return;
36710
+ // We have this var to hold nodes that are being changed
36711
+ let toggledIds;
36712
+ // We should calculate a new state into this var:
36713
+ const newCheckedIds = JSON.parse(JSON.stringify(this.checkedIds));
36714
+ // We will call this function after toggledIds changed
36715
+ const changeValue = () => {
36716
+ // If newValue === true, we will disctintly push changed ids to the state
36717
+ // Otherwise we will remove them from the state
36718
+ if (!!newValue) {
36719
+ toggledIds.map(x => {
36720
+ if (!!!newCheckedIds.includes(x)) {
36721
+ newCheckedIds.push(x);
36722
+ }
36723
+ });
36724
+ // Then asign the state to the newCheckedIds
36725
+ this.checkedIds = newCheckedIds;
36726
+ }
36727
+ else {
36728
+ const filter = newCheckedIds.filter(x => !!!toggledIds.includes(x));
36729
+ // Then asign the state to the filter
36730
+ this.checkedIds = filter;
36731
+ }
36732
+ // After the cases of if/else, make the control change with onChange
36733
+ this.value = this.checkedIds;
36734
+ this.onChange(this.checkedIds);
36735
+ this.markAsTouched();
36736
+ };
36737
+ /* start: THIS CODE SCOPE calculates toggledIds */
36738
+ if (this.checkInheritance) {
36739
+ // If true, all the nested items will be checked/unchecked
36740
+ this.recursiveService
36741
+ .nestedToggleCheck(e, newValue, this.showDissolved)
36742
+ .then((x) => {
36743
+ let currentCheckedKeys = this.comPartyService.status$.value.checkedKeys || [];
36744
+ if (!!newValue) {
36745
+ x.map(item => {
36746
+ if (currentCheckedKeys.filter(i => i === item.toString()).length === 0) {
36747
+ currentCheckedKeys.push(item.toString());
36748
+ }
36749
+ });
36750
+ }
36751
+ else {
36752
+ currentCheckedKeys = currentCheckedKeys.filter(i => !x.includes(Number(i)));
36753
+ }
36754
+ this.comPartyService.status$.next({
36755
+ ...this.comPartyService.status$.value,
36756
+ checkedKeys: currentCheckedKeys //x.map(item => item.toString())
36757
+ });
36758
+ // The ids have been changed
36759
+ toggledIds = x;
36760
+ // Now toggledIds were set. We call the function we declared
36761
+ changeValue();
36762
+ })
36763
+ .catch((x) => {
36764
+ console.error(x);
36765
+ });
36766
+ }
36767
+ else {
36768
+ // Otherwise we simply toggle check for current item only
36769
+ toggledIds = [e.id];
36770
+ // Now toggledIds were set. We call the function we declared
36771
+ changeValue();
36772
+ }
36773
+ /* end: THIS CODE SCOPE calculates toggledIds */
36774
+ // That is. Happy debugging!
36775
+ }
36776
+ onCheckIncludeDissolvedChange(value) {
36777
+ console.log("onCheckIncludeDissolvedChange", value);
36778
+ }
36779
+ onCheckInheritanceChange(value) {
36780
+ this.comPartyService.status$.next({
36781
+ ...this.comPartyService.status$.value,
36782
+ checkInheritance: value,
36783
+ });
36784
+ }
36785
+ onObjectClick(e, event) {
36786
+ // remove highlight class
36787
+ // TO DO
36788
+ if (!!e.protected)
36789
+ return;
36790
+ this.itemClick?.emit(e);
36791
+ if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED)
36792
+ return;
36793
+ let activeIds = [];
36794
+ this.data.map((item) => (item.active = false));
36795
+ if (this.accessorMode ===
36796
+ EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE ||
36797
+ !!!this.accessorMode) {
36798
+ // If true, all the nested items will be active, the others are inactive
36799
+ this.recursiveService
36800
+ .nestedResetActive(e, true)
36801
+ .then((x) => {
36802
+ activeIds = x;
36803
+ activeIds.sort();
36804
+ const newActiveKeys = [];
36805
+ activeIds.map((x) => newActiveKeys.push(x.toString()));
36806
+ this.comPartyService.status$.next({
36807
+ ...this.comPartyService.status$.value,
36808
+ activeKeys: newActiveKeys,
36809
+ selectedKey: e.id.toString()
36810
+ });
36811
+ this.activeIds = activeIds;
36812
+ console.log(this.activeIds);
36813
+ this.onChange(activeIds);
36814
+ })
36815
+ .catch((x) => {
36816
+ console.error(x);
36817
+ });
36818
+ }
36819
+ else {
36820
+ // ACTIVATED_SINGLE
36821
+ // Otherwise we simply set current item to be active only
36822
+ activeIds = [e.id];
36823
+ this.activeIds = activeIds;
36824
+ this.comPartyService.status$.next({
36825
+ ...this.comPartyService.status$.value,
36826
+ activeKeys: [e.id.toString()],
36827
+ selectedKey: e.id.toString(),
36828
+ });
36829
+ this.onChange(activeIds);
36830
+ }
36831
+ const { detail } = event;
36832
+ if (detail === 2) {
36833
+ console.log('This was a dblclick');
36834
+ this.itemDoubleClick.emit(e);
36835
+ }
36836
+ this.selectedItem = e;
36837
+ }
36838
+ onSearchChange(text) {
36839
+ this.search$.next(text);
36840
+ }
36841
+ onHiddenToolClick(e) {
36842
+ e.stopPropagation();
36843
+ this.hiddenToolClickStream$.next(crypto.randomUUID());
36844
+ }
36845
+ ngOnDestroy() {
36846
+ if (this.worker) {
36847
+ this.worker.terminate();
36848
+ }
36849
+ this.subscriptions.map((x) => x?.unsubscribe());
36850
+ if (!!this.instanceNumber) {
36851
+ const tryToFind = this.comPartyService.instances.filter((x) => x.instanceNumber === this.instanceNumber);
36852
+ if (!!tryToFind.length) {
36853
+ const newInstances = this.comPartyService.instances.filter((x) => x.instanceNumber !== this.instanceNumber);
36854
+ this.comPartyService.instances = newInstances;
36855
+ }
36856
+ }
36857
+ }
36858
+ 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 }); }
36859
+ 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: [
36860
+ {
36861
+ provide: NG_VALUE_ACCESSOR,
36862
+ useExisting: forwardRef(() => CoreComTreeComponent),
36863
+ multi: true
36864
+ }
36865
+ ], 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: [".core-org-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;--item-height: 35px;--arrow-font-size: 18px;--ul-padding: 20px;--display: \"block\";--square-color: black;--square-size: 9px;--line-color: \"transparent\";--title-wrapper-max-width: 250px;--active-item-color: #F37540;--size-scrollbar-width: 10px;--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}.core-org-tree-container .hidden-tool{display:block;position:absolute;background-color:transparent;width:var(--ul-padding);height:var(--ul-padding);top:0;left:0}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-org-tree-container .custom-org-tree{display:var(--display)}.core-org-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-org-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px);max-width:100%;transform:translate(14px,8px);border:1px solid #E6EBED}.core-org-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-org-tree-container .check-inheritance-wrapper{padding:15px}.core-org-tree-container .m5>input{color:gray}.core-org-tree-container .form-control{border:none}.core-org-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-org-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow:auto;position:relative;width:100%}.core-org-tree-container .scroll-container::-webkit-scrollbar-corner{background-color:transparent}.core-org-tree-container .scroll-container::-webkit-scrollbar{width:8px;height:8px}.core-org-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}.core-org-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-org-tree-container .scroll-container ul>li>span:hover{height:35px;background-color:#fff;border-top-left-radius:20px;border-bottom-left-radius:20px;width:100%}.core-org-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1;height:35px;border-radius:20px}.core-org-tree-container .scroll-container ul>li>span>object{user-select:none;max-width:var(--title-wrapper-max-width);overflow-x:hidden;text-overflow:ellipsis;-webkit-user-select:none}.core-org-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-org-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-org-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-org-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-org-tree-container .scroll-container ul>li{display:block;position:relative}.core-org-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;font-size:13px;padding-left:8px;transform:translate(10px);cursor:pointer}.core-org-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-org-tree-container .scroll-container ul>li>span>.expand-toggler{font-size:var(--arrow-font-size);width:24px;height:24px;position:absolute;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-org-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-org-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-org-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-org-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-org-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-org-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-org-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"], 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: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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"] }], deferBlockDependencies: [() => [NgTemplateOutlet]] }); }
36866
+ }
36867
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreComTreeComponent, decorators: [{
36868
+ type: Component,
36869
+ args: [{ selector: 'core-com-tree', imports: [
36870
+ FormsModule,
36871
+ NgIf,
36872
+ NgTemplateOutlet,
36873
+ CoreCheckboxComponent,
36874
+ CoreLoadingSurfaceComponent,
36875
+ TranslatePipe,
36876
+ TooltipDirective,
36877
+ ], providers: [
36878
+ {
36879
+ provide: NG_VALUE_ACCESSOR,
36880
+ useExisting: forwardRef(() => CoreComTreeComponent),
36881
+ multi: true
36882
+ }
36883
+ ], 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: [".core-org-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;--item-height: 35px;--arrow-font-size: 18px;--ul-padding: 20px;--display: \"block\";--square-color: black;--square-size: 9px;--line-color: \"transparent\";--title-wrapper-max-width: 250px;--active-item-color: #F37540;--size-scrollbar-width: 10px;--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}.core-org-tree-container .hidden-tool{display:block;position:absolute;background-color:transparent;width:var(--ul-padding);height:var(--ul-padding);top:0;left:0}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-org-tree-container .custom-org-tree{display:var(--display)}.core-org-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-org-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px);max-width:100%;transform:translate(14px,8px);border:1px solid #E6EBED}.core-org-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-org-tree-container .check-inheritance-wrapper{padding:15px}.core-org-tree-container .m5>input{color:gray}.core-org-tree-container .form-control{border:none}.core-org-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-org-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow:auto;position:relative;width:100%}.core-org-tree-container .scroll-container::-webkit-scrollbar-corner{background-color:transparent}.core-org-tree-container .scroll-container::-webkit-scrollbar{width:8px;height:8px}.core-org-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}.core-org-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-org-tree-container .scroll-container ul>li>span:hover{height:35px;background-color:#fff;border-top-left-radius:20px;border-bottom-left-radius:20px;width:100%}.core-org-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1;height:35px;border-radius:20px}.core-org-tree-container .scroll-container ul>li>span>object{user-select:none;max-width:var(--title-wrapper-max-width);overflow-x:hidden;text-overflow:ellipsis;-webkit-user-select:none}.core-org-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-org-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-org-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-org-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-org-tree-container .scroll-container ul>li{display:block;position:relative}.core-org-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;font-size:13px;padding-left:8px;transform:translate(10px);cursor:pointer}.core-org-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-org-tree-container .scroll-container ul>li>span>.expand-toggler{font-size:var(--arrow-font-size);width:24px;height:24px;position:absolute;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-org-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-org-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-org-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-org-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-org-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-org-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-org-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"] }]
36884
+ }], ctorParameters: () => [{ type: AuthService }, { type: RecursiveService }, { type: MultiLanguageService }, { type: LayoutService }, { type: CoreOrgTreeService }, { type: AlertService }, { type: ComPartyService }], propDecorators: { lineColor: [{
36885
+ type: Input
36886
+ }], fullWidthMode: [{
36887
+ type: Input
36888
+ }], accessorMode: [{
36889
+ type: Input
36890
+ }], searchMode: [{
36891
+ type: Input
36892
+ }], fullRendering: [{
36893
+ type: Input
36894
+ }], height: [{
36895
+ type: Input
36896
+ }], disabledLoopExpand: [{
36897
+ type: Input
36898
+ }], showCheckInheritance: [{
36899
+ type: Input
36900
+ }], excludedIds$: [{
36901
+ type: Input
36902
+ }], stateIsolated$: [{
36903
+ type: Input
36904
+ }], itemDoubleClick: [{
36905
+ type: Output
36906
+ }], itemClick: [{
36907
+ type: Output
36908
+ }], container: [{
36909
+ type: ViewChild,
36910
+ args: ['container']
36911
+ }], scrollContainer: [{
36912
+ type: ViewChild,
36913
+ args: ['scrollContainer']
36914
+ }], displayContent: [{
36915
+ type: ViewChild,
36916
+ args: ['displayContent']
36917
+ }], reducedIconWrapper: [{
36918
+ type: ViewChild,
36919
+ args: ['reducedIconWrapper']
36920
+ }] } });
36921
+
36922
+ class CorePaginationComponent {
36923
+ constructor() {
36924
+ this.$currentPage = input.required();
36925
+ this.$height = input.required();
36926
+ this.$pageCount = input.required();
36927
+ this.$loading = input.required();
36928
+ this.$suspendCurrentPageSubscription = input();
36929
+ this.$showAdd = input();
36930
+ this.$background = input();
36931
+ this.$fixedPageSize = input();
36932
+ this.$onClickAdd = output();
36933
+ this.$container = viewChild('container');
36934
+ this.$current = viewChild('current');
36935
+ this.$aperture = viewChild('aperture');
36936
+ this.$currentButtonContent = signal('1');
36937
+ this.$suspendCurrentPage = signal(true);
36938
+ this.$navigationDirection = signal(1);
36939
+ this.subscriptions = [];
36940
+ }
36941
+ ngOnInit() { }
36942
+ goFirst() {
36943
+ this.$navigationDirection.set(-1);
36944
+ this.$suspendCurrentPage.set(false);
36945
+ setTimeout(() => {
36946
+ if (!!this.$pageCount())
36947
+ this.$currentPage().next(1);
36948
+ this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotatebackwards');
36949
+ });
36950
+ }
36951
+ goLast() {
36952
+ this.$navigationDirection.set(1);
36953
+ this.$suspendCurrentPage.set(false);
36954
+ setTimeout(() => {
36955
+ if (!!this.$pageCount())
36956
+ this.$currentPage().next(this.$pageCount());
36957
+ this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotateforwards');
36958
+ });
36959
+ }
36960
+ goPrevious() {
36961
+ this.$navigationDirection.set(-1);
36962
+ this.$suspendCurrentPage.set(false);
36963
+ setTimeout(() => {
36964
+ if (!!this.$pageCount())
36965
+ this.$currentPage().next(this.$currentPage().value - 1);
36966
+ this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotatebackwards');
36967
+ });
36968
+ }
36969
+ goNext() {
36970
+ this.$navigationDirection.set(1);
36971
+ this.$suspendCurrentPage.set(false);
36972
+ setTimeout(() => {
36973
+ if (!!this.$pageCount())
36974
+ this.$currentPage().next(this.$currentPage().value + 1);
36975
+ this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotateforwards');
36976
+ });
36977
+ }
36978
+ onClickAddLocal() {
36979
+ this.$onClickAdd.emit();
36980
+ }
36981
+ ngAfterViewInit() {
36982
+ setTimeout(() => {
36983
+ this.subscriptions.push(this.$currentPage().subscribe(x => this.$currentButtonContent.set(x.toString())));
36984
+ this.mouseDownStream$ = fromEvent(this.$current().nativeElement, 'mousedown', _ => {
36985
+ this.$currentButtonContent.set(`${this.$currentPage().value}/${this.$pageCount()}`);
36986
+ });
36987
+ this.touchStartStream$ = fromEvent(this.$current().nativeElement, 'touchstart', _ => {
36988
+ this.$currentButtonContent.set(`${this.$currentPage().value}/${this.$pageCount()}`);
36989
+ });
36990
+ this.mouseUpStream$ = fromEvent(this.$current().nativeElement, 'mouseup', _ => {
36991
+ this.$currentButtonContent.set(`${this.$currentPage().value}`);
36992
+ });
36993
+ this.touchEndStream$ = fromEvent(this.$current().nativeElement, 'touchend', _ => {
36994
+ this.$currentButtonContent.set(`${this.$currentPage().value}`);
36995
+ });
36996
+ this.mouseDownSubscription$ = this.mouseDownStream$.subscribe();
36997
+ this.touchStartSubscription$ = this.touchStartStream$.subscribe();
36998
+ this.mouseUpSubscription$ = this.mouseUpStream$.subscribe();
36999
+ this.touchEndSubscription$ = this.touchEndStream$.subscribe();
37000
+ if (this.$background())
37001
+ setTimeout(() => this.$container().nativeElement.style.setProperty('--bg', this.$background()));
37002
+ if (this.$height())
37003
+ this.$container()?.nativeElement.style.setProperty('--height', this.$height() + 'px');
37004
+ });
37005
+ }
37006
+ ngOnDestroy() {
37007
+ if (this.mouseDownSubscription$)
37008
+ this.mouseDownSubscription$.unsubscribe();
37009
+ if (this.touchStartSubscription$)
37010
+ this.touchStartSubscription$.unsubscribe();
37011
+ if (this.mouseUpSubscription$)
37012
+ this.mouseUpSubscription$.unsubscribe();
37013
+ if (this.touchEndSubscription$)
37014
+ this.touchEndSubscription$.unsubscribe();
37015
+ }
37016
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CorePaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
37017
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CorePaginationComponent, isStandalone: true, selector: "core-pagination", inputs: { $currentPage: { classPropertyName: "$currentPage", publicName: "$currentPage", isSignal: true, isRequired: true, transformFunction: null }, $height: { classPropertyName: "$height", publicName: "$height", isSignal: true, isRequired: true, transformFunction: null }, $pageCount: { classPropertyName: "$pageCount", publicName: "$pageCount", isSignal: true, isRequired: true, transformFunction: null }, $loading: { classPropertyName: "$loading", publicName: "$loading", isSignal: true, isRequired: true, transformFunction: null }, $suspendCurrentPageSubscription: { classPropertyName: "$suspendCurrentPageSubscription", publicName: "$suspendCurrentPageSubscription", isSignal: true, isRequired: false, transformFunction: null }, $showAdd: { classPropertyName: "$showAdd", publicName: "$showAdd", isSignal: true, isRequired: false, transformFunction: null }, $background: { classPropertyName: "$background", publicName: "$background", isSignal: true, isRequired: false, transformFunction: null }, $fixedPageSize: { classPropertyName: "$fixedPageSize", publicName: "$fixedPageSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { $onClickAdd: "$onClickAdd" }, viewQueries: [{ propertyName: "$container", first: true, predicate: ["container"], descendants: true, isSignal: true }, { propertyName: "$current", first: true, predicate: ["current"], descendants: true, isSignal: true }, { propertyName: "$aperture", first: true, predicate: ["aperture"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #container class=\"pagination-container d-flex-between\">\r\n <div class=\"pagination-container\">\r\n <div class=\"first\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goFirst()\"></div>\r\n <div class=\"previous\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goPrevious()\"></div>\r\n <div #current class=\"current\">\r\n <div class=\"d-flex-center\">\r\n <i #aperture class=\"feather-aperture aperture \" [class.visible]=\"$loading()\"></i>\r\n @if (!$loading()) {\r\n <span class=\"current-text\">{{ $currentButtonContent() }}</span>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"next\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goNext()\"></div>\r\n <div class=\"last\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goLast()\"></div>\r\n </div>\r\n @if ($showAdd()) {\r\n <a (click)=\"onClickAddLocal()\">\r\n <div class=\"add\"></div>\r\n </a>\r\n }\r\n</div>", styles: [".pagination-container{--bg: #848484;--color: white;--height: 38px;--button-size: 50px;--font-size: 18px;--aperture-size: 30px}@keyframes rotateforwards{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotatebackwards{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}.pagination-container .add:before{font-family:feather;content:\"\\e9b1\";font-weight:700;font-size:var(--font-size);color:#fff;background:var(--bg);width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center;border-top-right-radius:50%;border-bottom-right-radius:50%}.pagination-container .pagination-container{height:var(--height);display:flex}.pagination-container .pagination-container>div{display:inline-block;cursor:pointer;margin-right:2px}.pagination-container .pagination-container .disable{cursor:default;opacity:.5!important}.pagination-container .pagination-container .current{border-radius:50%;margin:0 5px;opacity:1;transition:2s}.pagination-container .pagination-container .aperture{width:var(--aperture-size);height:var(--aperture-size);opacity:0;transition:.25s ease-out;animation:rotateforwards 1s linear infinite}.pagination-container .pagination-container .aperture:before{font-size:var(--aperture-size)}.pagination-container .pagination-container .visible{opacity:1;transition:.25s ease-out}.pagination-container .pagination-container .current,.pagination-container .pagination-container .loading{width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color)}.pagination-container .pagination-container .current-text{position:absolute}.pagination-container .pagination-container .current>div{width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container div:before{font-family:feather;font-size:var(--font-size);width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container .first:before{content:\"\\e933\"}.pagination-container .pagination-container .previous:before{content:\"\\e92f\"}.pagination-container .pagination-container .next:before{content:\"\\e930\"}.pagination-container .pagination-container .last:before{content:\"\\e934\"}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37018
+ }
37019
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CorePaginationComponent, decorators: [{
37020
+ type: Component,
37021
+ args: [{ selector: 'core-pagination', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
37022
+ NgStyle,
37023
+ AsyncPipe,
37024
+ ], template: "<div #container class=\"pagination-container d-flex-between\">\r\n <div class=\"pagination-container\">\r\n <div class=\"first\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goFirst()\"></div>\r\n <div class=\"previous\" [class.disable]=\"!$pageCount() || $currentPage().value===1\" (click)=\"goPrevious()\"></div>\r\n <div #current class=\"current\">\r\n <div class=\"d-flex-center\">\r\n <i #aperture class=\"feather-aperture aperture \" [class.visible]=\"$loading()\"></i>\r\n @if (!$loading()) {\r\n <span class=\"current-text\">{{ $currentButtonContent() }}</span>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"next\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goNext()\"></div>\r\n <div class=\"last\" [class.disable]=\"!$pageCount() || ($currentPage() | async)===$pageCount()\" (click)=\"goLast()\"></div>\r\n </div>\r\n @if ($showAdd()) {\r\n <a (click)=\"onClickAddLocal()\">\r\n <div class=\"add\"></div>\r\n </a>\r\n }\r\n</div>", styles: [".pagination-container{--bg: #848484;--color: white;--height: 38px;--button-size: 50px;--font-size: 18px;--aperture-size: 30px}@keyframes rotateforwards{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotatebackwards{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}.pagination-container .add:before{font-family:feather;content:\"\\e9b1\";font-weight:700;font-size:var(--font-size);color:#fff;background:var(--bg);width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center;border-top-right-radius:50%;border-bottom-right-radius:50%}.pagination-container .pagination-container{height:var(--height);display:flex}.pagination-container .pagination-container>div{display:inline-block;cursor:pointer;margin-right:2px}.pagination-container .pagination-container .disable{cursor:default;opacity:.5!important}.pagination-container .pagination-container .current{border-radius:50%;margin:0 5px;opacity:1;transition:2s}.pagination-container .pagination-container .aperture{width:var(--aperture-size);height:var(--aperture-size);opacity:0;transition:.25s ease-out;animation:rotateforwards 1s linear infinite}.pagination-container .pagination-container .aperture:before{font-size:var(--aperture-size)}.pagination-container .pagination-container .visible{opacity:1;transition:.25s ease-out}.pagination-container .pagination-container .current,.pagination-container .pagination-container .loading{width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color)}.pagination-container .pagination-container .current-text{position:absolute}.pagination-container .pagination-container .current>div{width:var(--button-size);height:var(--button-size);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container div:before{font-family:feather;font-size:var(--font-size);width:var(--button-size);height:var(--button-size);background:var(--bg);color:var(--color);display:flex;align-items:center;justify-content:center}.pagination-container .pagination-container .first:before{content:\"\\e933\"}.pagination-container .pagination-container .previous:before{content:\"\\e92f\"}.pagination-container .pagination-container .next:before{content:\"\\e930\"}.pagination-container .pagination-container .last:before{content:\"\\e934\"}\n"] }]
37025
+ }], ctorParameters: () => [] });
37026
+
37027
+ class CoreCompareDbPipelineComponent extends BaseComponent {
37028
+ constructor(mls, appService) {
37029
+ super(mls);
37030
+ this.mls = mls;
37031
+ this.appService = appService;
37032
+ this.data = [];
37033
+ this.tabHeaders = ["Dev-Test-Live", "Dev-Extended"];
37034
+ this.activeTabIndex = 0;
37035
+ this.columns = [
37036
+ {
37037
+ field: 'id',
37038
+ type: 'string',
37039
+ caption: 'id',
37040
+ align: 'left',
37041
+ hidden: true,
37042
+ width: 0
37043
+ },
37044
+ {
37045
+ field: 'difference',
37046
+ type: 'string',
37047
+ caption: 'Problem',
37048
+ align: 'left',
37049
+ sortDisabled: true,
37050
+ width: 300
37051
+ },
37052
+ {
37053
+ field: 'conflictType',
37054
+ type: 'string',
37055
+ caption: 'Marker',
37056
+ align: 'center',
37057
+ width: 50
37058
+ },
37059
+ {
37060
+ field: 'sourceAlias',
37061
+ type: 'string',
37062
+ caption: 'Source',
37063
+ align: 'left',
37064
+ sortDisabled: true,
37065
+ width: 60
37066
+ },
37067
+ {
37068
+ field: 'targetAlias',
37069
+ type: 'string',
37070
+ caption: 'Target',
37071
+ align: 'left',
37072
+ sortDisabled: true,
37073
+ width: 200
37074
+ },
37075
+ {
37076
+ field: 'tableName',
37077
+ type: 'string',
37078
+ caption: 'Table',
37079
+ align: 'left',
37080
+ sortDisabled: true,
37081
+ width: 200
37082
+ },
37083
+ {
37084
+ field: 'columnName',
37085
+ type: 'string',
37086
+ caption: 'Column',
37087
+ align: 'left',
37088
+ sortDisabled: true,
37089
+ width: 200
37090
+ },
37091
+ {
37092
+ field: 'sourceType',
37093
+ type: 'string',
37094
+ caption: 'Source type',
37095
+ align: 'left',
37096
+ sortDisabled: true,
37097
+ width: 100
37098
+ },
37099
+ {
37100
+ field: 'sourceIsPrimaryKey',
37101
+ type: 'boolean',
37102
+ caption: 'Source is PK',
37103
+ align: 'center',
37104
+ sortDisabled: true,
37105
+ width: 60
37106
+ },
37107
+ {
37108
+ field: 'sourceIsIdentityColumn',
37109
+ type: 'boolean',
37110
+ caption: 'Source is Identity',
37111
+ align: 'center',
37112
+ sortDisabled: true,
37113
+ width: 60
37114
+ },
37115
+ {
37116
+ field: 'sourceNullability',
37117
+ type: 'boolean',
37118
+ caption: 'Source nullability',
37119
+ align: 'center',
37120
+ sortDisabled: true,
37121
+ width: 70
37122
+ },
37123
+ {
37124
+ field: 'sourceSize',
37125
+ type: 'string',
37126
+ caption: 'Source size',
37127
+ align: 'right',
37128
+ sortDisabled: true,
37129
+ width: 100
37130
+ },
37131
+ {
37132
+ field: 'sourcePrecision',
37133
+ type: 'string',
37134
+ caption: 'Source precision',
37135
+ align: 'right',
37136
+ sortDisabled: true,
37137
+ width: 50
37138
+ },
37139
+ {
37140
+ field: 'sourceScale',
37141
+ type: 'string',
37142
+ caption: 'Source scale',
37143
+ align: 'right',
37144
+ sortDisabled: true,
37145
+ width: 50
37146
+ },
37147
+ {
37148
+ field: 'targetType',
37149
+ type: 'string',
37150
+ caption: 'Target type',
37151
+ align: 'left',
37152
+ sortDisabled: true,
37153
+ width: 100
37154
+ },
37155
+ {
37156
+ field: 'targetIsPrimaryKey',
37157
+ type: 'boolean',
37158
+ caption: 'Target is PK',
37159
+ align: 'center',
37160
+ sortDisabled: true,
37161
+ width: 60
37162
+ },
37163
+ {
37164
+ field: 'targetIsIdentityColumn',
37165
+ type: 'boolean',
37166
+ caption: 'Target is Identity',
37167
+ align: 'center',
37168
+ sortDisabled: true,
37169
+ width: 60
37170
+ },
37171
+ {
37172
+ field: 'targetNullability',
37173
+ type: 'boolean',
37174
+ caption: 'Target nullability',
37175
+ align: 'center',
37176
+ sortDisabled: true,
37177
+ width: 70
37178
+ },
37179
+ {
37180
+ field: 'targetSize',
37181
+ type: 'string',
37182
+ caption: 'Targer size',
37183
+ align: 'right',
37184
+ sortDisabled: true,
37185
+ width: 100
37186
+ },
37187
+ {
37188
+ field: 'targetPrecision',
37189
+ type: 'string',
37190
+ caption: 'Target precision',
37191
+ align: 'right',
37192
+ sortDisabled: true,
37193
+ width: 50
37194
+ },
37195
+ {
37196
+ field: 'targetScale',
37197
+ type: 'string',
37198
+ caption: 'Target scale',
37199
+ align: 'right',
37200
+ sortDisabled: true,
37201
+ width: 50
37202
+ },
37203
+ ];
37204
+ this.tableHeight = 500;
37205
+ this.longApiRunning = false;
37206
+ this.defaultRequest = {
37207
+ pageNumber: 1,
37208
+ pageSize: 50
37209
+ };
37210
+ this.request$ = new BehaviorSubject(this.defaultRequest);
37211
+ this.currentPage$ = new BehaviorSubject(1);
37212
+ this.pageSize$ = new BehaviorSubject(50);
37213
+ this.pageCount = 0;
37214
+ this.suspendCurrentPageSubscription$ = new BehaviorSubject(false);
37215
+ this.sqlCommand = '';
37216
+ this.resolverSessionId = '';
37217
+ this.conflictTotal = 0;
37218
+ this.controller = null;
37219
+ }
37220
+ refreshList() {
37221
+ this.controller = new AbortController();
37222
+ this.longApiRunning = true;
37223
+ this.subscriptions.push(this.appService.post('/api/SqlServerPipeline/CompareDbStructure?usehub=true', this.request$.value, this.controller.signal)
37224
+ .subscribe(x => {
37225
+ this.longApiRunning = false;
37226
+ if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
37227
+ this.data = x.body.innerBody.data;
37228
+ this.pageCount = Math.ceil(x.body.innerBody.count / this.pageSize$.value);
37229
+ this.currentPage$.next(x.body.innerBody.pageNumber);
37230
+ this.conflictTotal = x.body.innerBody.count || 0;
37231
+ }
37232
+ }));
37233
+ }
37234
+ ngAfterViewInit() {
37235
+ setTimeout(() => {
37236
+ const tryFilterConflictType = this.columns.filter(x => x.field === 'conflictType');
37237
+ if (!!tryFilterConflictType.length) {
37238
+ tryFilterConflictType[0].templateRef = this.conflictType;
37239
+ }
37240
+ const tryFilterDifference = this.columns.filter(x => x.field === 'difference');
37241
+ if (!!tryFilterDifference.length) {
37242
+ tryFilterDifference[0].templateRef = this.toolBlock;
37243
+ }
37244
+ const tryFilterSourceIsPrimaryKey = this.columns.filter(x => x.field === 'sourceIsPrimaryKey');
37245
+ if (!!tryFilterSourceIsPrimaryKey.length) {
37246
+ tryFilterSourceIsPrimaryKey[0].templateRef = this.sourceIsPrimaryKey;
37247
+ }
37248
+ const tryFilterTargetIsPrimaryKey = this.columns.filter(x => x.field === 'targetIsPrimaryKey');
37249
+ if (!!tryFilterTargetIsPrimaryKey.length) {
37250
+ tryFilterTargetIsPrimaryKey[0].templateRef = this.targetIsPrimaryKey;
36529
37251
  }
36530
37252
  const tryFilterSourceIsIdentityColumn = this.columns.filter(x => x.field === 'sourceIsIdentityColumn');
36531
37253
  if (!!tryFilterSourceIsIdentityColumn.length) {
@@ -36754,860 +37476,221 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
36754
37476
  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
37477
  }], ctorParameters: () => [{ type: DialogService }] });
36756
37478
 
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');
37479
+ class CoreLazyMountComponent {
37480
+ constructor() {
37481
+ this.vcRef = inject(ViewContainerRef);
37482
+ }
37483
+ set props(value) {
37484
+ this._props = value;
37485
+ this.assignInputs();
37486
+ }
37487
+ async ngOnInit() {
37488
+ if (this.loadComponent) {
37489
+ const componentType = await this.loadComponent();
37490
+ this.componentRef = this.vcRef.createComponent(componentType);
37491
+ this.assignInputs();
37247
37492
  }
37248
37493
  }
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
- });
37494
+ assignInputs() {
37495
+ if (this.componentRef && this._props) {
37496
+ Object.assign(this.componentRef.instance, this._props);
37497
+ this.componentRef.changeDetectorRef.markForCheck();
37498
+ }
37278
37499
  }
37279
- onItemClickLocal(e) {
37280
- this.linnerOrgArray.map((x) => (x.active = false));
37281
- setTimeout(() => this.buildTreeData());
37500
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreLazyMountComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
37501
+ 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: [""] }); }
37502
+ }
37503
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreLazyMountComponent, decorators: [{
37504
+ type: Component,
37505
+ args: [{ selector: 'core-lazy-mount', imports: [], template: "" }]
37506
+ }], propDecorators: { loadComponent: [{
37507
+ type: Input
37508
+ }], props: [{
37509
+ type: Input
37510
+ }] } });
37511
+
37512
+ class ModuleItemComponent extends BaseComponent {
37513
+ constructor(mls, navigatorService, cdr, menuService) {
37514
+ super(mls);
37515
+ this.mls = mls;
37516
+ this.navigatorService = navigatorService;
37517
+ this.cdr = cdr;
37518
+ this.menuService = menuService;
37519
+ this.$item = input.required();
37520
+ this.$itemPadding = input(5);
37521
+ this.$width = input.required();
37522
+ this.$height = input.required();
37523
+ this.$iconTextVerticalMargin = input(25);
37524
+ this.$active = signal(false);
37525
+ this.iconClickStream$ = new BehaviorSubject('');
37282
37526
  }
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;
37527
+ ngOnInit() {
37528
+ this.subscriptions.push(this.mls.lang$.subscribe(x => {
37529
+ this.lang = x;
37530
+ this.cdr.markForCheck();
37531
+ }));
37532
+ if (!!localStorage) {
37533
+ const activeRootMenuItemId = Number(localStorage.getItem('activeRootMenuItemId') || '0');
37534
+ const active = activeRootMenuItemId === this.$item()?.id;
37535
+ this.$active.set(active);
37288
37536
  }
37289
- this.linnerOrgArray = cloneCopy;
37290
- setTimeout(() => this.buildTreeData());
37291
37537
  }
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
- });
37538
+ onClick(e, item) {
37539
+ this.iconClickStream$.next(crypto.randomUUID());
37540
+ if (!!item) {
37541
+ this.navigatorService.clickedItem$.next(item);
37365
37542
  }
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
- }));
37543
+ if (localStorage.getItem('moduleDesignMode') === 'on')
37544
+ return;
37545
+ this.navigatorService.activeRootMenuItemId$.next(item?.id);
37546
+ if (!!localStorage) {
37547
+ localStorage.setItem('activeRootMenuItemId', (item?.id || 0).toString());
37376
37548
  }
37549
+ this.menuService.isOpen$.next(true); // trigger the LeftBar to be opened at the first time
37377
37550
  }
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
- });
37551
+ ngAfterViewInit() {
37552
+ this.subscriptions.push(this.navigatorService.activeRootMenuItemId$.subscribe(x => {
37553
+ const active = x === this.$item()?.id;
37554
+ this.$active.set(active);
37555
+ }));
37556
+ this.subscriptions.push(this.iconClickStream$.pipe(buffer(this.iconClickStream$.pipe(debounceTime(250))), map$1(clicks => clicks.length), filter(clicksLength => clicksLength >= 5))
37557
+ .subscribe(_ => {
37558
+ this.navigatorService.showEditSvg$.next(true);
37559
+ }));
37395
37560
  }
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;
37561
+ 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 }); }
37562
+ 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 }); }
37563
+ }
37564
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ModuleItemComponent, decorators: [{
37565
+ type: Component,
37566
+ args: [{ selector: 'app-module-item', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
37567
+ NgStyle,
37568
+ TooltipDirective,
37569
+ StringHtmlPipe,
37570
+ TranslatePipe,
37571
+ ], 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"] }]
37572
+ }], ctorParameters: () => [{ type: MultiLanguageService }, { type: NavigatorService }, { type: i0.ChangeDetectorRef }, { type: MenuService }] });
37573
+
37574
+ class CoreRootMenuItemPickerComponent extends BaseComponent {
37575
+ constructor(mls, ahs, renderer, navigatorService, layoutService, domService, menuService, sysMenuService, authService, appConfigService) {
37576
+ super(mls);
37577
+ this.mls = mls;
37578
+ this.ahs = ahs;
37579
+ this.renderer = renderer;
37580
+ this.navigatorService = navigatorService;
37581
+ this.layoutService = layoutService;
37582
+ this.domService = domService;
37583
+ this.menuService = menuService;
37584
+ this.sysMenuService = sysMenuService;
37585
+ this.authService = authService;
37586
+ this.appConfigService = appConfigService;
37587
+ this.logoPath = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTE1IiBoZWlnaHQ9IjI5IiB2aWV3Qm94PSIwIDAgMTE1IDI5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wIDI4LjU1MjhWOC41NzY4NkgyLjU2MzI5VjE2LjgxMzRIMTIuNTIzNVY4LjU3Njg2SDE1LjA4NjhWMjguNTMzOUgxMi41MjM1VjE5LjE0MjNIMi41ODE2VjI4LjUzMzlIMFYyOC41NTI4Wk0xOS4wNzgyIDExLjM2MDJWOC41NzY4NkgyMS40NTg0VjExLjM2MDJIMTkuMDc4MlpNMTkuMDc4MiAyOC41NTI4VjE0LjA4NjhIMjEuNDU4NFYyOC41NTI4SDE5LjA3ODJaTTI0LjIyMzEgMjIuMDc3MkwyOC4wMzE1IDIxLjY3OTZDMjguMjUxMiAyMi45ODYxIDI4LjcyNzIgMjMuOTUxNyAyOS40MjMgMjQuNTc2NkMzMC4xMTg3IDI1LjIwMTQgMzEuMDcwOCAyNS41MDQ0IDMyLjI0MjYgMjUuNTA0NEMzMy40ODc2IDI1LjUwNDQgMzQuNDIxNCAyNS4yMjAzIDM1LjA2MjIgMjQuNjcxMkMzNS43MDMgMjQuMTIyMSAzNi4wMTQzIDIzLjQ5NzMgMzYuMDE0MyAyMi43NTg5QzM2LjAxNDMgMjIuMjg1NSAzNS44ODYxIDIxLjg2ODkgMzUuNjExNSAyMS41NDdDMzUuMzM2OCAyMS4yMjUyIDM0Ljg3OTEgMjAuOTIyMiAzNC4yMiAyMC42NzYxQzMzLjc2MjIgMjAuNTI0NiAzMi43MzY5IDIwLjIyMTYgMzEuMTI1NyAxOS44MDUxQzI5LjAzODUgMTkuMjc0OSAyNy41NzM3IDE4LjYxMjIgMjYuNzQ5OCAxNy44MTY5QzI1LjU1OTcgMTYuNzE4NyAyNC45OTIxIDE1LjM3NDQgMjQuOTkyMSAxMy44MDI4QzI0Ljk5MjEgMTIuNzgwMyAyNS4yNjY4IDExLjgxNDcgMjUuODE2IDEwLjk0MzdDMjYuMzgzNiAxMC4wNTM4IDI3LjE3MDkgOS4zNzIxMSAyOC4yMTQ1IDguOTE3NjhDMjkuMjc2NSA4LjQ0NDMyIDMwLjUyMTUgOC4yMTcxIDMyLjAwNDYgOC4yMTcxQzM0LjQyMTQgOC4yMTcxIDM2LjIzNCA4Ljc2NjIgMzcuNDYwNyA5Ljg2NDQxQzM4LjY4NzQgMTAuOTgxNSAzOS4zMDk5IDEyLjQ1ODQgMzkuMzgzMiAxNC4zMTRMMzUuNDgzMyAxNC40NjU1QzM1LjMxODUgMTMuNDI0MSAzNC45NzA3IDEyLjY4NTcgMzQuNDIxNCAxMi4yNTAyQzMzLjg3MjEgMTEuODE0NyAzMy4wNjY1IDExLjU2ODUgMzEuOTY3OSAxMS41Njg1QzMwLjg1MTEgMTEuNTY4NSAyOS45NzIyIDExLjgxNDcgMjkuMzMxNCAxMi4yODhDMjguOTI4NiAxMi42MDk5IDI4LjcwODkgMTMuMDI2NSAyOC43MDg5IDEzLjUzNzdDMjguNzA4OSAxNC4wMTExIDI4LjkxMDMgMTQuNDI3NiAyOS4yOTQ4IDE0Ljc0OTVDMjkuNzcwOCAxNS4xODUgMzAuOTc5MiAxNS42Mzk1IDMyLjg2NTEgMTYuMTEyOEMzNC43NTA5IDE2LjU2NzIgMzYuMTYwOCAxNy4wNDA2IDM3LjA1NzkgMTcuNTUxOEMzNy45NTUxIDE4LjA0NDEgMzguNjY5MSAxOC43MjU4IDM5LjE4MTggMTkuNTc3OEMzOS42OTQ0IDIwLjQ0ODggMzkuOTUwOCAyMS40OTAyIDM5Ljk1MDggMjIuNzU4OUMzOS45NTA4IDIzLjg5NDkgMzkuNjM5NSAyNC45NzQyIDM5LjAxNyAyNS45Nzc3QzM4LjQxMjggMjYuOTgxMyAzNy41MzQgMjcuNzE5NyAzNi40MTcxIDI4LjE5MzFDMzUuMzAwMiAyOC42ODU0IDMzLjkwODcgMjguOTEyNiAzMi4yMjQzIDI4LjkxMjZDMjkuNzg5MSAyOC45MTI2IDI3LjkwMzMgMjguMzI1NiAyNi42MDMzIDI3LjE3MDZDMjUuMjY2OCAyNS45OTY3IDI0LjQ3OTUgMjQuMjkyNiAyNC4yMjMxIDIyLjA3NzJaTTQ5LjU4MTQgMTQuMDY3OVYxNy4wOTc0SDQ3LjA1NDhWMjIuOTY3MUM0Ny4wNTQ4IDI0LjE0MTEgNDcuMDczMSAyNC44NDE3IDQ3LjEwOTcgMjUuMDQ5OUM0Ny4xNjQ2IDI1LjIzOTMgNDcuMjc0NSAyNS40MDk3IDQ3LjQ1NzYgMjUuNTQyMkM0Ny42MjIzIDI1LjY3NDggNDcuODIzNyAyNS43MzE2IDQ4LjA4MDEgMjUuNzMxNkM0OC40MjggMjUuNzMxNiA0OC45MjIzIDI1LjU5OSA0OS41NjMxIDI1LjM3MThMNDkuODc0NCAyOC4zNDQ2QzQ5LjAxMzkgMjguNzIzMiA0OC4wNjE4IDI4LjkxMjYgNDYuOTYzMiAyOC45MTI2QzQ2LjMwNDEgMjguOTEyNiA0NS42OTk5IDI4Ljc5OSA0NS4xNjg5IDI4LjU3MThDNDQuNjM3OSAyOC4zNDQ2IDQ0LjIzNTEgMjguMDQxNiA0My45Nzg4IDI3LjY2MjlDNDMuNzQwOCAyNy4zMDMyIDQzLjU1NzcgMjYuNzkxOSA0My40NjYxIDI2LjE2NzFDNDMuMzkyOSAyNS43MTI2IDQzLjM1NjMgMjQuODIyNyA0My4zNTYzIDIzLjQ1OTRWMTcuMTE2NEg0MS42NzE4VjE0LjA4NjhINDMuMzU2M1YxMS4yMDg4TDQ3LjA1NDggOC45NTU1NVYxNC4wODY4SDQ5LjU4MTRWMTQuMDY3OVpNNTQuOTI3NyAxOC41MzY0TDUxLjU3NzEgMTcuOTMwNUM1MS45NjE2IDE2LjUxMDQgNTIuNjAyNSAxNS40NjkgNTMuNTE3OSAxNC43ODc0QzU0LjQ1MTcgMTQuMTI0NyA1NS44MjQ5IDEzLjc4MzkgNTcuNjM3NSAxMy43ODM5QzU5LjI4NTMgMTMuNzgzOSA2MC41MTIxIDEzLjk3MzIgNjEuMzE3NyAxNC4zODk4QzYyLjEyMzMgMTQuNzg3NCA2Mi42OTA5IDE1LjI5ODYgNjMuMDIwNCAxNS45MjM1QzYzLjM1IDE2LjU0ODMgNjMuNTE0OCAxNy42ODQ0IDYzLjUxNDggMTkuMzMxN0w2My40NTk4IDIzLjgwMDNDNjMuNDU5OCAyNS4wNjg5IDYzLjUxNDggMjUuOTk2NyA2My42NDI5IDI2LjYwMjZDNjMuNzUyOCAyNy4yMDg1IDYzLjk5MDggMjcuODcxMiA2NC4zMDIxIDI4LjU1MjhINjAuNjQwMkM2MC41MzA0IDI4LjMwNjcgNjAuNDIwNSAyNy45MjggNjAuMjkyMyAyNy40MzU3QzYwLjIzNzQgMjcuMjA4NSA2MC4xODI1IDI3LjA1NyA2MC4xNDU5IDI2Ljk4MTNDNTkuNTIzNCAyNy42MjUgNTguODQ1OSAyOC4wOTg0IDU4LjEzMTkgMjguNDIwM0M1Ny40MTc4IDI4Ljc0MjIgNTYuNjQ4OCAyOC44OTM3IDU1Ljg0MzIgMjguODkzN0M1NC40MTUxIDI4Ljg5MzcgNTMuMjc5OSAyOC40OTYgNTIuNDU2IDI3LjY4MThDNTEuNjMyMSAyNi44ODY2IDUxLjIxMSAyNS44NjQxIDUxLjIxMSAyNC42MTQ0QzUxLjIxMSAyMy44MDAzIDUxLjM5NDEgMjMuMDgwNyA1MS43Nzg1IDIyLjQzN0M1Mi4xNjMgMjEuODEyMSA1Mi42NzU3IDIxLjMwMDkgNTMuMzcxNCAyMC45NjAxQzU0LjA0ODkgMjAuNjM4MiA1NS4wMTkzIDIwLjMzNTIgNTYuMzAwOSAyMC4wNzAxQzU4LjAyMiAxOS43NDgzIDU5LjIzMDQgMTkuNDI2NCA1OS44ODk1IDE5LjE0MjNWMTguNzYzN0M1OS44ODk1IDE4LjAwNjMgNTkuNzA2NSAxNy40OTUgNTkuMzc2OSAxNy4xNzMyQzU5LjAyOSAxNi44NTEzIDU4LjM1MTYgMTYuNjgwOSA1Ny4zODEyIDE2LjY4MDlDNTYuNzIyIDE2LjY4MDkgNTYuMjA5NCAxNi44MzIzIDU1Ljg0MzIgMTcuMDk3NEM1NS40NDA0IDE3LjM4MTQgNTUuMTQ3NCAxNy44NTQ4IDU0LjkyNzcgMTguNTM2NFpNNTkuODg5NSAyMS42NDE3QzU5LjQxMzUgMjEuNzkzMiA1OC42NjI4IDIyLjAwMTUgNTcuNjM3NSAyMi4yMjg3QzU2LjYxMjIgMjIuNDU1OSA1NS45NTMxIDIyLjY4MzEgNTUuNjIzNSAyMi44OTE0QzU1LjE0NzQgMjMuMjUxMiA1NC44OTExIDIzLjY4NjYgNTQuODkxMSAyNC4yMzU3QzU0Ljg5MTEgMjQuNzg0OSA1NS4wNzQyIDI1LjIzOTMgNTUuNDc3IDI1LjYzNjlDNTUuODYxNSAyNi4wMzQ1IDU2LjMzNzUgMjYuMjIzOSA1Ni45NDE3IDI2LjIyMzlDNTcuNjE5MiAyNi4yMjM5IDU4LjI2IDI1Ljk5NjcgNTguODY0MiAyNS41NDIyQzU5LjMwMzYgMjUuMjAxNCA1OS41OTY2IDI0Ljc4NDkgNTkuNzQzMSAyNC4yNzM2QzU5LjgzNDYgMjMuOTUxNyA1OS44ODk1IDIzLjMwOCA1OS44ODk1IDIyLjM5OTFWMjEuNjQxN1pNNjUuNTQ3MSAxNC4wNjc5SDY3LjU5NzdWMTIuOTg4NkM2Ny41OTc3IDExLjc1NzkgNjcuNzI1OSAxMC44Njc5IDY3Ljk4MjIgMTAuMjYyQzY4LjIzODYgOS42NTYxMyA2OC42OTYzIDkuMTYzODMgNjkuMzczNyA4Ljc4NTE0QzcwLjA1MTIgOC40MDY0NSA3MC45MTE3IDguMjE3MSA3MS45MzcgOC4yMTcxQzcyLjk5OSA4LjIxNzEgNzQuMDQyNiA4LjM2ODU4IDc1LjA0OTYgOC43MDk0TDc0LjU3MzYgMTEuMzYwMkM3My45Njk0IDExLjIwODggNzMuMzgzNSAxMS4xMzMgNzIuODUyNSAxMS4xMzNDNzIuMzAzMiAxMS4xMzMgNzEuOTE4NyAxMS4yNjU2IDcxLjY2MjQgMTEuNTMwN0M3MS40MDYxIDExLjc5NTcgNzEuMzE0NSAxMi4yODggNzEuMzE0NSAxMy4wNDU0VjE0LjA2NzlINzQuMDc5MlYxNy4wNzg1SDcxLjMxNDVWMjguNTMzOUg2Ny42MTZWMTcuMDc4NUg2NS41NjU0VjE0LjA2NzlINjUuNTQ3MVpNNzQuNTE4NiAxNC4wNjc5SDc2LjU2OTNWMTIuOTg4NkM3Ni41NjkzIDExLjc1NzkgNzYuNjk3NCAxMC44Njc5IDc2Ljk1MzggMTAuMjYyQzc3LjIxMDEgOS42NTYxMyA3Ny42Njc4IDkuMTYzODMgNzguMzQ1MyA4Ljc4NTE0Qzc5LjAyMjcgOC40MDY0NSA3OS44ODMyIDguMjE3MSA4MC45MDg2IDguMjE3MUM4MS45NzA1IDguMjE3MSA4My4wMTQxIDguMzY4NTggODQuMDIxMSA4LjcwOTRMODMuNTQ1MSAxMS4zNjAyQzgyLjk0MDkgMTEuMjA4OCA4Mi4zNTUgMTEuMTMzIDgxLjgwNTcgMTEuMTMzQzgxLjI1NjQgMTEuMTMzIDgwLjg3MTkgMTEuMjY1NiA4MC42MTU2IDExLjUzMDdDODAuMzk1OSAxMS43OTU3IDgwLjI2NzcgMTIuMjg4IDgwLjI2NzcgMTMuMDQ1NFYxNC4wNjc5SDgzLjAzMjRWMTcuMDc4NUg4MC4yNjc3VjI4LjUzMzlINzYuNTY5M1YxNy4wNzg1SDc0LjUxODZWMTQuMDY3OVoiIGZpbGw9ImJsYWNrIi8+DQo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTk4LjY0OTggNS4yNDQ3N0M5Ny45NTQgMi43ODMyOCA5NS42NDcxIDIuNDA0NTkgOTMuNzI0NiAzLjc2Nzg4QzkxLjc0NzIgNS4xNjkwMyA5MC40Mjg5IDguMTk4NTcgOTEuMTA2NCAxMC42MjIyQzkxLjgwMjEgMTMuMDgzNyA5NC4xMDkxIDEzLjQ2MjQgOTYuMDMxNiAxMi4xMThDOTguMDA5IDEwLjcxNjkgOTkuMzI3MiA3LjY2ODQgOTguNjQ5OCA1LjI0NDc3WiIgZmlsbD0iI0YzNzU0MCIvPg0KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05MS4xNDI4IDI3LjgxNDlDOTEuOTMwMSAyNy4xMTQzIDkyLjk3MzggMjYuNDUxNiA5My44MTYgMjUuODgzNkw5NS40NjM4IDI0LjgyMzJDOTcuODQ0IDIwLjAzMjggMTAxLjA0OCAxNS41NDUzIDEwNC40MTcgMTEuNDU1NEMxMDcuNDkzIDcuNjg3NDQgMTExLjA4MiAzLjc0OTA1IDExNSAwLjkwODg2TDExNC4zNDEgMEMxMTAuMTQ4IDIuMjkxMDggMTA2LjMwMyA1LjQxNTI5IDEwMi44NDIgOC43NjY3MUM5OS4xOTg5IDEyLjMwNzUgOTUuODQ4MyAxNi4yMjY5IDkzLjE1NjggMjAuNTgxOUw5My4wNDcgMjAuNzMzNEw5Mi4yNzggMTkuMDY3MUM5MS43MTA0IDE3Ljg1NTMgOTAuMTM1OCAxNC42NTU0IDg4LjU0MjkgMTQuNjU1NEM4Ni45NSAxNC42NTU0IDg1LjQzMDMgMTUuODI5MyA4NC4zMTM1IDE2Ljk0NjRDODUuMzAyMiAxNy4zMDYyIDg2LjEyNjEgMTcuOTg3OCA4Ni43ODUyIDE4LjgyMUM4Ny44MTA1IDIwLjA3MDYgODguNjM0NSAyMS43NzQ4IDg5LjI5MzYgMjMuMjcwNkw4OS45MTYxIDI0LjY3MTdDOTAuMzE4OSAyNS42NzUzIDkwLjgxMzMgMjYuNzkyNCA5MS4xNDI4IDI3LjgxNDlaIiBmaWxsPSIjRjM3NTQwIi8+DQo8L3N2Zz4NCg==';
37588
+ this.itemsPerRow = 4;
37589
+ this.iconTextVerticalMargin = 25;
37590
+ this.items = [[]];
37591
+ this.zIndex = 1;
37592
+ this.imageErrorResolverType = EnumImageResolverType.LOGO;
37593
+ this.headerHeight = 0;
37594
+ this.width = 400;
37595
+ this.layoutService.modulePanelWidth$.subscribe(x => this.width = x);
37596
+ }
37597
+ ngOnInit() {
37598
+ this.subscriptions.push(this.mls.lang$.subscribe(x => this.lang = x));
37599
+ this.subscriptions.push(this.authService.data$.subscribe(x => this.isRoot = !!x?.isRoot));
37600
+ this.scrollWidth = this.layoutService.modulePanelWidth$.value - this.layoutService.basicSpacing * 2;
37601
+ this.scrollHeight = window.innerHeight - this.layoutService.headerHeight$.value - this.layoutService.basicSpacing * 2;
37602
+ this.itemWidth = this.scrollWidth / 4;
37603
+ }
37604
+ transformTo2DArray(flatList) {
37605
+ const result = [];
37606
+ for (let i = 0; i < flatList.length; i += this.itemsPerRow) {
37607
+ const row = flatList.slice(i, i + this.itemsPerRow);
37608
+ // If the last row has fewer than itemsPerRow, pad it with undefineds
37609
+ while (row.length < this.itemsPerRow) {
37610
+ row.push(undefined);
37421
37611
  }
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();
37612
+ result.push(row);
37462
37613
  }
37463
- /* end: THIS CODE SCOPE calculates toggledIds */
37464
- // That is. Happy debugging!
37465
- }
37466
- onCheckIncludeDissolvedChange(value) {
37467
- console.log("onCheckIncludeDissolvedChange", value);
37614
+ return result;
37468
37615
  }
37469
- onCheckInheritanceChange(value) {
37470
- this.organizationService.status$.next({
37471
- ...this.organizationService.status$.value,
37472
- checkInheritance: value,
37616
+ ngAfterViewInit() {
37617
+ setTimeout(() => {
37618
+ this.designMode = localStorage.getItem('moduleDesignMode') === 'on';
37619
+ this.zIndex = this.domService.getMaxZIndex() + 1;
37620
+ // this.listenerFn = this.renderer.listen('window', 'click', (e: Event) => {
37621
+ // if (!this.designMode) {
37622
+ // if (this.container && !!!this.container.nativeElement.contains(e.target)) {
37623
+ // this.ahs.activeKey$.next(undefined);
37624
+ // }
37625
+ // }
37626
+ // });
37627
+ this.subscriptions.push(this.navigatorService.rootNavigatorItems$.subscribe(x => {
37628
+ // Transform the flat list into a 2D array
37629
+ this.items = this.transformTo2DArray(x);
37630
+ }));
37631
+ this.subscriptions.push(this.layoutService.headerHeight$.subscribe(x => {
37632
+ this.headerHeight = x;
37633
+ }));
37634
+ if (!!localStorage) {
37635
+ const activeRootMenuItemId = Number(localStorage.getItem('activeRootMenuItemId') || '0');
37636
+ this.navigatorService.activeRootMenuItemId$.next(activeRootMenuItemId);
37637
+ }
37638
+ if (window.innerWidth < this.layoutService.modulePanelWidth$.value) {
37639
+ this.layoutService.modulePanelWidth$.next(window.innerWidth);
37640
+ }
37473
37641
  });
37474
37642
  }
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
- });
37643
+ onDesignModeClick(e) {
37644
+ e.stopPropagation();
37645
+ if (localStorage.getItem('moduleDesignMode') === 'on') {
37646
+ localStorage.setItem('moduleDesignMode', 'off');
37647
+ this.designMode = false;
37508
37648
  }
37509
37649
  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);
37650
+ localStorage.setItem('moduleDesignMode', 'on');
37651
+ this.designMode = true;
37525
37652
  }
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
37653
  }
37535
37654
  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
- }
37655
+ this.subscriptions.map(x => x?.unsubscribe());
37656
+ if (this.listenerFn)
37657
+ this.listenerFn();
37547
37658
  }
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"] }] }); }
37659
+ 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 }); }
37660
+ 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
37661
  }
37557
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreComTreeComponent, decorators: [{
37662
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerComponent, decorators: [{
37558
37663
  type: Component,
37559
- args: [{ selector: 'core-com-tree', imports: [
37560
- FormsModule,
37664
+ args: [{ selector: 'core-root-menu-item-picker', imports: [
37665
+ CoreLineComponent,
37561
37666
  NgStyle,
37562
- CoreCheckboxComponent,
37563
- CoreLoadingSurfaceComponent,
37564
- TranslatePipe,
37667
+ ModuleItemComponent,
37668
+ ImageErrorResolverDirective,
37565
37669
  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: [{
37670
+ ], 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"] }]
37671
+ }], 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
37672
  type: Input
37589
- }], excludedIds$: [{
37673
+ }], itemsPerRow: [{
37590
37674
  type: Input
37591
- }], stateIsolated$: [{
37675
+ }], iconTextVerticalMargin: [{
37592
37676
  type: Input
37593
- }], itemDoubleClick: [{
37594
- type: Output
37595
- }], itemClick: [{
37596
- type: Output
37597
37677
  }], container: [{
37598
37678
  type: ViewChild,
37599
37679
  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
37680
  }] } });
37610
37681
 
37682
+ class CoreRootMenuItemPickerService {
37683
+ constructor() { }
37684
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
37685
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, providedIn: 'root' }); }
37686
+ }
37687
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, decorators: [{
37688
+ type: Injectable,
37689
+ args: [{
37690
+ providedIn: 'root'
37691
+ }]
37692
+ }], ctorParameters: () => [] });
37693
+
37611
37694
  class CoreComProfileComponent extends BaseComponent {
37612
37695
  ngOnChanges(changes) {
37613
37696
  this.cdr.markForCheck();
@@ -38037,11 +38120,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
38037
38120
  const coreDocGenRoutes = [
38038
38121
  {
38039
38122
  path: 'template-list',
38040
- loadComponent: () => import('./ngx-histaff-alpha-template-list.component-BXyP9Vki.mjs').then(m => m.TemplateListComponent),
38123
+ loadComponent: () => import('./ngx-histaff-alpha-template-list.component-B8DQ5E2P.mjs').then(m => m.TemplateListComponent),
38041
38124
  },
38042
38125
  {
38043
38126
  path: ":id",
38044
- loadComponent: () => import('./ngx-histaff-alpha-core-template-editor.component-F2nV8jgm.mjs').then(m => m.CoreTemplateEditorComponent),
38127
+ loadComponent: () => import('./ngx-histaff-alpha-core-template-editor.component-DOZibiVG.mjs').then(m => m.CoreTemplateEditorComponent),
38045
38128
  canDeactivate: [CanDeactivateGuard]
38046
38129
  },
38047
38130
  {
@@ -38070,7 +38153,7 @@ const coreFormDesignRoutes = [
38070
38153
  },
38071
38154
  {
38072
38155
  path: ':id',
38073
- loadComponent: () => import('./ngx-histaff-alpha-core-form-design.component-DLEZuLXO.mjs').then(function (n) { return n.c; }).then(m => m.CoreFormDesignComponent)
38156
+ loadComponent: () => import('./ngx-histaff-alpha-core-form-design.component-DQUPb25c.mjs').then(function (n) { return n.c; }).then(m => m.CoreFormDesignComponent)
38074
38157
  }
38075
38158
  ];
38076
38159
 
@@ -38963,7 +39046,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
38963
39046
  const coreNavigationTrackerRoutes = [
38964
39047
  {
38965
39048
  path: '',
38966
- loadComponent: () => import('./ngx-histaff-alpha-tracker-studio.component-ySy7DIdC.mjs').then(m => m.TrackerStudioComponent)
39049
+ loadComponent: () => import('./ngx-histaff-alpha-tracker-studio.component-cnxgZ6An.mjs').then(m => m.TrackerStudioComponent)
38967
39050
  }
38968
39051
  ];
38969
39052
 
@@ -41552,33 +41635,33 @@ const coreWorkflowRoutes = [
41552
41635
  {
41553
41636
  path: 'form-assign/:id',
41554
41637
  outlet: "formAssignAux",
41555
- loadComponent: () => import('./ngx-histaff-alpha-wf-form-assign.component-qxz8Ozah.mjs').then(m => m.WfFormAssignComponent),
41638
+ loadComponent: () => import('./ngx-histaff-alpha-wf-form-assign.component-BfZAeogE.mjs').then(m => m.WfFormAssignComponent),
41556
41639
  canDeactivate: [CanDeactivateGuard]
41557
41640
  }
41558
41641
  ]
41559
41642
  },
41560
41643
  {
41561
41644
  path: 'global-config',
41562
- loadComponent: () => import('./ngx-histaff-alpha-wf-global-config.component-DbZq1DK-.mjs').then(m => m.WfGlobalConfigComponent)
41645
+ loadComponent: () => import('./ngx-histaff-alpha-wf-global-config.component-BmZ9RmJD.mjs').then(m => m.WfGlobalConfigComponent)
41563
41646
  },
41564
41647
  {
41565
41648
  path: 'db-settings',
41566
- loadComponent: () => import('./ngx-histaff-alpha-db-settings.component-DB6XegRZ.mjs').then(m => m.DbSettingsComponent)
41649
+ loadComponent: () => import('./ngx-histaff-alpha-db-settings.component-CQc3XpNh.mjs').then(m => m.DbSettingsComponent)
41567
41650
  },
41568
41651
  {
41569
41652
  path: 'workflow-consume',
41570
- loadComponent: () => import('./ngx-histaff-alpha-core-workflow-consume.component-D2txp5DP.mjs').then(m => m.CoreWorkflowConsumeComponent),
41653
+ loadComponent: () => import('./ngx-histaff-alpha-core-workflow-consume.component-DJN5n0Y-.mjs').then(m => m.CoreWorkflowConsumeComponent),
41571
41654
  children: [
41572
41655
  {
41573
41656
  path: ':id',
41574
41657
  outlet: "workflowConsume",
41575
- loadComponent: () => import('./ngx-histaff-alpha-live-form.component-Dt0rgzHG.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
41658
+ loadComponent: () => import('./ngx-histaff-alpha-live-form.component-2kAqtlyo.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
41576
41659
  }
41577
41660
  ]
41578
41661
  },
41579
41662
  {
41580
41663
  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),
41664
+ loadComponent: () => import('./ngx-histaff-alpha-live-form.component-2kAqtlyo.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
41582
41665
  },
41583
41666
  {
41584
41667
  path: 'workflow-group-edit/:id',
@@ -41588,17 +41671,17 @@ const coreWorkflowRoutes = [
41588
41671
  },
41589
41672
  {
41590
41673
  path: 'design/:id',
41591
- loadChildren: () => import('./ngx-histaff-alpha-design-wrapper.route-CdPC_FcN.mjs').then(m => m.wfDesignWrapperRoutes),
41674
+ loadChildren: () => import('./ngx-histaff-alpha-design-wrapper.route-COZXQaNQ.mjs').then(m => m.wfDesignWrapperRoutes),
41592
41675
  },
41593
41676
  ]
41594
41677
  },
41595
41678
  {
41596
41679
  path: 'react/:id',
41597
- loadComponent: () => import('./ngx-histaff-alpha-wf-instance-step-react.component-eT3UGhUM.mjs').then(m => m.WfInstanceStepReactComponent)
41680
+ loadComponent: () => import('./ngx-histaff-alpha-wf-instance-step-react.component-BsBX4QJV.mjs').then(m => m.WfInstanceStepReactComponent)
41598
41681
  },
41599
41682
  {
41600
41683
  path: 'status/:id',
41601
- loadComponent: () => import('./ngx-histaff-alpha-wf-instance-status.component-DjFOVp06.mjs').then(m => m.WfInstanceStatusComponent)
41684
+ loadComponent: () => import('./ngx-histaff-alpha-wf-instance-status.component-DeRlJp4L.mjs').then(m => m.WfInstanceStatusComponent)
41602
41685
  }
41603
41686
  ];
41604
41687
 
@@ -43459,7 +43542,11 @@ class NavigatorComponent {
43459
43542
  else if (this.menuClickedItem?.tree$Tier == 3) { //nếu là 3 cấp
43460
43543
  array = x.filter(y => y.id == this.menuClickedItem.id);
43461
43544
  arrayParrent = x.filter(y => y.id == this.menuClickedItem.tree$Parent);
43545
+ if (!arrayParrent.length)
43546
+ return;
43462
43547
  let arrayGrandParrent = x.filter(z => z.id == arrayParrent[0].parent);
43548
+ if (!arrayGrandParrent.length)
43549
+ return;
43463
43550
  let element = document.getElementById('main-menu-' + arrayParrent[0].id);
43464
43551
  let element2 = document.getElementById('main-menu-' + arrayGrandParrent[0].id);
43465
43552
  array[0].tree$Selected = true;
@@ -44219,5 +44306,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
44219
44306
  * Generated bundle index. Do not edit.
44220
44307
  */
44221
44308
 
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
44309
+ 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 };
44310
+ //# sourceMappingURL=ngx-histaff-alpha-ngx-histaff-alpha-ByIs02SI.mjs.map