ngx-histaff-alpha 6.3.6 → 6.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-D_Yv-aKW.mjs → ngx-histaff-alpha-ai-hint-for-table.component-D9X0r5wC.mjs} +2 -2
  2. package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-D_Yv-aKW.mjs.map → ngx-histaff-alpha-ai-hint-for-table.component-D9X0r5wC.mjs.map} +1 -1
  3. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-BDh-358_.mjs → ngx-histaff-alpha-core-form-design.component-Jzy7HTBy.mjs} +6 -6
  4. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-BDh-358_.mjs.map → ngx-histaff-alpha-core-form-design.component-Jzy7HTBy.mjs.map} +1 -1
  5. package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-BBWim535.mjs → ngx-histaff-alpha-core-template-editor.component-CwYRUlbM.mjs} +2 -2
  6. package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-BBWim535.mjs.map → ngx-histaff-alpha-core-template-editor.component-CwYRUlbM.mjs.map} +1 -1
  7. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-DxfG1JzG.mjs → ngx-histaff-alpha-core-toast-loading.component-Byl2v6zI.mjs} +2 -2
  8. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-DxfG1JzG.mjs.map → ngx-histaff-alpha-core-toast-loading.component-Byl2v6zI.mjs.map} +1 -1
  9. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-CvGswHbB.mjs → ngx-histaff-alpha-core-workflow-consume.component-Fma_hNMb.mjs} +2 -2
  10. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-CvGswHbB.mjs.map → ngx-histaff-alpha-core-workflow-consume.component-Fma_hNMb.mjs.map} +1 -1
  11. package/fesm2022/{ngx-histaff-alpha-db-settings.component-CqNPzdzL.mjs → ngx-histaff-alpha-db-settings.component-CpjFcS3r.mjs} +5 -5
  12. package/fesm2022/{ngx-histaff-alpha-db-settings.component-CqNPzdzL.mjs.map → ngx-histaff-alpha-db-settings.component-CpjFcS3r.mjs.map} +1 -1
  13. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-CVsgjU2z.mjs → ngx-histaff-alpha-design-wrapper.component-CWPAtJdW.mjs} +5 -5
  14. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-CVsgjU2z.mjs.map → ngx-histaff-alpha-design-wrapper.component-CWPAtJdW.mjs.map} +1 -1
  15. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-B_EjwkZd.mjs → ngx-histaff-alpha-design-wrapper.route-BPTxhFez.mjs} +5 -5
  16. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-B_EjwkZd.mjs.map → ngx-histaff-alpha-design-wrapper.route-BPTxhFez.mjs.map} +1 -1
  17. package/fesm2022/{ngx-histaff-alpha-form-array-props.component-BEKVB15X.mjs → ngx-histaff-alpha-form-array-props.component-CFQHLdzG.mjs} +3 -3
  18. package/fesm2022/{ngx-histaff-alpha-form-array-props.component-BEKVB15X.mjs.map → ngx-histaff-alpha-form-array-props.component-CFQHLdzG.mjs.map} +1 -1
  19. package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-BEt_LyNb.mjs → ngx-histaff-alpha-hrm-schema.component-DhcmippJ.mjs} +2 -2
  20. package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-BEt_LyNb.mjs.map → ngx-histaff-alpha-hrm-schema.component-DhcmippJ.mjs.map} +1 -1
  21. package/fesm2022/{ngx-histaff-alpha-live-form.component-FW_M5cI5.mjs → ngx-histaff-alpha-live-form.component-iX23HD-T.mjs} +4 -4
  22. package/fesm2022/{ngx-histaff-alpha-live-form.component-FW_M5cI5.mjs.map → ngx-histaff-alpha-live-form.component-iX23HD-T.mjs.map} +1 -1
  23. package/fesm2022/{ngx-histaff-alpha-ngx-histaff-alpha-YPc6xct6.mjs → ngx-histaff-alpha-ngx-histaff-alpha-BJ3ZVba7.mjs} +2133 -1019
  24. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-BJ3ZVba7.mjs.map +1 -0
  25. package/fesm2022/{ngx-histaff-alpha-simple-chat.component-pL0ykKNj.mjs → ngx-histaff-alpha-simple-chat.component-Da4H2k5o.mjs} +2 -2
  26. package/fesm2022/{ngx-histaff-alpha-simple-chat.component-pL0ykKNj.mjs.map → ngx-histaff-alpha-simple-chat.component-Da4H2k5o.mjs.map} +1 -1
  27. package/fesm2022/{ngx-histaff-alpha-template-list.component-36QflRwY.mjs → ngx-histaff-alpha-template-list.component-CVK_Ewx4.mjs} +2 -2
  28. package/fesm2022/{ngx-histaff-alpha-template-list.component-36QflRwY.mjs.map → ngx-histaff-alpha-template-list.component-CVK_Ewx4.mjs.map} +1 -1
  29. package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-DlAdz6Wq.mjs → ngx-histaff-alpha-tracker-studio.component-8tqyVAcU.mjs} +2 -2
  30. package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-DlAdz6Wq.mjs.map → ngx-histaff-alpha-tracker-studio.component-8tqyVAcU.mjs.map} +1 -1
  31. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-V9exT_fm.mjs → ngx-histaff-alpha-wf-form-assign.component-CRs1A8j_.mjs} +2 -2
  32. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-V9exT_fm.mjs.map → ngx-histaff-alpha-wf-form-assign.component-CRs1A8j_.mjs.map} +1 -1
  33. package/fesm2022/{ngx-histaff-alpha-wf-global-config.component-BuCfL80F.mjs → ngx-histaff-alpha-wf-global-config.component-yeFb4wxY.mjs} +19 -2
  34. package/fesm2022/ngx-histaff-alpha-wf-global-config.component-yeFb4wxY.mjs.map +1 -0
  35. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-DJuPBwqR.mjs → ngx-histaff-alpha-wf-instance-status.component-Jahj4MO-.mjs} +2 -2
  36. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-DJuPBwqR.mjs.map → ngx-histaff-alpha-wf-instance-status.component-Jahj4MO-.mjs.map} +1 -1
  37. package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-OAdGYvAN.mjs → ngx-histaff-alpha-wf-instance-step-react.component-Bri0bRw3.mjs} +3 -3
  38. package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-OAdGYvAN.mjs.map → ngx-histaff-alpha-wf-instance-step-react.component-Bri0bRw3.mjs.map} +1 -1
  39. package/fesm2022/ngx-histaff-alpha.mjs +1 -1
  40. package/lib/app/libraries/core-com-tree/com-party.service.d.ts +3 -2
  41. package/lib/app/libraries/core-com-tree/core-com-tree.component.d.ts +7 -5
  42. package/lib/app/libraries/core-com-tree/mokeUpLinearData.d.ts +19 -0
  43. package/lib/app/libraries/core-control-no-form-array/core-control-no-form-array.component.d.ts +3 -1
  44. package/lib/app/libraries/core-form/core-form-array/core-form-array.component.d.ts +5 -4
  45. package/lib/app/libraries/core-shift-collection/core-shift-collection.component.d.ts +2 -1
  46. package/lib/app/services/app-config.service.d.ts +1 -0
  47. package/package.json +2 -2
  48. package/public-api.d.ts +3 -0
  49. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-YPc6xct6.mjs.map +0 -1
  50. package/fesm2022/ngx-histaff-alpha-wf-global-config.component-BuCfL80F.mjs.map +0 -1
@@ -3881,11 +3881,12 @@ class AppInitializationService {
3881
3881
  if (window.opener && window.opener.globalPopupId) {
3882
3882
  //alert(window.opener.globalPopupId);
3883
3883
  }
3884
- fetch('../../assets/app.config.json').then(res => res.json()).then(({ APP_TYPE, APP_UIID, ALLOW_IN_APP_NOTIFICATION, SHOW_LOGIN_NOTIFICATION, IGNORE_PARTIAL_URL_MATCH_FOR_FUNCTION, IGNORE_PARTIAL_URL_MATCH_FOR_PROFILE_CENTER, USE_BUILTIN_OTP, USE_CAPTCHA, BASE_URL, BASE_URL_FOR_STATISTIC, GOLIVE_URL, DEBUG_ENABLED, USE_DEMO_AVATAR, LOGO_LOGIN, LOGO_HEADER, HOME_BACKGROUND_IMAGE, FORM_CONTROL_REQUIRED_HIGHLIGHT_COLOR, OAUTH2_OIDC_ENABLED, OAUTH2_OIDC_CLIENT_ID, OAUTH2_OIDC_LOGIN_URI, OAUTH2_OIDC_REDIRECT_URI, OAUTH2_OIDC_SCOPE, OFFICE365_DEV, OFFICE365_PROD, SAML2ADFS_ENABLED, SAML2ADFS_IDP, SAML2ADFS_IDENTIFIER, SAML2ADFS_WA_SIGNIN, SAML2ADFS_WA_SIGNOUT, SAML2ADFS_WREPLY, HANGFIRE_PATH, STATIC_FOLDER, WORKFLOW_ENABLE_DEBUG_MODE, }) => {
3884
+ fetch('../../assets/app.config.json').then(res => res.json()).then(({ APP_TYPE, APP_UIID, ALLOW_IN_APP_NOTIFICATION, SHOW_LOGIN_NOTIFICATION, FEDERATION_COM_PARTY_ENABLED, IGNORE_PARTIAL_URL_MATCH_FOR_FUNCTION, IGNORE_PARTIAL_URL_MATCH_FOR_PROFILE_CENTER, USE_BUILTIN_OTP, USE_CAPTCHA, BASE_URL, BASE_URL_FOR_STATISTIC, GOLIVE_URL, DEBUG_ENABLED, USE_DEMO_AVATAR, LOGO_LOGIN, LOGO_HEADER, HOME_BACKGROUND_IMAGE, FORM_CONTROL_REQUIRED_HIGHLIGHT_COLOR, OAUTH2_OIDC_ENABLED, OAUTH2_OIDC_CLIENT_ID, OAUTH2_OIDC_LOGIN_URI, OAUTH2_OIDC_REDIRECT_URI, OAUTH2_OIDC_SCOPE, OFFICE365_DEV, OFFICE365_PROD, SAML2ADFS_ENABLED, SAML2ADFS_IDP, SAML2ADFS_IDENTIFIER, SAML2ADFS_WA_SIGNIN, SAML2ADFS_WA_SIGNOUT, SAML2ADFS_WREPLY, HANGFIRE_PATH, STATIC_FOLDER, WORKFLOW_ENABLE_DEBUG_MODE, }) => {
3885
3885
  this.appConfigService.APP_TYPE = APP_TYPE;
3886
3886
  this.appConfigService.APP_UIID = APP_UIID;
3887
3887
  this.appConfigService.ALLOW_IN_APP_NOTIFICATION = ALLOW_IN_APP_NOTIFICATION;
3888
3888
  this.appConfigService.SHOW_LOGIN_NOTIFICATION = SHOW_LOGIN_NOTIFICATION;
3889
+ this.appConfigService.FEDERATION_COM_PARTY_ENABLED = FEDERATION_COM_PARTY_ENABLED;
3889
3890
  this.appConfigService.IGNORE_PARTIAL_URL_MATCH_FOR_FUNCTION = IGNORE_PARTIAL_URL_MATCH_FOR_FUNCTION;
3890
3891
  this.appConfigService.IGNORE_PARTIAL_URL_MATCH_FOR_PROFILE_CENTER = IGNORE_PARTIAL_URL_MATCH_FOR_PROFILE_CENTER;
3891
3892
  this.appConfigService.USE_BUILTIN_OTP = USE_BUILTIN_OTP;
@@ -9176,7 +9177,7 @@ class SocketService {
9176
9177
  .withUrl(this.appConfigService.BASE_URL + '/hubs/signal', {
9177
9178
  accessTokenFactory: () => token,
9178
9179
  skipNegotiation: true,
9179
- transport: HttpTransportType.WebSockets
9180
+ transport: HttpTransportType.WebSockets || HttpTransportType.ServerSentEvents || HttpTransportType.LongPolling
9180
9181
  })
9181
9182
  .configureLogging(LogLevel.Information)
9182
9183
  .build();
@@ -24465,7 +24466,7 @@ class CoreShiftCollectionComponent extends BaseComponent {
24465
24466
  this.filteredShifts = this.fullShifts;
24466
24467
  }
24467
24468
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreShiftCollectionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
24468
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreShiftCollectionComponent, isStandalone: true, selector: "core-shift-collection", inputs: { height: "height", relativeMode: "relativeMode" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "header", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-shift-collection-container\" draggable=\"true\">\r\n <div class=\"p-relative\">\r\n <div #header class=\"header\" [ngStyle]=\"{\r\n cursor: relativeMode ? 'auto' : 'move'\r\n }\">\r\n <span>{{ 'SHIFT_COLLECTION' | translate: lang | uppercase }}</span>\r\n @if (!relativeMode) {\r\n <i class=\"feather-x\" (click)=\"onClose($event)\"></i>\r\n }\r\n </div>\r\n <div class=\"lookup-wrapper d-flex d-flex-start p15\">\r\n <div class=\"advanced-search d-flex d-flex-v h-100\">\r\n <div class=\"pointer\" [appTooltip]=\"'UI_COMMON_ADVANCED_FILTER' | translate: lang\" (click)=\"onAdvancedSearchToggle()\">\r\n <i class=\"feather-sliders\"></i>\r\n </div>\r\n @if (codeKeyword.length || nameKeyword.length || symbolCodeKeyword.length || symbolNameKeyword.length) {\r\n <div class=\"pointer\" [appTooltip]=\"'UI_COMMON_FILTER_RESET' | translate: lang\" (click)=\"onFilterReset()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"lookup w-100\">\r\n <input class=\"form-control\" placeholder=\"Code...\" [(ngModel)]=\"codeKeyword\"\r\n (ngModelChange)=\"onCodeKeywordChange($event)\">\r\n\r\n @if (showAdvancedSearch) {\r\n <input class=\"form-control\" placeholder=\"Name...\" [(ngModel)]=\"nameKeyword\"\r\n (ngModelChange)=\"onNameKeywordChange($event)\">\r\n <input class=\"form-control\" placeholder=\"Symbol code...\" [(ngModel)]=\"symbolCodeKeyword\"\r\n (ngModelChange)=\"onSymbolCodeKeywordChange($event)\">\r\n <input class=\"form-control\" placeholder=\"Symbol name...\" [(ngModel)]=\"symbolNameKeyword\"\r\n (ngModelChange)=\"onSymbolNameKeywordChange($event)\">\r\n }\r\n </div>\r\n </div>\r\n <div class=\"scroll-wrapper\">\r\n <core-scroll [localOptions]=\"filteredShifts\" [itemTemplate]=\"itemTemplateRef\"\r\n [itemCount]=\"filteredShifts.length\" [height]=\"height - 50 - searchHeight\" [childHeight]=\"itemHeight\">\r\n </core-scroll>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #itemTemplateRef let-context=\"context\">\r\n <li [ngStyle]=\"{ height: itemHeight + 'px' }\">\r\n <core-shift-card [ngModel]=\"context\"></core-shift-card>\r\n </li>\r\n</ng-template>", styles: [".core-shift-collection-container{--starter-x: 0px;background-color:#fff;width:320px;position:fixed;display:block;z-index:9;top:0;left:var(--starter-x);box-shadow:.4rem 0 2rem #0000002e;border-radius:2px}.core-shift-collection-container .header{padding:15px;display:block;height:50px}.core-shift-collection-container .header i{color:gray;font-size:24px;float:right;cursor:pointer}.core-shift-collection-container .lookup{padding:15px}.core-shift-collection-container .lookup input:not(:last-child){margin-bottom:15px}li{margin-left:9px;margin-right:9px;border-radius:2px}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: UpperCasePipe, name: "uppercase" }, { 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: "component", type: CoreScrollComponent, selector: "core-scroll", inputs: ["localOptions", "itemTemplate", "itemCount", "height", "childHeight", "renderAhread"] }, { kind: "component", type: CoreShiftCardComponent, selector: "core-shift-card" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }] }); }
24469
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreShiftCollectionComponent, isStandalone: true, selector: "core-shift-collection", inputs: { height: "height", disabled: "disabled", relativeMode: "relativeMode" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "header", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-shift-collection-container\" draggable=\"true\">\r\n <div class=\"p-relative\">\r\n <div #header class=\"header\" [ngStyle]=\"{\r\n cursor: relativeMode ? 'auto' : 'move'\r\n }\">\r\n <span>{{ 'SHIFT_COLLECTION' | translate: lang | uppercase }}</span>\r\n @if (!relativeMode) {\r\n <i class=\"feather-x\" (click)=\"onClose($event)\"></i>\r\n }\r\n </div>\r\n <div class=\"lookup-wrapper d-flex d-flex-start p15\">\r\n <div class=\"advanced-search d-flex d-flex-v h-100\">\r\n <div class=\"pointer\" [appTooltip]=\"'UI_COMMON_ADVANCED_FILTER' | translate: lang\" (click)=\"onAdvancedSearchToggle()\">\r\n <i class=\"feather-sliders\"></i>\r\n </div>\r\n @if (codeKeyword.length || nameKeyword.length || symbolCodeKeyword.length || symbolNameKeyword.length) {\r\n <div class=\"pointer\" [appTooltip]=\"'UI_COMMON_FILTER_RESET' | translate: lang\" (click)=\"onFilterReset()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"lookup w-100\">\r\n <input class=\"form-control\" placeholder=\"Code...\" [(ngModel)]=\"codeKeyword\"\r\n (ngModelChange)=\"onCodeKeywordChange($event)\">\r\n\r\n @if (showAdvancedSearch) {\r\n <input class=\"form-control\" placeholder=\"Name...\" [(ngModel)]=\"nameKeyword\"\r\n (ngModelChange)=\"onNameKeywordChange($event)\">\r\n <input class=\"form-control\" placeholder=\"Symbol code...\" [(ngModel)]=\"symbolCodeKeyword\"\r\n (ngModelChange)=\"onSymbolCodeKeywordChange($event)\">\r\n <input class=\"form-control\" placeholder=\"Symbol name...\" [(ngModel)]=\"symbolNameKeyword\"\r\n (ngModelChange)=\"onSymbolNameKeywordChange($event)\">\r\n }\r\n </div>\r\n </div>\r\n <div class=\"scroll-wrapper\">\r\n <core-scroll [localOptions]=\"filteredShifts\" [itemTemplate]=\"itemTemplateRef\"\r\n [itemCount]=\"filteredShifts.length\" [height]=\"height - 50 - searchHeight\" [childHeight]=\"itemHeight\">\r\n </core-scroll>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #itemTemplateRef let-context=\"context\">\r\n <li [ngStyle]=\"{ height: itemHeight + 'px' }\">\r\n <core-shift-card [ngModel]=\"context\"></core-shift-card>\r\n </li>\r\n</ng-template>", styles: [".core-shift-collection-container{--starter-x: 0px;background-color:#fff;width:320px;position:fixed;display:block;z-index:9;top:0;left:var(--starter-x);box-shadow:.4rem 0 2rem #0000002e;border-radius:2px}.core-shift-collection-container .header{padding:15px;display:block;height:50px}.core-shift-collection-container .header i{color:gray;font-size:24px;float:right;cursor:pointer}.core-shift-collection-container .lookup{padding:15px}.core-shift-collection-container .lookup input:not(:last-child){margin-bottom:15px}li{margin-left:9px;margin-right:9px;border-radius:2px}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: UpperCasePipe, name: "uppercase" }, { 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: "component", type: CoreScrollComponent, selector: "core-scroll", inputs: ["localOptions", "itemTemplate", "itemCount", "height", "childHeight", "renderAhread"] }, { kind: "component", type: CoreShiftCardComponent, selector: "core-shift-card" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }] }); }
24469
24470
  }
24470
24471
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreShiftCollectionComponent, decorators: [{
24471
24472
  type: Component,
@@ -24481,6 +24482,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
24481
24482
  }], propDecorators: { height: [{
24482
24483
  type: Input,
24483
24484
  args: [{ required: true }]
24485
+ }], disabled: [{
24486
+ type: Input
24484
24487
  }], relativeMode: [{
24485
24488
  type: Input
24486
24489
  }], container: [{
@@ -25594,7 +25597,7 @@ class CoreControlNoFormArrayComponent extends BaseComponent {
25594
25597
  }
25595
25598
  }
25596
25599
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreControlNoFormArrayComponent, deps: [{ token: MultiLanguageService }, { token: AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
25597
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreControlNoFormArrayComponent, isStandalone: true, selector: "core-control-no-form-array", inputs: { control: "control", checkError$: "checkError$", rangeLimit: "rangeLimit" }, host: { listeners: { "window:click": "onWindowClick()" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"core-control-container\">\r\n\r\n <div [formGroup]=\"form\" [class.hidden]=\"!!control.hidden\">\r\n\r\n @if (!control.headless!) {\r\n <label [class]=\"'control-label' + (required ? ' required' : '')\" [attr.for]=\"control.field\"\r\n [class.d-none]=\"!!control.hidden\"\r\n [class.avatar-label]=\"control.uploadFileType==='IMAGE_AVATAR'\" [appTooltip]=\"control.tooltip! | translate: lang\" \r\n [htmlTooltip]=\"control.htmlTooltip!\"\r\n [backgroundColor]=\"'white'\"\r\n [ngStyle]=\"{\r\n display: 'inline-block'\r\n }\">\r\n {{(control.controlType!=='CHECKBOX' && control.controlType!=='BUTTON') ? (control.label | translate: lang) : ''}}\r\n </label>\r\n\r\n @if (!!control.hint! && control.controlType !== 'CHECKBOX') {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"control.hint!\" [showAnyway]=\"true\" [ngStyle]=\"{\r\n display: 'inline-block',\r\n marginLeft: '2px'\r\n }\" [class.d-none]=\"!!control.hidden\"></i>\r\n }\r\n }\r\n\r\n <!-- START: FORM-CONTROL SESSION-->\r\n\r\n <ng-container>\r\n @switch (control.controlType) {\r\n @case (\"CALCULATED\") {\r\n <div class=\"calculated-view\" [htmlTooltip]=\"calculatedControlInfo\" [tooltipContext]=\"{control: control}\" [backgroundColor]=\"'#fff'\">\r\n <i class=\"feather-box\"></i><span>{{ control.field! }}</span>\r\n </div>\r\n }\r\n @case (\"TEXTBOX\") {\r\n\r\n <input *ngIf=\"control.type === 'date'\"\r\n [formControlName]=\"control.field\"\r\n type=\"date\"\r\n useValueAsDate\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'time'\"\r\n [formControlName]=\"control.field\"\r\n type=\"time\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'number'\"\r\n [formControlName]=\"control.field\"\r\n type=\"number\"\r\n step=\"{{ control.step || 1 }}\"\r\n class=\"form-control\"\r\n style=\"text-align: right;\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"['string', 'text', 'email', 'url', 'password'].includes(control.type || 'text')\"\r\n [formControlName]=\"control.field\"\r\n [type]=\"control.type\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n\r\n <!-- <input *ngIf=\"control.type==='calculated'\"\r\n [formControlName]=\"control.field\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n [readonly]=\"true\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.form-control-disabled]=\"true\" /> -->\r\n\r\n }\r\n @case (\"CURRENCY\") {\r\n <core-currency-input [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-currency-input>\r\n }\r\n @case (\"TEXTAREA\") {\r\n <textarea [rows]=\"control.textareaRows?.toString() || '3'\" [ngStyle]=\"{ height: 'unset' }\"\r\n [formControlName]=\"control.field\" class=\"form-control\" [readonly]=\"control.readonly\" [placeholder]=\"control.placeholder! || ''\"></textarea>\r\n }\r\n @case (\"CHECKBOX\") {\r\n <core-checkbox [formControlName]=\"control.field\" [text]=\"control.label\"\r\n [inputValue]=\"control.value\" [tooltip]=\"control.hint!\"></core-checkbox>\r\n }\r\n @case (\"IOS_SWITCHER\") {\r\n <div class=\"gap-for-ios-switcher\"></div>\r\n <core-ios-switcher [formControlName]=\"control.field\" />\r\n }\r\n @case (\"MCC\") {\r\n <core-mcc [formControlName]=\"control.field\" [columns]=\"control.columns!\" [shownFrom]=\"control.shownFrom!\" \r\n [apiDefinition]=\"control.apiDefinition!\" [getByIdApi]=\"control.getByIdApi!\" [selectedRow$]=\"control.selectedRow$!\"\r\n [outerParam$]=\"control.outerParam$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-mcc>\r\n }\r\n @case (\"DATEPICKER\") {\r\n <core-date-picker [formControlName]=\"control.field\" [showPlaceholder]=\"control.showPlaceholder!\" [rangeLimit]=\"control.rangeLimit!\" [popupAlign]=\"control.popupAlign!\" [placeholder]=\"control.placeholder! || ''\"></core-date-picker>\r\n }\r\n\r\n @case (\"DROPDOWN\") {\r\n @if (!!control.dropdownOptions$) {\r\n <core-dropdown \r\n [formControlName]=\"control.field\" \r\n [options$]=\"control.dropdownOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" \r\n [shownFrom]=\"control.shownFrom!\" \r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [optionApiDriven]=\"control.optionApiDriven!\"\r\n [optionApi]=\"control.optionApi!\"\r\n [optionHttpVerb]=\"control.optionHttpVerb!\"\r\n [optionHttpPayload]=\"control.optionHttpPayload!\"\r\n [optionValueFrom]=\"control.optionValueFrom!\"\r\n [optionTextFrom]=\"control.optionTextFrom!\"\r\n ></core-dropdown>\r\n } @else {\r\n No dropdownOptions$ detected\r\n }\r\n }\r\n @case (\"LIST\") {\r\n <core-list [formControlName]=\"control.field\" [options]=\"control.listOptions!\" [placeholder]=\"control.placeholder! || ''\"></core-list>\r\n }\r\n @case (\"CHECKLIST\") {\r\n @if (!!control.checklistOptions$) {\r\n <core-checklist [formControlName]=\"control.field\" [options$]=\"control.checklistOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" [shownFrom]=\"control.shownFrom!\" [placeholder]=\"control.placeholder! || ''\"></core-checklist>\r\n }\r\n }\r\n @case (\"FILEUPLOADER\") {\r\n @if (!!control.uploadFileType) {\r\n <core-file-uploader [formControlName]=\"control.field\" [uploadFileType]=\"control.uploadFileType\"\r\n [fileDataControlName]=\"control.fileDataControlName!\"\r\n [fileNameControlName]=\"control.fileNameControlName!\"\r\n [fileTypeControlName]=\"control.fileTypeControlName!\"\r\n [verticalMode]=\"control.verticalMode!\"></core-file-uploader>\r\n }\r\n }\r\n @case (\"ATTACHMENT\") {\r\n <core-attachment ngDefaultControl [formControlName]=\"control.field\" [assignTo]=\"control.assignTo!\"\r\n [valueToShow]=\"control.valueToShow!\" [placeholder]=\"control.placeholder! || ''\"></core-attachment>\r\n }\r\n @case (\"GRIDBUFFER\") {\r\n @if (!!control.gridBufferFormSections && !!control.gridBufferTableColumns) {\r\n <core-grid-buffer [formControlName]=\"control.field\" [formSections]=\"control.gridBufferFormSections\"\r\n [gridColumns]=\"control.gridBufferTableColumns\"\r\n (onBufferFormCreated)=\"!!control.onBufferFormCreated ? control.onBufferFormCreated($event) : null\"></core-grid-buffer>\r\n }\r\n }\r\n @case (\"ORGTREECHECK\") {\r\n <core-org-tree [formControlName]=\"control.field\"\r\n [accessorMode]=\"coreOrgTreeDefaultAccessorMode\" [height]=\"control.height!\"></core-org-tree>\r\n }\r\n @case (\"RADIOGROUP\") {\r\n <core-radio-group [formControlName]=\"control.field\"\r\n [options$]=\"control.radioGroupOptions$!\"\r\n [vertical]=\"control.verticalMode!\"\r\n ></core-radio-group>\r\n }\r\n @case (\"MONTHSELECTOR\") {\r\n <core-month-selector [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-month-selector>\r\n }\r\n @case (\"SHIFTCELL\") {\r\n <core-shift-cell [formControlName]=\"control.field\"></core-shift-cell>\r\n }\r\n @case (\"SHIFTCOLLECTION\") {\r\n <core-shift-collection [relativeMode]=\"true\" [height]=\"control.height || 800\"></core-shift-collection>\r\n }\r\n @case(\"TOPICPICKER\") {\r\n <core-topic-picker [formControlName]=\"control.field\" [popupHeight]=\"control.popupHeight!\" [getByIdApi]=\"control.getByIdApi!\"></core-topic-picker>\r\n }\r\n @case (\"SEEKER\") {\r\n @switch(control.seekerSourceType) {\r\n @case(\"JOB_SEEK\") {\r\n <core-form-control-seeker\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"EMPLOYEE_SEEK\") {\r\n <core-form-control-seeker\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"CONTRACT_SEEK\") {\r\n <core-form-control-seeker\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" [boundFrom]=\"control.boundFrom!\"\r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\" \r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [shownFrom]=\"control.shownFrom!\"\r\n [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WORKING_SEEK\") {\r\n <core-form-control-seeker \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WAGE_SEEK\") {\r\n <core-form-control-seeker \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [formControlName]=\"control.field\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_SEEK\") {\r\n <core-form-control-seeker \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [seekerVerifyIgnore]=\"control.seekerVerifyIgnore!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_CONCURRENT_SEEK\") {\r\n <core-form-control-seeker\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"FORM_SEEK\") {\r\n <core-form-control-seeker\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"ORGANIZATION_UNIT_SEEK\") {\r\n <core-form-control-seeker\r\n [formControlName]=\"control.field\" [seekerSourceType]=\"control.seekerSourceType!\"\r\n [boundFrom]=\"control.boundFrom!\" [alsoBindTo]=\"control.alsoBindTo!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-form-control-seeker>\r\n }\r\n }\r\n }\r\n }\r\n </ng-container>\r\n\r\n @if (control.controlType==='BUTTON') {\r\n <ng-container>\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"oHandleClick($event)\">{{control.label| translate: lang}}</button>\r\n </ng-container>\r\n }\r\n <!-- END: FORM-CONTROL SESSION-->\r\n\r\n <!-- START: ERROR SESSION-->\r\n @if (!!errors!.length) {\r\n <div>\r\n @for (error of errors; track $index) {\r\n <div class=\"form-control-error\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (!errors!.length && !!checkError$.value) {\r\n <div>\r\n <div>\r\n {{ '&nbsp;' }}\r\n </div>\r\n </div>\r\n }\r\n <!-- END: ERROR SESSION-->\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<ng-template #calculatedControlInfo let-control=\"control\">\r\n <div class=\"calculated-tooltip-container\">\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Name:</span>\r\n <span class=\"value\">{{ control?.field || 'N/A' }}</span>\r\n </div> \r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Evaluation Mode:</span>\r\n <span class=\"value\">{{ control?.evaluationMode || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Return Type:</span>\r\n <span class=\"value\">{{ control?.returnType || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Depends On:</span>\r\n <span class=\"value\" *ngIf=\"control?.dependsOn?.length > 0; else noDepends\">\r\n <code *ngFor=\"let dep of control?.dependsOn; let last = last\">{{ dep }}<span *ngIf=\"!last\">, </span></code>\r\n </span>\r\n <ng-template #noDepends><em class=\"no-depends\">None</em></ng-template>\r\n </div>\r\n <div *ngIf=\"!!control?.isUnsafe\" class=\"warning\">\r\n \u26A0\uFE0F This script is marked as <strong>unsafe</strong> and will not be executed.\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Script:</span>\r\n <pre class=\"code-block\">{{ control?.script || 'No script provided.' }}</pre>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".core-control-container{font-size:var(--typo-basic-font-size)!important}.core-control-container .control-label{color:#848484}.core-control-container>div.hidden{display:none}.core-control-container label{color:#464646}.core-control-container label.required:after{content:\"*\";color:#ff040b}.core-control-container label.avatar-label{width:var(--size-file-uploader);display:flex;align-items:center;justify-content:center}.core-control-container input[type=number]{padding-right:12px;position:relative}.core-control-container input[type=number]::-webkit-inner-spin-button{position:absolute;right:.3em;margin-left:.5em}.core-control-container input[type=number]{-moz-appearance:textfield}.core-control-container i.feather-help-circle{color:#848484}.core-control-container .gap-for-ios-switcher{height:5px}.core-control-container .calculated-view{-webkit-user-select:none;user-select:none;cursor:pointer;height:35px;width:160px;background-color:#d8f3dc;color:#1b4332;border:1px solid #95d5b2;border-radius:50px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:flex-start;font-family:Segoe UI,sans-serif;letter-spacing:.5px;padding:8px}.core-control-container .calculated-view i{font-size:18px;width:18px;height:18px;margin-right:8px}.core-control-container .calculated-view span{width:calc(100% - 26px);overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.calculated-tooltip-container{background-color:#fff;border:1px solid #ddd;padding:1rem;border-radius:6px;font-size:14px;color:#333;box-shadow:0 4px 10px #0000000d;max-width:360px}.calculated-tooltip-container .calculated-field-row{margin-bottom:.75rem}.calculated-tooltip-container .label{font-weight:500;color:#555!important;display:inline-block;min-width:140px}.calculated-tooltip-container .value{color:#222!important}.calculated-tooltip-container .warning{color:#b91c1c;background:#fef2f2;border:1px solid #fca5a5;padding:.5rem;border-radius:4px;margin-bottom:1rem;font-size:13px}.calculated-tooltip-container .code-block{background:#f8f9fa;border:1px solid #ddd;padding:.75rem;font-family:monospace;font-size:12px;white-space:pre-wrap;color:#111!important;border-radius:4px;overflow-x:auto}.calculated-tooltip-container .no-depends{color:#888;font-style:italic}.calculated-tooltip-container pre{overflow:hidden}.calculated-tooltip-container label.required~input:not([disabled]),.calculated-tooltip-container label.required~textarea:not([disabled]),.calculated-tooltip-container label.required~select:not([disabled]){background-color:#ff0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: TableCellPipe, name: "tableCell" }, { kind: "component", type: CoreDropdownComponent, selector: "core-dropdown", inputs: ["getByIdObject$", "paramMode", "shownFrom", "options$", "height", "placeholder", "loading", "warningDisable", "clearDisable", "fitHeightWithItemCount", "itemHeight", "optionApiDriven", "optionApi", "optionHttpVerb", "optionHttpPayload", "optionValueFrom", "optionTextFrom"] }, { kind: "component", type: CoreListComponent, selector: "core-list", inputs: ["title", "height", "options", "placeholder"] }, { kind: "component", type: CoreChecklistComponent, selector: "core-checklist", inputs: ["paramMode", "getByIdObject$", "shownFrom", "options$", "height", "placeholder", "loading", "readonly", "disabled"] }, { kind: "component", type: CoreFormControlSeekerComponent, selector: "core-form-control-seeker", inputs: ["title", "showPageHeader", "preDefinedOuterParam$", "preDefinedOuterFilter$", "click$", "getByIdObject$", "getByIdApi", "paramMode", "multiMode", "objectList$", "useTheseColumns", "hideOrgTree", "excludedColumns", "excludeExistingList", "placeholder", "sourceSpaceHeight", "indirectBinding", "bindGridIdTo", "multiModeExtendedColumns", "multiModeExtendedSections", "editBufferData$", "multiModeTableHeight", "multiModeRowHeight", "seekerSourceType", "boundFrom", "shownFrom", "alsoBindTo", "seekerVerifyIgnore", "disabledDoubleClick"], outputs: ["onDoubleClick", "selectedDataChange", "fullValueRowChange"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "component", type: CoreFileUploaderComponent, selector: "core-file-uploader", inputs: ["uploadFileType", "fileDataControlName", "fileNameControlName", "fileTypeControlName", "avatarSize", "defaultAvatar", "hidePreview", "verticalMode"] }, { kind: "component", type: CoreAttachmentComponent, selector: "core-attachment", inputs: ["assignTo", "readonly", "valueToShow", "placeholder", "upFlag$", "downFlag$"] }, { kind: "component", type: CoreGridBufferComponent, selector: "core-grid-buffer", inputs: ["padding", "placeholder", "tableHeight", "liteMode", "formSections", "gridColumns"], outputs: ["onBufferFormCreated"] }, { kind: "component", type: CoreDatePickerComponent, selector: "core-date-picker", inputs: ["enableTimeZoneConverter", "showPlaceholder", "popupWidth", "popupXPadding", "popupAlign", "rangeLimit", "placeholder", "readonly", "disabled"] }, { kind: "component", type: CoreOrgTreeComponent, selector: "core-org-tree", inputs: ["lineColor", "fullWidthMode", "accessorMode", "searchMode", "fullRendering", "height", "disabledLoopExpand", "showCheckInheritance", "excludedIds$", "stateIsolated$"], outputs: ["itemDoubleClick", "itemClick"] }, { kind: "component", type: CoreRadioGroupComponent, selector: "core-radio-group", inputs: ["options$", "vertical", "columnCount", "gapY", "defaultValue"] }, { kind: "component", type: CoreMccComponent, selector: "core-mcc", inputs: ["height", "columns", "shownFrom", "apiDefinition", "getByIdApi", "outerParam$", "selectedRow$", "outerFilterOperators", "outerInOperators", "placeholder"] }, { kind: "component", type: CoreMonthSelectorComponent, selector: "core-month-selector", inputs: ["align", "placeholder"], outputs: ["onYearClick"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "component", type: CoreCurrencyInputComponent, selector: "core-currency-input", inputs: ["currencySign", "placeholder"], outputs: ["onLeftFocus"] }, { kind: "component", type: CoreShiftCellComponent, selector: "core-shift-cell", inputs: ["$readOnly", "$hideStarterPlusSign", "$hideStickersWhileDragover", "$backgroundColor"] }, { kind: "component", type: CoreShiftCollectionComponent, selector: "core-shift-collection", inputs: ["height", "relativeMode"] }, { kind: "component", type: CoreTopicPickerComponent, selector: "core-topic-picker", inputs: ["popupHeight", "getByIdApi"] }, { kind: "component", type: CoreIosSwitcherComponent, selector: "core-ios-switcher", inputs: ["bgColor", "showOnOffText", "width", "height", "readonly"] }, { kind: "directive", type: HtmlTooltipDirective, selector: "[htmlTooltip]", inputs: ["htmlTooltip", "tooltipContext", "maxWidthUnset", "backgroundColor", "hold$"] }] }); }
25600
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreControlNoFormArrayComponent, isStandalone: true, selector: "core-control-no-form-array", inputs: { control: "control", checkError$: "checkError$", rangeLimit: "rangeLimit", readonly: "readonly", disabled: "disabled" }, host: { listeners: { "window:click": "onWindowClick()" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"core-control-container\">\r\n\r\n <div [formGroup]=\"form\" [class.hidden]=\"!!control.hidden\">\r\n\r\n @if (!control.headless!) {\r\n <label [class]=\"'control-label' + (required ? ' required' : '')\" [attr.for]=\"control.field\"\r\n [class.d-none]=\"!!control.hidden\"\r\n [class.avatar-label]=\"control.uploadFileType==='IMAGE_AVATAR'\" [appTooltip]=\"control.tooltip! | translate: lang\" \r\n [htmlTooltip]=\"control.htmlTooltip!\"\r\n [backgroundColor]=\"'white'\"\r\n [ngStyle]=\"{\r\n display: 'inline-block'\r\n }\">\r\n {{(control.controlType!=='CHECKBOX' && control.controlType!=='BUTTON') ? (control.label | translate: lang) : ''}}\r\n </label>\r\n\r\n @if (!!control.hint! && control.controlType !== 'CHECKBOX') {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"control.hint!\" [showAnyway]=\"true\" [ngStyle]=\"{\r\n display: 'inline-block',\r\n marginLeft: '2px'\r\n }\" [class.d-none]=\"!!control.hidden\"></i>\r\n }\r\n }\r\n\r\n <!-- START: FORM-CONTROL SESSION-->\r\n\r\n <ng-container>\r\n @switch (control.controlType) {\r\n @case (\"CALCULATED\") {\r\n <div class=\"calculated-view\" [htmlTooltip]=\"calculatedControlInfo\" [tooltipContext]=\"{control: control}\" [backgroundColor]=\"'#fff'\">\r\n <i class=\"feather-box\"></i><span>{{ control.field! }}</span>\r\n </div>\r\n }\r\n @case (\"TEXTBOX\") {\r\n\r\n <input *ngIf=\"control.type === 'date'\"\r\n [formControlName]=\"control.field\"\r\n type=\"date\"\r\n useValueAsDate\r\n class=\"form-control\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.form-control-disabled]=\"disabled || !!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'time'\"\r\n [formControlName]=\"control.field\"\r\n type=\"time\"\r\n class=\"form-control\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.form-control-disabled]=\"disabled || !!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'number'\"\r\n [formControlName]=\"control.field\"\r\n type=\"number\"\r\n step=\"{{ control.step || 1 }}\"\r\n class=\"form-control\"\r\n style=\"text-align: right;\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.form-control-disabled]=\"disabled || !!control.disabled\" />\r\n \r\n <input *ngIf=\"['string', 'text', 'email', 'url', 'password'].includes(control.type || 'text')\"\r\n [formControlName]=\"control.field\"\r\n [type]=\"control.type\"\r\n class=\"form-control\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.form-control-disabled]=\"disabled || !!control.disabled\" />\r\n\r\n <!-- <input *ngIf=\"control.type==='calculated'\"\r\n [formControlName]=\"control.field\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n [readonly]=\"true\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.form-control-disabled]=\"true\" /> -->\r\n\r\n }\r\n @case (\"CURRENCY\") {\r\n <core-currency-input \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-currency-input>\r\n }\r\n @case (\"TEXTAREA\") {\r\n <textarea \r\n [rows]=\"control.textareaRows?.toString() || '3'\" [ngStyle]=\"{ height: 'unset' }\"\r\n [class.form-control-disabled]=\"disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" class=\"form-control\" [readonly]=\"control.readonly\" [placeholder]=\"control.placeholder! || ''\"></textarea>\r\n }\r\n @case (\"CHECKBOX\") {\r\n <core-checkbox \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [text]=\"control.label\"\r\n [inputValue]=\"control.value\" [tooltip]=\"control.hint!\"></core-checkbox>\r\n }\r\n @case (\"IOS_SWITCHER\") {\r\n <div class=\"gap-for-ios-switcher\"></div>\r\n <core-ios-switcher [disabled]=\"!!disabled || !!control.disabled\" [formControlName]=\"control.field\" />\r\n }\r\n @case (\"MCC\") {\r\n <core-mcc [formControlName]=\"control.field\" [columns]=\"control.columns!\" [shownFrom]=\"control.shownFrom!\" \r\n [apiDefinition]=\"control.apiDefinition!\" [getByIdApi]=\"control.getByIdApi!\" [selectedRow$]=\"control.selectedRow$!\"\r\n [outerParam$]=\"control.outerParam$!\"\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-mcc>\r\n }\r\n @case (\"DATEPICKER\") {\r\n <core-date-picker \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [showPlaceholder]=\"control.showPlaceholder!\" [rangeLimit]=\"control.rangeLimit!\" [popupAlign]=\"control.popupAlign!\" [placeholder]=\"control.placeholder! || ''\"></core-date-picker>\r\n }\r\n\r\n @case (\"DROPDOWN\") {\r\n @if (!!control.dropdownOptions$) {\r\n <core-dropdown \r\n [formControlName]=\"control.field\" \r\n [options$]=\"control.dropdownOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" \r\n [shownFrom]=\"control.shownFrom!\" \r\n [placeholder]=\"control.placeholder! || ''\"\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [optionApiDriven]=\"control.optionApiDriven!\"\r\n [optionApi]=\"control.optionApi!\"\r\n [optionHttpVerb]=\"control.optionHttpVerb!\"\r\n [optionHttpPayload]=\"control.optionHttpPayload!\"\r\n [optionValueFrom]=\"control.optionValueFrom!\"\r\n [optionTextFrom]=\"control.optionTextFrom!\"\r\n ></core-dropdown>\r\n } @else {\r\n No dropdownOptions$ detected\r\n }\r\n }\r\n @case (\"LIST\") {\r\n <core-list \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [options]=\"control.listOptions!\" [placeholder]=\"control.placeholder! || ''\"></core-list>\r\n }\r\n @case (\"CHECKLIST\") {\r\n @if (!!control.checklistOptions$) {\r\n <core-checklist \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [options$]=\"control.checklistOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" [shownFrom]=\"control.shownFrom!\" [placeholder]=\"control.placeholder! || ''\"></core-checklist>\r\n }\r\n }\r\n @case (\"FILEUPLOADER\") {\r\n @if (!!control.uploadFileType) {\r\n <core-file-uploader \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [uploadFileType]=\"control.uploadFileType\"\r\n [fileDataControlName]=\"control.fileDataControlName!\"\r\n [fileNameControlName]=\"control.fileNameControlName!\"\r\n [fileTypeControlName]=\"control.fileTypeControlName!\"\r\n [verticalMode]=\"control.verticalMode!\"></core-file-uploader>\r\n }\r\n }\r\n @case (\"ATTACHMENT\") {\r\n <core-attachment ngDefaultControl [formControlName]=\"control.field\" [assignTo]=\"control.assignTo!\"\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [valueToShow]=\"control.valueToShow!\" [placeholder]=\"control.placeholder! || ''\"></core-attachment>\r\n }\r\n @case (\"GRIDBUFFER\") {\r\n @if (!!control.gridBufferFormSections && !!control.gridBufferTableColumns) {\r\n <core-grid-buffer [formControlName]=\"control.field\" [formSections]=\"control.gridBufferFormSections\"\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [gridColumns]=\"control.gridBufferTableColumns\"\r\n (onBufferFormCreated)=\"!!control.onBufferFormCreated ? control.onBufferFormCreated($event) : null\"></core-grid-buffer>\r\n }\r\n }\r\n @case (\"ORGTREECHECK\") {\r\n <core-org-tree \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\"\r\n [accessorMode]=\"coreOrgTreeDefaultAccessorMode\" [height]=\"control.height!\"></core-org-tree>\r\n }\r\n @case (\"RADIOGROUP\") {\r\n <core-radio-group [formControlName]=\"control.field\"\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [options$]=\"control.radioGroupOptions$!\"\r\n [vertical]=\"control.verticalMode!\"\r\n ></core-radio-group>\r\n }\r\n @case (\"MONTHSELECTOR\") {\r\n <core-month-selector \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-month-selector>\r\n }\r\n @case (\"SHIFTCELL\") {\r\n <core-shift-cell \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\"></core-shift-cell>\r\n }\r\n @case (\"SHIFTCOLLECTION\") {\r\n <core-shift-collection \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [relativeMode]=\"true\" [height]=\"control.height || 800\"></core-shift-collection>\r\n }\r\n @case(\"TOPICPICKER\") {\r\n <core-topic-picker \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [popupHeight]=\"control.popupHeight!\" [getByIdApi]=\"control.getByIdApi!\"></core-topic-picker>\r\n }\r\n @case (\"SEEKER\") {\r\n @switch(control.seekerSourceType) {\r\n @case(\"JOB_SEEK\") {\r\n <core-form-control-seeker\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"EMPLOYEE_SEEK\") {\r\n <core-form-control-seeker\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"CONTRACT_SEEK\") {\r\n <core-form-control-seeker\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" [boundFrom]=\"control.boundFrom!\"\r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\" \r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [shownFrom]=\"control.shownFrom!\"\r\n [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WORKING_SEEK\") {\r\n <core-form-control-seeker \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WAGE_SEEK\") {\r\n <core-form-control-seeker \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [formControlName]=\"control.field\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_SEEK\") {\r\n <core-form-control-seeker \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [seekerVerifyIgnore]=\"control.seekerVerifyIgnore!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_CONCURRENT_SEEK\") {\r\n <core-form-control-seeker\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"FORM_SEEK\") {\r\n <core-form-control-seeker\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"ORGANIZATION_UNIT_SEEK\") {\r\n <core-form-control-seeker\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [seekerSourceType]=\"control.seekerSourceType!\"\r\n [boundFrom]=\"control.boundFrom!\" [alsoBindTo]=\"control.alsoBindTo!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-form-control-seeker>\r\n }\r\n }\r\n }\r\n }\r\n </ng-container>\r\n\r\n @if (control.controlType==='BUTTON') {\r\n <ng-container>\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"oHandleClick($event)\">{{control.label| translate: lang}}</button>\r\n </ng-container>\r\n }\r\n <!-- END: FORM-CONTROL SESSION-->\r\n\r\n <!-- START: ERROR SESSION-->\r\n @if (!!errors!.length) {\r\n <div>\r\n @for (error of errors; track $index) {\r\n <div class=\"form-control-error\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (!errors!.length && !!checkError$.value) {\r\n <div>\r\n <div>\r\n {{ '&nbsp;' }}\r\n </div>\r\n </div>\r\n }\r\n <!-- END: ERROR SESSION-->\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<ng-template #calculatedControlInfo let-control=\"control\">\r\n <div class=\"calculated-tooltip-container\">\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Name:</span>\r\n <span class=\"value\">{{ control?.field || 'N/A' }}</span>\r\n </div> \r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Evaluation Mode:</span>\r\n <span class=\"value\">{{ control?.evaluationMode || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Return Type:</span>\r\n <span class=\"value\">{{ control?.returnType || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Depends On:</span>\r\n <span class=\"value\" *ngIf=\"control?.dependsOn?.length > 0; else noDepends\">\r\n <code *ngFor=\"let dep of control?.dependsOn; let last = last\">{{ dep }}<span *ngIf=\"!last\">, </span></code>\r\n </span>\r\n <ng-template #noDepends><em class=\"no-depends\">None</em></ng-template>\r\n </div>\r\n <div *ngIf=\"!!control?.isUnsafe\" class=\"warning\">\r\n \u26A0\uFE0F This script is marked as <strong>unsafe</strong> and will not be executed.\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Script:</span>\r\n <pre class=\"code-block\">{{ control?.script || 'No script provided.' }}</pre>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".core-control-container{font-size:var(--typo-basic-font-size)!important}.core-control-container .control-label{color:#848484}.core-control-container>div.hidden{display:none}.core-control-container label{color:#464646}.core-control-container label.required:after{content:\"*\";color:#ff040b}.core-control-container label.avatar-label{width:var(--size-file-uploader);display:flex;align-items:center;justify-content:center}.core-control-container input[type=number]{padding-right:12px;position:relative}.core-control-container input[type=number]::-webkit-inner-spin-button{position:absolute;right:.3em;margin-left:.5em}.core-control-container input[type=number]{-moz-appearance:textfield}.core-control-container i.feather-help-circle{color:#848484}.core-control-container .gap-for-ios-switcher{height:5px}.core-control-container .calculated-view{-webkit-user-select:none;user-select:none;cursor:pointer;height:35px;width:160px;background-color:#d8f3dc;color:#1b4332;border:1px solid #95d5b2;border-radius:50px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:flex-start;font-family:Segoe UI,sans-serif;letter-spacing:.5px;padding:8px}.core-control-container .calculated-view i{font-size:18px;width:18px;height:18px;margin-right:8px}.core-control-container .calculated-view span{width:calc(100% - 26px);overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.calculated-tooltip-container{background-color:#fff;border:1px solid #ddd;padding:1rem;border-radius:6px;font-size:14px;color:#333;box-shadow:0 4px 10px #0000000d;max-width:360px}.calculated-tooltip-container .calculated-field-row{margin-bottom:.75rem}.calculated-tooltip-container .label{font-weight:500;color:#555!important;display:inline-block;min-width:140px}.calculated-tooltip-container .value{color:#222!important}.calculated-tooltip-container .warning{color:#b91c1c;background:#fef2f2;border:1px solid #fca5a5;padding:.5rem;border-radius:4px;margin-bottom:1rem;font-size:13px}.calculated-tooltip-container .code-block{background:#f8f9fa;border:1px solid #ddd;padding:.75rem;font-family:monospace;font-size:12px;white-space:pre-wrap;color:#111!important;border-radius:4px;overflow-x:auto}.calculated-tooltip-container .no-depends{color:#888;font-style:italic}.calculated-tooltip-container pre{overflow:hidden}.calculated-tooltip-container label.required~input:not([disabled]),.calculated-tooltip-container label.required~textarea:not([disabled]),.calculated-tooltip-container label.required~select:not([disabled]){background-color:#ff0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: TableCellPipe, name: "tableCell" }, { kind: "component", type: CoreDropdownComponent, selector: "core-dropdown", inputs: ["getByIdObject$", "paramMode", "shownFrom", "options$", "height", "placeholder", "loading", "warningDisable", "clearDisable", "fitHeightWithItemCount", "itemHeight", "optionApiDriven", "optionApi", "optionHttpVerb", "optionHttpPayload", "optionValueFrom", "optionTextFrom"] }, { kind: "component", type: CoreListComponent, selector: "core-list", inputs: ["title", "height", "options", "placeholder"] }, { kind: "component", type: CoreChecklistComponent, selector: "core-checklist", inputs: ["paramMode", "getByIdObject$", "shownFrom", "options$", "height", "placeholder", "loading", "readonly", "disabled"] }, { kind: "component", type: CoreFormControlSeekerComponent, selector: "core-form-control-seeker", inputs: ["title", "showPageHeader", "preDefinedOuterParam$", "preDefinedOuterFilter$", "click$", "getByIdObject$", "getByIdApi", "paramMode", "multiMode", "objectList$", "useTheseColumns", "hideOrgTree", "excludedColumns", "excludeExistingList", "placeholder", "sourceSpaceHeight", "indirectBinding", "bindGridIdTo", "multiModeExtendedColumns", "multiModeExtendedSections", "editBufferData$", "multiModeTableHeight", "multiModeRowHeight", "seekerSourceType", "boundFrom", "shownFrom", "alsoBindTo", "seekerVerifyIgnore", "disabledDoubleClick"], outputs: ["onDoubleClick", "selectedDataChange", "fullValueRowChange"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "component", type: CoreFileUploaderComponent, selector: "core-file-uploader", inputs: ["uploadFileType", "fileDataControlName", "fileNameControlName", "fileTypeControlName", "avatarSize", "defaultAvatar", "hidePreview", "verticalMode"] }, { kind: "component", type: CoreAttachmentComponent, selector: "core-attachment", inputs: ["assignTo", "readonly", "valueToShow", "placeholder", "upFlag$", "downFlag$"] }, { kind: "component", type: CoreGridBufferComponent, selector: "core-grid-buffer", inputs: ["padding", "placeholder", "tableHeight", "liteMode", "formSections", "gridColumns"], outputs: ["onBufferFormCreated"] }, { kind: "component", type: CoreDatePickerComponent, selector: "core-date-picker", inputs: ["enableTimeZoneConverter", "showPlaceholder", "popupWidth", "popupXPadding", "popupAlign", "rangeLimit", "placeholder", "readonly", "disabled"] }, { kind: "component", type: CoreOrgTreeComponent, selector: "core-org-tree", inputs: ["lineColor", "fullWidthMode", "accessorMode", "searchMode", "fullRendering", "height", "disabledLoopExpand", "showCheckInheritance", "excludedIds$", "stateIsolated$"], outputs: ["itemDoubleClick", "itemClick"] }, { kind: "component", type: CoreRadioGroupComponent, selector: "core-radio-group", inputs: ["options$", "vertical", "columnCount", "gapY", "defaultValue"] }, { kind: "component", type: CoreMccComponent, selector: "core-mcc", inputs: ["height", "columns", "shownFrom", "apiDefinition", "getByIdApi", "outerParam$", "selectedRow$", "outerFilterOperators", "outerInOperators", "placeholder"] }, { kind: "component", type: CoreMonthSelectorComponent, selector: "core-month-selector", inputs: ["align", "placeholder"], outputs: ["onYearClick"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "component", type: CoreCurrencyInputComponent, selector: "core-currency-input", inputs: ["currencySign", "placeholder"], outputs: ["onLeftFocus"] }, { kind: "component", type: CoreShiftCellComponent, selector: "core-shift-cell", inputs: ["$readOnly", "$hideStarterPlusSign", "$hideStickersWhileDragover", "$backgroundColor"] }, { kind: "component", type: CoreShiftCollectionComponent, selector: "core-shift-collection", inputs: ["height", "disabled", "relativeMode"] }, { kind: "component", type: CoreTopicPickerComponent, selector: "core-topic-picker", inputs: ["popupHeight", "getByIdApi"] }, { kind: "component", type: CoreIosSwitcherComponent, selector: "core-ios-switcher", inputs: ["bgColor", "showOnOffText", "width", "height", "readonly"] }, { kind: "directive", type: HtmlTooltipDirective, selector: "[htmlTooltip]", inputs: ["htmlTooltip", "tooltipContext", "maxWidthUnset", "backgroundColor", "hold$"] }] }); }
25598
25601
  }
25599
25602
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreControlNoFormArrayComponent, decorators: [{
25600
25603
  type: Component,
@@ -25625,24 +25628,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
25625
25628
  CoreTopicPickerComponent,
25626
25629
  CoreIosSwitcherComponent,
25627
25630
  HtmlTooltipDirective
25628
- ], template: "<div class=\"core-control-container\">\r\n\r\n <div [formGroup]=\"form\" [class.hidden]=\"!!control.hidden\">\r\n\r\n @if (!control.headless!) {\r\n <label [class]=\"'control-label' + (required ? ' required' : '')\" [attr.for]=\"control.field\"\r\n [class.d-none]=\"!!control.hidden\"\r\n [class.avatar-label]=\"control.uploadFileType==='IMAGE_AVATAR'\" [appTooltip]=\"control.tooltip! | translate: lang\" \r\n [htmlTooltip]=\"control.htmlTooltip!\"\r\n [backgroundColor]=\"'white'\"\r\n [ngStyle]=\"{\r\n display: 'inline-block'\r\n }\">\r\n {{(control.controlType!=='CHECKBOX' && control.controlType!=='BUTTON') ? (control.label | translate: lang) : ''}}\r\n </label>\r\n\r\n @if (!!control.hint! && control.controlType !== 'CHECKBOX') {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"control.hint!\" [showAnyway]=\"true\" [ngStyle]=\"{\r\n display: 'inline-block',\r\n marginLeft: '2px'\r\n }\" [class.d-none]=\"!!control.hidden\"></i>\r\n }\r\n }\r\n\r\n <!-- START: FORM-CONTROL SESSION-->\r\n\r\n <ng-container>\r\n @switch (control.controlType) {\r\n @case (\"CALCULATED\") {\r\n <div class=\"calculated-view\" [htmlTooltip]=\"calculatedControlInfo\" [tooltipContext]=\"{control: control}\" [backgroundColor]=\"'#fff'\">\r\n <i class=\"feather-box\"></i><span>{{ control.field! }}</span>\r\n </div>\r\n }\r\n @case (\"TEXTBOX\") {\r\n\r\n <input *ngIf=\"control.type === 'date'\"\r\n [formControlName]=\"control.field\"\r\n type=\"date\"\r\n useValueAsDate\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'time'\"\r\n [formControlName]=\"control.field\"\r\n type=\"time\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'number'\"\r\n [formControlName]=\"control.field\"\r\n type=\"number\"\r\n step=\"{{ control.step || 1 }}\"\r\n class=\"form-control\"\r\n style=\"text-align: right;\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"['string', 'text', 'email', 'url', 'password'].includes(control.type || 'text')\"\r\n [formControlName]=\"control.field\"\r\n [type]=\"control.type\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n\r\n <!-- <input *ngIf=\"control.type==='calculated'\"\r\n [formControlName]=\"control.field\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n [readonly]=\"true\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.form-control-disabled]=\"true\" /> -->\r\n\r\n }\r\n @case (\"CURRENCY\") {\r\n <core-currency-input [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-currency-input>\r\n }\r\n @case (\"TEXTAREA\") {\r\n <textarea [rows]=\"control.textareaRows?.toString() || '3'\" [ngStyle]=\"{ height: 'unset' }\"\r\n [formControlName]=\"control.field\" class=\"form-control\" [readonly]=\"control.readonly\" [placeholder]=\"control.placeholder! || ''\"></textarea>\r\n }\r\n @case (\"CHECKBOX\") {\r\n <core-checkbox [formControlName]=\"control.field\" [text]=\"control.label\"\r\n [inputValue]=\"control.value\" [tooltip]=\"control.hint!\"></core-checkbox>\r\n }\r\n @case (\"IOS_SWITCHER\") {\r\n <div class=\"gap-for-ios-switcher\"></div>\r\n <core-ios-switcher [formControlName]=\"control.field\" />\r\n }\r\n @case (\"MCC\") {\r\n <core-mcc [formControlName]=\"control.field\" [columns]=\"control.columns!\" [shownFrom]=\"control.shownFrom!\" \r\n [apiDefinition]=\"control.apiDefinition!\" [getByIdApi]=\"control.getByIdApi!\" [selectedRow$]=\"control.selectedRow$!\"\r\n [outerParam$]=\"control.outerParam$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-mcc>\r\n }\r\n @case (\"DATEPICKER\") {\r\n <core-date-picker [formControlName]=\"control.field\" [showPlaceholder]=\"control.showPlaceholder!\" [rangeLimit]=\"control.rangeLimit!\" [popupAlign]=\"control.popupAlign!\" [placeholder]=\"control.placeholder! || ''\"></core-date-picker>\r\n }\r\n\r\n @case (\"DROPDOWN\") {\r\n @if (!!control.dropdownOptions$) {\r\n <core-dropdown \r\n [formControlName]=\"control.field\" \r\n [options$]=\"control.dropdownOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" \r\n [shownFrom]=\"control.shownFrom!\" \r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [optionApiDriven]=\"control.optionApiDriven!\"\r\n [optionApi]=\"control.optionApi!\"\r\n [optionHttpVerb]=\"control.optionHttpVerb!\"\r\n [optionHttpPayload]=\"control.optionHttpPayload!\"\r\n [optionValueFrom]=\"control.optionValueFrom!\"\r\n [optionTextFrom]=\"control.optionTextFrom!\"\r\n ></core-dropdown>\r\n } @else {\r\n No dropdownOptions$ detected\r\n }\r\n }\r\n @case (\"LIST\") {\r\n <core-list [formControlName]=\"control.field\" [options]=\"control.listOptions!\" [placeholder]=\"control.placeholder! || ''\"></core-list>\r\n }\r\n @case (\"CHECKLIST\") {\r\n @if (!!control.checklistOptions$) {\r\n <core-checklist [formControlName]=\"control.field\" [options$]=\"control.checklistOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" [shownFrom]=\"control.shownFrom!\" [placeholder]=\"control.placeholder! || ''\"></core-checklist>\r\n }\r\n }\r\n @case (\"FILEUPLOADER\") {\r\n @if (!!control.uploadFileType) {\r\n <core-file-uploader [formControlName]=\"control.field\" [uploadFileType]=\"control.uploadFileType\"\r\n [fileDataControlName]=\"control.fileDataControlName!\"\r\n [fileNameControlName]=\"control.fileNameControlName!\"\r\n [fileTypeControlName]=\"control.fileTypeControlName!\"\r\n [verticalMode]=\"control.verticalMode!\"></core-file-uploader>\r\n }\r\n }\r\n @case (\"ATTACHMENT\") {\r\n <core-attachment ngDefaultControl [formControlName]=\"control.field\" [assignTo]=\"control.assignTo!\"\r\n [valueToShow]=\"control.valueToShow!\" [placeholder]=\"control.placeholder! || ''\"></core-attachment>\r\n }\r\n @case (\"GRIDBUFFER\") {\r\n @if (!!control.gridBufferFormSections && !!control.gridBufferTableColumns) {\r\n <core-grid-buffer [formControlName]=\"control.field\" [formSections]=\"control.gridBufferFormSections\"\r\n [gridColumns]=\"control.gridBufferTableColumns\"\r\n (onBufferFormCreated)=\"!!control.onBufferFormCreated ? control.onBufferFormCreated($event) : null\"></core-grid-buffer>\r\n }\r\n }\r\n @case (\"ORGTREECHECK\") {\r\n <core-org-tree [formControlName]=\"control.field\"\r\n [accessorMode]=\"coreOrgTreeDefaultAccessorMode\" [height]=\"control.height!\"></core-org-tree>\r\n }\r\n @case (\"RADIOGROUP\") {\r\n <core-radio-group [formControlName]=\"control.field\"\r\n [options$]=\"control.radioGroupOptions$!\"\r\n [vertical]=\"control.verticalMode!\"\r\n ></core-radio-group>\r\n }\r\n @case (\"MONTHSELECTOR\") {\r\n <core-month-selector [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-month-selector>\r\n }\r\n @case (\"SHIFTCELL\") {\r\n <core-shift-cell [formControlName]=\"control.field\"></core-shift-cell>\r\n }\r\n @case (\"SHIFTCOLLECTION\") {\r\n <core-shift-collection [relativeMode]=\"true\" [height]=\"control.height || 800\"></core-shift-collection>\r\n }\r\n @case(\"TOPICPICKER\") {\r\n <core-topic-picker [formControlName]=\"control.field\" [popupHeight]=\"control.popupHeight!\" [getByIdApi]=\"control.getByIdApi!\"></core-topic-picker>\r\n }\r\n @case (\"SEEKER\") {\r\n @switch(control.seekerSourceType) {\r\n @case(\"JOB_SEEK\") {\r\n <core-form-control-seeker\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"EMPLOYEE_SEEK\") {\r\n <core-form-control-seeker\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"CONTRACT_SEEK\") {\r\n <core-form-control-seeker\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" [boundFrom]=\"control.boundFrom!\"\r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\" \r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [shownFrom]=\"control.shownFrom!\"\r\n [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WORKING_SEEK\") {\r\n <core-form-control-seeker \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WAGE_SEEK\") {\r\n <core-form-control-seeker \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [formControlName]=\"control.field\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_SEEK\") {\r\n <core-form-control-seeker \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [seekerVerifyIgnore]=\"control.seekerVerifyIgnore!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_CONCURRENT_SEEK\") {\r\n <core-form-control-seeker\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"FORM_SEEK\") {\r\n <core-form-control-seeker\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"ORGANIZATION_UNIT_SEEK\") {\r\n <core-form-control-seeker\r\n [formControlName]=\"control.field\" [seekerSourceType]=\"control.seekerSourceType!\"\r\n [boundFrom]=\"control.boundFrom!\" [alsoBindTo]=\"control.alsoBindTo!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-form-control-seeker>\r\n }\r\n }\r\n }\r\n }\r\n </ng-container>\r\n\r\n @if (control.controlType==='BUTTON') {\r\n <ng-container>\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"oHandleClick($event)\">{{control.label| translate: lang}}</button>\r\n </ng-container>\r\n }\r\n <!-- END: FORM-CONTROL SESSION-->\r\n\r\n <!-- START: ERROR SESSION-->\r\n @if (!!errors!.length) {\r\n <div>\r\n @for (error of errors; track $index) {\r\n <div class=\"form-control-error\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (!errors!.length && !!checkError$.value) {\r\n <div>\r\n <div>\r\n {{ '&nbsp;' }}\r\n </div>\r\n </div>\r\n }\r\n <!-- END: ERROR SESSION-->\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<ng-template #calculatedControlInfo let-control=\"control\">\r\n <div class=\"calculated-tooltip-container\">\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Name:</span>\r\n <span class=\"value\">{{ control?.field || 'N/A' }}</span>\r\n </div> \r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Evaluation Mode:</span>\r\n <span class=\"value\">{{ control?.evaluationMode || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Return Type:</span>\r\n <span class=\"value\">{{ control?.returnType || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Depends On:</span>\r\n <span class=\"value\" *ngIf=\"control?.dependsOn?.length > 0; else noDepends\">\r\n <code *ngFor=\"let dep of control?.dependsOn; let last = last\">{{ dep }}<span *ngIf=\"!last\">, </span></code>\r\n </span>\r\n <ng-template #noDepends><em class=\"no-depends\">None</em></ng-template>\r\n </div>\r\n <div *ngIf=\"!!control?.isUnsafe\" class=\"warning\">\r\n \u26A0\uFE0F This script is marked as <strong>unsafe</strong> and will not be executed.\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Script:</span>\r\n <pre class=\"code-block\">{{ control?.script || 'No script provided.' }}</pre>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".core-control-container{font-size:var(--typo-basic-font-size)!important}.core-control-container .control-label{color:#848484}.core-control-container>div.hidden{display:none}.core-control-container label{color:#464646}.core-control-container label.required:after{content:\"*\";color:#ff040b}.core-control-container label.avatar-label{width:var(--size-file-uploader);display:flex;align-items:center;justify-content:center}.core-control-container input[type=number]{padding-right:12px;position:relative}.core-control-container input[type=number]::-webkit-inner-spin-button{position:absolute;right:.3em;margin-left:.5em}.core-control-container input[type=number]{-moz-appearance:textfield}.core-control-container i.feather-help-circle{color:#848484}.core-control-container .gap-for-ios-switcher{height:5px}.core-control-container .calculated-view{-webkit-user-select:none;user-select:none;cursor:pointer;height:35px;width:160px;background-color:#d8f3dc;color:#1b4332;border:1px solid #95d5b2;border-radius:50px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:flex-start;font-family:Segoe UI,sans-serif;letter-spacing:.5px;padding:8px}.core-control-container .calculated-view i{font-size:18px;width:18px;height:18px;margin-right:8px}.core-control-container .calculated-view span{width:calc(100% - 26px);overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.calculated-tooltip-container{background-color:#fff;border:1px solid #ddd;padding:1rem;border-radius:6px;font-size:14px;color:#333;box-shadow:0 4px 10px #0000000d;max-width:360px}.calculated-tooltip-container .calculated-field-row{margin-bottom:.75rem}.calculated-tooltip-container .label{font-weight:500;color:#555!important;display:inline-block;min-width:140px}.calculated-tooltip-container .value{color:#222!important}.calculated-tooltip-container .warning{color:#b91c1c;background:#fef2f2;border:1px solid #fca5a5;padding:.5rem;border-radius:4px;margin-bottom:1rem;font-size:13px}.calculated-tooltip-container .code-block{background:#f8f9fa;border:1px solid #ddd;padding:.75rem;font-family:monospace;font-size:12px;white-space:pre-wrap;color:#111!important;border-radius:4px;overflow-x:auto}.calculated-tooltip-container .no-depends{color:#888;font-style:italic}.calculated-tooltip-container pre{overflow:hidden}.calculated-tooltip-container label.required~input:not([disabled]),.calculated-tooltip-container label.required~textarea:not([disabled]),.calculated-tooltip-container label.required~select:not([disabled]){background-color:#ff0!important}\n"] }]
25631
+ ], template: "<div class=\"core-control-container\">\r\n\r\n <div [formGroup]=\"form\" [class.hidden]=\"!!control.hidden\">\r\n\r\n @if (!control.headless!) {\r\n <label [class]=\"'control-label' + (required ? ' required' : '')\" [attr.for]=\"control.field\"\r\n [class.d-none]=\"!!control.hidden\"\r\n [class.avatar-label]=\"control.uploadFileType==='IMAGE_AVATAR'\" [appTooltip]=\"control.tooltip! | translate: lang\" \r\n [htmlTooltip]=\"control.htmlTooltip!\"\r\n [backgroundColor]=\"'white'\"\r\n [ngStyle]=\"{\r\n display: 'inline-block'\r\n }\">\r\n {{(control.controlType!=='CHECKBOX' && control.controlType!=='BUTTON') ? (control.label | translate: lang) : ''}}\r\n </label>\r\n\r\n @if (!!control.hint! && control.controlType !== 'CHECKBOX') {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"control.hint!\" [showAnyway]=\"true\" [ngStyle]=\"{\r\n display: 'inline-block',\r\n marginLeft: '2px'\r\n }\" [class.d-none]=\"!!control.hidden\"></i>\r\n }\r\n }\r\n\r\n <!-- START: FORM-CONTROL SESSION-->\r\n\r\n <ng-container>\r\n @switch (control.controlType) {\r\n @case (\"CALCULATED\") {\r\n <div class=\"calculated-view\" [htmlTooltip]=\"calculatedControlInfo\" [tooltipContext]=\"{control: control}\" [backgroundColor]=\"'#fff'\">\r\n <i class=\"feather-box\"></i><span>{{ control.field! }}</span>\r\n </div>\r\n }\r\n @case (\"TEXTBOX\") {\r\n\r\n <input *ngIf=\"control.type === 'date'\"\r\n [formControlName]=\"control.field\"\r\n type=\"date\"\r\n useValueAsDate\r\n class=\"form-control\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.form-control-disabled]=\"disabled || !!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'time'\"\r\n [formControlName]=\"control.field\"\r\n type=\"time\"\r\n class=\"form-control\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.form-control-disabled]=\"disabled || !!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'number'\"\r\n [formControlName]=\"control.field\"\r\n type=\"number\"\r\n step=\"{{ control.step || 1 }}\"\r\n class=\"form-control\"\r\n style=\"text-align: right;\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.form-control-disabled]=\"disabled || !!control.disabled\" />\r\n \r\n <input *ngIf=\"['string', 'text', 'email', 'url', 'password'].includes(control.type || 'text')\"\r\n [formControlName]=\"control.field\"\r\n [type]=\"control.type\"\r\n class=\"form-control\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.form-control-disabled]=\"disabled || !!control.disabled\" />\r\n\r\n <!-- <input *ngIf=\"control.type==='calculated'\"\r\n [formControlName]=\"control.field\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n [readonly]=\"true\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.form-control-disabled]=\"true\" /> -->\r\n\r\n }\r\n @case (\"CURRENCY\") {\r\n <core-currency-input \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-currency-input>\r\n }\r\n @case (\"TEXTAREA\") {\r\n <textarea \r\n [rows]=\"control.textareaRows?.toString() || '3'\" [ngStyle]=\"{ height: 'unset' }\"\r\n [class.form-control-disabled]=\"disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" class=\"form-control\" [readonly]=\"control.readonly\" [placeholder]=\"control.placeholder! || ''\"></textarea>\r\n }\r\n @case (\"CHECKBOX\") {\r\n <core-checkbox \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [text]=\"control.label\"\r\n [inputValue]=\"control.value\" [tooltip]=\"control.hint!\"></core-checkbox>\r\n }\r\n @case (\"IOS_SWITCHER\") {\r\n <div class=\"gap-for-ios-switcher\"></div>\r\n <core-ios-switcher [disabled]=\"!!disabled || !!control.disabled\" [formControlName]=\"control.field\" />\r\n }\r\n @case (\"MCC\") {\r\n <core-mcc [formControlName]=\"control.field\" [columns]=\"control.columns!\" [shownFrom]=\"control.shownFrom!\" \r\n [apiDefinition]=\"control.apiDefinition!\" [getByIdApi]=\"control.getByIdApi!\" [selectedRow$]=\"control.selectedRow$!\"\r\n [outerParam$]=\"control.outerParam$!\"\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-mcc>\r\n }\r\n @case (\"DATEPICKER\") {\r\n <core-date-picker \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [showPlaceholder]=\"control.showPlaceholder!\" [rangeLimit]=\"control.rangeLimit!\" [popupAlign]=\"control.popupAlign!\" [placeholder]=\"control.placeholder! || ''\"></core-date-picker>\r\n }\r\n\r\n @case (\"DROPDOWN\") {\r\n @if (!!control.dropdownOptions$) {\r\n <core-dropdown \r\n [formControlName]=\"control.field\" \r\n [options$]=\"control.dropdownOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" \r\n [shownFrom]=\"control.shownFrom!\" \r\n [placeholder]=\"control.placeholder! || ''\"\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [optionApiDriven]=\"control.optionApiDriven!\"\r\n [optionApi]=\"control.optionApi!\"\r\n [optionHttpVerb]=\"control.optionHttpVerb!\"\r\n [optionHttpPayload]=\"control.optionHttpPayload!\"\r\n [optionValueFrom]=\"control.optionValueFrom!\"\r\n [optionTextFrom]=\"control.optionTextFrom!\"\r\n ></core-dropdown>\r\n } @else {\r\n No dropdownOptions$ detected\r\n }\r\n }\r\n @case (\"LIST\") {\r\n <core-list \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [options]=\"control.listOptions!\" [placeholder]=\"control.placeholder! || ''\"></core-list>\r\n }\r\n @case (\"CHECKLIST\") {\r\n @if (!!control.checklistOptions$) {\r\n <core-checklist \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [options$]=\"control.checklistOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" [shownFrom]=\"control.shownFrom!\" [placeholder]=\"control.placeholder! || ''\"></core-checklist>\r\n }\r\n }\r\n @case (\"FILEUPLOADER\") {\r\n @if (!!control.uploadFileType) {\r\n <core-file-uploader \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [uploadFileType]=\"control.uploadFileType\"\r\n [fileDataControlName]=\"control.fileDataControlName!\"\r\n [fileNameControlName]=\"control.fileNameControlName!\"\r\n [fileTypeControlName]=\"control.fileTypeControlName!\"\r\n [verticalMode]=\"control.verticalMode!\"></core-file-uploader>\r\n }\r\n }\r\n @case (\"ATTACHMENT\") {\r\n <core-attachment ngDefaultControl [formControlName]=\"control.field\" [assignTo]=\"control.assignTo!\"\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [valueToShow]=\"control.valueToShow!\" [placeholder]=\"control.placeholder! || ''\"></core-attachment>\r\n }\r\n @case (\"GRIDBUFFER\") {\r\n @if (!!control.gridBufferFormSections && !!control.gridBufferTableColumns) {\r\n <core-grid-buffer [formControlName]=\"control.field\" [formSections]=\"control.gridBufferFormSections\"\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [gridColumns]=\"control.gridBufferTableColumns\"\r\n (onBufferFormCreated)=\"!!control.onBufferFormCreated ? control.onBufferFormCreated($event) : null\"></core-grid-buffer>\r\n }\r\n }\r\n @case (\"ORGTREECHECK\") {\r\n <core-org-tree \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\"\r\n [accessorMode]=\"coreOrgTreeDefaultAccessorMode\" [height]=\"control.height!\"></core-org-tree>\r\n }\r\n @case (\"RADIOGROUP\") {\r\n <core-radio-group [formControlName]=\"control.field\"\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [options$]=\"control.radioGroupOptions$!\"\r\n [vertical]=\"control.verticalMode!\"\r\n ></core-radio-group>\r\n }\r\n @case (\"MONTHSELECTOR\") {\r\n <core-month-selector \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-month-selector>\r\n }\r\n @case (\"SHIFTCELL\") {\r\n <core-shift-cell \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\"></core-shift-cell>\r\n }\r\n @case (\"SHIFTCOLLECTION\") {\r\n <core-shift-collection \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [relativeMode]=\"true\" [height]=\"control.height || 800\"></core-shift-collection>\r\n }\r\n @case(\"TOPICPICKER\") {\r\n <core-topic-picker \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [popupHeight]=\"control.popupHeight!\" [getByIdApi]=\"control.getByIdApi!\"></core-topic-picker>\r\n }\r\n @case (\"SEEKER\") {\r\n @switch(control.seekerSourceType) {\r\n @case(\"JOB_SEEK\") {\r\n <core-form-control-seeker\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"EMPLOYEE_SEEK\") {\r\n <core-form-control-seeker\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"CONTRACT_SEEK\") {\r\n <core-form-control-seeker\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" [boundFrom]=\"control.boundFrom!\"\r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\" \r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [shownFrom]=\"control.shownFrom!\"\r\n [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WORKING_SEEK\") {\r\n <core-form-control-seeker \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WAGE_SEEK\") {\r\n <core-form-control-seeker \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [formControlName]=\"control.field\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_SEEK\") {\r\n <core-form-control-seeker \r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [seekerVerifyIgnore]=\"control.seekerVerifyIgnore!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_CONCURRENT_SEEK\") {\r\n <core-form-control-seeker\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"FORM_SEEK\") {\r\n <core-form-control-seeker\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"ORGANIZATION_UNIT_SEEK\") {\r\n <core-form-control-seeker\r\n [disabled]=\"!!disabled || !!control.disabled\"\r\n [formControlName]=\"control.field\" [seekerSourceType]=\"control.seekerSourceType!\"\r\n [boundFrom]=\"control.boundFrom!\" [alsoBindTo]=\"control.alsoBindTo!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-form-control-seeker>\r\n }\r\n }\r\n }\r\n }\r\n </ng-container>\r\n\r\n @if (control.controlType==='BUTTON') {\r\n <ng-container>\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"oHandleClick($event)\">{{control.label| translate: lang}}</button>\r\n </ng-container>\r\n }\r\n <!-- END: FORM-CONTROL SESSION-->\r\n\r\n <!-- START: ERROR SESSION-->\r\n @if (!!errors!.length) {\r\n <div>\r\n @for (error of errors; track $index) {\r\n <div class=\"form-control-error\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (!errors!.length && !!checkError$.value) {\r\n <div>\r\n <div>\r\n {{ '&nbsp;' }}\r\n </div>\r\n </div>\r\n }\r\n <!-- END: ERROR SESSION-->\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<ng-template #calculatedControlInfo let-control=\"control\">\r\n <div class=\"calculated-tooltip-container\">\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Name:</span>\r\n <span class=\"value\">{{ control?.field || 'N/A' }}</span>\r\n </div> \r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Evaluation Mode:</span>\r\n <span class=\"value\">{{ control?.evaluationMode || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Return Type:</span>\r\n <span class=\"value\">{{ control?.returnType || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Depends On:</span>\r\n <span class=\"value\" *ngIf=\"control?.dependsOn?.length > 0; else noDepends\">\r\n <code *ngFor=\"let dep of control?.dependsOn; let last = last\">{{ dep }}<span *ngIf=\"!last\">, </span></code>\r\n </span>\r\n <ng-template #noDepends><em class=\"no-depends\">None</em></ng-template>\r\n </div>\r\n <div *ngIf=\"!!control?.isUnsafe\" class=\"warning\">\r\n \u26A0\uFE0F This script is marked as <strong>unsafe</strong> and will not be executed.\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Script:</span>\r\n <pre class=\"code-block\">{{ control?.script || 'No script provided.' }}</pre>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".core-control-container{font-size:var(--typo-basic-font-size)!important}.core-control-container .control-label{color:#848484}.core-control-container>div.hidden{display:none}.core-control-container label{color:#464646}.core-control-container label.required:after{content:\"*\";color:#ff040b}.core-control-container label.avatar-label{width:var(--size-file-uploader);display:flex;align-items:center;justify-content:center}.core-control-container input[type=number]{padding-right:12px;position:relative}.core-control-container input[type=number]::-webkit-inner-spin-button{position:absolute;right:.3em;margin-left:.5em}.core-control-container input[type=number]{-moz-appearance:textfield}.core-control-container i.feather-help-circle{color:#848484}.core-control-container .gap-for-ios-switcher{height:5px}.core-control-container .calculated-view{-webkit-user-select:none;user-select:none;cursor:pointer;height:35px;width:160px;background-color:#d8f3dc;color:#1b4332;border:1px solid #95d5b2;border-radius:50px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:flex-start;font-family:Segoe UI,sans-serif;letter-spacing:.5px;padding:8px}.core-control-container .calculated-view i{font-size:18px;width:18px;height:18px;margin-right:8px}.core-control-container .calculated-view span{width:calc(100% - 26px);overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.calculated-tooltip-container{background-color:#fff;border:1px solid #ddd;padding:1rem;border-radius:6px;font-size:14px;color:#333;box-shadow:0 4px 10px #0000000d;max-width:360px}.calculated-tooltip-container .calculated-field-row{margin-bottom:.75rem}.calculated-tooltip-container .label{font-weight:500;color:#555!important;display:inline-block;min-width:140px}.calculated-tooltip-container .value{color:#222!important}.calculated-tooltip-container .warning{color:#b91c1c;background:#fef2f2;border:1px solid #fca5a5;padding:.5rem;border-radius:4px;margin-bottom:1rem;font-size:13px}.calculated-tooltip-container .code-block{background:#f8f9fa;border:1px solid #ddd;padding:.75rem;font-family:monospace;font-size:12px;white-space:pre-wrap;color:#111!important;border-radius:4px;overflow-x:auto}.calculated-tooltip-container .no-depends{color:#888;font-style:italic}.calculated-tooltip-container pre{overflow:hidden}.calculated-tooltip-container label.required~input:not([disabled]),.calculated-tooltip-container label.required~textarea:not([disabled]),.calculated-tooltip-container label.required~select:not([disabled]){background-color:#ff0!important}\n"] }]
25629
25632
  }], ctorParameters: () => [{ type: MultiLanguageService }, { type: AlertService }], propDecorators: { control: [{
25630
25633
  type: Input
25631
25634
  }], checkError$: [{
25632
25635
  type: Input
25633
25636
  }], rangeLimit: [{
25634
25637
  type: Input
25638
+ }], readonly: [{
25639
+ type: Input
25640
+ }], disabled: [{
25641
+ type: Input
25635
25642
  }], onWindowClick: [{
25636
25643
  type: HostListener,
25637
25644
  args: ['window:click']
25638
25645
  }] } });
25639
25646
 
25640
- class CoreFormArrayComponent {
25647
+ class CoreFormArrayComponent extends CoreFormControlBaseComponent {
25641
25648
  constructor() {
25649
+ super();
25642
25650
  this.lang = signal('vi');
25643
25651
  this.controlGroups = signal([]);
25644
25652
  this.subscriptions = [];
25645
- this.enrichment = inject(CoreFormEnrichmentService);
25653
+ //enrichment = inject(CoreFormEnrichmentService);
25646
25654
  this.cfs = inject(CoreFormService);
25647
25655
  const mls = inject(MultiLanguageService);
25648
25656
  this.subscriptions.push(mls.lang$.subscribe(x => this.lang.set(x)));
@@ -25709,13 +25717,13 @@ class CoreFormArrayComponent {
25709
25717
  this.subscriptions.forEach(x => x?.unsubscribe());
25710
25718
  }
25711
25719
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreFormArrayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25712
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreFormArrayComponent, isStandalone: true, selector: "core-form-array", inputs: { formArrayName: "formArrayName", parentFormGroup: "parentFormGroup", formArray: "formArray", config: "config", checkError$: "checkError$" }, providers: [
25720
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreFormArrayComponent, isStandalone: true, selector: "core-form-array", inputs: { formArrayName: "formArrayName", parentFormGroup: "parentFormGroup", formArray: "formArray", config: "config", checkError$: "checkError$", readonly: "readonly", disabled: "disabled" }, providers: [
25713
25721
  {
25714
25722
  provide: NG_VALUE_ACCESSOR,
25715
25723
  multi: true,
25716
25724
  useExisting: forwardRef(() => CoreFormArrayComponent),
25717
25725
  }
25718
- ], usesOnChanges: true, ngImport: i0, template: "<div class=\"core-form-array-container\">\r\n\r\n\r\n @for (group of controlGroups(); track $index; let i = $index) {\r\n <!-- \u2705 Parent owns the formGroup context -->\r\n <div class=\"form-array-item\" [formGroup]=\"group\">\r\n\r\n <div class=\"form-array-content\">\r\n @for (section of config; track $index) {\r\n @if (!section.hidden) {\r\n <div class=\"section\">\r\n <!-- @if (section.caption) {\r\n <div class=\"section-caption\">{{ section.caption }}</div>\r\n } -->\r\n\r\n @for (row of section.rows; track $index) {\r\n <div class=\"row mb15\">\r\n @for (col of row; track $index) {\r\n <div [class]=\"'col-md-' + col.flexSize\">\r\n <!-- no [form] needed -->\r\n <core-control-no-form-array [control]=\"col\" [checkError$]=\"checkError$\"></core-control-no-form-array>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"form-array-toolbar\">\r\n <button type=\"button\" class=\"btn btn-danger btn-sm feather-trash-2\" (click)=\"removeItem(i)\"\r\n [appTooltip]=\"'Remove group'\" [showAnyway]=\"true\"></button>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"form-array-footer\">\r\n <button type=\"button\" class=\"btn btn-success btn-sm feather-file-plus\" (click)=\"addItem()\"\r\n [appTooltip]=\"'Add group'\" [showAnyway]=\"true\"></button>\r\n </div>\r\n</div>", styles: [".core-form-array-container{padding:15px;border:1px solid #ced4da}.core-form-array-container .form-array-item{display:flex;align-items:flex-start}.core-form-array-container .form-array-item>*{display:inline-block!important}.core-form-array-container .form-array-item .form-array-content{width:calc(100% - 46px)}.core-form-array-container .form-array-item .form-array-toolbar{width:14px;padding-left:12px;transform:translateY(25px)}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "component", type: CoreControlNoFormArrayComponent, selector: "core-control-no-form-array", inputs: ["control", "checkError$", "rangeLimit"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25726
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"core-form-array-container\">\r\n\r\n\r\n @for (group of controlGroups(); track $index; let i = $index) {\r\n <!-- \u2705 Parent owns the formGroup context -->\r\n <div class=\"form-array-item\" [formGroup]=\"group\">\r\n\r\n <div class=\"form-array-content\">\r\n @for (section of config; track $index) {\r\n @if (!section.hidden) {\r\n <div class=\"section\">\r\n <!-- @if (section.caption) {\r\n <div class=\"section-caption\">{{ section.caption }}</div>\r\n } -->\r\n\r\n @for (row of section.rows; track $index) {\r\n <div class=\"row mb15\">\r\n @for (col of row; track $index) {\r\n <div [class]=\"'col-md-' + col.flexSize\">\r\n <!-- no [form] needed -->\r\n <core-control-no-form-array \r\n [control]=\"col\" \r\n [readonly]=\"!!disabled || !!col.readonly\"\r\n [disabled]=\"!!disabled || !!col.disabled\"\r\n [checkError$]=\"checkError$\">\r\n </core-control-no-form-array>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n @if (!disabled && !readonly) {\r\n <div class=\"form-array-toolbar\">\r\n <button type=\"button\" class=\"btn btn-danger btn-sm feather-trash-2\" (click)=\"removeItem(i)\"\r\n [appTooltip]=\"'Remove group'\" [showAnyway]=\"true\"></button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (!disabled && !readonly) {\r\n <div class=\"form-array-footer\">\r\n <button type=\"button\" class=\"btn btn-success btn-sm feather-file-plus\" (click)=\"addItem()\"\r\n [appTooltip]=\"'Add group'\" [showAnyway]=\"true\"></button>\r\n </div>\r\n }\r\n</div>", styles: [".core-form-array-container{padding:15px;border:1px solid #ced4da}.core-form-array-container .form-array-item{display:flex;align-items:flex-start}.core-form-array-container .form-array-item>*{display:inline-block!important}.core-form-array-container .form-array-item .form-array-content{width:calc(100% - 46px)}.core-form-array-container .form-array-item .form-array-toolbar{width:14px;padding-left:12px;transform:translateY(25px)}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "component", type: CoreControlNoFormArrayComponent, selector: "core-control-no-form-array", inputs: ["control", "checkError$", "rangeLimit", "readonly", "disabled"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25719
25727
  }
25720
25728
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreFormArrayComponent, decorators: [{
25721
25729
  type: Component,
@@ -25731,7 +25739,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
25731
25739
  TooltipDirective,
25732
25740
  CoreControlNoFormArrayComponent,
25733
25741
  ReactiveFormsModule
25734
- ], template: "<div class=\"core-form-array-container\">\r\n\r\n\r\n @for (group of controlGroups(); track $index; let i = $index) {\r\n <!-- \u2705 Parent owns the formGroup context -->\r\n <div class=\"form-array-item\" [formGroup]=\"group\">\r\n\r\n <div class=\"form-array-content\">\r\n @for (section of config; track $index) {\r\n @if (!section.hidden) {\r\n <div class=\"section\">\r\n <!-- @if (section.caption) {\r\n <div class=\"section-caption\">{{ section.caption }}</div>\r\n } -->\r\n\r\n @for (row of section.rows; track $index) {\r\n <div class=\"row mb15\">\r\n @for (col of row; track $index) {\r\n <div [class]=\"'col-md-' + col.flexSize\">\r\n <!-- no [form] needed -->\r\n <core-control-no-form-array [control]=\"col\" [checkError$]=\"checkError$\"></core-control-no-form-array>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"form-array-toolbar\">\r\n <button type=\"button\" class=\"btn btn-danger btn-sm feather-trash-2\" (click)=\"removeItem(i)\"\r\n [appTooltip]=\"'Remove group'\" [showAnyway]=\"true\"></button>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"form-array-footer\">\r\n <button type=\"button\" class=\"btn btn-success btn-sm feather-file-plus\" (click)=\"addItem()\"\r\n [appTooltip]=\"'Add group'\" [showAnyway]=\"true\"></button>\r\n </div>\r\n</div>", styles: [".core-form-array-container{padding:15px;border:1px solid #ced4da}.core-form-array-container .form-array-item{display:flex;align-items:flex-start}.core-form-array-container .form-array-item>*{display:inline-block!important}.core-form-array-container .form-array-item .form-array-content{width:calc(100% - 46px)}.core-form-array-container .form-array-item .form-array-toolbar{width:14px;padding-left:12px;transform:translateY(25px)}\n"] }]
25742
+ ], template: "<div class=\"core-form-array-container\">\r\n\r\n\r\n @for (group of controlGroups(); track $index; let i = $index) {\r\n <!-- \u2705 Parent owns the formGroup context -->\r\n <div class=\"form-array-item\" [formGroup]=\"group\">\r\n\r\n <div class=\"form-array-content\">\r\n @for (section of config; track $index) {\r\n @if (!section.hidden) {\r\n <div class=\"section\">\r\n <!-- @if (section.caption) {\r\n <div class=\"section-caption\">{{ section.caption }}</div>\r\n } -->\r\n\r\n @for (row of section.rows; track $index) {\r\n <div class=\"row mb15\">\r\n @for (col of row; track $index) {\r\n <div [class]=\"'col-md-' + col.flexSize\">\r\n <!-- no [form] needed -->\r\n <core-control-no-form-array \r\n [control]=\"col\" \r\n [readonly]=\"!!disabled || !!col.readonly\"\r\n [disabled]=\"!!disabled || !!col.disabled\"\r\n [checkError$]=\"checkError$\">\r\n </core-control-no-form-array>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n @if (!disabled && !readonly) {\r\n <div class=\"form-array-toolbar\">\r\n <button type=\"button\" class=\"btn btn-danger btn-sm feather-trash-2\" (click)=\"removeItem(i)\"\r\n [appTooltip]=\"'Remove group'\" [showAnyway]=\"true\"></button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (!disabled && !readonly) {\r\n <div class=\"form-array-footer\">\r\n <button type=\"button\" class=\"btn btn-success btn-sm feather-file-plus\" (click)=\"addItem()\"\r\n [appTooltip]=\"'Add group'\" [showAnyway]=\"true\"></button>\r\n </div>\r\n }\r\n</div>", styles: [".core-form-array-container{padding:15px;border:1px solid #ced4da}.core-form-array-container .form-array-item{display:flex;align-items:flex-start}.core-form-array-container .form-array-item>*{display:inline-block!important}.core-form-array-container .form-array-item .form-array-content{width:calc(100% - 46px)}.core-form-array-container .form-array-item .form-array-toolbar{width:14px;padding-left:12px;transform:translateY(25px)}\n"] }]
25735
25743
  }], ctorParameters: () => [], propDecorators: { formArrayName: [{
25736
25744
  type: Input,
25737
25745
  args: [{ required: true }]
@@ -25747,6 +25755,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
25747
25755
  }], checkError$: [{
25748
25756
  type: Input,
25749
25757
  args: [{ required: true }]
25758
+ }], readonly: [{
25759
+ type: Input
25760
+ }], disabled: [{
25761
+ type: Input
25750
25762
  }] } });
25751
25763
 
25752
25764
  class CoreDocgenToolbarComponent {
@@ -26765,7 +26777,7 @@ class CoreControlComponent extends BaseComponent {
26765
26777
  }
26766
26778
  }
26767
26779
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreControlComponent, deps: [{ token: MultiLanguageService }, { token: AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
26768
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreControlComponent, isStandalone: true, selector: "core-control", inputs: { control: "control", form: "form", checkError$: "checkError$", rangeLimit: "rangeLimit" }, host: { listeners: { "window:click": "onWindowClick()" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"core-control-container\">\r\n\r\n <div [formGroup]=\"form\" [class.hidden]=\"!!control.hidden\">\r\n\r\n @if (!control.headless!) {\r\n <label [class]=\"'control-label' + (required ? ' required' : '')\" [attr.for]=\"control.field\"\r\n [class.d-none]=\"!!control.hidden\"\r\n [class.avatar-label]=\"control.uploadFileType==='IMAGE_AVATAR'\" [appTooltip]=\"control.tooltip! | translate: lang\" \r\n [htmlTooltip]=\"control.htmlTooltip!\"\r\n [backgroundColor]=\"'white'\"\r\n [ngStyle]=\"{\r\n display: 'inline-block'\r\n }\">\r\n {{(control.controlType!=='CHECKBOX' && control.controlType!=='BUTTON') ? (control.label | translate: lang) : ''}}\r\n </label>\r\n\r\n @if (!!control.hint! && control.controlType !== 'CHECKBOX') {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"control.hint!\" [showAnyway]=\"true\" [ngStyle]=\"{\r\n display: 'inline-block',\r\n marginLeft: '2px'\r\n }\" [class.d-none]=\"!!control.hidden\"></i>\r\n }\r\n }\r\n\r\n <!-- START: FORM-CONTROL SESSION-->\r\n\r\n <ng-container>\r\n @switch (control.controlType) {\r\n @case (\"FORM_ARRAY\") {\r\n <core-form-array\r\n [formArrayName]=\"control.field!\"\r\n [parentFormGroup]=\"form\"\r\n [formArray]=\"formArray\"\r\n [config]=\"control.formArraySections! ?? []\"\r\n [checkError$]=\"checkError$\">\r\n </core-form-array>\r\n }\r\n @case (\"CALCULATED\") {\r\n <div class=\"calculated-view\" [htmlTooltip]=\"calculatedControlInfo\" [tooltipContext]=\"{control: control}\" [backgroundColor]=\"'#fff'\">\r\n <i class=\"feather-box\"></i><span>{{ control.field! }}</span>\r\n </div>\r\n }\r\n @case (\"TEXTBOX\") {\r\n\r\n <input *ngIf=\"control.type === 'date'\"\r\n [formControlName]=\"control.field\"\r\n type=\"date\"\r\n useValueAsDate\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'time'\"\r\n [formControlName]=\"control.field\"\r\n type=\"time\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'number'\"\r\n [formControlName]=\"control.field\"\r\n type=\"number\"\r\n step=\"{{ control.step || 1 }}\"\r\n class=\"form-control\"\r\n style=\"text-align: right;\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"['string', 'text', 'email', 'url', 'password'].includes(control.type || 'text')\"\r\n [formControlName]=\"control.field\"\r\n [type]=\"control.type\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n }\r\n @case (\"CURRENCY\") {\r\n <core-currency-input [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-currency-input>\r\n }\r\n @case (\"TEXTAREA\") {\r\n <textarea [rows]=\"control.textareaRows?.toString() || '3'\" [ngStyle]=\"{ height: 'unset' }\"\r\n [class.required-highlight]=\"!!required\"\r\n [formControlName]=\"control.field\" class=\"form-control\" [readonly]=\"control.readonly\" [placeholder]=\"control.placeholder! || ''\"></textarea>\r\n }\r\n @case (\"CHECKBOX\") {\r\n <core-checkbox [formControlName]=\"control.field\" [text]=\"control.label\"\r\n [inputValue]=\"control.value\" [tooltip]=\"control.hint!\"></core-checkbox>\r\n }\r\n @case (\"IOS_SWITCHER\") {\r\n <div class=\"gap-for-ios-switcher\"></div>\r\n <core-ios-switcher [formControlName]=\"control.field\" />\r\n }\r\n @case (\"MCC\") {\r\n <core-mcc [required]=\"required\" [formControlName]=\"control.field\" [columns]=\"control.columns!\" [shownFrom]=\"control.shownFrom!\" \r\n [apiDefinition]=\"control.apiDefinition!\" [getByIdApi]=\"control.getByIdApi!\" [selectedRow$]=\"control.selectedRow$!\"\r\n [outerParam$]=\"control.outerParam$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-mcc>\r\n }\r\n @case (\"DATEPICKER\") {\r\n <core-date-picker [required]=\"required\" [formControlName]=\"control.field\" [showPlaceholder]=\"control.showPlaceholder!\" [rangeLimit]=\"control.rangeLimit!\" [popupAlign]=\"control.popupAlign!\" [placeholder]=\"control.placeholder! || ''\"></core-date-picker>\r\n }\r\n\r\n @case (\"DROPDOWN\") {\r\n @if (!!control.dropdownOptions$ || !!control.optionApiDriven) {\r\n <core-dropdown \r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" \r\n [options$]=\"control.dropdownOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" \r\n [shownFrom]=\"control.shownFrom!\" \r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [optionApiDriven]=\"control.optionApiDriven!\"\r\n [optionApi]=\"control.optionApi!\"\r\n [optionHttpVerb]=\"control.optionHttpVerb!\"\r\n [optionHttpPayload]=\"control.optionHttpPayload!\"\r\n [optionValueFrom]=\"control.optionValueFrom!\"\r\n [optionTextFrom]=\"control.optionTextFrom!\"\r\n ></core-dropdown>\r\n } @else {\r\n No dropdownOptions$ | optionApiDriven detected\r\n }\r\n }\r\n @case (\"LIST\") {\r\n <core-list [required]=\"required\" [formControlName]=\"control.field\" [options]=\"control.listOptions!\" [placeholder]=\"control.placeholder! || ''\"></core-list>\r\n }\r\n @case (\"CHECKLIST\") {\r\n @if (!!control.checklistOptions$) {\r\n <core-checklist [required]=\"required\" [formControlName]=\"control.field\" [options$]=\"control.checklistOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" [shownFrom]=\"control.shownFrom!\" [placeholder]=\"control.placeholder! || ''\"></core-checklist>\r\n }\r\n }\r\n @case (\"FILEUPLOADER\") {\r\n @if (!!control.uploadFileType) {\r\n <core-file-uploader [required]=\"required\" [formControlName]=\"control.field\" [uploadFileType]=\"control.uploadFileType\"\r\n [fileDataControlName]=\"control.fileDataControlName!\"\r\n [fileNameControlName]=\"control.fileNameControlName!\"\r\n [fileTypeControlName]=\"control.fileTypeControlName!\"\r\n [verticalMode]=\"control.verticalMode!\"></core-file-uploader>\r\n } @else {\r\n <div class=\"dev-declaration\">Please add uploadFileType</div>\r\n }\r\n }\r\n @case (\"ATTACHMENT\") {\r\n <core-attachment ngDefaultControl [required]=\"required\" [formControlName]=\"control.field\" [assignTo]=\"control.assignTo!\"\r\n [valueToShow]=\"control.valueToShow!\" [placeholder]=\"control.placeholder! || ''\"></core-attachment>\r\n }\r\n @case (\"GRIDBUFFER\") {\r\n @if (!!control.gridBufferFormSections && !!control.gridBufferTableColumns) {\r\n <core-grid-buffer [required]=\"required\" [formControlName]=\"control.field\" [formSections]=\"control.gridBufferFormSections\"\r\n [gridColumns]=\"control.gridBufferTableColumns\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [tableHeight]=\"control.tableHeight ?? 300\"\r\n [liteMode]=\"control.liteMode ?? false\"\r\n (onBufferFormCreated)=\"!!control.onBufferFormCreated ? control.onBufferFormCreated($event) : null\"></core-grid-buffer>\r\n }\r\n }\r\n @case (\"ORGTREECHECK\") {\r\n <core-org-tree [required]=\"required\" [formControlName]=\"control.field\"\r\n [accessorMode]=\"coreOrgTreeDefaultAccessorMode\" [height]=\"control.height!\"></core-org-tree>\r\n }\r\n @case (\"RADIOGROUP\") {\r\n <core-radio-group [required]=\"required\" [formControlName]=\"control.field\"\r\n [options$]=\"control.radioGroupOptions$!\"\r\n [vertical]=\"control.verticalMode!\"\r\n ></core-radio-group>\r\n }\r\n @case (\"MONTHSELECTOR\") {\r\n <core-month-selector [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-month-selector>\r\n }\r\n @case (\"SHIFTCELL\") {\r\n <core-shift-cell [formControlName]=\"control.field\"></core-shift-cell>\r\n }\r\n @case (\"SHIFTCOLLECTION\") {\r\n <core-shift-collection [relativeMode]=\"true\" [height]=\"control.height || 800\"></core-shift-collection>\r\n }\r\n @case(\"TOPICPICKER\") {\r\n <core-topic-picker [required]=\"required\" [formControlName]=\"control.field\" [popupHeight]=\"control.popupHeight!\" [getByIdApi]=\"control.getByIdApi!\"></core-topic-picker>\r\n }\r\n @case(\"STICKER_COLLECTION\") {\r\n <core-sticker-collection\r\n [formControlName]=\"control.field\"\r\n [required]=\"required\"\r\n [$items]=\"control.stickerCollectionItems!\"\r\n [$shownFrom]=\"control.stickerCollectionShownFrom!\"\r\n [$tooltipFrom]=\"control.stickerCollectionTooltipFrom!\"\r\n [$initialChecked]=\"control.stickerCollectionInitialChecked!\"\r\n >\r\n </core-sticker-collection>\r\n }\r\n @case (\"SEEKER\") {\r\n @switch(control.seekerSourceType) {\r\n @case(\"JOB_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"EMPLOYEE_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"CONTRACT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" [boundFrom]=\"control.boundFrom!\"\r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\" \r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [shownFrom]=\"control.shownFrom!\"\r\n [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WORKING_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WAGE_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [formControlName]=\"control.field\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [seekerVerifyIgnore]=\"control.seekerVerifyIgnore!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_CONCURRENT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"FORM_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"ORGANIZATION_UNIT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" [seekerSourceType]=\"control.seekerSourceType!\"\r\n [boundFrom]=\"control.boundFrom!\" [alsoBindTo]=\"control.alsoBindTo!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-form-control-seeker>\r\n }\r\n }\r\n }\r\n @case (\"LIQUID_WYSIWYG\") {\r\n <core-liquid-wysiwyg\r\n [formControlName]=\"control.field\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [$liquidOptions]=\"control.liquidOptions!\"\r\n [$textareaRows]=\"control.textareaRows!\"\r\n [$showLiquidSourceOnly]=\"control.showLiquidSourceOnly!\"\r\n [$isForWorkflowEmail]=\"control.isForWorkflowEmail!\"\r\n />\r\n }\r\n }\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"control.controlType==='BUTTON'\">\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"oHandleClick($event)\">{{control.label| translate: lang}}</button>\r\n </ng-container>\r\n <!-- END: FORM-CONTROL SESSION-->\r\n\r\n <!-- START: ERROR SESSION-->\r\n <div *ngIf=\"!!errors!.length\">\r\n <div class=\"form-control-error\" *ngFor=\"let error of errors\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n </div>\r\n <div *ngIf=\"!!!errors!.length && !!checkError$.value\">\r\n <div>\r\n {{ '&nbsp;' }}\r\n </div>\r\n </div>\r\n <!-- END: ERROR SESSION-->\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<ng-template #calculatedControlInfo let-control=\"control\">\r\n <div class=\"calculated-tooltip-container\">\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Name:</span>\r\n <span class=\"value\">{{ control?.field || 'N/A' }}</span>\r\n </div> \r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Evaluation Mode:</span>\r\n <span class=\"value\">{{ control?.evaluationMode || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Return Type:</span>\r\n <span class=\"value\">{{ control?.returnType || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Depends On:</span>\r\n <span class=\"value\" *ngIf=\"control?.dependsOn?.length > 0; else noDepends\">\r\n <code *ngFor=\"let dep of control?.dependsOn; let last = last\">{{ dep }}<span *ngIf=\"!last\">, </span></code>\r\n </span>\r\n <ng-template #noDepends><em class=\"no-depends\">None</em></ng-template>\r\n </div>\r\n <div *ngIf=\"!!control?.isUnsafe\" class=\"warning\">\r\n \u26A0\uFE0F This script is marked as <strong>unsafe</strong> and will not be executed.\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Script:</span>\r\n <pre class=\"code-block\">{{ control?.script || 'No script provided.' }}</pre>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".core-control-container{font-size:var(--typo-basic-font-size)!important}.core-control-container .control-label{color:#848484}.core-control-container>div.hidden{display:none}.core-control-container label{color:#464646}.core-control-container label.required:after{content:\"*\";color:#ff040b}.core-control-container label.avatar-label{width:var(--size-file-uploader);display:flex;align-items:center;justify-content:center}.core-control-container input[type=number]{padding-right:12px;position:relative}.core-control-container input[type=number]::-webkit-inner-spin-button{position:absolute;right:.3em;margin-left:.5em}.core-control-container input[type=number]{-moz-appearance:textfield}.core-control-container i.feather-help-circle{color:#848484}.core-control-container .gap-for-ios-switcher{height:5px}.core-control-container .calculated-view{-webkit-user-select:none;user-select:none;cursor:pointer;height:35px;width:160px;background-color:#d8f3dc;color:#1b4332;border:1px solid #95d5b2;border-radius:50px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:flex-start;font-family:Segoe UI,sans-serif;letter-spacing:.5px;padding:8px}.core-control-container .calculated-view i{font-size:18px;width:18px;height:18px;margin-right:8px}.core-control-container .calculated-view span{width:calc(100% - 26px);overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.calculated-tooltip-container{background-color:#fff;border:1px solid #ddd;padding:1rem;border-radius:6px;font-size:14px;color:#333;box-shadow:0 4px 10px #0000000d;max-width:360px}.calculated-tooltip-container .calculated-field-row{margin-bottom:.75rem}.calculated-tooltip-container .label{font-weight:500;color:#555!important;display:inline-block;min-width:140px}.calculated-tooltip-container .value{color:#222!important}.calculated-tooltip-container .warning{color:#b91c1c;background:#fef2f2;border:1px solid #fca5a5;padding:.5rem;border-radius:4px;margin-bottom:1rem;font-size:13px}.calculated-tooltip-container .code-block{background:#f8f9fa;border:1px solid #ddd;padding:.75rem;font-family:monospace;font-size:12px;white-space:pre-wrap;color:#111!important;border-radius:4px;overflow-x:auto}.calculated-tooltip-container .no-depends{color:#888;font-style:italic}.calculated-tooltip-container pre{overflow:hidden}.calculated-tooltip-container label.required~input:not([disabled]),.calculated-tooltip-container label.required~textarea:not([disabled]),.calculated-tooltip-container label.required~select:not([disabled]){background-color:#ff0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: TableCellPipe, name: "tableCell" }, { kind: "component", type: CoreFormArrayComponent, selector: "core-form-array", inputs: ["formArrayName", "parentFormGroup", "formArray", "config", "checkError$"] }, { kind: "component", type: CoreDropdownComponent, selector: "core-dropdown", inputs: ["getByIdObject$", "paramMode", "shownFrom", "options$", "height", "placeholder", "loading", "warningDisable", "clearDisable", "fitHeightWithItemCount", "itemHeight", "optionApiDriven", "optionApi", "optionHttpVerb", "optionHttpPayload", "optionValueFrom", "optionTextFrom"] }, { kind: "component", type: CoreListComponent, selector: "core-list", inputs: ["title", "height", "options", "placeholder"] }, { kind: "component", type: CoreChecklistComponent, selector: "core-checklist", inputs: ["paramMode", "getByIdObject$", "shownFrom", "options$", "height", "placeholder", "loading", "readonly", "disabled"] }, { kind: "component", type: CoreFormControlSeekerComponent, selector: "core-form-control-seeker", inputs: ["title", "showPageHeader", "preDefinedOuterParam$", "preDefinedOuterFilter$", "click$", "getByIdObject$", "getByIdApi", "paramMode", "multiMode", "objectList$", "useTheseColumns", "hideOrgTree", "excludedColumns", "excludeExistingList", "placeholder", "sourceSpaceHeight", "indirectBinding", "bindGridIdTo", "multiModeExtendedColumns", "multiModeExtendedSections", "editBufferData$", "multiModeTableHeight", "multiModeRowHeight", "seekerSourceType", "boundFrom", "shownFrom", "alsoBindTo", "seekerVerifyIgnore", "disabledDoubleClick"], outputs: ["onDoubleClick", "selectedDataChange", "fullValueRowChange"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "component", type: CoreFileUploaderComponent, selector: "core-file-uploader", inputs: ["uploadFileType", "fileDataControlName", "fileNameControlName", "fileTypeControlName", "avatarSize", "defaultAvatar", "hidePreview", "verticalMode"] }, { kind: "component", type: CoreAttachmentComponent, selector: "core-attachment", inputs: ["assignTo", "readonly", "valueToShow", "placeholder", "upFlag$", "downFlag$"] }, { kind: "component", type: CoreGridBufferComponent, selector: "core-grid-buffer", inputs: ["padding", "placeholder", "tableHeight", "liteMode", "formSections", "gridColumns"], outputs: ["onBufferFormCreated"] }, { kind: "component", type: CoreDatePickerComponent, selector: "core-date-picker", inputs: ["enableTimeZoneConverter", "showPlaceholder", "popupWidth", "popupXPadding", "popupAlign", "rangeLimit", "placeholder", "readonly", "disabled"] }, { kind: "component", type: CoreOrgTreeComponent, selector: "core-org-tree", inputs: ["lineColor", "fullWidthMode", "accessorMode", "searchMode", "fullRendering", "height", "disabledLoopExpand", "showCheckInheritance", "excludedIds$", "stateIsolated$"], outputs: ["itemDoubleClick", "itemClick"] }, { kind: "component", type: CoreRadioGroupComponent, selector: "core-radio-group", inputs: ["options$", "vertical", "columnCount", "gapY", "defaultValue"] }, { kind: "component", type: CoreMccComponent, selector: "core-mcc", inputs: ["height", "columns", "shownFrom", "apiDefinition", "getByIdApi", "outerParam$", "selectedRow$", "outerFilterOperators", "outerInOperators", "placeholder"] }, { kind: "component", type: CoreMonthSelectorComponent, selector: "core-month-selector", inputs: ["align", "placeholder"], outputs: ["onYearClick"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "component", type: CoreCurrencyInputComponent, selector: "core-currency-input", inputs: ["currencySign", "placeholder"], outputs: ["onLeftFocus"] }, { kind: "component", type: CoreShiftCellComponent, selector: "core-shift-cell", inputs: ["$readOnly", "$hideStarterPlusSign", "$hideStickersWhileDragover", "$backgroundColor"] }, { kind: "component", type: CoreShiftCollectionComponent, selector: "core-shift-collection", inputs: ["height", "relativeMode"] }, { kind: "component", type: CoreTopicPickerComponent, selector: "core-topic-picker", inputs: ["popupHeight", "getByIdApi"] }, { kind: "component", type: CoreIosSwitcherComponent, selector: "core-ios-switcher", inputs: ["bgColor", "showOnOffText", "width", "height", "readonly"] }, { kind: "component", type: CoreLiquidWysiwygComponent, selector: "core-liquid-wysiwyg", inputs: ["$liquidOptions", "$textareaRows", "$height", "$readonly", "$showLiquidSourceOnly", "$isForWorkflowEmail", "getByIdObject$", "placeholder"] }, { kind: "component", type: CoreStickerCollectionComponent, selector: "core-sticker-collection", inputs: ["$items", "$shownFrom", "$tooltipFrom", "$initialChecked", "$showMore", "$showMoreTooltip", "$hideShowMoreIfNotSelected", "$enableFilter"], outputs: ["$checkedChange", "$onShowMore"] }, { kind: "directive", type: HtmlTooltipDirective, selector: "[htmlTooltip]", inputs: ["htmlTooltip", "tooltipContext", "maxWidthUnset", "backgroundColor", "hold$"] }] }); }
26780
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreControlComponent, isStandalone: true, selector: "core-control", inputs: { control: "control", form: "form", checkError$: "checkError$", rangeLimit: "rangeLimit" }, host: { listeners: { "window:click": "onWindowClick()" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"core-control-container\">\r\n\r\n <div [formGroup]=\"form\" [class.hidden]=\"!!control.hidden\">\r\n\r\n @if (!control.headless!) {\r\n <label [class]=\"'control-label' + (required ? ' required' : '')\" [attr.for]=\"control.field\"\r\n [class.d-none]=\"!!control.hidden\"\r\n [class.avatar-label]=\"control.uploadFileType==='IMAGE_AVATAR'\" [appTooltip]=\"control.tooltip! | translate: lang\" \r\n [htmlTooltip]=\"control.htmlTooltip!\"\r\n [backgroundColor]=\"'white'\"\r\n [ngStyle]=\"{\r\n display: 'inline-block'\r\n }\">\r\n {{(control.controlType!=='CHECKBOX' && control.controlType!=='BUTTON') ? (control.label | translate: lang) : ''}}\r\n </label>\r\n\r\n @if (!!control.hint! && control.controlType !== 'CHECKBOX') {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"control.hint!\" [showAnyway]=\"true\" [ngStyle]=\"{\r\n display: 'inline-block',\r\n marginLeft: '2px'\r\n }\" [class.d-none]=\"!!control.hidden\"></i>\r\n }\r\n }\r\n\r\n <!-- START: FORM-CONTROL SESSION-->\r\n\r\n <ng-container>\r\n @switch (control.controlType) {\r\n @case (\"FORM_ARRAY\") {\r\n <core-form-array\r\n [formArrayName]=\"control.field!\"\r\n [parentFormGroup]=\"form\"\r\n [formArray]=\"formArray\"\r\n [config]=\"control.formArraySections! ?? []\"\r\n [disabled]=\"control.disabled!\"\r\n [readonly]=\"control.readonly!\"\r\n [checkError$]=\"checkError$\">\r\n </core-form-array>\r\n }\r\n @case (\"CALCULATED\") {\r\n <div class=\"calculated-view\" [htmlTooltip]=\"calculatedControlInfo\" [tooltipContext]=\"{control: control}\" [backgroundColor]=\"'#fff'\">\r\n <i class=\"feather-box\"></i><span>{{ control.field! }}</span>\r\n </div>\r\n }\r\n @case (\"TEXTBOX\") {\r\n\r\n <input *ngIf=\"control.type === 'date'\"\r\n [formControlName]=\"control.field\"\r\n type=\"date\"\r\n useValueAsDate\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'time'\"\r\n [formControlName]=\"control.field\"\r\n type=\"time\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'number'\"\r\n [formControlName]=\"control.field\"\r\n type=\"number\"\r\n step=\"{{ control.step || 1 }}\"\r\n class=\"form-control\"\r\n style=\"text-align: right;\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"['string', 'text', 'email', 'url', 'password'].includes(control.type || 'text')\"\r\n [formControlName]=\"control.field\"\r\n [type]=\"control.type\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n }\r\n @case (\"CURRENCY\") {\r\n <core-currency-input [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-currency-input>\r\n }\r\n @case (\"TEXTAREA\") {\r\n <textarea [rows]=\"control.textareaRows?.toString() || '3'\" [ngStyle]=\"{ height: 'unset' }\"\r\n [class.required-highlight]=\"!!required\"\r\n [formControlName]=\"control.field\" class=\"form-control\" [readonly]=\"control.readonly\" [placeholder]=\"control.placeholder! || ''\"></textarea>\r\n }\r\n @case (\"CHECKBOX\") {\r\n <core-checkbox [formControlName]=\"control.field\" [text]=\"control.label\"\r\n [inputValue]=\"control.value\" [tooltip]=\"control.hint!\"></core-checkbox>\r\n }\r\n @case (\"IOS_SWITCHER\") {\r\n <div class=\"gap-for-ios-switcher\"></div>\r\n <core-ios-switcher [formControlName]=\"control.field\" />\r\n }\r\n @case (\"MCC\") {\r\n <core-mcc [required]=\"required\" [formControlName]=\"control.field\" [columns]=\"control.columns!\" [shownFrom]=\"control.shownFrom!\" \r\n [apiDefinition]=\"control.apiDefinition!\" [getByIdApi]=\"control.getByIdApi!\" [selectedRow$]=\"control.selectedRow$!\"\r\n [outerParam$]=\"control.outerParam$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-mcc>\r\n }\r\n @case (\"DATEPICKER\") {\r\n <core-date-picker [required]=\"required\" [formControlName]=\"control.field\" [showPlaceholder]=\"control.showPlaceholder!\" [rangeLimit]=\"control.rangeLimit!\" [popupAlign]=\"control.popupAlign!\" [placeholder]=\"control.placeholder! || ''\"></core-date-picker>\r\n }\r\n\r\n @case (\"DROPDOWN\") {\r\n @if (!!control.dropdownOptions$ || !!control.optionApiDriven) {\r\n <core-dropdown \r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" \r\n [options$]=\"control.dropdownOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" \r\n [shownFrom]=\"control.shownFrom!\" \r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [optionApiDriven]=\"control.optionApiDriven!\"\r\n [optionApi]=\"control.optionApi!\"\r\n [optionHttpVerb]=\"control.optionHttpVerb!\"\r\n [optionHttpPayload]=\"control.optionHttpPayload!\"\r\n [optionValueFrom]=\"control.optionValueFrom!\"\r\n [optionTextFrom]=\"control.optionTextFrom!\"\r\n ></core-dropdown>\r\n } @else {\r\n No dropdownOptions$ | optionApiDriven detected\r\n }\r\n }\r\n @case (\"LIST\") {\r\n <core-list [required]=\"required\" [formControlName]=\"control.field\" [options]=\"control.listOptions!\" [placeholder]=\"control.placeholder! || ''\"></core-list>\r\n }\r\n @case (\"CHECKLIST\") {\r\n @if (!!control.checklistOptions$) {\r\n <core-checklist [required]=\"required\" [formControlName]=\"control.field\" [options$]=\"control.checklistOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" [shownFrom]=\"control.shownFrom!\" [placeholder]=\"control.placeholder! || ''\"></core-checklist>\r\n }\r\n }\r\n @case (\"FILEUPLOADER\") {\r\n @if (!!control.uploadFileType) {\r\n <core-file-uploader [required]=\"required\" [formControlName]=\"control.field\" [uploadFileType]=\"control.uploadFileType\"\r\n [fileDataControlName]=\"control.fileDataControlName!\"\r\n [fileNameControlName]=\"control.fileNameControlName!\"\r\n [fileTypeControlName]=\"control.fileTypeControlName!\"\r\n [verticalMode]=\"control.verticalMode!\"></core-file-uploader>\r\n } @else {\r\n <div class=\"dev-declaration\">Please add uploadFileType</div>\r\n }\r\n }\r\n @case (\"ATTACHMENT\") {\r\n <core-attachment ngDefaultControl [required]=\"required\" [formControlName]=\"control.field\" [assignTo]=\"control.assignTo!\"\r\n [valueToShow]=\"control.valueToShow!\" [placeholder]=\"control.placeholder! || ''\"></core-attachment>\r\n }\r\n @case (\"GRIDBUFFER\") {\r\n @if (!!control.gridBufferFormSections && !!control.gridBufferTableColumns) {\r\n <core-grid-buffer [required]=\"required\" [formControlName]=\"control.field\" [formSections]=\"control.gridBufferFormSections\"\r\n [gridColumns]=\"control.gridBufferTableColumns\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [tableHeight]=\"control.tableHeight ?? 300\"\r\n [liteMode]=\"control.liteMode ?? false\"\r\n (onBufferFormCreated)=\"!!control.onBufferFormCreated ? control.onBufferFormCreated($event) : null\"></core-grid-buffer>\r\n }\r\n }\r\n @case (\"ORGTREECHECK\") {\r\n <core-org-tree [required]=\"required\" [formControlName]=\"control.field\"\r\n [accessorMode]=\"coreOrgTreeDefaultAccessorMode\" [height]=\"control.height!\"></core-org-tree>\r\n }\r\n @case (\"RADIOGROUP\") {\r\n <core-radio-group [required]=\"required\" [formControlName]=\"control.field\"\r\n [options$]=\"control.radioGroupOptions$!\"\r\n [vertical]=\"control.verticalMode!\"\r\n ></core-radio-group>\r\n }\r\n @case (\"MONTHSELECTOR\") {\r\n <core-month-selector [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-month-selector>\r\n }\r\n @case (\"SHIFTCELL\") {\r\n <core-shift-cell [formControlName]=\"control.field\"></core-shift-cell>\r\n }\r\n @case (\"SHIFTCOLLECTION\") {\r\n <core-shift-collection [relativeMode]=\"true\" [height]=\"control.height || 800\"></core-shift-collection>\r\n }\r\n @case(\"TOPICPICKER\") {\r\n <core-topic-picker [required]=\"required\" [formControlName]=\"control.field\" [popupHeight]=\"control.popupHeight!\" [getByIdApi]=\"control.getByIdApi!\"></core-topic-picker>\r\n }\r\n @case(\"STICKER_COLLECTION\") {\r\n <core-sticker-collection\r\n [formControlName]=\"control.field\"\r\n [required]=\"required\"\r\n [$items]=\"control.stickerCollectionItems!\"\r\n [$shownFrom]=\"control.stickerCollectionShownFrom!\"\r\n [$tooltipFrom]=\"control.stickerCollectionTooltipFrom!\"\r\n [$initialChecked]=\"control.stickerCollectionInitialChecked!\"\r\n >\r\n </core-sticker-collection>\r\n }\r\n @case (\"SEEKER\") {\r\n @switch(control.seekerSourceType) {\r\n @case(\"JOB_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"EMPLOYEE_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"CONTRACT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" [boundFrom]=\"control.boundFrom!\"\r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\" \r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [shownFrom]=\"control.shownFrom!\"\r\n [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WORKING_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WAGE_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [formControlName]=\"control.field\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [seekerVerifyIgnore]=\"control.seekerVerifyIgnore!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_CONCURRENT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"FORM_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"ORGANIZATION_UNIT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" [seekerSourceType]=\"control.seekerSourceType!\"\r\n [boundFrom]=\"control.boundFrom!\" [alsoBindTo]=\"control.alsoBindTo!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-form-control-seeker>\r\n }\r\n }\r\n }\r\n @case (\"LIQUID_WYSIWYG\") {\r\n <core-liquid-wysiwyg\r\n [formControlName]=\"control.field\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [$liquidOptions]=\"control.liquidOptions!\"\r\n [$textareaRows]=\"control.textareaRows!\"\r\n [$showLiquidSourceOnly]=\"control.showLiquidSourceOnly!\"\r\n [$isForWorkflowEmail]=\"control.isForWorkflowEmail!\"\r\n />\r\n }\r\n }\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"control.controlType==='BUTTON'\">\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"oHandleClick($event)\">{{control.label| translate: lang}}</button>\r\n </ng-container>\r\n <!-- END: FORM-CONTROL SESSION-->\r\n\r\n <!-- START: ERROR SESSION-->\r\n <div *ngIf=\"!!errors!.length\">\r\n <div class=\"form-control-error\" *ngFor=\"let error of errors\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n </div>\r\n <div *ngIf=\"!!!errors!.length && !!checkError$.value\">\r\n <div>\r\n {{ '&nbsp;' }}\r\n </div>\r\n </div>\r\n <!-- END: ERROR SESSION-->\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<ng-template #calculatedControlInfo let-control=\"control\">\r\n <div class=\"calculated-tooltip-container\">\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Name:</span>\r\n <span class=\"value\">{{ control?.field || 'N/A' }}</span>\r\n </div> \r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Evaluation Mode:</span>\r\n <span class=\"value\">{{ control?.evaluationMode || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Return Type:</span>\r\n <span class=\"value\">{{ control?.returnType || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Depends On:</span>\r\n <span class=\"value\" *ngIf=\"control?.dependsOn?.length > 0; else noDepends\">\r\n <code *ngFor=\"let dep of control?.dependsOn; let last = last\">{{ dep }}<span *ngIf=\"!last\">, </span></code>\r\n </span>\r\n <ng-template #noDepends><em class=\"no-depends\">None</em></ng-template>\r\n </div>\r\n <div *ngIf=\"!!control?.isUnsafe\" class=\"warning\">\r\n \u26A0\uFE0F This script is marked as <strong>unsafe</strong> and will not be executed.\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Script:</span>\r\n <pre class=\"code-block\">{{ control?.script || 'No script provided.' }}</pre>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".core-control-container{font-size:var(--typo-basic-font-size)!important}.core-control-container .control-label{color:#848484}.core-control-container>div.hidden{display:none}.core-control-container label{color:#464646}.core-control-container label.required:after{content:\"*\";color:#ff040b}.core-control-container label.avatar-label{width:var(--size-file-uploader);display:flex;align-items:center;justify-content:center}.core-control-container input[type=number]{padding-right:12px;position:relative}.core-control-container input[type=number]::-webkit-inner-spin-button{position:absolute;right:.3em;margin-left:.5em}.core-control-container input[type=number]{-moz-appearance:textfield}.core-control-container i.feather-help-circle{color:#848484}.core-control-container .gap-for-ios-switcher{height:5px}.core-control-container .calculated-view{-webkit-user-select:none;user-select:none;cursor:pointer;height:35px;width:160px;background-color:#d8f3dc;color:#1b4332;border:1px solid #95d5b2;border-radius:50px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:flex-start;font-family:Segoe UI,sans-serif;letter-spacing:.5px;padding:8px}.core-control-container .calculated-view i{font-size:18px;width:18px;height:18px;margin-right:8px}.core-control-container .calculated-view span{width:calc(100% - 26px);overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.calculated-tooltip-container{background-color:#fff;border:1px solid #ddd;padding:1rem;border-radius:6px;font-size:14px;color:#333;box-shadow:0 4px 10px #0000000d;max-width:360px}.calculated-tooltip-container .calculated-field-row{margin-bottom:.75rem}.calculated-tooltip-container .label{font-weight:500;color:#555!important;display:inline-block;min-width:140px}.calculated-tooltip-container .value{color:#222!important}.calculated-tooltip-container .warning{color:#b91c1c;background:#fef2f2;border:1px solid #fca5a5;padding:.5rem;border-radius:4px;margin-bottom:1rem;font-size:13px}.calculated-tooltip-container .code-block{background:#f8f9fa;border:1px solid #ddd;padding:.75rem;font-family:monospace;font-size:12px;white-space:pre-wrap;color:#111!important;border-radius:4px;overflow-x:auto}.calculated-tooltip-container .no-depends{color:#888;font-style:italic}.calculated-tooltip-container pre{overflow:hidden}.calculated-tooltip-container label.required~input:not([disabled]),.calculated-tooltip-container label.required~textarea:not([disabled]),.calculated-tooltip-container label.required~select:not([disabled]){background-color:#ff0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: TableCellPipe, name: "tableCell" }, { kind: "component", type: CoreFormArrayComponent, selector: "core-form-array", inputs: ["formArrayName", "parentFormGroup", "formArray", "config", "checkError$", "readonly", "disabled"] }, { kind: "component", type: CoreDropdownComponent, selector: "core-dropdown", inputs: ["getByIdObject$", "paramMode", "shownFrom", "options$", "height", "placeholder", "loading", "warningDisable", "clearDisable", "fitHeightWithItemCount", "itemHeight", "optionApiDriven", "optionApi", "optionHttpVerb", "optionHttpPayload", "optionValueFrom", "optionTextFrom"] }, { kind: "component", type: CoreListComponent, selector: "core-list", inputs: ["title", "height", "options", "placeholder"] }, { kind: "component", type: CoreChecklistComponent, selector: "core-checklist", inputs: ["paramMode", "getByIdObject$", "shownFrom", "options$", "height", "placeholder", "loading", "readonly", "disabled"] }, { kind: "component", type: CoreFormControlSeekerComponent, selector: "core-form-control-seeker", inputs: ["title", "showPageHeader", "preDefinedOuterParam$", "preDefinedOuterFilter$", "click$", "getByIdObject$", "getByIdApi", "paramMode", "multiMode", "objectList$", "useTheseColumns", "hideOrgTree", "excludedColumns", "excludeExistingList", "placeholder", "sourceSpaceHeight", "indirectBinding", "bindGridIdTo", "multiModeExtendedColumns", "multiModeExtendedSections", "editBufferData$", "multiModeTableHeight", "multiModeRowHeight", "seekerSourceType", "boundFrom", "shownFrom", "alsoBindTo", "seekerVerifyIgnore", "disabledDoubleClick"], outputs: ["onDoubleClick", "selectedDataChange", "fullValueRowChange"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "component", type: CoreFileUploaderComponent, selector: "core-file-uploader", inputs: ["uploadFileType", "fileDataControlName", "fileNameControlName", "fileTypeControlName", "avatarSize", "defaultAvatar", "hidePreview", "verticalMode"] }, { kind: "component", type: CoreAttachmentComponent, selector: "core-attachment", inputs: ["assignTo", "readonly", "valueToShow", "placeholder", "upFlag$", "downFlag$"] }, { kind: "component", type: CoreGridBufferComponent, selector: "core-grid-buffer", inputs: ["padding", "placeholder", "tableHeight", "liteMode", "formSections", "gridColumns"], outputs: ["onBufferFormCreated"] }, { kind: "component", type: CoreDatePickerComponent, selector: "core-date-picker", inputs: ["enableTimeZoneConverter", "showPlaceholder", "popupWidth", "popupXPadding", "popupAlign", "rangeLimit", "placeholder", "readonly", "disabled"] }, { kind: "component", type: CoreOrgTreeComponent, selector: "core-org-tree", inputs: ["lineColor", "fullWidthMode", "accessorMode", "searchMode", "fullRendering", "height", "disabledLoopExpand", "showCheckInheritance", "excludedIds$", "stateIsolated$"], outputs: ["itemDoubleClick", "itemClick"] }, { kind: "component", type: CoreRadioGroupComponent, selector: "core-radio-group", inputs: ["options$", "vertical", "columnCount", "gapY", "defaultValue"] }, { kind: "component", type: CoreMccComponent, selector: "core-mcc", inputs: ["height", "columns", "shownFrom", "apiDefinition", "getByIdApi", "outerParam$", "selectedRow$", "outerFilterOperators", "outerInOperators", "placeholder"] }, { kind: "component", type: CoreMonthSelectorComponent, selector: "core-month-selector", inputs: ["align", "placeholder"], outputs: ["onYearClick"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "component", type: CoreCurrencyInputComponent, selector: "core-currency-input", inputs: ["currencySign", "placeholder"], outputs: ["onLeftFocus"] }, { kind: "component", type: CoreShiftCellComponent, selector: "core-shift-cell", inputs: ["$readOnly", "$hideStarterPlusSign", "$hideStickersWhileDragover", "$backgroundColor"] }, { kind: "component", type: CoreShiftCollectionComponent, selector: "core-shift-collection", inputs: ["height", "disabled", "relativeMode"] }, { kind: "component", type: CoreTopicPickerComponent, selector: "core-topic-picker", inputs: ["popupHeight", "getByIdApi"] }, { kind: "component", type: CoreIosSwitcherComponent, selector: "core-ios-switcher", inputs: ["bgColor", "showOnOffText", "width", "height", "readonly"] }, { kind: "component", type: CoreLiquidWysiwygComponent, selector: "core-liquid-wysiwyg", inputs: ["$liquidOptions", "$textareaRows", "$height", "$readonly", "$showLiquidSourceOnly", "$isForWorkflowEmail", "getByIdObject$", "placeholder"] }, { kind: "component", type: CoreStickerCollectionComponent, selector: "core-sticker-collection", inputs: ["$items", "$shownFrom", "$tooltipFrom", "$initialChecked", "$showMore", "$showMoreTooltip", "$hideShowMoreIfNotSelected", "$enableFilter"], outputs: ["$checkedChange", "$onShowMore"] }, { kind: "directive", type: HtmlTooltipDirective, selector: "[htmlTooltip]", inputs: ["htmlTooltip", "tooltipContext", "maxWidthUnset", "backgroundColor", "hold$"] }] }); }
26769
26781
  }
26770
26782
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreControlComponent, decorators: [{
26771
26783
  type: Component,
@@ -26799,7 +26811,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
26799
26811
  CoreLiquidWysiwygComponent,
26800
26812
  CoreStickerCollectionComponent,
26801
26813
  HtmlTooltipDirective
26802
- ], template: "<div class=\"core-control-container\">\r\n\r\n <div [formGroup]=\"form\" [class.hidden]=\"!!control.hidden\">\r\n\r\n @if (!control.headless!) {\r\n <label [class]=\"'control-label' + (required ? ' required' : '')\" [attr.for]=\"control.field\"\r\n [class.d-none]=\"!!control.hidden\"\r\n [class.avatar-label]=\"control.uploadFileType==='IMAGE_AVATAR'\" [appTooltip]=\"control.tooltip! | translate: lang\" \r\n [htmlTooltip]=\"control.htmlTooltip!\"\r\n [backgroundColor]=\"'white'\"\r\n [ngStyle]=\"{\r\n display: 'inline-block'\r\n }\">\r\n {{(control.controlType!=='CHECKBOX' && control.controlType!=='BUTTON') ? (control.label | translate: lang) : ''}}\r\n </label>\r\n\r\n @if (!!control.hint! && control.controlType !== 'CHECKBOX') {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"control.hint!\" [showAnyway]=\"true\" [ngStyle]=\"{\r\n display: 'inline-block',\r\n marginLeft: '2px'\r\n }\" [class.d-none]=\"!!control.hidden\"></i>\r\n }\r\n }\r\n\r\n <!-- START: FORM-CONTROL SESSION-->\r\n\r\n <ng-container>\r\n @switch (control.controlType) {\r\n @case (\"FORM_ARRAY\") {\r\n <core-form-array\r\n [formArrayName]=\"control.field!\"\r\n [parentFormGroup]=\"form\"\r\n [formArray]=\"formArray\"\r\n [config]=\"control.formArraySections! ?? []\"\r\n [checkError$]=\"checkError$\">\r\n </core-form-array>\r\n }\r\n @case (\"CALCULATED\") {\r\n <div class=\"calculated-view\" [htmlTooltip]=\"calculatedControlInfo\" [tooltipContext]=\"{control: control}\" [backgroundColor]=\"'#fff'\">\r\n <i class=\"feather-box\"></i><span>{{ control.field! }}</span>\r\n </div>\r\n }\r\n @case (\"TEXTBOX\") {\r\n\r\n <input *ngIf=\"control.type === 'date'\"\r\n [formControlName]=\"control.field\"\r\n type=\"date\"\r\n useValueAsDate\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'time'\"\r\n [formControlName]=\"control.field\"\r\n type=\"time\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'number'\"\r\n [formControlName]=\"control.field\"\r\n type=\"number\"\r\n step=\"{{ control.step || 1 }}\"\r\n class=\"form-control\"\r\n style=\"text-align: right;\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"['string', 'text', 'email', 'url', 'password'].includes(control.type || 'text')\"\r\n [formControlName]=\"control.field\"\r\n [type]=\"control.type\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n }\r\n @case (\"CURRENCY\") {\r\n <core-currency-input [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-currency-input>\r\n }\r\n @case (\"TEXTAREA\") {\r\n <textarea [rows]=\"control.textareaRows?.toString() || '3'\" [ngStyle]=\"{ height: 'unset' }\"\r\n [class.required-highlight]=\"!!required\"\r\n [formControlName]=\"control.field\" class=\"form-control\" [readonly]=\"control.readonly\" [placeholder]=\"control.placeholder! || ''\"></textarea>\r\n }\r\n @case (\"CHECKBOX\") {\r\n <core-checkbox [formControlName]=\"control.field\" [text]=\"control.label\"\r\n [inputValue]=\"control.value\" [tooltip]=\"control.hint!\"></core-checkbox>\r\n }\r\n @case (\"IOS_SWITCHER\") {\r\n <div class=\"gap-for-ios-switcher\"></div>\r\n <core-ios-switcher [formControlName]=\"control.field\" />\r\n }\r\n @case (\"MCC\") {\r\n <core-mcc [required]=\"required\" [formControlName]=\"control.field\" [columns]=\"control.columns!\" [shownFrom]=\"control.shownFrom!\" \r\n [apiDefinition]=\"control.apiDefinition!\" [getByIdApi]=\"control.getByIdApi!\" [selectedRow$]=\"control.selectedRow$!\"\r\n [outerParam$]=\"control.outerParam$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-mcc>\r\n }\r\n @case (\"DATEPICKER\") {\r\n <core-date-picker [required]=\"required\" [formControlName]=\"control.field\" [showPlaceholder]=\"control.showPlaceholder!\" [rangeLimit]=\"control.rangeLimit!\" [popupAlign]=\"control.popupAlign!\" [placeholder]=\"control.placeholder! || ''\"></core-date-picker>\r\n }\r\n\r\n @case (\"DROPDOWN\") {\r\n @if (!!control.dropdownOptions$ || !!control.optionApiDriven) {\r\n <core-dropdown \r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" \r\n [options$]=\"control.dropdownOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" \r\n [shownFrom]=\"control.shownFrom!\" \r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [optionApiDriven]=\"control.optionApiDriven!\"\r\n [optionApi]=\"control.optionApi!\"\r\n [optionHttpVerb]=\"control.optionHttpVerb!\"\r\n [optionHttpPayload]=\"control.optionHttpPayload!\"\r\n [optionValueFrom]=\"control.optionValueFrom!\"\r\n [optionTextFrom]=\"control.optionTextFrom!\"\r\n ></core-dropdown>\r\n } @else {\r\n No dropdownOptions$ | optionApiDriven detected\r\n }\r\n }\r\n @case (\"LIST\") {\r\n <core-list [required]=\"required\" [formControlName]=\"control.field\" [options]=\"control.listOptions!\" [placeholder]=\"control.placeholder! || ''\"></core-list>\r\n }\r\n @case (\"CHECKLIST\") {\r\n @if (!!control.checklistOptions$) {\r\n <core-checklist [required]=\"required\" [formControlName]=\"control.field\" [options$]=\"control.checklistOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" [shownFrom]=\"control.shownFrom!\" [placeholder]=\"control.placeholder! || ''\"></core-checklist>\r\n }\r\n }\r\n @case (\"FILEUPLOADER\") {\r\n @if (!!control.uploadFileType) {\r\n <core-file-uploader [required]=\"required\" [formControlName]=\"control.field\" [uploadFileType]=\"control.uploadFileType\"\r\n [fileDataControlName]=\"control.fileDataControlName!\"\r\n [fileNameControlName]=\"control.fileNameControlName!\"\r\n [fileTypeControlName]=\"control.fileTypeControlName!\"\r\n [verticalMode]=\"control.verticalMode!\"></core-file-uploader>\r\n } @else {\r\n <div class=\"dev-declaration\">Please add uploadFileType</div>\r\n }\r\n }\r\n @case (\"ATTACHMENT\") {\r\n <core-attachment ngDefaultControl [required]=\"required\" [formControlName]=\"control.field\" [assignTo]=\"control.assignTo!\"\r\n [valueToShow]=\"control.valueToShow!\" [placeholder]=\"control.placeholder! || ''\"></core-attachment>\r\n }\r\n @case (\"GRIDBUFFER\") {\r\n @if (!!control.gridBufferFormSections && !!control.gridBufferTableColumns) {\r\n <core-grid-buffer [required]=\"required\" [formControlName]=\"control.field\" [formSections]=\"control.gridBufferFormSections\"\r\n [gridColumns]=\"control.gridBufferTableColumns\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [tableHeight]=\"control.tableHeight ?? 300\"\r\n [liteMode]=\"control.liteMode ?? false\"\r\n (onBufferFormCreated)=\"!!control.onBufferFormCreated ? control.onBufferFormCreated($event) : null\"></core-grid-buffer>\r\n }\r\n }\r\n @case (\"ORGTREECHECK\") {\r\n <core-org-tree [required]=\"required\" [formControlName]=\"control.field\"\r\n [accessorMode]=\"coreOrgTreeDefaultAccessorMode\" [height]=\"control.height!\"></core-org-tree>\r\n }\r\n @case (\"RADIOGROUP\") {\r\n <core-radio-group [required]=\"required\" [formControlName]=\"control.field\"\r\n [options$]=\"control.radioGroupOptions$!\"\r\n [vertical]=\"control.verticalMode!\"\r\n ></core-radio-group>\r\n }\r\n @case (\"MONTHSELECTOR\") {\r\n <core-month-selector [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-month-selector>\r\n }\r\n @case (\"SHIFTCELL\") {\r\n <core-shift-cell [formControlName]=\"control.field\"></core-shift-cell>\r\n }\r\n @case (\"SHIFTCOLLECTION\") {\r\n <core-shift-collection [relativeMode]=\"true\" [height]=\"control.height || 800\"></core-shift-collection>\r\n }\r\n @case(\"TOPICPICKER\") {\r\n <core-topic-picker [required]=\"required\" [formControlName]=\"control.field\" [popupHeight]=\"control.popupHeight!\" [getByIdApi]=\"control.getByIdApi!\"></core-topic-picker>\r\n }\r\n @case(\"STICKER_COLLECTION\") {\r\n <core-sticker-collection\r\n [formControlName]=\"control.field\"\r\n [required]=\"required\"\r\n [$items]=\"control.stickerCollectionItems!\"\r\n [$shownFrom]=\"control.stickerCollectionShownFrom!\"\r\n [$tooltipFrom]=\"control.stickerCollectionTooltipFrom!\"\r\n [$initialChecked]=\"control.stickerCollectionInitialChecked!\"\r\n >\r\n </core-sticker-collection>\r\n }\r\n @case (\"SEEKER\") {\r\n @switch(control.seekerSourceType) {\r\n @case(\"JOB_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"EMPLOYEE_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"CONTRACT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" [boundFrom]=\"control.boundFrom!\"\r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\" \r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [shownFrom]=\"control.shownFrom!\"\r\n [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WORKING_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WAGE_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [formControlName]=\"control.field\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [seekerVerifyIgnore]=\"control.seekerVerifyIgnore!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_CONCURRENT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"FORM_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"ORGANIZATION_UNIT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" [seekerSourceType]=\"control.seekerSourceType!\"\r\n [boundFrom]=\"control.boundFrom!\" [alsoBindTo]=\"control.alsoBindTo!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-form-control-seeker>\r\n }\r\n }\r\n }\r\n @case (\"LIQUID_WYSIWYG\") {\r\n <core-liquid-wysiwyg\r\n [formControlName]=\"control.field\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [$liquidOptions]=\"control.liquidOptions!\"\r\n [$textareaRows]=\"control.textareaRows!\"\r\n [$showLiquidSourceOnly]=\"control.showLiquidSourceOnly!\"\r\n [$isForWorkflowEmail]=\"control.isForWorkflowEmail!\"\r\n />\r\n }\r\n }\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"control.controlType==='BUTTON'\">\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"oHandleClick($event)\">{{control.label| translate: lang}}</button>\r\n </ng-container>\r\n <!-- END: FORM-CONTROL SESSION-->\r\n\r\n <!-- START: ERROR SESSION-->\r\n <div *ngIf=\"!!errors!.length\">\r\n <div class=\"form-control-error\" *ngFor=\"let error of errors\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n </div>\r\n <div *ngIf=\"!!!errors!.length && !!checkError$.value\">\r\n <div>\r\n {{ '&nbsp;' }}\r\n </div>\r\n </div>\r\n <!-- END: ERROR SESSION-->\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<ng-template #calculatedControlInfo let-control=\"control\">\r\n <div class=\"calculated-tooltip-container\">\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Name:</span>\r\n <span class=\"value\">{{ control?.field || 'N/A' }}</span>\r\n </div> \r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Evaluation Mode:</span>\r\n <span class=\"value\">{{ control?.evaluationMode || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Return Type:</span>\r\n <span class=\"value\">{{ control?.returnType || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Depends On:</span>\r\n <span class=\"value\" *ngIf=\"control?.dependsOn?.length > 0; else noDepends\">\r\n <code *ngFor=\"let dep of control?.dependsOn; let last = last\">{{ dep }}<span *ngIf=\"!last\">, </span></code>\r\n </span>\r\n <ng-template #noDepends><em class=\"no-depends\">None</em></ng-template>\r\n </div>\r\n <div *ngIf=\"!!control?.isUnsafe\" class=\"warning\">\r\n \u26A0\uFE0F This script is marked as <strong>unsafe</strong> and will not be executed.\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Script:</span>\r\n <pre class=\"code-block\">{{ control?.script || 'No script provided.' }}</pre>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".core-control-container{font-size:var(--typo-basic-font-size)!important}.core-control-container .control-label{color:#848484}.core-control-container>div.hidden{display:none}.core-control-container label{color:#464646}.core-control-container label.required:after{content:\"*\";color:#ff040b}.core-control-container label.avatar-label{width:var(--size-file-uploader);display:flex;align-items:center;justify-content:center}.core-control-container input[type=number]{padding-right:12px;position:relative}.core-control-container input[type=number]::-webkit-inner-spin-button{position:absolute;right:.3em;margin-left:.5em}.core-control-container input[type=number]{-moz-appearance:textfield}.core-control-container i.feather-help-circle{color:#848484}.core-control-container .gap-for-ios-switcher{height:5px}.core-control-container .calculated-view{-webkit-user-select:none;user-select:none;cursor:pointer;height:35px;width:160px;background-color:#d8f3dc;color:#1b4332;border:1px solid #95d5b2;border-radius:50px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:flex-start;font-family:Segoe UI,sans-serif;letter-spacing:.5px;padding:8px}.core-control-container .calculated-view i{font-size:18px;width:18px;height:18px;margin-right:8px}.core-control-container .calculated-view span{width:calc(100% - 26px);overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.calculated-tooltip-container{background-color:#fff;border:1px solid #ddd;padding:1rem;border-radius:6px;font-size:14px;color:#333;box-shadow:0 4px 10px #0000000d;max-width:360px}.calculated-tooltip-container .calculated-field-row{margin-bottom:.75rem}.calculated-tooltip-container .label{font-weight:500;color:#555!important;display:inline-block;min-width:140px}.calculated-tooltip-container .value{color:#222!important}.calculated-tooltip-container .warning{color:#b91c1c;background:#fef2f2;border:1px solid #fca5a5;padding:.5rem;border-radius:4px;margin-bottom:1rem;font-size:13px}.calculated-tooltip-container .code-block{background:#f8f9fa;border:1px solid #ddd;padding:.75rem;font-family:monospace;font-size:12px;white-space:pre-wrap;color:#111!important;border-radius:4px;overflow-x:auto}.calculated-tooltip-container .no-depends{color:#888;font-style:italic}.calculated-tooltip-container pre{overflow:hidden}.calculated-tooltip-container label.required~input:not([disabled]),.calculated-tooltip-container label.required~textarea:not([disabled]),.calculated-tooltip-container label.required~select:not([disabled]){background-color:#ff0!important}\n"] }]
26814
+ ], template: "<div class=\"core-control-container\">\r\n\r\n <div [formGroup]=\"form\" [class.hidden]=\"!!control.hidden\">\r\n\r\n @if (!control.headless!) {\r\n <label [class]=\"'control-label' + (required ? ' required' : '')\" [attr.for]=\"control.field\"\r\n [class.d-none]=\"!!control.hidden\"\r\n [class.avatar-label]=\"control.uploadFileType==='IMAGE_AVATAR'\" [appTooltip]=\"control.tooltip! | translate: lang\" \r\n [htmlTooltip]=\"control.htmlTooltip!\"\r\n [backgroundColor]=\"'white'\"\r\n [ngStyle]=\"{\r\n display: 'inline-block'\r\n }\">\r\n {{(control.controlType!=='CHECKBOX' && control.controlType!=='BUTTON') ? (control.label | translate: lang) : ''}}\r\n </label>\r\n\r\n @if (!!control.hint! && control.controlType !== 'CHECKBOX') {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"control.hint!\" [showAnyway]=\"true\" [ngStyle]=\"{\r\n display: 'inline-block',\r\n marginLeft: '2px'\r\n }\" [class.d-none]=\"!!control.hidden\"></i>\r\n }\r\n }\r\n\r\n <!-- START: FORM-CONTROL SESSION-->\r\n\r\n <ng-container>\r\n @switch (control.controlType) {\r\n @case (\"FORM_ARRAY\") {\r\n <core-form-array\r\n [formArrayName]=\"control.field!\"\r\n [parentFormGroup]=\"form\"\r\n [formArray]=\"formArray\"\r\n [config]=\"control.formArraySections! ?? []\"\r\n [disabled]=\"control.disabled!\"\r\n [readonly]=\"control.readonly!\"\r\n [checkError$]=\"checkError$\">\r\n </core-form-array>\r\n }\r\n @case (\"CALCULATED\") {\r\n <div class=\"calculated-view\" [htmlTooltip]=\"calculatedControlInfo\" [tooltipContext]=\"{control: control}\" [backgroundColor]=\"'#fff'\">\r\n <i class=\"feather-box\"></i><span>{{ control.field! }}</span>\r\n </div>\r\n }\r\n @case (\"TEXTBOX\") {\r\n\r\n <input *ngIf=\"control.type === 'date'\"\r\n [formControlName]=\"control.field\"\r\n type=\"date\"\r\n useValueAsDate\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'time'\"\r\n [formControlName]=\"control.field\"\r\n type=\"time\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'number'\"\r\n [formControlName]=\"control.field\"\r\n type=\"number\"\r\n step=\"{{ control.step || 1 }}\"\r\n class=\"form-control\"\r\n style=\"text-align: right;\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"['string', 'text', 'email', 'url', 'password'].includes(control.type || 'text')\"\r\n [formControlName]=\"control.field\"\r\n [type]=\"control.type\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n }\r\n @case (\"CURRENCY\") {\r\n <core-currency-input [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-currency-input>\r\n }\r\n @case (\"TEXTAREA\") {\r\n <textarea [rows]=\"control.textareaRows?.toString() || '3'\" [ngStyle]=\"{ height: 'unset' }\"\r\n [class.required-highlight]=\"!!required\"\r\n [formControlName]=\"control.field\" class=\"form-control\" [readonly]=\"control.readonly\" [placeholder]=\"control.placeholder! || ''\"></textarea>\r\n }\r\n @case (\"CHECKBOX\") {\r\n <core-checkbox [formControlName]=\"control.field\" [text]=\"control.label\"\r\n [inputValue]=\"control.value\" [tooltip]=\"control.hint!\"></core-checkbox>\r\n }\r\n @case (\"IOS_SWITCHER\") {\r\n <div class=\"gap-for-ios-switcher\"></div>\r\n <core-ios-switcher [formControlName]=\"control.field\" />\r\n }\r\n @case (\"MCC\") {\r\n <core-mcc [required]=\"required\" [formControlName]=\"control.field\" [columns]=\"control.columns!\" [shownFrom]=\"control.shownFrom!\" \r\n [apiDefinition]=\"control.apiDefinition!\" [getByIdApi]=\"control.getByIdApi!\" [selectedRow$]=\"control.selectedRow$!\"\r\n [outerParam$]=\"control.outerParam$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-mcc>\r\n }\r\n @case (\"DATEPICKER\") {\r\n <core-date-picker [required]=\"required\" [formControlName]=\"control.field\" [showPlaceholder]=\"control.showPlaceholder!\" [rangeLimit]=\"control.rangeLimit!\" [popupAlign]=\"control.popupAlign!\" [placeholder]=\"control.placeholder! || ''\"></core-date-picker>\r\n }\r\n\r\n @case (\"DROPDOWN\") {\r\n @if (!!control.dropdownOptions$ || !!control.optionApiDriven) {\r\n <core-dropdown \r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" \r\n [options$]=\"control.dropdownOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" \r\n [shownFrom]=\"control.shownFrom!\" \r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [optionApiDriven]=\"control.optionApiDriven!\"\r\n [optionApi]=\"control.optionApi!\"\r\n [optionHttpVerb]=\"control.optionHttpVerb!\"\r\n [optionHttpPayload]=\"control.optionHttpPayload!\"\r\n [optionValueFrom]=\"control.optionValueFrom!\"\r\n [optionTextFrom]=\"control.optionTextFrom!\"\r\n ></core-dropdown>\r\n } @else {\r\n No dropdownOptions$ | optionApiDriven detected\r\n }\r\n }\r\n @case (\"LIST\") {\r\n <core-list [required]=\"required\" [formControlName]=\"control.field\" [options]=\"control.listOptions!\" [placeholder]=\"control.placeholder! || ''\"></core-list>\r\n }\r\n @case (\"CHECKLIST\") {\r\n @if (!!control.checklistOptions$) {\r\n <core-checklist [required]=\"required\" [formControlName]=\"control.field\" [options$]=\"control.checklistOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" [shownFrom]=\"control.shownFrom!\" [placeholder]=\"control.placeholder! || ''\"></core-checklist>\r\n }\r\n }\r\n @case (\"FILEUPLOADER\") {\r\n @if (!!control.uploadFileType) {\r\n <core-file-uploader [required]=\"required\" [formControlName]=\"control.field\" [uploadFileType]=\"control.uploadFileType\"\r\n [fileDataControlName]=\"control.fileDataControlName!\"\r\n [fileNameControlName]=\"control.fileNameControlName!\"\r\n [fileTypeControlName]=\"control.fileTypeControlName!\"\r\n [verticalMode]=\"control.verticalMode!\"></core-file-uploader>\r\n } @else {\r\n <div class=\"dev-declaration\">Please add uploadFileType</div>\r\n }\r\n }\r\n @case (\"ATTACHMENT\") {\r\n <core-attachment ngDefaultControl [required]=\"required\" [formControlName]=\"control.field\" [assignTo]=\"control.assignTo!\"\r\n [valueToShow]=\"control.valueToShow!\" [placeholder]=\"control.placeholder! || ''\"></core-attachment>\r\n }\r\n @case (\"GRIDBUFFER\") {\r\n @if (!!control.gridBufferFormSections && !!control.gridBufferTableColumns) {\r\n <core-grid-buffer [required]=\"required\" [formControlName]=\"control.field\" [formSections]=\"control.gridBufferFormSections\"\r\n [gridColumns]=\"control.gridBufferTableColumns\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [tableHeight]=\"control.tableHeight ?? 300\"\r\n [liteMode]=\"control.liteMode ?? false\"\r\n (onBufferFormCreated)=\"!!control.onBufferFormCreated ? control.onBufferFormCreated($event) : null\"></core-grid-buffer>\r\n }\r\n }\r\n @case (\"ORGTREECHECK\") {\r\n <core-org-tree [required]=\"required\" [formControlName]=\"control.field\"\r\n [accessorMode]=\"coreOrgTreeDefaultAccessorMode\" [height]=\"control.height!\"></core-org-tree>\r\n }\r\n @case (\"RADIOGROUP\") {\r\n <core-radio-group [required]=\"required\" [formControlName]=\"control.field\"\r\n [options$]=\"control.radioGroupOptions$!\"\r\n [vertical]=\"control.verticalMode!\"\r\n ></core-radio-group>\r\n }\r\n @case (\"MONTHSELECTOR\") {\r\n <core-month-selector [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-month-selector>\r\n }\r\n @case (\"SHIFTCELL\") {\r\n <core-shift-cell [formControlName]=\"control.field\"></core-shift-cell>\r\n }\r\n @case (\"SHIFTCOLLECTION\") {\r\n <core-shift-collection [relativeMode]=\"true\" [height]=\"control.height || 800\"></core-shift-collection>\r\n }\r\n @case(\"TOPICPICKER\") {\r\n <core-topic-picker [required]=\"required\" [formControlName]=\"control.field\" [popupHeight]=\"control.popupHeight!\" [getByIdApi]=\"control.getByIdApi!\"></core-topic-picker>\r\n }\r\n @case(\"STICKER_COLLECTION\") {\r\n <core-sticker-collection\r\n [formControlName]=\"control.field\"\r\n [required]=\"required\"\r\n [$items]=\"control.stickerCollectionItems!\"\r\n [$shownFrom]=\"control.stickerCollectionShownFrom!\"\r\n [$tooltipFrom]=\"control.stickerCollectionTooltipFrom!\"\r\n [$initialChecked]=\"control.stickerCollectionInitialChecked!\"\r\n >\r\n </core-sticker-collection>\r\n }\r\n @case (\"SEEKER\") {\r\n @switch(control.seekerSourceType) {\r\n @case(\"JOB_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"EMPLOYEE_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"CONTRACT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" [boundFrom]=\"control.boundFrom!\"\r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\" \r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [shownFrom]=\"control.shownFrom!\"\r\n [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WORKING_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WAGE_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [formControlName]=\"control.field\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [seekerVerifyIgnore]=\"control.seekerVerifyIgnore!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_CONCURRENT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"FORM_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"ORGANIZATION_UNIT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" [seekerSourceType]=\"control.seekerSourceType!\"\r\n [boundFrom]=\"control.boundFrom!\" [alsoBindTo]=\"control.alsoBindTo!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-form-control-seeker>\r\n }\r\n }\r\n }\r\n @case (\"LIQUID_WYSIWYG\") {\r\n <core-liquid-wysiwyg\r\n [formControlName]=\"control.field\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [$liquidOptions]=\"control.liquidOptions!\"\r\n [$textareaRows]=\"control.textareaRows!\"\r\n [$showLiquidSourceOnly]=\"control.showLiquidSourceOnly!\"\r\n [$isForWorkflowEmail]=\"control.isForWorkflowEmail!\"\r\n />\r\n }\r\n }\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"control.controlType==='BUTTON'\">\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"oHandleClick($event)\">{{control.label| translate: lang}}</button>\r\n </ng-container>\r\n <!-- END: FORM-CONTROL SESSION-->\r\n\r\n <!-- START: ERROR SESSION-->\r\n <div *ngIf=\"!!errors!.length\">\r\n <div class=\"form-control-error\" *ngFor=\"let error of errors\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n </div>\r\n <div *ngIf=\"!!!errors!.length && !!checkError$.value\">\r\n <div>\r\n {{ '&nbsp;' }}\r\n </div>\r\n </div>\r\n <!-- END: ERROR SESSION-->\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<ng-template #calculatedControlInfo let-control=\"control\">\r\n <div class=\"calculated-tooltip-container\">\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Name:</span>\r\n <span class=\"value\">{{ control?.field || 'N/A' }}</span>\r\n </div> \r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Evaluation Mode:</span>\r\n <span class=\"value\">{{ control?.evaluationMode || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Return Type:</span>\r\n <span class=\"value\">{{ control?.returnType || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Depends On:</span>\r\n <span class=\"value\" *ngIf=\"control?.dependsOn?.length > 0; else noDepends\">\r\n <code *ngFor=\"let dep of control?.dependsOn; let last = last\">{{ dep }}<span *ngIf=\"!last\">, </span></code>\r\n </span>\r\n <ng-template #noDepends><em class=\"no-depends\">None</em></ng-template>\r\n </div>\r\n <div *ngIf=\"!!control?.isUnsafe\" class=\"warning\">\r\n \u26A0\uFE0F This script is marked as <strong>unsafe</strong> and will not be executed.\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Script:</span>\r\n <pre class=\"code-block\">{{ control?.script || 'No script provided.' }}</pre>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".core-control-container{font-size:var(--typo-basic-font-size)!important}.core-control-container .control-label{color:#848484}.core-control-container>div.hidden{display:none}.core-control-container label{color:#464646}.core-control-container label.required:after{content:\"*\";color:#ff040b}.core-control-container label.avatar-label{width:var(--size-file-uploader);display:flex;align-items:center;justify-content:center}.core-control-container input[type=number]{padding-right:12px;position:relative}.core-control-container input[type=number]::-webkit-inner-spin-button{position:absolute;right:.3em;margin-left:.5em}.core-control-container input[type=number]{-moz-appearance:textfield}.core-control-container i.feather-help-circle{color:#848484}.core-control-container .gap-for-ios-switcher{height:5px}.core-control-container .calculated-view{-webkit-user-select:none;user-select:none;cursor:pointer;height:35px;width:160px;background-color:#d8f3dc;color:#1b4332;border:1px solid #95d5b2;border-radius:50px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:flex-start;font-family:Segoe UI,sans-serif;letter-spacing:.5px;padding:8px}.core-control-container .calculated-view i{font-size:18px;width:18px;height:18px;margin-right:8px}.core-control-container .calculated-view span{width:calc(100% - 26px);overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.calculated-tooltip-container{background-color:#fff;border:1px solid #ddd;padding:1rem;border-radius:6px;font-size:14px;color:#333;box-shadow:0 4px 10px #0000000d;max-width:360px}.calculated-tooltip-container .calculated-field-row{margin-bottom:.75rem}.calculated-tooltip-container .label{font-weight:500;color:#555!important;display:inline-block;min-width:140px}.calculated-tooltip-container .value{color:#222!important}.calculated-tooltip-container .warning{color:#b91c1c;background:#fef2f2;border:1px solid #fca5a5;padding:.5rem;border-radius:4px;margin-bottom:1rem;font-size:13px}.calculated-tooltip-container .code-block{background:#f8f9fa;border:1px solid #ddd;padding:.75rem;font-family:monospace;font-size:12px;white-space:pre-wrap;color:#111!important;border-radius:4px;overflow-x:auto}.calculated-tooltip-container .no-depends{color:#888;font-style:italic}.calculated-tooltip-container pre{overflow:hidden}.calculated-tooltip-container label.required~input:not([disabled]),.calculated-tooltip-container label.required~textarea:not([disabled]),.calculated-tooltip-container label.required~select:not([disabled]){background-color:#ff0!important}\n"] }]
26803
26815
  }], ctorParameters: () => [{ type: MultiLanguageService }, { type: AlertService }], propDecorators: { control: [{
26804
26816
  type: Input
26805
26817
  }], form: [{
@@ -28485,7 +28497,7 @@ class AtShiftPatternComponent extends BaseEditComponent {
28485
28497
  this.atShiftPatternService.activePattern$.next(undefined);
28486
28498
  }
28487
28499
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: AtShiftPatternComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
28488
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: AtShiftPatternComponent, isStandalone: true, selector: "core-at-shift-pattern", viewQueries: [{ propertyName: "sticker", first: true, predicate: ["sticker"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"core-at-shift-pattern-container\">\r\n\r\n <!-- <core-page-header [title]=\"title\" (buttonClick)=\"onCorePageHeaderButtonClick($event)\"></core-page-header> -->\r\n\r\n @if (workShiftDndService.shiftCollectionOpen$ | async) {\r\n <core-shift-collection [height]=\"(shiftCollectionHeight$ | async) || 800\"></core-shift-collection>\r\n }\r\n\r\n <div class=\"d-flex d-flex-between content-wrapper position-relative\">\r\n <div class=\"list-block\">\r\n <core-page-list [apiDefinition]=\"apiDefinition\" [columns]=\"columns\" [editRoute]=\"editRoute\" [crud]=\"crud\"\r\n [title]=\"title\" [autoResizeWithWindow]=\"true\" [checkboxExplicity]=\"true\"\r\n (listChange)=\"onListChange($event)\" (corePageHeaderButtonClick)=\"onCorePageHeaderButtonClick($event)\"\r\n (onInstanceCreated)=\"onInstanceCreated($event)\" (rowClick)=\"rowClick($event)\"></core-page-list>\r\n </div>\r\n\r\n @if (!(atShiftPatternService.activePattern$ | async)) {\r\n <div class=\"anim-block\">\r\n <div class=\"alert is-success\">\r\n <p class=\"alert-title\"><span class=\"ti-light-bulb\" aria-hidden=\"true\"></span>\r\n @if (lang === 'vi') {\r\n G\u1EE2I \u00DD\r\n } @else {\r\n TIP\r\n }\r\n\r\n </p>\r\n\r\n <div>\r\n @if (lang === 'vi') {\r\n M\u1EABu x\u1EBFp ca l\u00E0 c\u00F4ng c\u1EE5 tr\u1EF1c quan v\u00E0 ti\u1EC7n l\u1EE3i gi\u00FAp ph\u00F2ng nh\u00E2n s\u1EF1 (HR) qu\u1EA3n l\u00FD v\u00E0 b\u1ED1 tr\u00ED ca l\u00E0m vi\u1EC7c\r\n cho nh\u00E2n vi\u00EAn m\u1ED9t c\u00E1ch hi\u1EC7u qu\u1EA3. M\u00E0n h\u00ECnh n\u00E0y \u0111\u01B0\u1EE3c thi\u1EBFt k\u1EBF \u0111\u1EC3 \u0111\u00E1p \u1EE9ng nhu c\u1EA7u l\u1EADp k\u1EBF ho\u1EA1ch c\u00F4ng\r\n vi\u1EC7c h\u00E0ng ng\u00E0y, h\u00E0ng tu\u1EA7n ho\u1EB7c theo chu k\u1EF3 c\u1EE5 th\u1EC3, \u0111\u1EA3m b\u1EA3o t\u00EDnh linh ho\u1EA1t v\u00E0 s\u1EF1 d\u1EC5 d\u00E0ng trong qu\u1EA3n\r\n l\u00FD.\r\n\r\n <p></p>\r\n <div class=\"square-before\">\r\n <b style='color: gray;'>X\u1EBFp ca theo m\u1EABu tu\u1EA7n (WEEK)</b>:\r\n Cho ph\u00E9p HR b\u1ED1 tr\u00ED ca l\u00E0m vi\u1EC7c d\u1EF1a tr\u00EAn c\u00E1c th\u1EE9 trong tu\u1EA7n, v\u00ED d\u1EE5: th\u1EE9 Hai, th\u1EE9 Ba, v.v. Ph\u00F9 h\u1EE3p\r\n cho\r\n nh\u1EEFng chu k\u1EF3 l\u00E0m vi\u1EC7c l\u1EB7p l\u1EA1i \u0111\u1ECBnh k\u1EF3 (v\u00ED d\u1EE5: l\u1ECBch l\u00E0m vi\u1EC7c tu\u1EA7n).\r\n </div>\r\n\r\n <p></p>\r\n <div class=\"square-before\">\r\n <b style='color: gray;'>X\u1EBFp ca theo chu\u1ED7i ng\u00E0y (DAYS)</b>:\r\n D\u00E0nh cho c\u00E1c tr\u01B0\u1EDDng h\u1EE3p x\u1EBFp ca kh\u00F4ng c\u1ED1 \u0111\u1ECBnh theo th\u1EE9 trong tu\u1EA7n m\u00E0 d\u1EF1a tr\u00EAn m\u1ED9t chu\u1ED7i ng\u00E0y li\u00EAn\r\n t\u1EE5c. HR c\u00F3 th\u1EC3 ch\u1EC9 \u0111\u1ECBnh b\u1EAFt \u0111\u1EA7u t\u1EEB ng\u00E0y b\u1EA5t k\u1EF3 v\u00E0 thi\u1EBFt l\u1EADp c\u00E1c ca l\u00E0m vi\u1EC7c t\u01B0\u01A1ng \u1EE9ng.\r\n </div>\r\n\r\n <p></p>\r\n <div class=\"square-before\">\r\n \u1EA4n F1 \u0111\u1EC3 c\u00F3 th\u00EAm chi ti\u1EBFt\r\n </div>\r\n } @else {\r\n Shift Scheduling Template is an intuitive and convenient tool to help HR departments effectively\r\n manage\r\n and assign work shifts for employees. This screen is designed to meet the needs of daily, weekly, or\r\n specific cycle-based work planning, ensuring flexibility and ease of management.\r\n\r\n <p></p>\r\n <div class=\"square-before\">\r\n <b style='color: gray;'>Schedule shifts by weekly pattern (WEEK)</b>:\r\n Allows HR to assign work shifts based on days of the week, e.g., Monday, Tuesday, etc. This is\r\n suitable for recurring work cycles (e.g., weekly schedules).\r\n </div>\r\n\r\n <p></p>\r\n <div class=\"square-before\">\r\n <b style='color: gray;'>Schedule shifts by sequence of days (DAYS)</b>:\r\n Designed for cases where shifts are assigned based on a continuous sequence of days rather than\r\n specific days of the week. HR can specify any start date and set up corresponding work shifts.\r\n </div>\r\n\r\n <p></p>\r\n <div class=\"square-before\">\r\n Press F1 for more details\r\n </div>\r\n }\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!!(atShiftPatternService.activePattern$ | async)) {\r\n <div class=\"detail-block\">\r\n <!-- <div class=\"tenant-settings\">\r\n <div class=\"the-six-wrapper\" [appTooltip]=\"lang==='vi' ? 'C\u00E0i \u0111\u1EB7t th\u00EAm' : 'More settings'\"\r\n [showAnyway]=\"true\" (click)=\"toggleMoreSettings()\">\uD83C\uDFB2</div>\r\n </div> -->\r\n <div class=\"details-wrapper\">\r\n <div class=\"details-title\">\r\n \u2728 {{ (atShiftPatternService.activePattern$ | async)?.code }}\r\n </div>\r\n <core-at-shift-pattern-detail [data$]=\"atShiftPatternService.activePattern$\"\r\n (onCellChange)=\"onCellChange($event)\"></core-at-shift-pattern-detail>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (showMoreSettings) {\r\n <div @fadeSwitch class=\"more-settings-panel\">\r\n\r\n <div class=\"alert alert-info small mt-2\" role=\"alert\">\r\n @if (lang === 'vi') {\r\n <p class=\"mb-0\">\r\n C\u00E1c ng\u00E0y ngh\u1EC9 m\u1EB7c \u0111\u1ECBnh s\u1EBD \u0111\u01B0\u1EE3c \u00E1p d\u1EE5ng khi b\u1EA1n m\u1EDF m\u1ED9t m\u1EABu tu\u1EA7n ch\u01B0a c\u00F3 d\u1EEF li\u1EC7u.<br />\r\n B\u1EA1n c\u00F3 th\u1EC3 ch\u1ECDn nh\u1EEFng ng\u00E0y th\u01B0\u1EDDng ngh\u1EC9 (v\u00ED d\u1EE5 Th\u1EE9 B\u1EA3y, Ch\u1EE7 Nh\u1EADt) v\u00E0 g\u00E1n ca \u201COFF\u201D cho c\u00E1c ng\u00E0y \u0111\u00F3.<br />\r\n Thay \u0111\u1ED5i ch\u1EC9 \u0111\u01B0\u1EE3c l\u01B0u l\u1EA1i khi b\u1EA1n nh\u1EA5n n\u00FAt <strong>Save</strong> tr\u00EAn thanh c\u00F4ng c\u1EE5 c\u1EE7a trang.\r\n </p>\r\n } @else {\r\n <p class=\"mb-0\">\r\n Default off days are applied automatically when you open a weekly template that has no data yet.<br />\r\n You can select the usual off days (e.g., Saturday, Sunday) and assign the \u201COFF\u201D shift to them.<br />\r\n Changes will only be saved when you click <strong>Save</strong> in the page toolbar.\r\n </p>\r\n }\r\n </div>\r\n\r\n <div class=\"mb-2\">{{ lang === 'vi' ? 'Ng\u00E0y ngh\u1EC9 m\u1EB7c \u0111\u1ECBnh' : 'Default off days'}}</div>\r\n <div class=\"mb-2\">\r\n <core-sticker-collection [$items]=\"treatedAsOffDays\" [$shownFrom]=\"'weekday'\"\r\n [$initialChecked]=\"defaultTreatedAsOffDays || []\"\r\n ($checkedChange)=\"onTreatedAsOffDaysChange($event)\" />\r\n </div>\r\n <core-shift-cell [(ngModel)]=\"commonOffDayShiftCell\" />\r\n <div class=\"d-flex d-flex-end\">\r\n <div class=\"d-flex\">\r\n @if (loading) {\r\n <core-terminal-spinner />\r\n }\r\n <button class=\"btn btn-sm btn-primary me-2\" (click)=\"onMoreSettingsSave()\">Save</button>\r\n <button class=\"btn btn-sm btn-secondary\" (click)=\"onCloseMoreSettings()\">Close</button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n\r\n @if (!!loading) {\r\n <app-fullscreen-modal-loader></app-fullscreen-modal-loader>\r\n }\r\n\r\n <ng-template #sticker let-code=\"context.status\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n </ng-template>\r\n\r\n</div>", styles: [".core-at-shift-pattern-container .list-block{width:50vw}.core-at-shift-pattern-container .anim-container{height:calc(100vh - 60px);display:flex;align-items:flex-start;justify-content:flex-end}.core-at-shift-pattern-container .anim-block,.core-at-shift-pattern-container .detail-block{margin-left:15px;padding-top:50px;display:flex}.core-at-shift-pattern-container .anim-block{width:100%;flex-direction:column;align-items:center;justify-content:space-around}.core-at-shift-pattern-container .detail-block{position:relative;width:100%;align-items:flex-start;justify-content:center}.core-at-shift-pattern-container .details-wrapper{background-color:bisque;padding:0 15px 15px;width:100%;overflow-x:scroll;position:relative}.core-at-shift-pattern-container .details-wrapper .details-title{height:40px;display:flex;align-items:center;justify-content:flex-start;font-weight:700}.core-at-shift-pattern-container .details-wrapper .col-md-4{min-width:280px}.core-at-shift-pattern-container .content-wrapper{align-items:flex-start}.core-at-shift-pattern-container .more-settings-panel{font-size:13px;z-index:1;padding:15px;display:block;position:absolute;min-width:100px;min-height:100px;top:52px;right:2px;background-color:#fff;box-shadow:.4rem 0 2rem #0000002e}.core-at-shift-pattern-container .more-settings-panel .off-day-dropzone{background-color:bisque}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { 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: "component", type: CoreStickerCollectionComponent, selector: "core-sticker-collection", inputs: ["$items", "$shownFrom", "$tooltipFrom", "$initialChecked", "$showMore", "$showMoreTooltip", "$hideShowMoreIfNotSelected", "$enableFilter"], outputs: ["$checkedChange", "$onShowMore"] }, { kind: "component", type: CoreStatusStickerComponent, selector: "core-status-sticker", inputs: ["code", "caption", "width", "isTrueCode"] }, { kind: "component", type: CorePageListComponent, selector: "core-page-list", inputs: ["normalMode", "hideHeader", "hideButtonGroup", "seekerMode", "mccMode", "height", "headerWrap", "headerFirstRowHeight", "enableTimeZoneConverterForDateTimePeriodParameters", "showParamKit", "enableFilterKit", "datePeriodComparisonFor", "datePeriodComparisonForLabelKey", "statusInclusionFor", "statusInclusionForLabelKey", "statusOptionsApi", "statusOptions$", "showOrgParam", "showOrgParamDropdown", "hideGeneralSearch", "hideDatePeriodComparison", "hideStatusInclusion", "filterOperators$", "camelCaseDtoStatusIdField", "gridStatusColumn", "title", "hasIdOfStringType", "hideCheck", "apiDefinition", "columns", "useTheseColumns", "hideOrgTree", "frozen", "inlineTools", "inlineToolItems", "editRoute", "crud", "showListInlineTools", "top", "left", "hideLeft", "outerParam$", "outerFilter$", "outerSort", "outerFilterOperators", "outerInOperators", "autoResizeWithWindow", "extraManualOffset", "wrap", "rowHeight", "selfResolveCorePageHeaderButtonClick", "clearData$", "deleteValidateFn", "generateTemplateRequest", "importPreviewPath", "columnSearchDefaultOpen", "fixedPageSize", "disableDoubleClick", "noPaddingCell", "disableHighlightOnClick", "loading$", "excludedIds$", "disableDialogInformationLines", "changeTracking", "primaryKey", "changedItems$", "tabMode", "paramRows", "disableFilterHub", "autoColumnFitAvailableSpace", "ignoredDefaultActions", "checkboxExplicity", "auxOutletName", "forceReloadingFlag$"], outputs: ["corePageHeaderButtonClick", "rowClick", "rowDoubleClick", "selectedIdsChange", "selectedDataChange", "onInstanceCreated", "onInputFileBase64DataReady", "listChange"] }, { kind: "component", type: AtShiftPatternDetailComponent, selector: "core-at-shift-pattern-detail", inputs: ["data$"], outputs: ["onCellChange"] }, { kind: "component", type: FullscreenModalLoaderComponent, selector: "app-fullscreen-modal-loader", inputs: ["content"] }, { kind: "component", type: CoreShiftCellComponent, selector: "core-shift-cell", inputs: ["$readOnly", "$hideStarterPlusSign", "$hideStickersWhileDragover", "$backgroundColor"] }, { kind: "component", type: CoreTerminalSpinnerComponent, selector: "core-terminal-spinner" }, { kind: "component", type: CoreShiftCollectionComponent, selector: "core-shift-collection", inputs: ["height", "relativeMode"] }], animations: [
28500
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: AtShiftPatternComponent, isStandalone: true, selector: "core-at-shift-pattern", viewQueries: [{ propertyName: "sticker", first: true, predicate: ["sticker"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"core-at-shift-pattern-container\">\r\n\r\n <!-- <core-page-header [title]=\"title\" (buttonClick)=\"onCorePageHeaderButtonClick($event)\"></core-page-header> -->\r\n\r\n @if (workShiftDndService.shiftCollectionOpen$ | async) {\r\n <core-shift-collection [height]=\"(shiftCollectionHeight$ | async) || 800\"></core-shift-collection>\r\n }\r\n\r\n <div class=\"d-flex d-flex-between content-wrapper position-relative\">\r\n <div class=\"list-block\">\r\n <core-page-list [apiDefinition]=\"apiDefinition\" [columns]=\"columns\" [editRoute]=\"editRoute\" [crud]=\"crud\"\r\n [title]=\"title\" [autoResizeWithWindow]=\"true\" [checkboxExplicity]=\"true\"\r\n (listChange)=\"onListChange($event)\" (corePageHeaderButtonClick)=\"onCorePageHeaderButtonClick($event)\"\r\n (onInstanceCreated)=\"onInstanceCreated($event)\" (rowClick)=\"rowClick($event)\"></core-page-list>\r\n </div>\r\n\r\n @if (!(atShiftPatternService.activePattern$ | async)) {\r\n <div class=\"anim-block\">\r\n <div class=\"alert is-success\">\r\n <p class=\"alert-title\"><span class=\"ti-light-bulb\" aria-hidden=\"true\"></span>\r\n @if (lang === 'vi') {\r\n G\u1EE2I \u00DD\r\n } @else {\r\n TIP\r\n }\r\n\r\n </p>\r\n\r\n <div>\r\n @if (lang === 'vi') {\r\n M\u1EABu x\u1EBFp ca l\u00E0 c\u00F4ng c\u1EE5 tr\u1EF1c quan v\u00E0 ti\u1EC7n l\u1EE3i gi\u00FAp ph\u00F2ng nh\u00E2n s\u1EF1 (HR) qu\u1EA3n l\u00FD v\u00E0 b\u1ED1 tr\u00ED ca l\u00E0m vi\u1EC7c\r\n cho nh\u00E2n vi\u00EAn m\u1ED9t c\u00E1ch hi\u1EC7u qu\u1EA3. M\u00E0n h\u00ECnh n\u00E0y \u0111\u01B0\u1EE3c thi\u1EBFt k\u1EBF \u0111\u1EC3 \u0111\u00E1p \u1EE9ng nhu c\u1EA7u l\u1EADp k\u1EBF ho\u1EA1ch c\u00F4ng\r\n vi\u1EC7c h\u00E0ng ng\u00E0y, h\u00E0ng tu\u1EA7n ho\u1EB7c theo chu k\u1EF3 c\u1EE5 th\u1EC3, \u0111\u1EA3m b\u1EA3o t\u00EDnh linh ho\u1EA1t v\u00E0 s\u1EF1 d\u1EC5 d\u00E0ng trong qu\u1EA3n\r\n l\u00FD.\r\n\r\n <p></p>\r\n <div class=\"square-before\">\r\n <b style='color: gray;'>X\u1EBFp ca theo m\u1EABu tu\u1EA7n (WEEK)</b>:\r\n Cho ph\u00E9p HR b\u1ED1 tr\u00ED ca l\u00E0m vi\u1EC7c d\u1EF1a tr\u00EAn c\u00E1c th\u1EE9 trong tu\u1EA7n, v\u00ED d\u1EE5: th\u1EE9 Hai, th\u1EE9 Ba, v.v. Ph\u00F9 h\u1EE3p\r\n cho\r\n nh\u1EEFng chu k\u1EF3 l\u00E0m vi\u1EC7c l\u1EB7p l\u1EA1i \u0111\u1ECBnh k\u1EF3 (v\u00ED d\u1EE5: l\u1ECBch l\u00E0m vi\u1EC7c tu\u1EA7n).\r\n </div>\r\n\r\n <p></p>\r\n <div class=\"square-before\">\r\n <b style='color: gray;'>X\u1EBFp ca theo chu\u1ED7i ng\u00E0y (DAYS)</b>:\r\n D\u00E0nh cho c\u00E1c tr\u01B0\u1EDDng h\u1EE3p x\u1EBFp ca kh\u00F4ng c\u1ED1 \u0111\u1ECBnh theo th\u1EE9 trong tu\u1EA7n m\u00E0 d\u1EF1a tr\u00EAn m\u1ED9t chu\u1ED7i ng\u00E0y li\u00EAn\r\n t\u1EE5c. HR c\u00F3 th\u1EC3 ch\u1EC9 \u0111\u1ECBnh b\u1EAFt \u0111\u1EA7u t\u1EEB ng\u00E0y b\u1EA5t k\u1EF3 v\u00E0 thi\u1EBFt l\u1EADp c\u00E1c ca l\u00E0m vi\u1EC7c t\u01B0\u01A1ng \u1EE9ng.\r\n </div>\r\n\r\n <p></p>\r\n <div class=\"square-before\">\r\n \u1EA4n F1 \u0111\u1EC3 c\u00F3 th\u00EAm chi ti\u1EBFt\r\n </div>\r\n } @else {\r\n Shift Scheduling Template is an intuitive and convenient tool to help HR departments effectively\r\n manage\r\n and assign work shifts for employees. This screen is designed to meet the needs of daily, weekly, or\r\n specific cycle-based work planning, ensuring flexibility and ease of management.\r\n\r\n <p></p>\r\n <div class=\"square-before\">\r\n <b style='color: gray;'>Schedule shifts by weekly pattern (WEEK)</b>:\r\n Allows HR to assign work shifts based on days of the week, e.g., Monday, Tuesday, etc. This is\r\n suitable for recurring work cycles (e.g., weekly schedules).\r\n </div>\r\n\r\n <p></p>\r\n <div class=\"square-before\">\r\n <b style='color: gray;'>Schedule shifts by sequence of days (DAYS)</b>:\r\n Designed for cases where shifts are assigned based on a continuous sequence of days rather than\r\n specific days of the week. HR can specify any start date and set up corresponding work shifts.\r\n </div>\r\n\r\n <p></p>\r\n <div class=\"square-before\">\r\n Press F1 for more details\r\n </div>\r\n }\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!!(atShiftPatternService.activePattern$ | async)) {\r\n <div class=\"detail-block\">\r\n <!-- <div class=\"tenant-settings\">\r\n <div class=\"the-six-wrapper\" [appTooltip]=\"lang==='vi' ? 'C\u00E0i \u0111\u1EB7t th\u00EAm' : 'More settings'\"\r\n [showAnyway]=\"true\" (click)=\"toggleMoreSettings()\">\uD83C\uDFB2</div>\r\n </div> -->\r\n <div class=\"details-wrapper\">\r\n <div class=\"details-title\">\r\n \u2728 {{ (atShiftPatternService.activePattern$ | async)?.code }}\r\n </div>\r\n <core-at-shift-pattern-detail [data$]=\"atShiftPatternService.activePattern$\"\r\n (onCellChange)=\"onCellChange($event)\"></core-at-shift-pattern-detail>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (showMoreSettings) {\r\n <div @fadeSwitch class=\"more-settings-panel\">\r\n\r\n <div class=\"alert alert-info small mt-2\" role=\"alert\">\r\n @if (lang === 'vi') {\r\n <p class=\"mb-0\">\r\n C\u00E1c ng\u00E0y ngh\u1EC9 m\u1EB7c \u0111\u1ECBnh s\u1EBD \u0111\u01B0\u1EE3c \u00E1p d\u1EE5ng khi b\u1EA1n m\u1EDF m\u1ED9t m\u1EABu tu\u1EA7n ch\u01B0a c\u00F3 d\u1EEF li\u1EC7u.<br />\r\n B\u1EA1n c\u00F3 th\u1EC3 ch\u1ECDn nh\u1EEFng ng\u00E0y th\u01B0\u1EDDng ngh\u1EC9 (v\u00ED d\u1EE5 Th\u1EE9 B\u1EA3y, Ch\u1EE7 Nh\u1EADt) v\u00E0 g\u00E1n ca \u201COFF\u201D cho c\u00E1c ng\u00E0y \u0111\u00F3.<br />\r\n Thay \u0111\u1ED5i ch\u1EC9 \u0111\u01B0\u1EE3c l\u01B0u l\u1EA1i khi b\u1EA1n nh\u1EA5n n\u00FAt <strong>Save</strong> tr\u00EAn thanh c\u00F4ng c\u1EE5 c\u1EE7a trang.\r\n </p>\r\n } @else {\r\n <p class=\"mb-0\">\r\n Default off days are applied automatically when you open a weekly template that has no data yet.<br />\r\n You can select the usual off days (e.g., Saturday, Sunday) and assign the \u201COFF\u201D shift to them.<br />\r\n Changes will only be saved when you click <strong>Save</strong> in the page toolbar.\r\n </p>\r\n }\r\n </div>\r\n\r\n <div class=\"mb-2\">{{ lang === 'vi' ? 'Ng\u00E0y ngh\u1EC9 m\u1EB7c \u0111\u1ECBnh' : 'Default off days'}}</div>\r\n <div class=\"mb-2\">\r\n <core-sticker-collection [$items]=\"treatedAsOffDays\" [$shownFrom]=\"'weekday'\"\r\n [$initialChecked]=\"defaultTreatedAsOffDays || []\"\r\n ($checkedChange)=\"onTreatedAsOffDaysChange($event)\" />\r\n </div>\r\n <core-shift-cell [(ngModel)]=\"commonOffDayShiftCell\" />\r\n <div class=\"d-flex d-flex-end\">\r\n <div class=\"d-flex\">\r\n @if (loading) {\r\n <core-terminal-spinner />\r\n }\r\n <button class=\"btn btn-sm btn-primary me-2\" (click)=\"onMoreSettingsSave()\">Save</button>\r\n <button class=\"btn btn-sm btn-secondary\" (click)=\"onCloseMoreSettings()\">Close</button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n\r\n @if (!!loading) {\r\n <app-fullscreen-modal-loader></app-fullscreen-modal-loader>\r\n }\r\n\r\n <ng-template #sticker let-code=\"context.status\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n </ng-template>\r\n\r\n</div>", styles: [".core-at-shift-pattern-container .list-block{width:50vw}.core-at-shift-pattern-container .anim-container{height:calc(100vh - 60px);display:flex;align-items:flex-start;justify-content:flex-end}.core-at-shift-pattern-container .anim-block,.core-at-shift-pattern-container .detail-block{margin-left:15px;padding-top:50px;display:flex}.core-at-shift-pattern-container .anim-block{width:100%;flex-direction:column;align-items:center;justify-content:space-around}.core-at-shift-pattern-container .detail-block{position:relative;width:100%;align-items:flex-start;justify-content:center}.core-at-shift-pattern-container .details-wrapper{background-color:bisque;padding:0 15px 15px;width:100%;overflow-x:scroll;position:relative}.core-at-shift-pattern-container .details-wrapper .details-title{height:40px;display:flex;align-items:center;justify-content:flex-start;font-weight:700}.core-at-shift-pattern-container .details-wrapper .col-md-4{min-width:280px}.core-at-shift-pattern-container .content-wrapper{align-items:flex-start}.core-at-shift-pattern-container .more-settings-panel{font-size:13px;z-index:1;padding:15px;display:block;position:absolute;min-width:100px;min-height:100px;top:52px;right:2px;background-color:#fff;box-shadow:.4rem 0 2rem #0000002e}.core-at-shift-pattern-container .more-settings-panel .off-day-dropzone{background-color:bisque}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { 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: "component", type: CoreStickerCollectionComponent, selector: "core-sticker-collection", inputs: ["$items", "$shownFrom", "$tooltipFrom", "$initialChecked", "$showMore", "$showMoreTooltip", "$hideShowMoreIfNotSelected", "$enableFilter"], outputs: ["$checkedChange", "$onShowMore"] }, { kind: "component", type: CoreStatusStickerComponent, selector: "core-status-sticker", inputs: ["code", "caption", "width", "isTrueCode"] }, { kind: "component", type: CorePageListComponent, selector: "core-page-list", inputs: ["normalMode", "hideHeader", "hideButtonGroup", "seekerMode", "mccMode", "height", "headerWrap", "headerFirstRowHeight", "enableTimeZoneConverterForDateTimePeriodParameters", "showParamKit", "enableFilterKit", "datePeriodComparisonFor", "datePeriodComparisonForLabelKey", "statusInclusionFor", "statusInclusionForLabelKey", "statusOptionsApi", "statusOptions$", "showOrgParam", "showOrgParamDropdown", "hideGeneralSearch", "hideDatePeriodComparison", "hideStatusInclusion", "filterOperators$", "camelCaseDtoStatusIdField", "gridStatusColumn", "title", "hasIdOfStringType", "hideCheck", "apiDefinition", "columns", "useTheseColumns", "hideOrgTree", "frozen", "inlineTools", "inlineToolItems", "editRoute", "crud", "showListInlineTools", "top", "left", "hideLeft", "outerParam$", "outerFilter$", "outerSort", "outerFilterOperators", "outerInOperators", "autoResizeWithWindow", "extraManualOffset", "wrap", "rowHeight", "selfResolveCorePageHeaderButtonClick", "clearData$", "deleteValidateFn", "generateTemplateRequest", "importPreviewPath", "columnSearchDefaultOpen", "fixedPageSize", "disableDoubleClick", "noPaddingCell", "disableHighlightOnClick", "loading$", "excludedIds$", "disableDialogInformationLines", "changeTracking", "primaryKey", "changedItems$", "tabMode", "paramRows", "disableFilterHub", "autoColumnFitAvailableSpace", "ignoredDefaultActions", "checkboxExplicity", "auxOutletName", "forceReloadingFlag$"], outputs: ["corePageHeaderButtonClick", "rowClick", "rowDoubleClick", "selectedIdsChange", "selectedDataChange", "onInstanceCreated", "onInputFileBase64DataReady", "listChange"] }, { kind: "component", type: AtShiftPatternDetailComponent, selector: "core-at-shift-pattern-detail", inputs: ["data$"], outputs: ["onCellChange"] }, { kind: "component", type: FullscreenModalLoaderComponent, selector: "app-fullscreen-modal-loader", inputs: ["content"] }, { kind: "component", type: CoreShiftCellComponent, selector: "core-shift-cell", inputs: ["$readOnly", "$hideStarterPlusSign", "$hideStickersWhileDragover", "$backgroundColor"] }, { kind: "component", type: CoreTerminalSpinnerComponent, selector: "core-terminal-spinner" }, { kind: "component", type: CoreShiftCollectionComponent, selector: "core-shift-collection", inputs: ["height", "disabled", "relativeMode"] }], animations: [
28489
28501
  trigger('fadeSwitch', [
28490
28502
  state('visible', style({ opacity: 1 })),
28491
28503
  state('hidden', style({ opacity: 0 })),
@@ -30576,7 +30588,7 @@ class AtWorksignComponent extends BaseComponent {
30576
30588
  }
30577
30589
  }
30578
30590
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: AtWorksignComponent, deps: [{ token: MultiLanguageService }, { token: CoreButtonGroupService }, { token: OrganizationService }, { token: AppService }, { token: AtWorksignService }, { token: AlertService }, { token: CorePageListService }, { token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: DialogService }, { token: WorkShiftDndService }, { token: CoreDatetimeService }], target: i0.ɵɵFactoryTarget.Component }); }
30579
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: AtWorksignComponent, isStandalone: true, selector: "core-at-worksign", viewQueries: [{ propertyName: "$shiftCells", predicate: ["shiftCell"], descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "orgNameWithLock", first: true, predicate: ["orgNameWithLock"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@if (!!$longTaskIsRunning()) {\r\n<core-api-progress></core-api-progress>\r\n}\r\n<div class=\"at-worksign-container\">\r\n\r\n <!-- @if ($loading()) {\r\n <app-fullscreen-modal-loader [content]=\"threeDots\"></app-fullscreen-modal-loader>\r\n } -->\r\n\r\n <core-page-list [top]=\"top\" [title]=\"title\" [apiDefinition]=\"apiDefinition\" [columns]=\"columns\"\r\n [disableDoubleClick]=\"true\" [selfResolveCorePageHeaderButtonClick]=\"true\" [rowHeight]=\"'71px'\" [frozen]=\"2\"\r\n [columnSearchDefaultOpen]=\"true\" [editRoute]=\"editRoute\" [crud]=\"crud\" [loading$]=\"loading$\" [normalMode]=\"true\"\r\n [outerInOperators]=\"outerInOperators\" [outerParam$]=\"outerParam$\" [changeTracking]=\"true\"\r\n [changedItems$]=\"changedItems$\" [outerFilterOperators]=\"$filterOperators()\" [extraManualOffset]=\"55\"\r\n [fixedPageSize]=\"10\" [autoResizeWithWindow]=\"true\" (corePageHeaderButtonClick)=\"onCorePageHeaderButtonClick($event)\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (onInstanceCreated)=\"onListInstanceCreated($event)\"\r\n [autoColumnFitAvailableSpace]=\"false\"></core-page-list>\r\n\r\n @if (showShiftCollection) {\r\n <core-shift-collection [height]=\"800\"></core-shift-collection>\r\n }\r\n\r\n <!-- @for (day of $visibleDays(); track $index) {\r\n <ng-template #shiftCell let-context=\"context\" let-isLocked=\"context.isLocked\">\r\n {{ context['shifts' + ($index + 1)] | json }}\r\n <core-shift-cell [ngModel]=\"context['shifts' + ($index + 1)]\" [$readOnly]=\"isLocked\"\r\n (ngModelChange)=\"onCellChange('shifts' + ($index + 1), $event, context)\"></core-shift-cell>\r\n </ng-template>\r\n } -->\r\n\r\n @for (dateStr of $visibleDays(); track $index) {\r\n <ng-template #shiftCell let-context=\"context\" let-isLocked=\"context.isLocked\">\r\n <core-shift-cell [ngModel]=\"context.shiftMap?.[dateStr]\" [$readOnly]=\"isLocked\"\r\n (ngModelChange)=\"onCellChange(dateStr, $event, context)\">\r\n </core-shift-cell>\r\n </ng-template>\r\n }\r\n\r\n <ng-template #threeDots>\r\n <app-threedots></app-threedots>\r\n </ng-template>\r\n\r\n <ng-template #orgNameWithLock let-context=\"context\" let-orgName=\"context.orgName\" let-isLocked=\"context.isLocked\">\r\n <div class=\"d-flex d-flex-start orgNameWrapper\" [htmlTooltip]=\"orgBranch\"\r\n [tooltipContext]=\"{ orgId: context['orgId'] }\">\r\n <div class=\"icon-wrapper\">\r\n @if (!!isLocked) {\r\n \uD83D\uDD12\r\n <!-- <i class=\"feather-lock\"></i> -->\r\n } @else {\r\n \uD83D\uDD16\r\n <!-- <i class=\"feather-bookmark\"></i> -->\r\n }\r\n </div>\r\n <div class=\"org-name\">{{ orgName }}</div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #orgBranch let-orgId=\"orgId\">\r\n <core-org-branch [$currentId]=\"orgId\" />\r\n </ng-template>\r\n\r\n <ng-template #top>\r\n <div class=\"d-flex d-flex-start mb15 pd5\">\r\n <div class=\"param-wrapper w250 mr15\">\r\n <div class=\"form-group vertical\">\r\n <core-org-param [accessorMode]=\"orgParamAccessorMode\" [(ngModel)]=\"orgIds\"\r\n (ngModelChange)=\"onOrgIdsChange($event)\"></core-org-param>\r\n </div>\r\n </div>\r\n <div class=\"param-wrapper w150 mr15\">\r\n <div class=\"form-group vertical\">\r\n <core-month-selector [(ngModel)]=\"currentMonth\"\r\n (ngModelChange)=\"onCurrentMonthChange($event)\"></core-month-selector>\r\n </div>\r\n </div>\r\n <div class=\"param-wrapper w150 mr15\">\r\n <div class=\"form-group vertical\">\r\n <core-dropdown [paramMode]=\"true\" [(ngModel)]=\"subPeriodOption\"\r\n (ngModelChange)=\"onSubPeriodOptionChange($event)\" [options$]=\"subPeriodOptions$\"\r\n [getByIdObject$]=\"subPeriodGetByIdObject$\" [shownFrom]=\"''\" [clearDisable]=\"true\"\r\n [fitHeightWithItemCount]=\"true\"></core-dropdown>\r\n </div>\r\n </div>\r\n <div class=\"param-wrapper w150 mr15\">\r\n <div class=\"form-group vertical\">\r\n <div class=\"d-flex d-flex-around\">\r\n @if (!fullPeriodMode) {\r\n <div (click)=\"goPreviousSevenDays()\" [class.disabled]=\"$startDateString()===$startPeriodString()\"><i\r\n class=\"feather-arrow-left fs24 color-gray pointer\"></i></div>\r\n }\r\n <h6 style=\"color: gray;\" class=\"h35 d-flex no-margin user-select-none\">{{ $startDate() | tableCell:\r\n \"DATE_DDMM\"\r\n :\r\n lang }} - {{\r\n $endDate() | tableCell: \"DATE_DDMM\" : lang }}</h6>\r\n @if (!fullPeriodMode) {\r\n <div (click)=\"goNextSevenDays()\" [class.disabled]=\"$endDateString()===$endPeriodString()\"><i\r\n class=\"feather-arrow-right fs24 color-gray pointer\"></i></div>\r\n }\r\n @if ($loading()) {\r\n <core-terminal-spinner />\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n</div>", styles: [".icon-wrapper{display:block;width:20px;height:20px}.icon-wrapper i{color:#d3d3d3;font-size:20px}.icon-wrapper i.feather-lock{color:#000}.org-name{display:block;margin-left:8px;width:100%;overflow:hidden;text-overflow:ellipsis}.pd5{padding:5px}.pointer{cursor:pointer}\n"], dependencies: [{ kind: "component", type: CoreShiftCellComponent, selector: "core-shift-cell", inputs: ["$readOnly", "$hideStarterPlusSign", "$hideStickersWhileDragover", "$backgroundColor"] }, { kind: "component", type: CoreTerminalSpinnerComponent, selector: "core-terminal-spinner" }, { kind: "component", type: CoreOrgBranchComponent, selector: "core-org-branch", inputs: ["$levelUp", "$currentId"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { 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: "component", type: CorePageListComponent, selector: "core-page-list", inputs: ["normalMode", "hideHeader", "hideButtonGroup", "seekerMode", "mccMode", "height", "headerWrap", "headerFirstRowHeight", "enableTimeZoneConverterForDateTimePeriodParameters", "showParamKit", "enableFilterKit", "datePeriodComparisonFor", "datePeriodComparisonForLabelKey", "statusInclusionFor", "statusInclusionForLabelKey", "statusOptionsApi", "statusOptions$", "showOrgParam", "showOrgParamDropdown", "hideGeneralSearch", "hideDatePeriodComparison", "hideStatusInclusion", "filterOperators$", "camelCaseDtoStatusIdField", "gridStatusColumn", "title", "hasIdOfStringType", "hideCheck", "apiDefinition", "columns", "useTheseColumns", "hideOrgTree", "frozen", "inlineTools", "inlineToolItems", "editRoute", "crud", "showListInlineTools", "top", "left", "hideLeft", "outerParam$", "outerFilter$", "outerSort", "outerFilterOperators", "outerInOperators", "autoResizeWithWindow", "extraManualOffset", "wrap", "rowHeight", "selfResolveCorePageHeaderButtonClick", "clearData$", "deleteValidateFn", "generateTemplateRequest", "importPreviewPath", "columnSearchDefaultOpen", "fixedPageSize", "disableDoubleClick", "noPaddingCell", "disableHighlightOnClick", "loading$", "excludedIds$", "disableDialogInformationLines", "changeTracking", "primaryKey", "changedItems$", "tabMode", "paramRows", "disableFilterHub", "autoColumnFitAvailableSpace", "ignoredDefaultActions", "checkboxExplicity", "auxOutletName", "forceReloadingFlag$"], outputs: ["corePageHeaderButtonClick", "rowClick", "rowDoubleClick", "selectedIdsChange", "selectedDataChange", "onInstanceCreated", "onInputFileBase64DataReady", "listChange"] }, { kind: "component", type: CoreDropdownComponent, selector: "core-dropdown", inputs: ["getByIdObject$", "paramMode", "shownFrom", "options$", "height", "placeholder", "loading", "warningDisable", "clearDisable", "fitHeightWithItemCount", "itemHeight", "optionApiDriven", "optionApi", "optionHttpVerb", "optionHttpPayload", "optionValueFrom", "optionTextFrom"] }, { kind: "component", type: CoreOrgParamComponent, selector: "core-org-param", inputs: ["accessorMode"] }, { kind: "component", type: CoreMonthSelectorComponent, selector: "core-month-selector", inputs: ["align", "placeholder"], outputs: ["onYearClick"] }, { kind: "component", type: CoreShiftCollectionComponent, selector: "core-shift-collection", inputs: ["height", "relativeMode"] }, { kind: "pipe", type: TableCellPipe, name: "tableCell" }, { kind: "component", type: ThreedotsComponent, selector: "app-threedots" }, { kind: "component", type: CoreApiProgressComponent, selector: "core-api-progress", outputs: ["onClose"] }, { kind: "directive", type: HtmlTooltipDirective, selector: "[htmlTooltip]", inputs: ["htmlTooltip", "tooltipContext", "maxWidthUnset", "backgroundColor", "hold$"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30591
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: AtWorksignComponent, isStandalone: true, selector: "core-at-worksign", viewQueries: [{ propertyName: "$shiftCells", predicate: ["shiftCell"], descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "orgNameWithLock", first: true, predicate: ["orgNameWithLock"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@if (!!$longTaskIsRunning()) {\r\n<core-api-progress></core-api-progress>\r\n}\r\n<div class=\"at-worksign-container\">\r\n\r\n <!-- @if ($loading()) {\r\n <app-fullscreen-modal-loader [content]=\"threeDots\"></app-fullscreen-modal-loader>\r\n } -->\r\n\r\n <core-page-list [top]=\"top\" [title]=\"title\" [apiDefinition]=\"apiDefinition\" [columns]=\"columns\"\r\n [disableDoubleClick]=\"true\" [selfResolveCorePageHeaderButtonClick]=\"true\" [rowHeight]=\"'71px'\" [frozen]=\"2\"\r\n [columnSearchDefaultOpen]=\"true\" [editRoute]=\"editRoute\" [crud]=\"crud\" [loading$]=\"loading$\" [normalMode]=\"true\"\r\n [outerInOperators]=\"outerInOperators\" [outerParam$]=\"outerParam$\" [changeTracking]=\"true\"\r\n [changedItems$]=\"changedItems$\" [outerFilterOperators]=\"$filterOperators()\" [extraManualOffset]=\"55\"\r\n [fixedPageSize]=\"10\" [autoResizeWithWindow]=\"true\" (corePageHeaderButtonClick)=\"onCorePageHeaderButtonClick($event)\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (onInstanceCreated)=\"onListInstanceCreated($event)\"\r\n [autoColumnFitAvailableSpace]=\"false\"></core-page-list>\r\n\r\n @if (showShiftCollection) {\r\n <core-shift-collection [height]=\"800\"></core-shift-collection>\r\n }\r\n\r\n <!-- @for (day of $visibleDays(); track $index) {\r\n <ng-template #shiftCell let-context=\"context\" let-isLocked=\"context.isLocked\">\r\n {{ context['shifts' + ($index + 1)] | json }}\r\n <core-shift-cell [ngModel]=\"context['shifts' + ($index + 1)]\" [$readOnly]=\"isLocked\"\r\n (ngModelChange)=\"onCellChange('shifts' + ($index + 1), $event, context)\"></core-shift-cell>\r\n </ng-template>\r\n } -->\r\n\r\n @for (dateStr of $visibleDays(); track $index) {\r\n <ng-template #shiftCell let-context=\"context\" let-isLocked=\"context.isLocked\">\r\n <core-shift-cell [ngModel]=\"context.shiftMap?.[dateStr]\" [$readOnly]=\"isLocked\"\r\n (ngModelChange)=\"onCellChange(dateStr, $event, context)\">\r\n </core-shift-cell>\r\n </ng-template>\r\n }\r\n\r\n <ng-template #threeDots>\r\n <app-threedots></app-threedots>\r\n </ng-template>\r\n\r\n <ng-template #orgNameWithLock let-context=\"context\" let-orgName=\"context.orgName\" let-isLocked=\"context.isLocked\">\r\n <div class=\"d-flex d-flex-start orgNameWrapper\" [htmlTooltip]=\"orgBranch\"\r\n [tooltipContext]=\"{ orgId: context['orgId'] }\">\r\n <div class=\"icon-wrapper\">\r\n @if (!!isLocked) {\r\n \uD83D\uDD12\r\n <!-- <i class=\"feather-lock\"></i> -->\r\n } @else {\r\n \uD83D\uDD16\r\n <!-- <i class=\"feather-bookmark\"></i> -->\r\n }\r\n </div>\r\n <div class=\"org-name\">{{ orgName }}</div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #orgBranch let-orgId=\"orgId\">\r\n <core-org-branch [$currentId]=\"orgId\" />\r\n </ng-template>\r\n\r\n <ng-template #top>\r\n <div class=\"d-flex d-flex-start mb15 pd5\">\r\n <div class=\"param-wrapper w250 mr15\">\r\n <div class=\"form-group vertical\">\r\n <core-org-param [accessorMode]=\"orgParamAccessorMode\" [(ngModel)]=\"orgIds\"\r\n (ngModelChange)=\"onOrgIdsChange($event)\"></core-org-param>\r\n </div>\r\n </div>\r\n <div class=\"param-wrapper w150 mr15\">\r\n <div class=\"form-group vertical\">\r\n <core-month-selector [(ngModel)]=\"currentMonth\"\r\n (ngModelChange)=\"onCurrentMonthChange($event)\"></core-month-selector>\r\n </div>\r\n </div>\r\n <div class=\"param-wrapper w150 mr15\">\r\n <div class=\"form-group vertical\">\r\n <core-dropdown [paramMode]=\"true\" [(ngModel)]=\"subPeriodOption\"\r\n (ngModelChange)=\"onSubPeriodOptionChange($event)\" [options$]=\"subPeriodOptions$\"\r\n [getByIdObject$]=\"subPeriodGetByIdObject$\" [shownFrom]=\"''\" [clearDisable]=\"true\"\r\n [fitHeightWithItemCount]=\"true\"></core-dropdown>\r\n </div>\r\n </div>\r\n <div class=\"param-wrapper w150 mr15\">\r\n <div class=\"form-group vertical\">\r\n <div class=\"d-flex d-flex-around\">\r\n @if (!fullPeriodMode) {\r\n <div (click)=\"goPreviousSevenDays()\" [class.disabled]=\"$startDateString()===$startPeriodString()\"><i\r\n class=\"feather-arrow-left fs24 color-gray pointer\"></i></div>\r\n }\r\n <h6 style=\"color: gray;\" class=\"h35 d-flex no-margin user-select-none\">{{ $startDate() | tableCell:\r\n \"DATE_DDMM\"\r\n :\r\n lang }} - {{\r\n $endDate() | tableCell: \"DATE_DDMM\" : lang }}</h6>\r\n @if (!fullPeriodMode) {\r\n <div (click)=\"goNextSevenDays()\" [class.disabled]=\"$endDateString()===$endPeriodString()\"><i\r\n class=\"feather-arrow-right fs24 color-gray pointer\"></i></div>\r\n }\r\n @if ($loading()) {\r\n <core-terminal-spinner />\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n</div>", styles: [".icon-wrapper{display:block;width:20px;height:20px}.icon-wrapper i{color:#d3d3d3;font-size:20px}.icon-wrapper i.feather-lock{color:#000}.org-name{display:block;margin-left:8px;width:100%;overflow:hidden;text-overflow:ellipsis}.pd5{padding:5px}.pointer{cursor:pointer}\n"], dependencies: [{ kind: "component", type: CoreShiftCellComponent, selector: "core-shift-cell", inputs: ["$readOnly", "$hideStarterPlusSign", "$hideStickersWhileDragover", "$backgroundColor"] }, { kind: "component", type: CoreTerminalSpinnerComponent, selector: "core-terminal-spinner" }, { kind: "component", type: CoreOrgBranchComponent, selector: "core-org-branch", inputs: ["$levelUp", "$currentId"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { 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: "component", type: CorePageListComponent, selector: "core-page-list", inputs: ["normalMode", "hideHeader", "hideButtonGroup", "seekerMode", "mccMode", "height", "headerWrap", "headerFirstRowHeight", "enableTimeZoneConverterForDateTimePeriodParameters", "showParamKit", "enableFilterKit", "datePeriodComparisonFor", "datePeriodComparisonForLabelKey", "statusInclusionFor", "statusInclusionForLabelKey", "statusOptionsApi", "statusOptions$", "showOrgParam", "showOrgParamDropdown", "hideGeneralSearch", "hideDatePeriodComparison", "hideStatusInclusion", "filterOperators$", "camelCaseDtoStatusIdField", "gridStatusColumn", "title", "hasIdOfStringType", "hideCheck", "apiDefinition", "columns", "useTheseColumns", "hideOrgTree", "frozen", "inlineTools", "inlineToolItems", "editRoute", "crud", "showListInlineTools", "top", "left", "hideLeft", "outerParam$", "outerFilter$", "outerSort", "outerFilterOperators", "outerInOperators", "autoResizeWithWindow", "extraManualOffset", "wrap", "rowHeight", "selfResolveCorePageHeaderButtonClick", "clearData$", "deleteValidateFn", "generateTemplateRequest", "importPreviewPath", "columnSearchDefaultOpen", "fixedPageSize", "disableDoubleClick", "noPaddingCell", "disableHighlightOnClick", "loading$", "excludedIds$", "disableDialogInformationLines", "changeTracking", "primaryKey", "changedItems$", "tabMode", "paramRows", "disableFilterHub", "autoColumnFitAvailableSpace", "ignoredDefaultActions", "checkboxExplicity", "auxOutletName", "forceReloadingFlag$"], outputs: ["corePageHeaderButtonClick", "rowClick", "rowDoubleClick", "selectedIdsChange", "selectedDataChange", "onInstanceCreated", "onInputFileBase64DataReady", "listChange"] }, { kind: "component", type: CoreDropdownComponent, selector: "core-dropdown", inputs: ["getByIdObject$", "paramMode", "shownFrom", "options$", "height", "placeholder", "loading", "warningDisable", "clearDisable", "fitHeightWithItemCount", "itemHeight", "optionApiDriven", "optionApi", "optionHttpVerb", "optionHttpPayload", "optionValueFrom", "optionTextFrom"] }, { kind: "component", type: CoreOrgParamComponent, selector: "core-org-param", inputs: ["accessorMode"] }, { kind: "component", type: CoreMonthSelectorComponent, selector: "core-month-selector", inputs: ["align", "placeholder"], outputs: ["onYearClick"] }, { kind: "component", type: CoreShiftCollectionComponent, selector: "core-shift-collection", inputs: ["height", "disabled", "relativeMode"] }, { kind: "pipe", type: TableCellPipe, name: "tableCell" }, { kind: "component", type: ThreedotsComponent, selector: "app-threedots" }, { kind: "component", type: CoreApiProgressComponent, selector: "core-api-progress", outputs: ["onClose"] }, { kind: "directive", type: HtmlTooltipDirective, selector: "[htmlTooltip]", inputs: ["htmlTooltip", "tooltipContext", "maxWidthUnset", "backgroundColor", "hold$"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30580
30592
  }
30581
30593
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: AtWorksignComponent, decorators: [{
30582
30594
  type: Component,
@@ -31574,7 +31586,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
31574
31586
  const hrmSchemaRoutes = [
31575
31587
  {
31576
31588
  path: '',
31577
- loadComponent: () => import('./ngx-histaff-alpha-hrm-schema.component-BEt_LyNb.mjs').then(m => m.HrmSchemaComponent)
31589
+ loadComponent: () => import('./ngx-histaff-alpha-hrm-schema.component-DhcmippJ.mjs').then(m => m.HrmSchemaComponent)
31578
31590
  }
31579
31591
  ];
31580
31592
 
@@ -33747,7 +33759,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
33747
33759
  const simpleChatRoutes = [
33748
33760
  {
33749
33761
  path: '',
33750
- loadComponent: () => import('./ngx-histaff-alpha-simple-chat.component-pL0ykKNj.mjs').then(m => m.SimpleChatComponent)
33762
+ loadComponent: () => import('./ngx-histaff-alpha-simple-chat.component-Da4H2k5o.mjs').then(m => m.SimpleChatComponent)
33751
33763
  }
33752
33764
  ];
33753
33765
 
@@ -36186,185 +36198,1922 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
36186
36198
  ], template: "<div class=\"modal-container\">\r\n <div class=\"modal-container-root\">\r\n <div class=\"edit-container\">\r\n\r\n <core-page-header [title]=\"'EDIT_ACTION_SVG_ICON'\" [hideButtonGroup]=\"true\"></core-page-header>\r\n\r\n <div class=\"object-property w-100 fw700 color-gray\">\r\n <div>{{ id }} <span> \u2022 </span> {{ code }} <span> \u2022 </span> {{ (code || '') | translate: lang }} </div>\r\n </div>\r\n\r\n <div class=\"h15\"></div>\r\n\r\n <div class=\"d-flex d-flex-between\">\r\n\r\n <div class=\"entry\">\r\n <div class=\"label\">Enter Svg element here:</div>\r\n <textarea class=\"form-control\" [(ngModel)]=\"svg\" [rows]=\"'10'\"\r\n [ngStyle]=\"{ height: 'unset'}\"></textarea>\r\n </div>\r\n <div class=\"preview d-flex d-flex-v d-flex-between\">\r\n <div class=\"label\">Preview:</div>\r\n <div class=\"preview-icon\" [innerHtml]=\"svg | stringHtml\">\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"h15\"></div>\r\n <div class=\"d-flex d-flex-end\">\r\n <core-button-group-vns [showCaption]=\"true\" [forHeader]=\"false\" (buttonClick)=\"onButtonClick($event)\"\r\n [shownItems]=\"buttonItems\" class=\"buttonGroupCustom\"></core-button-group-vns>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".edit-container{width:800px;height:400px;padding:0 15px 15px;background-color:#fff}.edit-container .entry{width:655px}.edit-container .preview{width:100px;height:100px}\n"] }]
36187
36199
  }], ctorParameters: () => [{ type: MultiLanguageService }, { type: ActionService }, { type: AppService }, { type: AlertService }] });
36188
36200
 
36189
- class CorePaginationComponent {
36190
- constructor() {
36191
- this.$currentPage = input.required();
36192
- this.$height = input.required();
36193
- this.$pageCount = input.required();
36194
- this.$loading = input.required();
36195
- this.$suspendCurrentPageSubscription = input();
36196
- this.$showAdd = input();
36197
- this.$background = input();
36198
- this.$fixedPageSize = input();
36199
- this.$onClickAdd = output();
36200
- this.$container = viewChild('container');
36201
- this.$current = viewChild('current');
36202
- this.$aperture = viewChild('aperture');
36203
- this.$currentButtonContent = signal('1');
36204
- this.$suspendCurrentPage = signal(true);
36205
- this.$navigationDirection = signal(1);
36206
- this.subscriptions = [];
36207
- }
36208
- ngOnInit() { }
36209
- goFirst() {
36210
- this.$navigationDirection.set(-1);
36211
- this.$suspendCurrentPage.set(false);
36212
- setTimeout(() => {
36213
- if (!!this.$pageCount())
36214
- this.$currentPage().next(1);
36215
- this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotatebackwards');
36216
- });
36217
- }
36218
- goLast() {
36219
- this.$navigationDirection.set(1);
36220
- this.$suspendCurrentPage.set(false);
36221
- setTimeout(() => {
36222
- if (!!this.$pageCount())
36223
- this.$currentPage().next(this.$pageCount());
36224
- this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotateforwards');
36225
- });
36201
+ const COM_MOKEUP_DATA = [
36202
+ {
36203
+ "id": 2,
36204
+ "name": "Hanoi Office Test",
36205
+ "parentId": 1,
36206
+ "orderNum": 99999,
36207
+ "protected": false,
36208
+ "level": null,
36209
+ "code": "HOT",
36210
+ "isActive": true
36211
+ },
36212
+ {
36213
+ "id": 3,
36214
+ "name": "Corporate Group ",
36215
+ "parentId": 2,
36216
+ "orderNum": 99999,
36217
+ "protected": false,
36218
+ "level": null,
36219
+ "code": "CG",
36220
+ "isActive": true
36221
+ },
36222
+ {
36223
+ "id": 4,
36224
+ "name": "BACKEND_ONLY.HU_ORGANIZATION.NAME.TI",
36225
+ "parentId": 2,
36226
+ "orderNum": 99999,
36227
+ "protected": false,
36228
+ "level": null,
36229
+ "code": "TI",
36230
+ "isActive": true
36231
+ },
36232
+ {
36233
+ "id": 5,
36234
+ "name": "Project and Investment",
36235
+ "parentId": 2,
36236
+ "orderNum": 99999,
36237
+ "protected": false,
36238
+ "level": null,
36239
+ "code": "PI",
36240
+ "isActive": true
36241
+ },
36242
+ {
36243
+ "id": 6,
36244
+ "name": "Treasury & Accounting Department",
36245
+ "parentId": 3,
36246
+ "orderNum": 99999,
36247
+ "protected": false,
36248
+ "level": null,
36249
+ "code": "TA",
36250
+ "isActive": true
36251
+ },
36252
+ {
36253
+ "id": 7,
36254
+ "name": "Legal &Risk Management department",
36255
+ "parentId": 3,
36256
+ "orderNum": 99999,
36257
+ "protected": false,
36258
+ "level": null,
36259
+ "code": "LR",
36260
+ "isActive": true
36261
+ },
36262
+ {
36263
+ "id": 8,
36264
+ "name": "Corporate Planning & Coordination department",
36265
+ "parentId": 3,
36266
+ "orderNum": 99999,
36267
+ "protected": false,
36268
+ "level": null,
36269
+ "code": "CC",
36270
+ "isActive": true
36271
+ },
36272
+ {
36273
+ "id": 9,
36274
+ "name": "Administration and Planning department",
36275
+ "parentId": 3,
36276
+ "orderNum": 99999,
36277
+ "protected": false,
36278
+ "level": null,
36279
+ "code": "Admin",
36280
+ "isActive": true
36281
+ },
36282
+ {
36283
+ "id": 10,
36284
+ "name": "Da Nang Office",
36285
+ "parentId": 3,
36286
+ "orderNum": 99999,
36287
+ "protected": false,
36288
+ "level": null,
36289
+ "code": "DN",
36290
+ "isActive": true
36291
+ },
36292
+ {
36293
+ "id": 11,
36294
+ "name": "Ha Noi Iron, Steel & Non-ferrous Metal department",
36295
+ "parentId": 4,
36296
+ "orderNum": 99999,
36297
+ "protected": false,
36298
+ "level": null,
36299
+ "code": "IS",
36300
+ "isActive": true
36301
+ },
36302
+ {
36303
+ "id": 12,
36304
+ "name": "Ha Noi Chemicals, Plastics and Mineral Resources department\n",
36305
+ "parentId": 4,
36306
+ "orderNum": 99999,
36307
+ "protected": false,
36308
+ "level": null,
36309
+ "code": "HNC",
36310
+ "isActive": true
36311
+ },
36312
+ {
36313
+ "id": 13,
36314
+ "name": "Mineral Resources department",
36315
+ "parentId": 4,
36316
+ "orderNum": 99999,
36317
+ "protected": false,
36318
+ "level": null,
36319
+ "code": "MR",
36320
+ "isActive": true
36321
+ },
36322
+ {
36323
+ "id": 14,
36324
+ "name": "BACKEND_ONLY.HU_ORGANIZATION.NAME.TP",
36325
+ "parentId": 5,
36326
+ "orderNum": 99999,
36327
+ "protected": false,
36328
+ "level": null,
36329
+ "code": "TP",
36330
+ "isActive": true
36331
+ },
36332
+ {
36333
+ "id": 15,
36334
+ "name": "Automotive Department Business ",
36335
+ "parentId": 5,
36336
+ "orderNum": 99999,
36337
+ "protected": false,
36338
+ "level": null,
36339
+ "code": "ADB",
36340
+ "isActive": true
36341
+ },
36342
+ {
36343
+ "id": 16,
36344
+ "name": "Environment & Infrastructure Project Business department\n",
36345
+ "parentId": 5,
36346
+ "orderNum": 99999,
36347
+ "protected": false,
36348
+ "level": null,
36349
+ "code": "EIPB",
36350
+ "isActive": true
36351
+ },
36352
+ {
36353
+ "id": 17,
36354
+ "name": "Power Infrastructure Business department",
36355
+ "parentId": 5,
36356
+ "orderNum": 99999,
36357
+ "protected": false,
36358
+ "level": null,
36359
+ "code": "PIB",
36360
+ "isActive": true
36361
+ },
36362
+ {
36363
+ "id": 18,
36364
+ "name": "General Director",
36365
+ "parentId": 3,
36366
+ "orderNum": 99999,
36367
+ "protected": false,
36368
+ "level": null,
36369
+ "code": "GD",
36370
+ "isActive": true
36371
+ },
36372
+ {
36373
+ "id": 30,
36374
+ "name": "Ho Chi Minh Office",
36375
+ "parentId": 1,
36376
+ "orderNum": 99999,
36377
+ "protected": false,
36378
+ "level": null,
36379
+ "code": "A",
36380
+ "isActive": true
36381
+ },
36382
+ {
36383
+ "id": 31,
36384
+ "name": "Corporate Group",
36385
+ "parentId": 30,
36386
+ "orderNum": 99999,
36387
+ "protected": false,
36388
+ "level": null,
36389
+ "code": "B",
36390
+ "isActive": true
36391
+ },
36392
+ {
36393
+ "id": 32,
36394
+ "name": "Metal, Chemical, Natural Resources & Living-related Business Group",
36395
+ "parentId": 30,
36396
+ "orderNum": 99999,
36397
+ "protected": false,
36398
+ "level": null,
36399
+ "code": "C",
36400
+ "isActive": true
36401
+ },
36402
+ {
36403
+ "id": 33,
36404
+ "name": "Project & Machinery Group",
36405
+ "parentId": 30,
36406
+ "orderNum": 99999,
36407
+ "protected": false,
36408
+ "level": null,
36409
+ "code": "D",
36410
+ "isActive": true
36411
+ },
36412
+ {
36413
+ "id": 43,
36414
+ "name": "Administration and Planning department ",
36415
+ "parentId": 31,
36416
+ "orderNum": 99999,
36417
+ "protected": false,
36418
+ "level": null,
36419
+ "code": "43",
36420
+ "isActive": true
36421
+ },
36422
+ {
36423
+ "id": 44,
36424
+ "name": "Treasury & Accounting Department",
36425
+ "parentId": 31,
36426
+ "orderNum": 99999,
36427
+ "protected": false,
36428
+ "level": null,
36429
+ "code": "E",
36430
+ "isActive": true
36431
+ },
36432
+ {
36433
+ "id": 45,
36434
+ "name": "Legal & Risk Management Department",
36435
+ "parentId": 31,
36436
+ "orderNum": 99999,
36437
+ "protected": false,
36438
+ "level": null,
36439
+ "code": "CZ",
36440
+ "isActive": true
36441
+ },
36442
+ {
36443
+ "id": 46,
36444
+ "name": "BACKEND_ONLY.HU_ORGANIZATION.NAME.TUBULARS PRODUCTS DEPT.",
36445
+ "parentId": 32,
36446
+ "orderNum": 99999,
36447
+ "protected": false,
36448
+ "level": null,
36449
+ "code": "F",
36450
+ "isActive": true
36451
+ },
36452
+ {
36453
+ "id": 47,
36454
+ "name": "Iron, Steel & Non-Ferrous Metal Dept",
36455
+ "parentId": 32,
36456
+ "orderNum": 99999,
36457
+ "protected": false,
36458
+ "level": null,
36459
+ "code": "G",
36460
+ "isActive": true
36461
+ },
36462
+ {
36463
+ "id": 48,
36464
+ "name": "Energy Dept.",
36465
+ "parentId": 32,
36466
+ "orderNum": 99999,
36467
+ "protected": false,
36468
+ "level": null,
36469
+ "code": "H",
36470
+ "isActive": true
36471
+ },
36472
+ {
36473
+ "id": 49,
36474
+ "name": "Chemicals and Plastics Dept",
36475
+ "parentId": 32,
36476
+ "orderNum": 99999,
36477
+ "protected": false,
36478
+ "level": null,
36479
+ "code": "I",
36480
+ "isActive": true
36481
+ },
36482
+ {
36483
+ "id": 50,
36484
+ "name": "Media, Food, Materials & Real Estate dept\n",
36485
+ "parentId": 32,
36486
+ "orderNum": 99999,
36487
+ "protected": false,
36488
+ "level": null,
36489
+ "code": "J",
36490
+ "isActive": true
36491
+ },
36492
+ {
36493
+ "id": 51,
36494
+ "name": "Transportation Project Dept",
36495
+ "parentId": 33,
36496
+ "orderNum": 99999,
36497
+ "protected": false,
36498
+ "level": null,
36499
+ "code": "K",
36500
+ "isActive": true
36501
+ },
36502
+ {
36503
+ "id": 52,
36504
+ "name": "Power Infrastructure Business Dept.",
36505
+ "parentId": 33,
36506
+ "orderNum": 99999,
36507
+ "protected": false,
36508
+ "level": null,
36509
+ "code": "L",
36510
+ "isActive": true
36511
+ },
36512
+ {
36513
+ "id": 2111,
36514
+ "name": "Corporate Planning and Coordination Department",
36515
+ "parentId": 31,
36516
+ "orderNum": 99999,
36517
+ "protected": false,
36518
+ "level": null,
36519
+ "code": "CPC",
36520
+ "isActive": true
36521
+ },
36522
+ {
36523
+ "id": 2131,
36524
+ "name": "Corporate Group test",
36525
+ "parentId": 3,
36526
+ "orderNum": 99999,
36527
+ "protected": false,
36528
+ "level": null,
36529
+ "code": "81",
36530
+ "isActive": true
36531
+ },
36532
+ {
36533
+ "id": 2132,
36534
+ "name": "phòng kiểm thử 34",
36535
+ "parentId": 1,
36536
+ "orderNum": 99999,
36537
+ "protected": false,
36538
+ "level": null,
36539
+ "code": "PKT34",
36540
+ "isActive": true
36541
+ },
36542
+ {
36543
+ "id": 22146,
36544
+ "name": "Hanoi Office",
36545
+ "parentId": 22145,
36546
+ "orderNum": 99999,
36547
+ "protected": false,
36548
+ "level": null,
36549
+ "code": "HNIZZ",
36550
+ "isActive": true
36551
+ },
36552
+ {
36553
+ "id": 22147,
36554
+ "name": "Business Development Department",
36555
+ "parentId": 22146,
36556
+ "orderNum": 99999,
36557
+ "protected": false,
36558
+ "level": null,
36559
+ "code": "BDD",
36560
+ "isActive": true
36561
+ },
36562
+ {
36563
+ "id": 22148,
36564
+ "name": "Corporate Group ",
36565
+ "parentId": 22146,
36566
+ "orderNum": 99999,
36567
+ "protected": false,
36568
+ "level": null,
36569
+ "code": "CU",
36570
+ "isActive": true
36571
+ },
36572
+ {
36573
+ "id": 22149,
36574
+ "name": "Human Resources Department",
36575
+ "parentId": 22148,
36576
+ "orderNum": 99999,
36577
+ "protected": false,
36578
+ "level": null,
36579
+ "code": "HRD",
36580
+ "isActive": true
36581
+ },
36582
+ {
36583
+ "id": 22150,
36584
+ "name": "Corporate Services Department",
36585
+ "parentId": 22148,
36586
+ "orderNum": 99999,
36587
+ "protected": false,
36588
+ "level": null,
36589
+ "code": "CSD",
36590
+ "isActive": true
36591
+ },
36592
+ {
36593
+ "id": 22151,
36594
+ "name": "Treasury & Accounting Department",
36595
+ "parentId": 22148,
36596
+ "orderNum": 99999,
36597
+ "protected": false,
36598
+ "level": null,
36599
+ "code": "T&AD",
36600
+ "isActive": true
36601
+ },
36602
+ {
36603
+ "id": 22152,
36604
+ "name": "Legal & Risk Department",
36605
+ "parentId": 22148,
36606
+ "orderNum": 99999,
36607
+ "protected": false,
36608
+ "level": null,
36609
+ "code": "L&RD",
36610
+ "isActive": true
36611
+ },
36612
+ {
36613
+ "id": 22153,
36614
+ "name": "Infrastructure, Automotive, Energy & Urban Business Group",
36615
+ "parentId": 22146,
36616
+ "orderNum": 99999,
36617
+ "protected": false,
36618
+ "level": null,
36619
+ "code": "IAE&UBG",
36620
+ "isActive": true
36621
+ },
36622
+ {
36623
+ "id": 22154,
36624
+ "name": "Automotive Business Department",
36625
+ "parentId": 22153,
36626
+ "orderNum": 99999,
36627
+ "protected": false,
36628
+ "level": null,
36629
+ "code": "ABD",
36630
+ "isActive": true
36631
+ },
36632
+ {
36633
+ "id": 22155,
36634
+ "name": "Energy Department",
36635
+ "parentId": 22153,
36636
+ "orderNum": 99999,
36637
+ "protected": false,
36638
+ "level": null,
36639
+ "code": "ED",
36640
+ "isActive": true
36641
+ },
36642
+ {
36643
+ "id": 22156,
36644
+ "name": "Energy Innovation Initiatives Department",
36645
+ "parentId": 22153,
36646
+ "orderNum": 99999,
36647
+ "protected": false,
36648
+ "level": null,
36649
+ "code": "EIID",
36650
+ "isActive": true
36651
+ },
36652
+ {
36653
+ "id": 22157,
36654
+ "name": "Power Infrastructure Business department",
36655
+ "parentId": 22153,
36656
+ "orderNum": 99999,
36657
+ "protected": false,
36658
+ "level": null,
36659
+ "code": "PIBD",
36660
+ "isActive": true
36661
+ },
36662
+ {
36663
+ "id": 22158,
36664
+ "name": "Social Infrastructure, Transportation & Urban Business Department",
36665
+ "parentId": 22153,
36666
+ "orderNum": 99999,
36667
+ "protected": false,
36668
+ "level": null,
36669
+ "code": "SIT&UBD",
36670
+ "isActive": true
36671
+ },
36672
+ {
36673
+ "id": 22159,
36674
+ "name": "Lifestyle & Chemicals Group",
36675
+ "parentId": 22146,
36676
+ "orderNum": 99999,
36677
+ "protected": false,
36678
+ "level": null,
36679
+ "code": "L&CG",
36680
+ "isActive": true
36681
+ },
36682
+ {
36683
+ "id": 22160,
36684
+ "name": "Lifestyle & Retail Business Department",
36685
+ "parentId": 22159,
36686
+ "orderNum": 99999,
36687
+ "protected": false,
36688
+ "level": null,
36689
+ "code": "L&RBD",
36690
+ "isActive": true
36691
+ },
36692
+ {
36693
+ "id": 22161,
36694
+ "name": "Chemicals & Plastics Department",
36695
+ "parentId": 22159,
36696
+ "orderNum": 99999,
36697
+ "protected": false,
36698
+ "level": null,
36699
+ "code": "C&PD",
36700
+ "isActive": true
36701
+ },
36702
+ {
36703
+ "id": 22162,
36704
+ "name": "Steel & Mineral Resources Group",
36705
+ "parentId": 22146,
36706
+ "orderNum": 99999,
36707
+ "protected": false,
36708
+ "level": null,
36709
+ "code": "S&MRG",
36710
+ "isActive": true
36711
+ },
36712
+ {
36713
+ "id": 22163,
36714
+ "name": "Hanoi Steel & Non-ferrous Department",
36715
+ "parentId": 22162,
36716
+ "orderNum": 99999,
36717
+ "protected": false,
36718
+ "level": null,
36719
+ "code": "HS&ND",
36720
+ "isActive": true
36721
+ },
36722
+ {
36723
+ "id": 22164,
36724
+ "name": "Ho Chi Minh City Office",
36725
+ "parentId": 22145,
36726
+ "orderNum": 99999,
36727
+ "protected": false,
36728
+ "level": null,
36729
+ "code": "HMCZZ",
36730
+ "isActive": true
36731
+ },
36732
+ {
36733
+ "id": 22165,
36734
+ "name": "Business Development Department",
36735
+ "parentId": 22164,
36736
+ "orderNum": 99999,
36737
+ "protected": false,
36738
+ "level": null,
36739
+ "code": "BD",
36740
+ "isActive": true
36741
+ },
36742
+ {
36743
+ "id": 22166,
36744
+ "name": "Infrastructure, Automotive, Energy & Urban Business Group",
36745
+ "parentId": 22164,
36746
+ "orderNum": 99999,
36747
+ "protected": false,
36748
+ "level": null,
36749
+ "code": "IAE&UB",
36750
+ "isActive": true
36751
+ },
36752
+ {
36753
+ "id": 22167,
36754
+ "name": "Lifestyle & Chemicals Group",
36755
+ "parentId": 22164,
36756
+ "orderNum": 99999,
36757
+ "protected": false,
36758
+ "level": null,
36759
+ "code": "L&C",
36760
+ "isActive": true
36761
+ },
36762
+ {
36763
+ "id": 22168,
36764
+ "name": "Steel & Mineral Resources Group",
36765
+ "parentId": 22164,
36766
+ "orderNum": 99999,
36767
+ "protected": false,
36768
+ "level": null,
36769
+ "code": "S&MR",
36770
+ "isActive": true
36771
+ },
36772
+ {
36773
+ "id": 22169,
36774
+ "name": "Automotive Business Department",
36775
+ "parentId": 22166,
36776
+ "orderNum": 99999,
36777
+ "protected": false,
36778
+ "level": null,
36779
+ "code": "AB",
36780
+ "isActive": true
36781
+ },
36782
+ {
36783
+ "id": 22170,
36784
+ "name": "Energy Department",
36785
+ "parentId": 22166,
36786
+ "orderNum": 99999,
36787
+ "protected": false,
36788
+ "level": null,
36789
+ "code": "EU",
36790
+ "isActive": true
36791
+ },
36792
+ {
36793
+ "id": 22171,
36794
+ "name": "Energy Innovation Initiatives Department",
36795
+ "parentId": 22166,
36796
+ "orderNum": 99999,
36797
+ "protected": false,
36798
+ "level": null,
36799
+ "code": "EII",
36800
+ "isActive": true
36801
+ },
36802
+ {
36803
+ "id": 22172,
36804
+ "name": "Social Infrastructure, Transportation & Urban Business Department",
36805
+ "parentId": 22166,
36806
+ "orderNum": 99999,
36807
+ "protected": false,
36808
+ "level": null,
36809
+ "code": "SIT&UB",
36810
+ "isActive": true
36811
+ },
36812
+ {
36813
+ "id": 22173,
36814
+ "name": "Chemicals & Plastics Department",
36815
+ "parentId": 22167,
36816
+ "orderNum": 99999,
36817
+ "protected": false,
36818
+ "level": null,
36819
+ "code": "C&P",
36820
+ "isActive": true
36821
+ },
36822
+ {
36823
+ "id": 22174,
36824
+ "name": "Digital & Food Related Department",
36825
+ "parentId": 22167,
36826
+ "orderNum": 99999,
36827
+ "protected": false,
36828
+ "level": null,
36829
+ "code": "D&FRD",
36830
+ "isActive": true
36831
+ },
36832
+ {
36833
+ "id": 22175,
36834
+ "name": "HCMC Steel & Non-ferrous",
36835
+ "parentId": 22168,
36836
+ "orderNum": 99999,
36837
+ "protected": false,
36838
+ "level": null,
36839
+ "code": "HS&N",
36840
+ "isActive": true
36841
+ },
36842
+ {
36843
+ "id": 22176,
36844
+ "name": "Tubular Products Department",
36845
+ "parentId": 22168,
36846
+ "orderNum": 99999,
36847
+ "protected": false,
36848
+ "level": null,
36849
+ "code": "TPD",
36850
+ "isActive": true
36851
+ },
36852
+ {
36853
+ "id": 22177,
36854
+ "name": "Energy Department",
36855
+ "parentId": 5,
36856
+ "orderNum": 99999,
36857
+ "protected": false,
36858
+ "level": null,
36859
+ "code": "EDB",
36860
+ "isActive": true
36861
+ },
36862
+ {
36863
+ "id": 22178,
36864
+ "name": "rtyrt",
36865
+ "parentId": 2134,
36866
+ "orderNum": 99999,
36867
+ "protected": false,
36868
+ "level": null,
36869
+ "code": "R",
36870
+ "isActive": true
36871
+ },
36872
+ {
36873
+ "id": 22179,
36874
+ "name": "vp test test",
36875
+ "parentId": 1,
36876
+ "orderNum": 99999,
36877
+ "protected": false,
36878
+ "level": null,
36879
+ "code": "VTT",
36880
+ "isActive": true
36881
+ },
36882
+ {
36883
+ "id": 22180,
36884
+ "name": "hưng yên ofice",
36885
+ "parentId": 22145,
36886
+ "orderNum": 99999,
36887
+ "protected": false,
36888
+ "level": null,
36889
+ "code": "HYO",
36890
+ "isActive": false
36891
+ },
36892
+ {
36893
+ "id": 22181,
36894
+ "name": "hy city",
36895
+ "parentId": 22179,
36896
+ "orderNum": 99999,
36897
+ "protected": false,
36898
+ "level": null,
36899
+ "code": "HC",
36900
+ "isActive": true
36901
+ },
36902
+ {
36903
+ "id": 22182,
36904
+ "name": "122",
36905
+ "parentId": 22147,
36906
+ "orderNum": 99999,
36907
+ "protected": false,
36908
+ "level": null,
36909
+ "code": "122",
36910
+ "isActive": true
36911
+ },
36912
+ {
36913
+ "id": 22183,
36914
+ "name": "247",
36915
+ "parentId": 22145,
36916
+ "orderNum": 99999,
36917
+ "protected": false,
36918
+ "level": null,
36919
+ "code": "247",
36920
+ "isActive": false
36921
+ },
36922
+ {
36923
+ "id": 22184,
36924
+ "name": "247",
36925
+ "parentId": 22183,
36926
+ "orderNum": 99999,
36927
+ "protected": false,
36928
+ "level": null,
36929
+ "code": "66",
36930
+ "isActive": false
36931
+ },
36932
+ {
36933
+ "id": 22185,
36934
+ "name": "zalo",
36935
+ "parentId": 22183,
36936
+ "orderNum": 99999,
36937
+ "protected": false,
36938
+ "level": null,
36939
+ "code": "Z",
36940
+ "isActive": false
36941
+ },
36942
+ {
36943
+ "id": 22186,
36944
+ "name": "vp testet",
36945
+ "parentId": 12139,
36946
+ "orderNum": 99999,
36947
+ "protected": false,
36948
+ "level": null,
36949
+ "code": "VT",
36950
+ "isActive": true
36951
+ },
36952
+ {
36953
+ "id": 22187,
36954
+ "name": "văn phòng Đà Nẵng",
36955
+ "parentId": 22164,
36956
+ "orderNum": 99999,
36957
+ "protected": false,
36958
+ "level": null,
36959
+ "code": "Đà Nẵng office",
36960
+ "isActive": false
36961
+ },
36962
+ {
36963
+ "id": 22188,
36964
+ "name": "VĂn Phòng miền nam",
36965
+ "parentId": 22145,
36966
+ "orderNum": 99999,
36967
+ "protected": false,
36968
+ "level": null,
36969
+ "code": "Miền Nam office",
36970
+ "isActive": false
36971
+ },
36972
+ {
36973
+ "id": 2134,
36974
+ "name": "Văn phòng Hà Nội",
36975
+ "parentId": 1,
36976
+ "orderNum": 99999,
36977
+ "protected": false,
36978
+ "level": null,
36979
+ "code": "VPHN",
36980
+ "isActive": true
36981
+ },
36982
+ {
36983
+ "id": 12134,
36984
+ "name": "Văn phòng Hà nội 2 ",
36985
+ "parentId": 2134,
36986
+ "orderNum": 99999,
36987
+ "protected": false,
36988
+ "level": null,
36989
+ "code": "VPHN2",
36990
+ "isActive": true
36991
+ },
36992
+ {
36993
+ "id": 12135,
36994
+ "name": "BACKEND_ONLY.HU_ORGANIZATION.NAME.TEST",
36995
+ "parentId": 1,
36996
+ "orderNum": 99999,
36997
+ "protected": false,
36998
+ "level": null,
36999
+ "code": "T",
37000
+ "isActive": false
37001
+ },
37002
+ {
37003
+ "id": 12136,
37004
+ "name": "Phòng Development",
37005
+ "parentId": 1,
37006
+ "orderNum": 99999,
37007
+ "protected": false,
37008
+ "level": null,
37009
+ "code": "PD",
37010
+ "isActive": false
37011
+ },
37012
+ {
37013
+ "id": 12137,
37014
+ "name": "Nhóm thực tập sinh BA",
37015
+ "parentId": 2132,
37016
+ "orderNum": 99999,
37017
+ "protected": false,
37018
+ "level": null,
37019
+ "code": "NTTSB",
37020
+ "isActive": false
37021
+ },
37022
+ {
37023
+ "id": 12138,
37024
+ "name": "Cá nhân ",
37025
+ "parentId": 12137,
37026
+ "orderNum": 99999,
37027
+ "protected": false,
37028
+ "level": null,
37029
+ "code": "CN",
37030
+ "isActive": false
37031
+ },
37032
+ {
37033
+ "id": 12139,
37034
+ "name": "Văn phòng Test",
37035
+ "parentId": 1,
37036
+ "orderNum": 99999,
37037
+ "protected": false,
37038
+ "level": null,
37039
+ "code": "VPT",
37040
+ "isActive": true
37041
+ },
37042
+ {
37043
+ "id": 12140,
37044
+ "name": "Phòng BA Test 1",
37045
+ "parentId": 12139,
37046
+ "orderNum": 99999,
37047
+ "protected": false,
37048
+ "level": null,
37049
+ "code": "PBT1",
37050
+ "isActive": false
37051
+ },
37052
+ {
37053
+ "id": 12141,
37054
+ "name": "Phòng BA Test 2",
37055
+ "parentId": 12139,
37056
+ "orderNum": 99999,
37057
+ "protected": false,
37058
+ "level": null,
37059
+ "code": "PBT2",
37060
+ "isActive": false
37061
+ },
37062
+ {
37063
+ "id": 12142,
37064
+ "name": "Phòng BA Test 3",
37065
+ "parentId": 12139,
37066
+ "orderNum": 99999,
37067
+ "protected": false,
37068
+ "level": null,
37069
+ "code": "PBT3",
37070
+ "isActive": false
37071
+ },
37072
+ {
37073
+ "id": 12143,
37074
+ "name": "BACKEND_ONLY.HU_ORGANIZATION.NAME.TEST 1",
37075
+ "parentId": 12139,
37076
+ "orderNum": 99999,
37077
+ "protected": false,
37078
+ "level": null,
37079
+ "code": "T1",
37080
+ "isActive": false
37081
+ },
37082
+ {
37083
+ "id": 12146,
37084
+ "name": "Văn phòng Test 2",
37085
+ "parentId": 1,
37086
+ "orderNum": 99999,
37087
+ "protected": false,
37088
+ "level": null,
37089
+ "code": "VPT2",
37090
+ "isActive": false
37091
+ },
37092
+ {
37093
+ "id": 12147,
37094
+ "name": "TEST KK",
37095
+ "parentId": 1,
37096
+ "orderNum": 99999,
37097
+ "protected": false,
37098
+ "level": null,
37099
+ "code": "TK",
37100
+ "isActive": false
37101
+ },
37102
+ {
37103
+ "id": 12149,
37104
+ "name": "Tester 3",
37105
+ "parentId": 12146,
37106
+ "orderNum": 99999,
37107
+ "protected": false,
37108
+ "level": null,
37109
+ "code": "T3",
37110
+ "isActive": false
37111
+ },
37112
+ {
37113
+ "id": 12150,
37114
+ "name": "Tester 4",
37115
+ "parentId": 12146,
37116
+ "orderNum": 99999,
37117
+ "protected": false,
37118
+ "level": null,
37119
+ "code": "T4",
37120
+ "isActive": false
37121
+ },
37122
+ {
37123
+ "id": 12151,
37124
+ "name": "Tester 5",
37125
+ "parentId": 12146,
37126
+ "orderNum": 99999,
37127
+ "protected": false,
37128
+ "level": null,
37129
+ "code": "T5",
37130
+ "isActive": false
37131
+ },
37132
+ {
37133
+ "id": 12152,
37134
+ "name": "vp test 1",
37135
+ "parentId": 1,
37136
+ "orderNum": 99999,
37137
+ "protected": false,
37138
+ "level": null,
37139
+ "code": "VT1",
37140
+ "isActive": false
37141
+ },
37142
+ {
37143
+ "id": 12155,
37144
+ "name": "Group A",
37145
+ "parentId": 12139,
37146
+ "orderNum": 99999,
37147
+ "protected": false,
37148
+ "level": null,
37149
+ "code": "GA",
37150
+ "isActive": false
37151
+ },
37152
+ {
37153
+ "id": 12156,
37154
+ "name": "vp thuongtest 3",
37155
+ "parentId": 2,
37156
+ "orderNum": 99999,
37157
+ "protected": false,
37158
+ "level": null,
37159
+ "code": "VT3",
37160
+ "isActive": false
37161
+ },
37162
+ {
37163
+ "id": 12158,
37164
+ "name": "vp thuongtest 2",
37165
+ "parentId": 1,
37166
+ "orderNum": 99999,
37167
+ "protected": false,
37168
+ "level": null,
37169
+ "code": "VT2",
37170
+ "isActive": false
37171
+ },
37172
+ {
37173
+ "id": 12159,
37174
+ "name": "vp thuong test 3",
37175
+ "parentId": 1,
37176
+ "orderNum": 99999,
37177
+ "protected": false,
37178
+ "level": null,
37179
+ "code": "VTT3",
37180
+ "isActive": true
37181
+ },
37182
+ {
37183
+ "id": 12160,
37184
+ "name": "Phong ban test data",
37185
+ "parentId": 1,
37186
+ "orderNum": 99999,
37187
+ "protected": false,
37188
+ "level": null,
37189
+ "code": "PBTD",
37190
+ "isActive": false
37191
+ },
37192
+ {
37193
+ "id": 22144,
37194
+ "name": "Testing K 1",
37195
+ "parentId": 12159,
37196
+ "orderNum": 99999,
37197
+ "protected": false,
37198
+ "level": null,
37199
+ "code": "TK1",
37200
+ "isActive": true
37201
+ },
37202
+ {
37203
+ "id": 22145,
37204
+ "name": "Sumitomo Corporation Vietnam LLC",
37205
+ "parentId": null,
37206
+ "orderNum": 2,
37207
+ "protected": false,
37208
+ "level": null,
37209
+ "code": "SCVL",
37210
+ "isActive": true
37211
+ },
37212
+ {
37213
+ "id": 2133,
37214
+ "name": "Phòng ba 1",
37215
+ "parentId": 2132,
37216
+ "orderNum": 2,
37217
+ "protected": false,
37218
+ "level": null,
37219
+ "code": "PB1",
37220
+ "isActive": true
37221
+ },
37222
+ {
37223
+ "id": 1,
37224
+ "name": "SCVN",
37225
+ "parentId": null,
37226
+ "orderNum": 1,
37227
+ "protected": false,
37228
+ "level": null,
37229
+ "code": "S",
37230
+ "isActive": true
36226
37231
  }
36227
- goPrevious() {
36228
- this.$navigationDirection.set(-1);
36229
- this.$suspendCurrentPage.set(false);
36230
- setTimeout(() => {
36231
- if (!!this.$pageCount())
36232
- this.$currentPage().next(this.$currentPage().value - 1);
36233
- this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotatebackwards');
37232
+ ];
37233
+
37234
+ class ComPartyService {
37235
+ constructor(recursiveService, alertService) {
37236
+ this.recursiveService = recursiveService;
37237
+ this.alertService = alertService;
37238
+ this.instances = [];
37239
+ this.loading = true;
37240
+ this.comTreeData$ = new BehaviorSubject([]);
37241
+ this.comTreeDataWithPeople$ = new BehaviorSubject([]);
37242
+ this.linerData$ = new BehaviorSubject([]);
37243
+ this.buildTreeFlag$ = new BehaviorSubject(false);
37244
+ this.status$ = new BehaviorSubject({
37245
+ selectedKey: undefined,
37246
+ activeKeys: [],
37247
+ checkedKeys: [],
37248
+ expandedKeys: [],
37249
+ checkInheritance: true
36234
37250
  });
36235
- }
36236
- goNext() {
36237
- this.$navigationDirection.set(1);
36238
- this.$suspendCurrentPage.set(false);
36239
- setTimeout(() => {
36240
- if (!!this.$pageCount())
36241
- this.$currentPage().next(this.$currentPage().value + 1);
36242
- this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotateforwards');
37251
+ this.linerData$.subscribe(xs => {
37252
+ const idCountMap = new Map();
37253
+ xs.forEach(item => {
37254
+ const id = item.id;
37255
+ idCountMap.set(id, (idCountMap.get(id) ?? 0) + 1);
37256
+ });
37257
+ const duplicates = Array.from(idCountMap.entries())
37258
+ .filter(([_, count]) => count > 1)
37259
+ .map(([id]) => id);
37260
+ if (!!duplicates.length) {
37261
+ if (isDevMode()) {
37262
+ alertService.error('🔁 Duplicate IDs: ' + duplicates.reduce((a, c) => a + ";" + c, ''), alertOptions);
37263
+ }
37264
+ }
36243
37265
  });
36244
37266
  }
36245
- onClickAddLocal() {
36246
- this.$onClickAdd.emit();
36247
- }
36248
- ngAfterViewInit() {
36249
- setTimeout(() => {
36250
- this.subscriptions.push(this.$currentPage().subscribe(x => this.$currentButtonContent.set(x.toString())));
36251
- this.mouseDownStream$ = fromEvent(this.$current().nativeElement, 'mousedown', _ => {
36252
- this.$currentButtonContent.set(`${this.$currentPage().value}/${this.$pageCount()}`);
36253
- });
36254
- this.touchStartStream$ = fromEvent(this.$current().nativeElement, 'touchstart', _ => {
36255
- this.$currentButtonContent.set(`${this.$currentPage().value}/${this.$pageCount()}`);
37267
+ buildComTreeData(status = {
37268
+ selectedKey: undefined,
37269
+ activeKeys: [],
37270
+ checkedKeys: [],
37271
+ expandedKeys: [],
37272
+ checkInheritance: true
37273
+ }) {
37274
+ this.loading = true;
37275
+ const cloneCopy = JSON.parse(JSON.stringify(this.linerData$.value));
37276
+ if (typeof Worker !== 'undefined') {
37277
+ // Create a new
37278
+ console.log("🟢🟢 Worker works");
37279
+ const worker = new Worker(liner_to_nested_array_script);
37280
+ worker.addEventListener('message', ({ data }) => {
37281
+ const newData = data.list;
37282
+ this.comTreeData$.next(newData);
37283
+ this.loading = false;
36256
37284
  });
36257
- this.mouseUpStream$ = fromEvent(this.$current().nativeElement, 'mouseup', _ => {
36258
- this.$currentButtonContent.set(`${this.$currentPage().value}`);
37285
+ worker.postMessage({
37286
+ list: cloneCopy,
37287
+ keyField: 'id',
37288
+ titleField: 'name',
37289
+ parentField: 'parentId',
37290
+ activeField: 'active',
37291
+ checkedField: 'checked',
37292
+ expandedField: 'expand',
37293
+ status
36259
37294
  });
36260
- this.touchEndStream$ = fromEvent(this.$current().nativeElement, 'touchend', _ => {
36261
- this.$currentButtonContent.set(`${this.$currentPage().value}`);
37295
+ }
37296
+ else {
37297
+ // Web workers are not supported in this environment.
37298
+ // You should add a fallback so that your program still executes correctly.
37299
+ this.recursiveService
37300
+ .linerArrayToNestedArray(cloneCopy, 'id', 'name', 'parentId', 'active', 'checked', 'expand', status)
37301
+ .subscribe((obj) => {
37302
+ const newData = obj.list;
37303
+ this.comTreeData$.next(newData);
37304
+ this.loading = false;
36262
37305
  });
36263
- this.mouseDownSubscription$ = this.mouseDownStream$.subscribe();
36264
- this.touchStartSubscription$ = this.touchStartStream$.subscribe();
36265
- this.mouseUpSubscription$ = this.mouseUpStream$.subscribe();
36266
- this.touchEndSubscription$ = this.touchEndStream$.subscribe();
36267
- if (this.$background())
36268
- setTimeout(() => this.$container().nativeElement.style.setProperty('--bg', this.$background()));
36269
- if (this.$height())
36270
- this.$container()?.nativeElement.style.setProperty('--height', this.$height() + 'px');
36271
- });
37306
+ }
36272
37307
  }
36273
- ngOnDestroy() {
36274
- if (this.mouseDownSubscription$)
36275
- this.mouseDownSubscription$.unsubscribe();
36276
- if (this.touchStartSubscription$)
36277
- this.touchStartSubscription$.unsubscribe();
36278
- if (this.mouseUpSubscription$)
36279
- this.mouseUpSubscription$.unsubscribe();
36280
- if (this.touchEndSubscription$)
36281
- this.touchEndSubscription$.unsubscribe();
37308
+ getComLinearData(userId) {
37309
+ return of({
37310
+ ok: true,
37311
+ status: 200,
37312
+ body: {
37313
+ statusCode: 200,
37314
+ innerBody: COM_MOKEUP_DATA
37315
+ }
37316
+ });
36282
37317
  }
36283
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CorePaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36284
- 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 }); }
37318
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ComPartyService, deps: [{ token: RecursiveService }, { token: AlertService }], target: i0.ɵɵFactoryTarget.Injectable }); }
37319
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ComPartyService, providedIn: 'root' }); }
36285
37320
  }
36286
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CorePaginationComponent, decorators: [{
36287
- type: Component,
36288
- args: [{ selector: 'core-pagination', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
36289
- NgStyle,
36290
- AsyncPipe,
36291
- ], 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"] }]
36292
- }], ctorParameters: () => [] });
37321
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ComPartyService, decorators: [{
37322
+ type: Injectable,
37323
+ args: [{
37324
+ providedIn: 'root'
37325
+ }]
37326
+ }], ctorParameters: () => [{ type: RecursiveService }, { type: AlertService }] });
36293
37327
 
36294
- class CoreCompareDbPipelineComponent extends BaseComponent {
36295
- constructor(mls, appService) {
36296
- super(mls);
37328
+ class CoreComTreeComponent extends CoreFormControlBaseComponent {
37329
+ writeValue(obj) {
37330
+ this.value = obj;
37331
+ switch (this.accessorMode) {
37332
+ case EnumCoreOrgTreeaAccessorMode.CHECKED:
37333
+ if (!!obj) {
37334
+ const checkedKeys = [];
37335
+ this.checkedIds = obj; // <=== 24/10/2023
37336
+ obj.map(x => checkedKeys.push(x.toString()));
37337
+ this.loading = true;
37338
+ this.recursiveService.writeValueChecked(checkedKeys, this.data, this.disabledLoopExpand).subscribe(_ => {
37339
+ this.loading = false;
37340
+ if (!!this.data && !!this.data?.length)
37341
+ this.data[0].tree$Expanded = true;
37342
+ });
37343
+ }
37344
+ break;
37345
+ case EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE:
37346
+ case EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE:
37347
+ if (!!obj) {
37348
+ const activatedKeys = [];
37349
+ obj.map(x => activatedKeys.push(x.toString()));
37350
+ this.loading = true;
37351
+ this.recursiveService.writeValueActivated(activatedKeys, this.data, this.disabledLoopExpand).subscribe(_ => {
37352
+ this.loading = false;
37353
+ if (!!this.data && !!this.data?.length)
37354
+ this.data[0].tree$Expanded = true;
37355
+ });
37356
+ }
37357
+ break;
37358
+ default:
37359
+ break;
37360
+ }
37361
+ if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED) {
37362
+ }
37363
+ else /* EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE or EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE */ {
37364
+ }
37365
+ }
37366
+ setDisabledState(disabled) {
37367
+ this.disabled = disabled;
37368
+ }
37369
+ constructor(
37370
+ //public override injector: Injector,
37371
+ authService, recursiveService, mls, layoutService, coreOrgTreeService,
37372
+ // private coreOrgTreeState: CoreOrgTreeState,
37373
+ alertService, comPartyService) {
37374
+ super( /*injector*/);
37375
+ this.authService = authService;
37376
+ this.recursiveService = recursiveService;
36297
37377
  this.mls = mls;
36298
- this.appService = appService;
36299
- this.data = [];
36300
- this.tabHeaders = ["Dev-Test-Live", "Dev-Extended"];
36301
- this.activeTabIndex = 0;
36302
- this.columns = [
36303
- {
36304
- field: 'id',
36305
- type: 'string',
36306
- caption: 'id',
36307
- align: 'left',
36308
- hidden: true,
36309
- width: 0
36310
- },
36311
- {
36312
- field: 'difference',
36313
- type: 'string',
36314
- caption: 'Problem',
36315
- align: 'left',
36316
- sortDisabled: true,
36317
- width: 300
36318
- },
36319
- {
36320
- field: 'conflictType',
36321
- type: 'string',
36322
- caption: 'Marker',
36323
- align: 'center',
36324
- width: 50
36325
- },
36326
- {
36327
- field: 'sourceAlias',
36328
- type: 'string',
36329
- caption: 'Source',
36330
- align: 'left',
36331
- sortDisabled: true,
36332
- width: 60
36333
- },
36334
- {
36335
- field: 'targetAlias',
36336
- type: 'string',
36337
- caption: 'Target',
36338
- align: 'left',
36339
- sortDisabled: true,
36340
- width: 200
36341
- },
36342
- {
36343
- field: 'tableName',
36344
- type: 'string',
36345
- caption: 'Table',
36346
- align: 'left',
36347
- sortDisabled: true,
36348
- width: 200
36349
- },
36350
- {
36351
- field: 'columnName',
36352
- type: 'string',
36353
- caption: 'Column',
36354
- align: 'left',
36355
- sortDisabled: true,
36356
- width: 200
36357
- },
36358
- {
36359
- field: 'sourceType',
36360
- type: 'string',
36361
- caption: 'Source type',
36362
- align: 'left',
36363
- sortDisabled: true,
36364
- width: 100
36365
- },
36366
- {
36367
- field: 'sourceIsPrimaryKey',
37378
+ this.layoutService = layoutService;
37379
+ this.coreOrgTreeService = coreOrgTreeService;
37380
+ this.alertService = alertService;
37381
+ this.comPartyService = comPartyService;
37382
+ this.lineColor = 'transparent';
37383
+ this.accessorMode = EnumCoreOrgTreeaAccessorMode.CHECKED;
37384
+ //TO BE NEW
37385
+ this.searchMode = EnumCoreOrgTreeaSearchMode.REDUCE;
37386
+ this.excludedIds$ = new BehaviorSubject([]); // 2024-05-10: to be implemented
37387
+ this.stateIsolated$ = new BehaviorSubject(false);
37388
+ this.itemDoubleClick = new EventEmitter();
37389
+ this.itemClick = new EventEmitter();
37390
+ this.showSearch = false;
37391
+ this.hiddenToolClickStream$ = new BehaviorSubject('');
37392
+ this.value = [];
37393
+ this.appConfigService = inject(AppConfigService);
37394
+ this.activeIds = [];
37395
+ this.checkedIds = [];
37396
+ this.subscriptions = [];
37397
+ this.search$ = new Subject();
37398
+ this.searchPlaceholder = "Tìm kiếm...";
37399
+ this.checkInheritance = true; // default value is true
37400
+ this.showDissolved = false; // default value is false
37401
+ this.initializing = true;
37402
+ // this.reduced$ = this.coreOrgTreeState.coreOrgTreeReduced$;
37403
+ this.initializing = false;
37404
+ }
37405
+ ngOnChanges(changes) {
37406
+ if (changes['height']) {
37407
+ this.resizeHeight();
37408
+ }
37409
+ }
37410
+ ngOnInit() {
37411
+ super.register();
37412
+ //this.layoutService.leftbarOpen$.next(false);
37413
+ this.instanceNumber = new Date().getTime();
37414
+ const newInstance = {
37415
+ instanceNumber: this.instanceNumber,
37416
+ selectedKey$: new BehaviorSubject(undefined),
37417
+ activeKeys$: new BehaviorSubject([]),
37418
+ checkedKeys$: new BehaviorSubject([]),
37419
+ expandedKeys$: new BehaviorSubject([]),
37420
+ checkInheritance$: new BehaviorSubject(true)
37421
+ };
37422
+ this.comPartyService.instances.push(newInstance);
37423
+ // Check xem chiều cao height có được truyền vào hay không
37424
+ if (this.height === undefined) {
37425
+ if (isDevMode()) {
37426
+ //this.alertService.warn("CoreOrgTree không nhận được chiều cao (height) truyền vào từ lớp ngoài. Chiều cao mặc định sẽ được tính toán dựa vào bố cục chính.", alertOptions);
37427
+ }
37428
+ this.subscriptions.push(this.layoutService.contentContainerHeight$.subscribe(x => {
37429
+ // basicSpacing là paddingBottom của lớp content-container
37430
+ this.height = x - this.layoutService.corePageHeaderHeight - this.layoutService.basicSpacing;
37431
+ }));
37432
+ }
37433
+ this.subscriptions.push(this.comPartyService.linerData$.subscribe((x) => this.linearComArray = x));
37434
+ this.subscriptions.push(this.comPartyService.buildTreeFlag$.pipe(skip(1)).subscribe(_ => {
37435
+ this.buildComTreeData();
37436
+ }));
37437
+ this.subscriptions.push(this.stateIsolated$.subscribe(x => {
37438
+ if (x) {
37439
+ if (!!this.statusSubscription) {
37440
+ this.statusSubscription.unsubscribe();
37441
+ }
37442
+ }
37443
+ else {
37444
+ if (!this.statusSubscription) {
37445
+ this.statusSubscription = this.comPartyService.status$.subscribe((x) => {
37446
+ console.log("this.organizationService.status$ changes", x);
37447
+ const newActiveIds = [];
37448
+ x.activeKeys.map((k) => {
37449
+ newActiveIds.push(Number(k));
37450
+ });
37451
+ this.activeIds = newActiveIds;
37452
+ if (this.accessorMode !== EnumCoreOrgTreeaAccessorMode.CHECKED) {
37453
+ this.value = this.activeIds;
37454
+ this.onChange(this.activeIds);
37455
+ }
37456
+ this.selectedKey = x.selectedKey;
37457
+ });
37458
+ }
37459
+ }
37460
+ }));
37461
+ this.subscriptions.push(this.coreOrgTreeService.showSearch$.subscribe(x => this.showSearch = x));
37462
+ this.subscriptions.push(this.hiddenToolClickStream$.pipe(buffer(this.hiddenToolClickStream$.pipe(debounceTime(250))), map$1(clicks => clicks.length), filter(clicksLength => clicksLength >= 5))
37463
+ .subscribe(_ => {
37464
+ this.coreOrgTreeService.showSearch$.next(!this.coreOrgTreeService.showSearch$.value);
37465
+ }));
37466
+ this.subscriptions.push(this.search$
37467
+ .pipe(filter((x) => x !== null), debounceTime(500), distinctUntilChanged(), switchMap((text) => {
37468
+ console.log('switchMap works');
37469
+ this.loading = true;
37470
+ // AUG 2024 NEW : MUST BE TESTED
37471
+ if (this.searchMode === EnumCoreOrgTreeaSearchMode.HIGHLIGHT) {
37472
+ return this.recursiveService.findItem(text, this.data);
37473
+ }
37474
+ else {
37475
+ return of(this.recursiveService.reducingFilter(this.scrollContainer, text));
37476
+ }
37477
+ }))
37478
+ .subscribe((x) => {
37479
+ this.loading = false;
37480
+ // if (this.searchMode === EnumCoreOrgTreeaSearchMode.REDUCE) {
37481
+ // this.dataFiltered = x as IOrgTreeItem[];
37482
+ // }
37483
+ }));
37484
+ this.subscriptions.push(this.comPartyService.status$
37485
+ .pipe(filter((value) => !!!this.initializing && !!value))
37486
+ .subscribe((x) => {
37487
+ if (!!localStorage) {
37488
+ localStorage.setItem('coreOrgTreeStatus', JSON.stringify(x));
37489
+ }
37490
+ }));
37491
+ this.subscriptions.push(this.mls.lang$.subscribe((x) => (this.lang = x)));
37492
+ }
37493
+ buildComTree(comLinerData) {
37494
+ if (!this.appConfigService.FEDERATION_COM_PARTY_ENABLED)
37495
+ return;
37496
+ this.comPartyService.linerData$.next(comLinerData);
37497
+ const cloneCopy = JSON.parse(JSON.stringify(comLinerData));
37498
+ console.group("comLinerData...", comLinerData);
37499
+ if (!!comLinerData) {
37500
+ if (typeof Worker !== 'undefined') {
37501
+ console.log('🟢 Worker works');
37502
+ // Create a new
37503
+ const worker = new Worker(liner_to_nested_array_script);
37504
+ worker.addEventListener("message", ({ data }) => {
37505
+ console.log("ComTreeData calculation finished!", new Date().getTime());
37506
+ this.comPartyService.loading = false;
37507
+ this.comPartyService.comTreeData$.next(data.list);
37508
+ this.comPartyService.linerData$.next(data.rawList);
37509
+ });
37510
+ console.log("ComTreeData is being calculated by Worker...");
37511
+ console.log("this.comPartyService.status$.value", this.comPartyService.status$.value);
37512
+ worker.postMessage({
37513
+ list: cloneCopy,
37514
+ keyField: 'id',
37515
+ titleField: 'name',
37516
+ parentField: 'parentId',
37517
+ activeField: 'active',
37518
+ checkedField: 'checked',
37519
+ expandedField: 'expanded',
37520
+ status: this.comPartyService.status$.value, // <=== this had been already retrieved on app-initialization
37521
+ orderBy: 'orderNum'
37522
+ });
37523
+ }
37524
+ else {
37525
+ // Web workers are not supported in this environment.
37526
+ // You should add a fallback so that your program still executes correctly.
37527
+ console.log("this.comPartyService.status$.value", this.comPartyService.status$.value);
37528
+ this.subscriptions.push(this.recursiveService.linerArrayToNestedArray(cloneCopy, 'id', 'name', 'parentId', 'active', 'checked', 'expand', this.comPartyService.status$.value // <=== this had been already retrieved on app-initialization
37529
+ )
37530
+ .subscribe(data => {
37531
+ console.log("data", data);
37532
+ this.comPartyService.comTreeData$.next(data.list);
37533
+ this.comPartyService.linerData$.next(data.rawList);
37534
+ }));
37535
+ }
37536
+ }
37537
+ }
37538
+ resizeHeight() {
37539
+ // height is not given and the tree resize as standard
37540
+ if (!!!this.height) {
37541
+ const sizeHeaderHeight = Number(getComputedStyle(document.documentElement)
37542
+ .getPropertyValue('--size-header-height')
37543
+ .replace('px', ''));
37544
+ const sizeCorePageHeaderHeight = Number(getComputedStyle(document.documentElement)
37545
+ .getPropertyValue('--size-core-page-header-height')
37546
+ .replace('px', ''));
37547
+ const containerHeight = window.innerHeight - sizeHeaderHeight - sizeCorePageHeaderHeight;
37548
+ const pageHeaderHeight = Number(getComputedStyle(document.documentElement)
37549
+ .getPropertyValue('--size-core-page-header-height')
37550
+ .replace('px', ''));
37551
+ const paginationHeight = Number(getComputedStyle(document.documentElement)
37552
+ .getPropertyValue('--size-core-pagination-height')
37553
+ .replace('px', ''));
37554
+ const sizeMarginCorePaginationFull = Number(getComputedStyle(document.documentElement)
37555
+ .getPropertyValue('--size-margin-core-pagination')
37556
+ .replace('px', ''));
37557
+ const height = containerHeight - pageHeaderHeight - paginationHeight + sizeMarginCorePaginationFull;
37558
+ console.log(height);
37559
+ this.container?.nativeElement.style.setProperty('--height', height + 'px');
37560
+ }
37561
+ else {
37562
+ this.container?.nativeElement.style.setProperty('--height', this.height + 'px');
37563
+ }
37564
+ }
37565
+ ngAfterViewInit() {
37566
+ setTimeout(() => {
37567
+ if (!!this.authService.data$.value?.id && (!this.comPartyService.linerData$?.value || (!!this.comPartyService.linerData$?.value && !this.comPartyService.linerData$?.value.length))) {
37568
+ this.comPartyService.getComLinearData(this.authService.data$.value.id).pipe(tap$1(_ => this.loading = true), finalize$1(() => this.loading = false)).subscribe(x => {
37569
+ if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
37570
+ this.comPartyService.linerData$.next(x.body.innerBody.map(i => ({
37571
+ ...i,
37572
+ active: i.isActive
37573
+ })));
37574
+ this.comPartyService.buildTreeFlag$.next(!this.comPartyService.buildTreeFlag$.value);
37575
+ }
37576
+ });
37577
+ }
37578
+ this.subscriptions.push(this.comPartyService.comTreeData$.subscribe((x) => {
37579
+ this.data = x;
37580
+ //this.dataFiltered = JSON.parse(JSON.stringify(x));
37581
+ console.log("new Data coming", this.data, new Date().getTime());
37582
+ if (!!this.data) {
37583
+ if (!!this.data.length)
37584
+ this.data[0].tree$Expanded = true;
37585
+ }
37586
+ }));
37587
+ this.subscriptions.push(this.coreOrgTreeService.arrowFontSize$.subscribe(x => {
37588
+ this.container?.nativeElement.style.setProperty('--arrow-font-size', x + 'px');
37589
+ }));
37590
+ this.subscriptions.push(this.coreOrgTreeService.titleWrapperMaxWidth$.pipe(filter(x => !!x)).subscribe(x => {
37591
+ this.container?.nativeElement.style.setProperty('--title-wrapper-max-width', x + 'px');
37592
+ }));
37593
+ this.subscriptions.push(this.comPartyService.status$.subscribe(x => {
37594
+ if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE && !!x.activeKeys) {
37595
+ this.onChange(x.activeKeys.map(i => Number(i)));
37596
+ }
37597
+ else if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE) {
37598
+ // tạm thời bỏ qua
37599
+ }
37600
+ else if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED && !!x.checkedKeys) {
37601
+ this.onChange(x.checkedKeys.map(i => Number(i)));
37602
+ }
37603
+ }));
37604
+ });
37605
+ }
37606
+ // onItemClickLocal(e: IComTreeItem): void {
37607
+ // this.linnerOrgArray.map((x) => (x.active = false));
37608
+ // setTimeout(() => this.buildTreeData());
37609
+ // }
37610
+ onToggleItem(e) {
37611
+ const cloneCopy = JSON.parse(JSON.stringify(this.linearComArray));
37612
+ const filter = cloneCopy.filter((x) => x.id === e.id);
37613
+ if (filter.length === 1) {
37614
+ filter[0].expand = !!!e.expand;
37615
+ }
37616
+ this.linearComArray = cloneCopy;
37617
+ setTimeout(() => this.buildComTreeData());
37618
+ }
37619
+ // buildTreeData(): void {
37620
+ // this.loading = true;
37621
+ // const cloneCopy = JSON.parse(JSON.stringify(this.linnerOrgArray));
37622
+ // if (typeof Worker !== 'undefined') {
37623
+ // // Create a new
37624
+ // console.log("🟢🟢 Worker works");
37625
+ // this.worker = new Worker(liner_to_nested_array_script);
37626
+ // this.worker.addEventListener('message', ({ data }) => {
37627
+ // this.data = data.list;
37628
+ // //this.dataFiltered = JSON.parse(JSON.stringify(data.list));
37629
+ // if (!!this.data && !!this.data?.length) this.data[0].tree$Expanded = true;
37630
+ // this.loading = false;
37631
+ // });
37632
+ // this.worker.postMessage({
37633
+ // list: cloneCopy,
37634
+ // keyField: 'id',
37635
+ // titleField: 'name',
37636
+ // parentField: 'parentId',
37637
+ // activeField: 'active',
37638
+ // //inheritantActiveField: 'inheritantActive',
37639
+ // checkedField: 'checked',
37640
+ // expandedField: 'expand',
37641
+ // });
37642
+ // } else {
37643
+ // // Web workers are not supported in this environment.
37644
+ // // You should add a fallback so that your program still executes correctly.
37645
+ // const status = this.organizationService.status$.value;
37646
+ // this.subscriptions.push(
37647
+ // this.recursiveService
37648
+ // .linerArrayToNestedArray(
37649
+ // cloneCopy,
37650
+ // 'id',
37651
+ // 'name',
37652
+ // 'parentId',
37653
+ // 'active',
37654
+ // 'checked',
37655
+ // 'expand',
37656
+ // //status
37657
+ // )
37658
+ // .subscribe((obj) => {
37659
+ // this.data = obj.list;
37660
+ // //this.dataFiltered = JSON.parse(JSON.stringify(obj.list));
37661
+ // if (!!this.data && !!this.data?.length) this.data[0].tree$Expanded = true;
37662
+ // this.loading = false;
37663
+ // })
37664
+ // );
37665
+ // }
37666
+ // }
37667
+ buildComTreeData() {
37668
+ this.loading = true;
37669
+ const cloneCopy = JSON.parse(JSON.stringify(this.linearComArray));
37670
+ // ✅ ADD THIS FILTER
37671
+ const filteredList = !this.showDissolved
37672
+ ? cloneCopy.filter(x => x.active === true)
37673
+ : cloneCopy;
37674
+ if (typeof Worker !== 'undefined') {
37675
+ this.worker = new Worker(liner_to_nested_array_script);
37676
+ this.worker.addEventListener('message', ({ data }) => {
37677
+ this.data = data.list;
37678
+ if (!!this.data?.length)
37679
+ this.data[0].tree$Expanded = true;
37680
+ this.loading = false;
37681
+ });
37682
+ // ✅ USE filteredList INSTEAD OF cloneCopy
37683
+ this.worker.postMessage({
37684
+ list: filteredList,
37685
+ keyField: 'id',
37686
+ titleField: 'name',
37687
+ parentField: 'parentId',
37688
+ activeField: 'active',
37689
+ checkedField: 'checked',
37690
+ expandedField: 'expand',
37691
+ });
37692
+ }
37693
+ else {
37694
+ this.subscriptions.push(this.recursiveService
37695
+ .linerArrayToNestedArray(filteredList, // ✅ use filteredList
37696
+ 'id', 'name', 'parentId', 'active', 'checked', 'expand')
37697
+ .subscribe((obj) => {
37698
+ this.data = obj.list;
37699
+ if (!!this.data?.length)
37700
+ this.data[0].tree$Expanded = true;
37701
+ this.loading = false;
37702
+ }));
37703
+ }
37704
+ }
37705
+ onExpandTogglerClick(e, event) {
37706
+ event.stopPropagation();
37707
+ const newValue = !e.tree$Expanded;
37708
+ e.tree$Expanded = newValue;
37709
+ // updating status with newValue
37710
+ const currentExpandedIds = this.comPartyService.status$.value?.expandedKeys;
37711
+ let newExpandedIds = currentExpandedIds?.filter((_) => !!!currentExpandedIds.includes(e.id.toString()));
37712
+ if (newValue) {
37713
+ newExpandedIds?.push(e.id.toString());
37714
+ }
37715
+ newExpandedIds?.sort();
37716
+ const newExpandedKeys = [];
37717
+ newExpandedIds.map((x) => newExpandedKeys.push(x.toString()));
37718
+ this.comPartyService.status$.next({
37719
+ ...this.comPartyService.status$.value,
37720
+ expandedKeys: newExpandedKeys,
37721
+ });
37722
+ }
37723
+ onItemCheck(e, newValue) {
37724
+ this.itemClick?.emit(e);
37725
+ if (this.accessorMode !== EnumCoreOrgTreeaAccessorMode.CHECKED)
37726
+ return;
37727
+ // We have this var to hold nodes that are being changed
37728
+ let toggledIds;
37729
+ // We should calculate a new state into this var:
37730
+ const newCheckedIds = JSON.parse(JSON.stringify(this.checkedIds));
37731
+ // We will call this function after toggledIds changed
37732
+ const changeValue = () => {
37733
+ // If newValue === true, we will disctintly push changed ids to the state
37734
+ // Otherwise we will remove them from the state
37735
+ if (!!newValue) {
37736
+ toggledIds.map(x => {
37737
+ if (!!!newCheckedIds.includes(x)) {
37738
+ newCheckedIds.push(x);
37739
+ }
37740
+ });
37741
+ // Then asign the state to the newCheckedIds
37742
+ this.checkedIds = newCheckedIds;
37743
+ }
37744
+ else {
37745
+ const filter = newCheckedIds.filter(x => !!!toggledIds.includes(x));
37746
+ // Then asign the state to the filter
37747
+ this.checkedIds = filter;
37748
+ }
37749
+ // After the cases of if/else, make the control change with onChange
37750
+ this.value = this.checkedIds;
37751
+ this.onChange(this.checkedIds);
37752
+ this.markAsTouched();
37753
+ };
37754
+ /* start: THIS CODE SCOPE calculates toggledIds */
37755
+ if (this.checkInheritance) {
37756
+ // If true, all the nested items will be checked/unchecked
37757
+ this.recursiveService
37758
+ .nestedToggleCheck(e, newValue, this.showDissolved)
37759
+ .then((x) => {
37760
+ let currentCheckedKeys = this.comPartyService.status$.value.checkedKeys || [];
37761
+ if (!!newValue) {
37762
+ x.map(item => {
37763
+ if (currentCheckedKeys.filter(i => i === item.toString()).length === 0) {
37764
+ currentCheckedKeys.push(item.toString());
37765
+ }
37766
+ });
37767
+ }
37768
+ else {
37769
+ currentCheckedKeys = currentCheckedKeys.filter(i => !x.includes(Number(i)));
37770
+ }
37771
+ this.comPartyService.status$.next({
37772
+ ...this.comPartyService.status$.value,
37773
+ checkedKeys: currentCheckedKeys //x.map(item => item.toString())
37774
+ });
37775
+ // The ids have been changed
37776
+ toggledIds = x;
37777
+ // Now toggledIds were set. We call the function we declared
37778
+ changeValue();
37779
+ })
37780
+ .catch((x) => {
37781
+ console.error(x);
37782
+ });
37783
+ }
37784
+ else {
37785
+ // Otherwise we simply toggle check for current item only
37786
+ toggledIds = [e.id];
37787
+ // Now toggledIds were set. We call the function we declared
37788
+ changeValue();
37789
+ }
37790
+ /* end: THIS CODE SCOPE calculates toggledIds */
37791
+ // That is. Happy debugging!
37792
+ }
37793
+ onCheckIncludeDissolvedChange(value) {
37794
+ console.log("onCheckIncludeDissolvedChange", value);
37795
+ }
37796
+ onCheckInheritanceChange(value) {
37797
+ this.comPartyService.status$.next({
37798
+ ...this.comPartyService.status$.value,
37799
+ checkInheritance: value,
37800
+ });
37801
+ }
37802
+ onObjectClick(e, event) {
37803
+ // remove highlight class
37804
+ // TO DO
37805
+ if (!!e.protected)
37806
+ return;
37807
+ this.itemClick?.emit(e);
37808
+ if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED)
37809
+ return;
37810
+ let activeIds = [];
37811
+ this.data.map((item) => (item.active = false));
37812
+ if (this.accessorMode ===
37813
+ EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE ||
37814
+ !!!this.accessorMode) {
37815
+ // If true, all the nested items will be active, the others are inactive
37816
+ this.recursiveService
37817
+ .nestedResetActive(e, true)
37818
+ .then((x) => {
37819
+ activeIds = x;
37820
+ activeIds.sort();
37821
+ const newActiveKeys = [];
37822
+ activeIds.map((x) => newActiveKeys.push(x.toString()));
37823
+ this.comPartyService.status$.next({
37824
+ ...this.comPartyService.status$.value,
37825
+ activeKeys: newActiveKeys,
37826
+ selectedKey: e.id.toString()
37827
+ });
37828
+ this.activeIds = activeIds;
37829
+ console.log(this.activeIds);
37830
+ this.onChange(activeIds);
37831
+ })
37832
+ .catch((x) => {
37833
+ console.error(x);
37834
+ });
37835
+ }
37836
+ else {
37837
+ // ACTIVATED_SINGLE
37838
+ // Otherwise we simply set current item to be active only
37839
+ activeIds = [e.id];
37840
+ this.activeIds = activeIds;
37841
+ this.comPartyService.status$.next({
37842
+ ...this.comPartyService.status$.value,
37843
+ activeKeys: [e.id.toString()],
37844
+ selectedKey: e.id.toString(),
37845
+ });
37846
+ this.onChange(activeIds);
37847
+ }
37848
+ const { detail } = event;
37849
+ if (detail === 2) {
37850
+ console.log('This was a dblclick');
37851
+ this.itemDoubleClick.emit(e);
37852
+ }
37853
+ this.selectedItem = e;
37854
+ }
37855
+ onSearchChange(text) {
37856
+ this.search$.next(text);
37857
+ }
37858
+ onHiddenToolClick(e) {
37859
+ e.stopPropagation();
37860
+ this.hiddenToolClickStream$.next(crypto.randomUUID());
37861
+ }
37862
+ ngOnDestroy() {
37863
+ if (this.worker) {
37864
+ this.worker.terminate();
37865
+ }
37866
+ this.subscriptions.map((x) => x?.unsubscribe());
37867
+ if (!!this.instanceNumber) {
37868
+ const tryToFind = this.comPartyService.instances.filter((x) => x.instanceNumber === this.instanceNumber);
37869
+ if (!!tryToFind.length) {
37870
+ const newInstances = this.comPartyService.instances.filter((x) => x.instanceNumber !== this.instanceNumber);
37871
+ this.comPartyService.instances = newInstances;
37872
+ }
37873
+ }
37874
+ }
37875
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreComTreeComponent, deps: [{ token: AuthService }, { token: RecursiveService }, { token: MultiLanguageService }, { token: LayoutService }, { token: CoreOrgTreeService }, { token: AlertService }, { token: ComPartyService }], target: i0.ɵɵFactoryTarget.Component }); }
37876
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreComTreeComponent, isStandalone: true, selector: "core-com-tree", inputs: { lineColor: "lineColor", fullWidthMode: "fullWidthMode", accessorMode: "accessorMode", searchMode: "searchMode", fullRendering: "fullRendering", height: "height", disabledLoopExpand: "disabledLoopExpand", showCheckInheritance: "showCheckInheritance", excludedIds$: "excludedIds$", stateIsolated$: "stateIsolated$" }, outputs: { itemDoubleClick: "itemDoubleClick", itemClick: "itemClick" }, providers: [
37877
+ {
37878
+ provide: NG_VALUE_ACCESSOR,
37879
+ useExisting: forwardRef(() => CoreComTreeComponent),
37880
+ multi: true
37881
+ }
37882
+ ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "displayContent", first: true, predicate: ["displayContent"], descendants: true }, { propertyName: "reducedIconWrapper", first: true, predicate: ["reducedIconWrapper"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" \r\n [style.position]=\"'relative'\"\r\n [style.width]=\"'100%'\"\r\n [style.minWidth]=\"'310px'\"\r\n [style.height]=\"height + 'px'\"\r\n >\r\n <div #displayContent class=\"custom-org-tree\">\r\n @if (showSearch) {\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n }\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" \r\n [style.height]=\"height - layoutService.coreOrgTreeTopHeight * (showSearch ? 1 : 0) - layoutService.coreOrgTreeBottomHeight + 'px'\" \r\n [style.overflow]=\"'scroll'\" \r\n >\r\n <div class=\"hidden-tool\" (click)=\"onHiddenToolClick($event)\"></div>\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @if (!!data && !!data.length) {\r\n @for (root of data; track $index) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n }\r\n } @else {\r\n No items\r\n }\r\n </div>\r\n <div \r\n [style.display]=\"'block'\"\r\n [style.position]=\"'absolute'\"\r\n [style.bottom]=\"'0px'\"\r\n [style.left]=\"'0px'\"\r\n [style.right]=\"'0px'\"\r\n [style.height]=\"layoutService.corePaginationHeight + 'px'\"\r\n [style.paddingLeft]=\"layoutService.basicSpacing + 'px'\"\r\n [style.paddingRight]=\"layoutService.basicSpacing + 'px'\"\r\n [style.lineHeight]=\"layoutService.corePaginationHeight + 'px'\"\r\n [style.overflow]=\"'hidden'\"\r\n >\r\n <div \r\n [style.height]=\"layoutService.corePaginationHeight + 'px'\"\r\n [style.position]=\"'relative'\"\r\n [style.display]=\"'flex'\"\r\n [style.alignItems]=\"'center'\"\r\n [style.justifyContent]=\"'space-between'\"\r\n >\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n @if (accessorMode === 'CHECKED') {\r\n <div class=\"check-inheritance-wrapper\">\r\n @if (showCheckInheritance) {\r\n <core-checkbox [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler feather-chevron-down\" (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"accessorMode != 'CHECKED' && selectedKey===id.toString()\"\r\n [class.highlighted]=\"highlighted\" [class.dissolved]=\"!isActive\"\r\n [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }] }); }
37883
+ }
37884
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreComTreeComponent, decorators: [{
37885
+ type: Component,
37886
+ args: [{ selector: 'core-com-tree', imports: [
37887
+ FormsModule,
37888
+ NgIf,
37889
+ CoreCheckboxComponent,
37890
+ CoreLoadingSurfaceComponent,
37891
+ TranslatePipe,
37892
+ TooltipDirective,
37893
+ ], providers: [
37894
+ {
37895
+ provide: NG_VALUE_ACCESSOR,
37896
+ useExisting: forwardRef(() => CoreComTreeComponent),
37897
+ multi: true
37898
+ }
37899
+ ], template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" \r\n [style.position]=\"'relative'\"\r\n [style.width]=\"'100%'\"\r\n [style.minWidth]=\"'310px'\"\r\n [style.height]=\"height + 'px'\"\r\n >\r\n <div #displayContent class=\"custom-org-tree\">\r\n @if (showSearch) {\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n }\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" \r\n [style.height]=\"height - layoutService.coreOrgTreeTopHeight * (showSearch ? 1 : 0) - layoutService.coreOrgTreeBottomHeight + 'px'\" \r\n [style.overflow]=\"'scroll'\" \r\n >\r\n <div class=\"hidden-tool\" (click)=\"onHiddenToolClick($event)\"></div>\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @if (!!data && !!data.length) {\r\n @for (root of data; track $index) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n }\r\n } @else {\r\n No items\r\n }\r\n </div>\r\n <div \r\n [style.display]=\"'block'\"\r\n [style.position]=\"'absolute'\"\r\n [style.bottom]=\"'0px'\"\r\n [style.left]=\"'0px'\"\r\n [style.right]=\"'0px'\"\r\n [style.height]=\"layoutService.corePaginationHeight + 'px'\"\r\n [style.paddingLeft]=\"layoutService.basicSpacing + 'px'\"\r\n [style.paddingRight]=\"layoutService.basicSpacing + 'px'\"\r\n [style.lineHeight]=\"layoutService.corePaginationHeight + 'px'\"\r\n [style.overflow]=\"'hidden'\"\r\n >\r\n <div \r\n [style.height]=\"layoutService.corePaginationHeight + 'px'\"\r\n [style.position]=\"'relative'\"\r\n [style.display]=\"'flex'\"\r\n [style.alignItems]=\"'center'\"\r\n [style.justifyContent]=\"'space-between'\"\r\n >\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n @if (accessorMode === 'CHECKED') {\r\n <div class=\"check-inheritance-wrapper\">\r\n @if (showCheckInheritance) {\r\n <core-checkbox [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler feather-chevron-down\" (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"accessorMode != 'CHECKED' && selectedKey===id.toString()\"\r\n [class.highlighted]=\"highlighted\" [class.dissolved]=\"!isActive\"\r\n [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>" }]
37900
+ }], ctorParameters: () => [{ type: AuthService }, { type: RecursiveService }, { type: MultiLanguageService }, { type: LayoutService }, { type: CoreOrgTreeService }, { type: AlertService }, { type: ComPartyService }], propDecorators: { lineColor: [{
37901
+ type: Input
37902
+ }], fullWidthMode: [{
37903
+ type: Input
37904
+ }], accessorMode: [{
37905
+ type: Input
37906
+ }], searchMode: [{
37907
+ type: Input
37908
+ }], fullRendering: [{
37909
+ type: Input
37910
+ }], height: [{
37911
+ type: Input
37912
+ }], disabledLoopExpand: [{
37913
+ type: Input
37914
+ }], showCheckInheritance: [{
37915
+ type: Input
37916
+ }], excludedIds$: [{
37917
+ type: Input
37918
+ }], stateIsolated$: [{
37919
+ type: Input
37920
+ }], itemDoubleClick: [{
37921
+ type: Output
37922
+ }], itemClick: [{
37923
+ type: Output
37924
+ }], container: [{
37925
+ type: ViewChild,
37926
+ args: ['container']
37927
+ }], scrollContainer: [{
37928
+ type: ViewChild,
37929
+ args: ['scrollContainer']
37930
+ }], displayContent: [{
37931
+ type: ViewChild,
37932
+ args: ['displayContent']
37933
+ }], reducedIconWrapper: [{
37934
+ type: ViewChild,
37935
+ args: ['reducedIconWrapper']
37936
+ }] } });
37937
+
37938
+ class CorePaginationComponent {
37939
+ constructor() {
37940
+ this.$currentPage = input.required();
37941
+ this.$height = input.required();
37942
+ this.$pageCount = input.required();
37943
+ this.$loading = input.required();
37944
+ this.$suspendCurrentPageSubscription = input();
37945
+ this.$showAdd = input();
37946
+ this.$background = input();
37947
+ this.$fixedPageSize = input();
37948
+ this.$onClickAdd = output();
37949
+ this.$container = viewChild('container');
37950
+ this.$current = viewChild('current');
37951
+ this.$aperture = viewChild('aperture');
37952
+ this.$currentButtonContent = signal('1');
37953
+ this.$suspendCurrentPage = signal(true);
37954
+ this.$navigationDirection = signal(1);
37955
+ this.subscriptions = [];
37956
+ }
37957
+ ngOnInit() { }
37958
+ goFirst() {
37959
+ this.$navigationDirection.set(-1);
37960
+ this.$suspendCurrentPage.set(false);
37961
+ setTimeout(() => {
37962
+ if (!!this.$pageCount())
37963
+ this.$currentPage().next(1);
37964
+ this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotatebackwards');
37965
+ });
37966
+ }
37967
+ goLast() {
37968
+ this.$navigationDirection.set(1);
37969
+ this.$suspendCurrentPage.set(false);
37970
+ setTimeout(() => {
37971
+ if (!!this.$pageCount())
37972
+ this.$currentPage().next(this.$pageCount());
37973
+ this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotateforwards');
37974
+ });
37975
+ }
37976
+ goPrevious() {
37977
+ this.$navigationDirection.set(-1);
37978
+ this.$suspendCurrentPage.set(false);
37979
+ setTimeout(() => {
37980
+ if (!!this.$pageCount())
37981
+ this.$currentPage().next(this.$currentPage().value - 1);
37982
+ this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotatebackwards');
37983
+ });
37984
+ }
37985
+ goNext() {
37986
+ this.$navigationDirection.set(1);
37987
+ this.$suspendCurrentPage.set(false);
37988
+ setTimeout(() => {
37989
+ if (!!this.$pageCount())
37990
+ this.$currentPage().next(this.$currentPage().value + 1);
37991
+ this.$aperture()?.nativeElement.style.setProperty('animation-name', 'rotateforwards');
37992
+ });
37993
+ }
37994
+ onClickAddLocal() {
37995
+ this.$onClickAdd.emit();
37996
+ }
37997
+ ngAfterViewInit() {
37998
+ setTimeout(() => {
37999
+ this.subscriptions.push(this.$currentPage().subscribe(x => this.$currentButtonContent.set(x.toString())));
38000
+ this.mouseDownStream$ = fromEvent(this.$current().nativeElement, 'mousedown', _ => {
38001
+ this.$currentButtonContent.set(`${this.$currentPage().value}/${this.$pageCount()}`);
38002
+ });
38003
+ this.touchStartStream$ = fromEvent(this.$current().nativeElement, 'touchstart', _ => {
38004
+ this.$currentButtonContent.set(`${this.$currentPage().value}/${this.$pageCount()}`);
38005
+ });
38006
+ this.mouseUpStream$ = fromEvent(this.$current().nativeElement, 'mouseup', _ => {
38007
+ this.$currentButtonContent.set(`${this.$currentPage().value}`);
38008
+ });
38009
+ this.touchEndStream$ = fromEvent(this.$current().nativeElement, 'touchend', _ => {
38010
+ this.$currentButtonContent.set(`${this.$currentPage().value}`);
38011
+ });
38012
+ this.mouseDownSubscription$ = this.mouseDownStream$.subscribe();
38013
+ this.touchStartSubscription$ = this.touchStartStream$.subscribe();
38014
+ this.mouseUpSubscription$ = this.mouseUpStream$.subscribe();
38015
+ this.touchEndSubscription$ = this.touchEndStream$.subscribe();
38016
+ if (this.$background())
38017
+ setTimeout(() => this.$container().nativeElement.style.setProperty('--bg', this.$background()));
38018
+ if (this.$height())
38019
+ this.$container()?.nativeElement.style.setProperty('--height', this.$height() + 'px');
38020
+ });
38021
+ }
38022
+ ngOnDestroy() {
38023
+ if (this.mouseDownSubscription$)
38024
+ this.mouseDownSubscription$.unsubscribe();
38025
+ if (this.touchStartSubscription$)
38026
+ this.touchStartSubscription$.unsubscribe();
38027
+ if (this.mouseUpSubscription$)
38028
+ this.mouseUpSubscription$.unsubscribe();
38029
+ if (this.touchEndSubscription$)
38030
+ this.touchEndSubscription$.unsubscribe();
38031
+ }
38032
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CorePaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
38033
+ 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 }); }
38034
+ }
38035
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CorePaginationComponent, decorators: [{
38036
+ type: Component,
38037
+ args: [{ selector: 'core-pagination', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
38038
+ NgStyle,
38039
+ AsyncPipe,
38040
+ ], 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"] }]
38041
+ }], ctorParameters: () => [] });
38042
+
38043
+ class CoreCompareDbPipelineComponent extends BaseComponent {
38044
+ constructor(mls, appService) {
38045
+ super(mls);
38046
+ this.mls = mls;
38047
+ this.appService = appService;
38048
+ this.data = [];
38049
+ this.tabHeaders = ["Dev-Test-Live", "Dev-Extended"];
38050
+ this.activeTabIndex = 0;
38051
+ this.columns = [
38052
+ {
38053
+ field: 'id',
38054
+ type: 'string',
38055
+ caption: 'id',
38056
+ align: 'left',
38057
+ hidden: true,
38058
+ width: 0
38059
+ },
38060
+ {
38061
+ field: 'difference',
38062
+ type: 'string',
38063
+ caption: 'Problem',
38064
+ align: 'left',
38065
+ sortDisabled: true,
38066
+ width: 300
38067
+ },
38068
+ {
38069
+ field: 'conflictType',
38070
+ type: 'string',
38071
+ caption: 'Marker',
38072
+ align: 'center',
38073
+ width: 50
38074
+ },
38075
+ {
38076
+ field: 'sourceAlias',
38077
+ type: 'string',
38078
+ caption: 'Source',
38079
+ align: 'left',
38080
+ sortDisabled: true,
38081
+ width: 60
38082
+ },
38083
+ {
38084
+ field: 'targetAlias',
38085
+ type: 'string',
38086
+ caption: 'Target',
38087
+ align: 'left',
38088
+ sortDisabled: true,
38089
+ width: 200
38090
+ },
38091
+ {
38092
+ field: 'tableName',
38093
+ type: 'string',
38094
+ caption: 'Table',
38095
+ align: 'left',
38096
+ sortDisabled: true,
38097
+ width: 200
38098
+ },
38099
+ {
38100
+ field: 'columnName',
38101
+ type: 'string',
38102
+ caption: 'Column',
38103
+ align: 'left',
38104
+ sortDisabled: true,
38105
+ width: 200
38106
+ },
38107
+ {
38108
+ field: 'sourceType',
38109
+ type: 'string',
38110
+ caption: 'Source type',
38111
+ align: 'left',
38112
+ sortDisabled: true,
38113
+ width: 100
38114
+ },
38115
+ {
38116
+ field: 'sourceIsPrimaryKey',
36368
38117
  type: 'boolean',
36369
38118
  caption: 'Source is PK',
36370
38119
  align: 'center',
@@ -36743,860 +38492,221 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
36743
38492
  args: [{ selector: 'confirm-dialog-state', standalone: false, template: "<div class=\"confirm-dialog-state-container\">\r\n <div class=\"container container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4 label\">busy</div>\r\n <div class=\"col-md-8 font-bold\">{{ ds.busy }}</div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 label\">showConfirmDialog</div>\r\n <div class=\"col-md-8 font-bold\">{{ ds.showConfirmDialog$.value }}</div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 label\">dialogConfirmed</div>\r\n <div class=\"col-md-8 font-bold\">{{ ds.dialogConfirmed$.value }}</div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 label\">title</div>\r\n <div class=\"col-md-8 font-bold\">{{ ds.title$.value }}</div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4 label\">body</div>\r\n <div class=\"col-md-8 font-bold\">{{ ds.body$.value }}</div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!--\r\n\r\n busy!: boolean;\r\n\r\n showConfirmDialog$ = new BehaviorSubject<boolean | undefined>(undefined);\r\n canDeactivate$ = new Subject<boolean>;\r\n dialogConfirmed$ = new BehaviorSubject<IDialogConfirmModel | undefined>(undefined);\r\n\r\n title$ = new Subject<EnumTranslateKey>;\r\n body$ = new Subject<EnumTranslateKey>;\r\n okButtonText$ = new Subject<EnumTranslateKey>;\r\n cancelButtonText$ = new Subject<EnumTranslateKey>;\r\n showCancelOnly$ = new Subject<boolean>;\r\n informationLines$ = new Subject<string[]>;\r\n-->", styles: [".confirm-dialog-state-container{position:fixed;display:block;top:calc(var(--size-header-height) + var(--size-layout-block-cell-spacing));left:var(--size-layout-block-cell-spacing);z-index:9999999;width:320px;height:320px}\n"] }]
36744
38493
  }], ctorParameters: () => [{ type: DialogService }] });
36745
38494
 
36746
- class CoreLazyMountComponent {
36747
- constructor() {
36748
- this.vcRef = inject(ViewContainerRef);
36749
- }
36750
- set props(value) {
36751
- this._props = value;
36752
- this.assignInputs();
36753
- }
36754
- async ngOnInit() {
36755
- if (this.loadComponent) {
36756
- const componentType = await this.loadComponent();
36757
- this.componentRef = this.vcRef.createComponent(componentType);
36758
- this.assignInputs();
36759
- }
36760
- }
36761
- assignInputs() {
36762
- if (this.componentRef && this._props) {
36763
- Object.assign(this.componentRef.instance, this._props);
36764
- this.componentRef.changeDetectorRef.markForCheck();
36765
- }
36766
- }
36767
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreLazyMountComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36768
- 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: [""] }); }
36769
- }
36770
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreLazyMountComponent, decorators: [{
36771
- type: Component,
36772
- args: [{ selector: 'core-lazy-mount', imports: [], template: "" }]
36773
- }], propDecorators: { loadComponent: [{
36774
- type: Input
36775
- }], props: [{
36776
- type: Input
36777
- }] } });
36778
-
36779
- class ModuleItemComponent extends BaseComponent {
36780
- constructor(mls, navigatorService, cdr, menuService) {
36781
- super(mls);
36782
- this.mls = mls;
36783
- this.navigatorService = navigatorService;
36784
- this.cdr = cdr;
36785
- this.menuService = menuService;
36786
- this.$item = input.required();
36787
- this.$itemPadding = input(5);
36788
- this.$width = input.required();
36789
- this.$height = input.required();
36790
- this.$iconTextVerticalMargin = input(25);
36791
- this.$active = signal(false);
36792
- this.iconClickStream$ = new BehaviorSubject('');
36793
- }
36794
- ngOnInit() {
36795
- this.subscriptions.push(this.mls.lang$.subscribe(x => {
36796
- this.lang = x;
36797
- this.cdr.markForCheck();
36798
- }));
36799
- if (!!localStorage) {
36800
- const activeRootMenuItemId = Number(localStorage.getItem('activeRootMenuItemId') || '0');
36801
- const active = activeRootMenuItemId === this.$item()?.id;
36802
- this.$active.set(active);
36803
- }
36804
- }
36805
- onClick(e, item) {
36806
- this.iconClickStream$.next(crypto.randomUUID());
36807
- if (!!item) {
36808
- this.navigatorService.clickedItem$.next(item);
36809
- }
36810
- if (localStorage.getItem('moduleDesignMode') === 'on')
36811
- return;
36812
- this.navigatorService.activeRootMenuItemId$.next(item?.id);
36813
- if (!!localStorage) {
36814
- localStorage.setItem('activeRootMenuItemId', (item?.id || 0).toString());
36815
- }
36816
- this.menuService.isOpen$.next(true); // trigger the LeftBar to be opened at the first time
36817
- }
36818
- ngAfterViewInit() {
36819
- this.subscriptions.push(this.navigatorService.activeRootMenuItemId$.subscribe(x => {
36820
- const active = x === this.$item()?.id;
36821
- this.$active.set(active);
36822
- }));
36823
- this.subscriptions.push(this.iconClickStream$.pipe(buffer(this.iconClickStream$.pipe(debounceTime(250))), map$1(clicks => clicks.length), filter(clicksLength => clicksLength >= 5))
36824
- .subscribe(_ => {
36825
- this.navigatorService.showEditSvg$.next(true);
36826
- }));
36827
- }
36828
- 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 }); }
36829
- 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 }); }
36830
- }
36831
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ModuleItemComponent, decorators: [{
36832
- type: Component,
36833
- args: [{ selector: 'app-module-item', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
36834
- NgStyle,
36835
- TooltipDirective,
36836
- StringHtmlPipe,
36837
- TranslatePipe,
36838
- ], 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"] }]
36839
- }], ctorParameters: () => [{ type: MultiLanguageService }, { type: NavigatorService }, { type: i0.ChangeDetectorRef }, { type: MenuService }] });
36840
-
36841
- class CoreRootMenuItemPickerComponent extends BaseComponent {
36842
- constructor(mls, ahs, renderer, navigatorService, layoutService, domService, menuService, sysMenuService, authService, appConfigService) {
36843
- super(mls);
36844
- this.mls = mls;
36845
- this.ahs = ahs;
36846
- this.renderer = renderer;
36847
- this.navigatorService = navigatorService;
36848
- this.layoutService = layoutService;
36849
- this.domService = domService;
36850
- this.menuService = menuService;
36851
- this.sysMenuService = sysMenuService;
36852
- this.authService = authService;
36853
- this.appConfigService = appConfigService;
36854
- this.logoPath = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTE1IiBoZWlnaHQ9IjI5IiB2aWV3Qm94PSIwIDAgMTE1IDI5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wIDI4LjU1MjhWOC41NzY4NkgyLjU2MzI5VjE2LjgxMzRIMTIuNTIzNVY4LjU3Njg2SDE1LjA4NjhWMjguNTMzOUgxMi41MjM1VjE5LjE0MjNIMi41ODE2VjI4LjUzMzlIMFYyOC41NTI4Wk0xOS4wNzgyIDExLjM2MDJWOC41NzY4NkgyMS40NTg0VjExLjM2MDJIMTkuMDc4MlpNMTkuMDc4MiAyOC41NTI4VjE0LjA4NjhIMjEuNDU4NFYyOC41NTI4SDE5LjA3ODJaTTI0LjIyMzEgMjIuMDc3MkwyOC4wMzE1IDIxLjY3OTZDMjguMjUxMiAyMi45ODYxIDI4LjcyNzIgMjMuOTUxNyAyOS40MjMgMjQuNTc2NkMzMC4xMTg3IDI1LjIwMTQgMzEuMDcwOCAyNS41MDQ0IDMyLjI0MjYgMjUuNTA0NEMzMy40ODc2IDI1LjUwNDQgMzQuNDIxNCAyNS4yMjAzIDM1LjA2MjIgMjQuNjcxMkMzNS43MDMgMjQuMTIyMSAzNi4wMTQzIDIzLjQ5NzMgMzYuMDE0MyAyMi43NTg5QzM2LjAxNDMgMjIuMjg1NSAzNS44ODYxIDIxLjg2ODkgMzUuNjExNSAyMS41NDdDMzUuMzM2OCAyMS4yMjUyIDM0Ljg3OTEgMjAuOTIyMiAzNC4yMiAyMC42NzYxQzMzLjc2MjIgMjAuNTI0NiAzMi43MzY5IDIwLjIyMTYgMzEuMTI1NyAxOS44MDUxQzI5LjAzODUgMTkuMjc0OSAyNy41NzM3IDE4LjYxMjIgMjYuNzQ5OCAxNy44MTY5QzI1LjU1OTcgMTYuNzE4NyAyNC45OTIxIDE1LjM3NDQgMjQuOTkyMSAxMy44MDI4QzI0Ljk5MjEgMTIuNzgwMyAyNS4yNjY4IDExLjgxNDcgMjUuODE2IDEwLjk0MzdDMjYuMzgzNiAxMC4wNTM4IDI3LjE3MDkgOS4zNzIxMSAyOC4yMTQ1IDguOTE3NjhDMjkuMjc2NSA4LjQ0NDMyIDMwLjUyMTUgOC4yMTcxIDMyLjAwNDYgOC4yMTcxQzM0LjQyMTQgOC4yMTcxIDM2LjIzNCA4Ljc2NjIgMzcuNDYwNyA5Ljg2NDQxQzM4LjY4NzQgMTAuOTgxNSAzOS4zMDk5IDEyLjQ1ODQgMzkuMzgzMiAxNC4zMTRMMzUuNDgzMyAxNC40NjU1QzM1LjMxODUgMTMuNDI0MSAzNC45NzA3IDEyLjY4NTcgMzQuNDIxNCAxMi4yNTAyQzMzLjg3MjEgMTEuODE0NyAzMy4wNjY1IDExLjU2ODUgMzEuOTY3OSAxMS41Njg1QzMwLjg1MTEgMTEuNTY4NSAyOS45NzIyIDExLjgxNDcgMjkuMzMxNCAxMi4yODhDMjguOTI4NiAxMi42MDk5IDI4LjcwODkgMTMuMDI2NSAyOC43MDg5IDEzLjUzNzdDMjguNzA4OSAxNC4wMTExIDI4LjkxMDMgMTQuNDI3NiAyOS4yOTQ4IDE0Ljc0OTVDMjkuNzcwOCAxNS4xODUgMzAuOTc5MiAxNS42Mzk1IDMyLjg2NTEgMTYuMTEyOEMzNC43NTA5IDE2LjU2NzIgMzYuMTYwOCAxNy4wNDA2IDM3LjA1NzkgMTcuNTUxOEMzNy45NTUxIDE4LjA0NDEgMzguNjY5MSAxOC43MjU4IDM5LjE4MTggMTkuNTc3OEMzOS42OTQ0IDIwLjQ0ODggMzkuOTUwOCAyMS40OTAyIDM5Ljk1MDggMjIuNzU4OUMzOS45NTA4IDIzLjg5NDkgMzkuNjM5NSAyNC45NzQyIDM5LjAxNyAyNS45Nzc3QzM4LjQxMjggMjYuOTgxMyAzNy41MzQgMjcuNzE5NyAzNi40MTcxIDI4LjE5MzFDMzUuMzAwMiAyOC42ODU0IDMzLjkwODcgMjguOTEyNiAzMi4yMjQzIDI4LjkxMjZDMjkuNzg5MSAyOC45MTI2IDI3LjkwMzMgMjguMzI1NiAyNi42MDMzIDI3LjE3MDZDMjUuMjY2OCAyNS45OTY3IDI0LjQ3OTUgMjQuMjkyNiAyNC4yMjMxIDIyLjA3NzJaTTQ5LjU4MTQgMTQuMDY3OVYxNy4wOTc0SDQ3LjA1NDhWMjIuOTY3MUM0Ny4wNTQ4IDI0LjE0MTEgNDcuMDczMSAyNC44NDE3IDQ3LjEwOTcgMjUuMDQ5OUM0Ny4xNjQ2IDI1LjIzOTMgNDcuMjc0NSAyNS40MDk3IDQ3LjQ1NzYgMjUuNTQyMkM0Ny42MjIzIDI1LjY3NDggNDcuODIzNyAyNS43MzE2IDQ4LjA4MDEgMjUuNzMxNkM0OC40MjggMjUuNzMxNiA0OC45MjIzIDI1LjU5OSA0OS41NjMxIDI1LjM3MThMNDkuODc0NCAyOC4zNDQ2QzQ5LjAxMzkgMjguNzIzMiA0OC4wNjE4IDI4LjkxMjYgNDYuOTYzMiAyOC45MTI2QzQ2LjMwNDEgMjguOTEyNiA0NS42OTk5IDI4Ljc5OSA0NS4xNjg5IDI4LjU3MThDNDQuNjM3OSAyOC4zNDQ2IDQ0LjIzNTEgMjguMDQxNiA0My45Nzg4IDI3LjY2MjlDNDMuNzQwOCAyNy4zMDMyIDQzLjU1NzcgMjYuNzkxOSA0My40NjYxIDI2LjE2NzFDNDMuMzkyOSAyNS43MTI2IDQzLjM1NjMgMjQuODIyNyA0My4zNTYzIDIzLjQ1OTRWMTcuMTE2NEg0MS42NzE4VjE0LjA4NjhINDMuMzU2M1YxMS4yMDg4TDQ3LjA1NDggOC45NTU1NVYxNC4wODY4SDQ5LjU4MTRWMTQuMDY3OVpNNTQuOTI3NyAxOC41MzY0TDUxLjU3NzEgMTcuOTMwNUM1MS45NjE2IDE2LjUxMDQgNTIuNjAyNSAxNS40NjkgNTMuNTE3OSAxNC43ODc0QzU0LjQ1MTcgMTQuMTI0NyA1NS44MjQ5IDEzLjc4MzkgNTcuNjM3NSAxMy43ODM5QzU5LjI4NTMgMTMuNzgzOSA2MC41MTIxIDEzLjk3MzIgNjEuMzE3NyAxNC4zODk4QzYyLjEyMzMgMTQuNzg3NCA2Mi42OTA5IDE1LjI5ODYgNjMuMDIwNCAxNS45MjM1QzYzLjM1IDE2LjU0ODMgNjMuNTE0OCAxNy42ODQ0IDYzLjUxNDggMTkuMzMxN0w2My40NTk4IDIzLjgwMDNDNjMuNDU5OCAyNS4wNjg5IDYzLjUxNDggMjUuOTk2NyA2My42NDI5IDI2LjYwMjZDNjMuNzUyOCAyNy4yMDg1IDYzLjk5MDggMjcuODcxMiA2NC4zMDIxIDI4LjU1MjhINjAuNjQwMkM2MC41MzA0IDI4LjMwNjcgNjAuNDIwNSAyNy45MjggNjAuMjkyMyAyNy40MzU3QzYwLjIzNzQgMjcuMjA4NSA2MC4xODI1IDI3LjA1NyA2MC4xNDU5IDI2Ljk4MTNDNTkuNTIzNCAyNy42MjUgNTguODQ1OSAyOC4wOTg0IDU4LjEzMTkgMjguNDIwM0M1Ny40MTc4IDI4Ljc0MjIgNTYuNjQ4OCAyOC44OTM3IDU1Ljg0MzIgMjguODkzN0M1NC40MTUxIDI4Ljg5MzcgNTMuMjc5OSAyOC40OTYgNTIuNDU2IDI3LjY4MThDNTEuNjMyMSAyNi44ODY2IDUxLjIxMSAyNS44NjQxIDUxLjIxMSAyNC42MTQ0QzUxLjIxMSAyMy44MDAzIDUxLjM5NDEgMjMuMDgwNyA1MS43Nzg1IDIyLjQzN0M1Mi4xNjMgMjEuODEyMSA1Mi42NzU3IDIxLjMwMDkgNTMuMzcxNCAyMC45NjAxQzU0LjA0ODkgMjAuNjM4MiA1NS4wMTkzIDIwLjMzNTIgNTYuMzAwOSAyMC4wNzAxQzU4LjAyMiAxOS43NDgzIDU5LjIzMDQgMTkuNDI2NCA1OS44ODk1IDE5LjE0MjNWMTguNzYzN0M1OS44ODk1IDE4LjAwNjMgNTkuNzA2NSAxNy40OTUgNTkuMzc2OSAxNy4xNzMyQzU5LjAyOSAxNi44NTEzIDU4LjM1MTYgMTYuNjgwOSA1Ny4zODEyIDE2LjY4MDlDNTYuNzIyIDE2LjY4MDkgNTYuMjA5NCAxNi44MzIzIDU1Ljg0MzIgMTcuMDk3NEM1NS40NDA0IDE3LjM4MTQgNTUuMTQ3NCAxNy44NTQ4IDU0LjkyNzcgMTguNTM2NFpNNTkuODg5NSAyMS42NDE3QzU5LjQxMzUgMjEuNzkzMiA1OC42NjI4IDIyLjAwMTUgNTcuNjM3NSAyMi4yMjg3QzU2LjYxMjIgMjIuNDU1OSA1NS45NTMxIDIyLjY4MzEgNTUuNjIzNSAyMi44OTE0QzU1LjE0NzQgMjMuMjUxMiA1NC44OTExIDIzLjY4NjYgNTQuODkxMSAyNC4yMzU3QzU0Ljg5MTEgMjQuNzg0OSA1NS4wNzQyIDI1LjIzOTMgNTUuNDc3IDI1LjYzNjlDNTUuODYxNSAyNi4wMzQ1IDU2LjMzNzUgMjYuMjIzOSA1Ni45NDE3IDI2LjIyMzlDNTcuNjE5MiAyNi4yMjM5IDU4LjI2IDI1Ljk5NjcgNTguODY0MiAyNS41NDIyQzU5LjMwMzYgMjUuMjAxNCA1OS41OTY2IDI0Ljc4NDkgNTkuNzQzMSAyNC4yNzM2QzU5LjgzNDYgMjMuOTUxNyA1OS44ODk1IDIzLjMwOCA1OS44ODk1IDIyLjM5OTFWMjEuNjQxN1pNNjUuNTQ3MSAxNC4wNjc5SDY3LjU5NzdWMTIuOTg4NkM2Ny41OTc3IDExLjc1NzkgNjcuNzI1OSAxMC44Njc5IDY3Ljk4MjIgMTAuMjYyQzY4LjIzODYgOS42NTYxMyA2OC42OTYzIDkuMTYzODMgNjkuMzczNyA4Ljc4NTE0QzcwLjA1MTIgOC40MDY0NSA3MC45MTE3IDguMjE3MSA3MS45MzcgOC4yMTcxQzcyLjk5OSA4LjIxNzEgNzQuMDQyNiA4LjM2ODU4IDc1LjA0OTYgOC43MDk0TDc0LjU3MzYgMTEuMzYwMkM3My45Njk0IDExLjIwODggNzMuMzgzNSAxMS4xMzMgNzIuODUyNSAxMS4xMzNDNzIuMzAzMiAxMS4xMzMgNzEuOTE4NyAxMS4yNjU2IDcxLjY2MjQgMTEuNTMwN0M3MS40MDYxIDExLjc5NTcgNzEuMzE0NSAxMi4yODggNzEuMzE0NSAxMy4wNDU0VjE0LjA2NzlINzQuMDc5MlYxNy4wNzg1SDcxLjMxNDVWMjguNTMzOUg2Ny42MTZWMTcuMDc4NUg2NS41NjU0VjE0LjA2NzlINjUuNTQ3MVpNNzQuNTE4NiAxNC4wNjc5SDc2LjU2OTNWMTIuOTg4NkM3Ni41NjkzIDExLjc1NzkgNzYuNjk3NCAxMC44Njc5IDc2Ljk1MzggMTAuMjYyQzc3LjIxMDEgOS42NTYxMyA3Ny42Njc4IDkuMTYzODMgNzguMzQ1MyA4Ljc4NTE0Qzc5LjAyMjcgOC40MDY0NSA3OS44ODMyIDguMjE3MSA4MC45MDg2IDguMjE3MUM4MS45NzA1IDguMjE3MSA4My4wMTQxIDguMzY4NTggODQuMDIxMSA4LjcwOTRMODMuNTQ1MSAxMS4zNjAyQzgyLjk0MDkgMTEuMjA4OCA4Mi4zNTUgMTEuMTMzIDgxLjgwNTcgMTEuMTMzQzgxLjI1NjQgMTEuMTMzIDgwLjg3MTkgMTEuMjY1NiA4MC42MTU2IDExLjUzMDdDODAuMzk1OSAxMS43OTU3IDgwLjI2NzcgMTIuMjg4IDgwLjI2NzcgMTMuMDQ1NFYxNC4wNjc5SDgzLjAzMjRWMTcuMDc4NUg4MC4yNjc3VjI4LjUzMzlINzYuNTY5M1YxNy4wNzg1SDc0LjUxODZWMTQuMDY3OVoiIGZpbGw9ImJsYWNrIi8+DQo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTk4LjY0OTggNS4yNDQ3N0M5Ny45NTQgMi43ODMyOCA5NS42NDcxIDIuNDA0NTkgOTMuNzI0NiAzLjc2Nzg4QzkxLjc0NzIgNS4xNjkwMyA5MC40Mjg5IDguMTk4NTcgOTEuMTA2NCAxMC42MjIyQzkxLjgwMjEgMTMuMDgzNyA5NC4xMDkxIDEzLjQ2MjQgOTYuMDMxNiAxMi4xMThDOTguMDA5IDEwLjcxNjkgOTkuMzI3MiA3LjY2ODQgOTguNjQ5OCA1LjI0NDc3WiIgZmlsbD0iI0YzNzU0MCIvPg0KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05MS4xNDI4IDI3LjgxNDlDOTEuOTMwMSAyNy4xMTQzIDkyLjk3MzggMjYuNDUxNiA5My44MTYgMjUuODgzNkw5NS40NjM4IDI0LjgyMzJDOTcuODQ0IDIwLjAzMjggMTAxLjA0OCAxNS41NDUzIDEwNC40MTcgMTEuNDU1NEMxMDcuNDkzIDcuNjg3NDQgMTExLjA4MiAzLjc0OTA1IDExNSAwLjkwODg2TDExNC4zNDEgMEMxMTAuMTQ4IDIuMjkxMDggMTA2LjMwMyA1LjQxNTI5IDEwMi44NDIgOC43NjY3MUM5OS4xOTg5IDEyLjMwNzUgOTUuODQ4MyAxNi4yMjY5IDkzLjE1NjggMjAuNTgxOUw5My4wNDcgMjAuNzMzNEw5Mi4yNzggMTkuMDY3MUM5MS43MTA0IDE3Ljg1NTMgOTAuMTM1OCAxNC42NTU0IDg4LjU0MjkgMTQuNjU1NEM4Ni45NSAxNC42NTU0IDg1LjQzMDMgMTUuODI5MyA4NC4zMTM1IDE2Ljk0NjRDODUuMzAyMiAxNy4zMDYyIDg2LjEyNjEgMTcuOTg3OCA4Ni43ODUyIDE4LjgyMUM4Ny44MTA1IDIwLjA3MDYgODguNjM0NSAyMS43NzQ4IDg5LjI5MzYgMjMuMjcwNkw4OS45MTYxIDI0LjY3MTdDOTAuMzE4OSAyNS42NzUzIDkwLjgxMzMgMjYuNzkyNCA5MS4xNDI4IDI3LjgxNDlaIiBmaWxsPSIjRjM3NTQwIi8+DQo8L3N2Zz4NCg==';
36855
- this.itemsPerRow = 4;
36856
- this.iconTextVerticalMargin = 25;
36857
- this.items = [[]];
36858
- this.zIndex = 1;
36859
- this.imageErrorResolverType = EnumImageResolverType.LOGO;
36860
- this.headerHeight = 0;
36861
- this.width = 400;
36862
- this.layoutService.modulePanelWidth$.subscribe(x => this.width = x);
36863
- }
36864
- ngOnInit() {
36865
- this.subscriptions.push(this.mls.lang$.subscribe(x => this.lang = x));
36866
- this.subscriptions.push(this.authService.data$.subscribe(x => this.isRoot = !!x?.isRoot));
36867
- this.scrollWidth = this.layoutService.modulePanelWidth$.value - this.layoutService.basicSpacing * 2;
36868
- this.scrollHeight = window.innerHeight - this.layoutService.headerHeight$.value - this.layoutService.basicSpacing * 2;
36869
- this.itemWidth = this.scrollWidth / 4;
36870
- }
36871
- transformTo2DArray(flatList) {
36872
- const result = [];
36873
- for (let i = 0; i < flatList.length; i += this.itemsPerRow) {
36874
- const row = flatList.slice(i, i + this.itemsPerRow);
36875
- // If the last row has fewer than itemsPerRow, pad it with undefineds
36876
- while (row.length < this.itemsPerRow) {
36877
- row.push(undefined);
36878
- }
36879
- result.push(row);
36880
- }
36881
- return result;
36882
- }
36883
- ngAfterViewInit() {
36884
- setTimeout(() => {
36885
- this.designMode = localStorage.getItem('moduleDesignMode') === 'on';
36886
- this.zIndex = this.domService.getMaxZIndex() + 1;
36887
- // this.listenerFn = this.renderer.listen('window', 'click', (e: Event) => {
36888
- // if (!this.designMode) {
36889
- // if (this.container && !!!this.container.nativeElement.contains(e.target)) {
36890
- // this.ahs.activeKey$.next(undefined);
36891
- // }
36892
- // }
36893
- // });
36894
- this.subscriptions.push(this.navigatorService.rootNavigatorItems$.subscribe(x => {
36895
- // Transform the flat list into a 2D array
36896
- this.items = this.transformTo2DArray(x);
36897
- }));
36898
- this.subscriptions.push(this.layoutService.headerHeight$.subscribe(x => {
36899
- this.headerHeight = x;
36900
- }));
36901
- if (!!localStorage) {
36902
- const activeRootMenuItemId = Number(localStorage.getItem('activeRootMenuItemId') || '0');
36903
- this.navigatorService.activeRootMenuItemId$.next(activeRootMenuItemId);
36904
- }
36905
- if (window.innerWidth < this.layoutService.modulePanelWidth$.value) {
36906
- this.layoutService.modulePanelWidth$.next(window.innerWidth);
36907
- }
36908
- });
36909
- }
36910
- onDesignModeClick(e) {
36911
- e.stopPropagation();
36912
- if (localStorage.getItem('moduleDesignMode') === 'on') {
36913
- localStorage.setItem('moduleDesignMode', 'off');
36914
- this.designMode = false;
36915
- }
36916
- else {
36917
- localStorage.setItem('moduleDesignMode', 'on');
36918
- this.designMode = true;
36919
- }
36920
- }
36921
- ngOnDestroy() {
36922
- this.subscriptions.map(x => x?.unsubscribe());
36923
- if (this.listenerFn)
36924
- this.listenerFn();
36925
- }
36926
- 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 }); }
36927
- 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"] }] }); }
36928
- }
36929
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerComponent, decorators: [{
36930
- type: Component,
36931
- args: [{ selector: 'core-root-menu-item-picker', imports: [
36932
- CoreLineComponent,
36933
- NgStyle,
36934
- ModuleItemComponent,
36935
- ImageErrorResolverDirective,
36936
- TooltipDirective,
36937
- ], 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"] }]
36938
- }], ctorParameters: () => [{ type: MultiLanguageService }, { type: ApplicationHelpService }, { type: i0.Renderer2 }, { type: NavigatorService }, { type: LayoutService }, { type: DomService }, { type: MenuService }, { type: SysMenuService }, { type: AuthService }, { type: AppConfigService }], propDecorators: { logoPath: [{
36939
- type: Input
36940
- }], itemsPerRow: [{
36941
- type: Input
36942
- }], iconTextVerticalMargin: [{
36943
- type: Input
36944
- }], container: [{
36945
- type: ViewChild,
36946
- args: ['container']
36947
- }] } });
36948
-
36949
- class CoreRootMenuItemPickerService {
36950
- constructor() { }
36951
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
36952
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, providedIn: 'root' }); }
36953
- }
36954
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, decorators: [{
36955
- type: Injectable,
36956
- args: [{
36957
- providedIn: 'root'
36958
- }]
36959
- }], ctorParameters: () => [] });
36960
-
36961
- class ComPartyService {
36962
- constructor(recursiveService, alertService) {
36963
- this.recursiveService = recursiveService;
36964
- this.alertService = alertService;
36965
- this.instances = [];
36966
- this.loading = true;
36967
- this.comTreeData$ = new BehaviorSubject([]);
36968
- this.comTreeDataWithPeople$ = new BehaviorSubject([]);
36969
- this.linerData$ = new BehaviorSubject([]);
36970
- this.buildTreeFlag$ = new BehaviorSubject(false);
36971
- this.status$ = new BehaviorSubject({
36972
- selectedKey: undefined,
36973
- activeKeys: [],
36974
- checkedKeys: [],
36975
- expandedKeys: [],
36976
- checkInheritance: true
36977
- });
36978
- this.linerData$.subscribe(xs => {
36979
- const idCountMap = new Map();
36980
- xs.forEach(item => {
36981
- const id = item.id;
36982
- idCountMap.set(id, (idCountMap.get(id) ?? 0) + 1);
36983
- });
36984
- const duplicates = Array.from(idCountMap.entries())
36985
- .filter(([_, count]) => count > 1)
36986
- .map(([id]) => id);
36987
- if (!!duplicates.length) {
36988
- if (isDevMode()) {
36989
- alertService.error('🔁 Duplicate IDs: ' + duplicates.reduce((a, c) => a + ";" + c, ''), alertOptions);
36990
- }
36991
- }
36992
- });
36993
- }
36994
- buildTreeData(status = {
36995
- selectedKey: undefined,
36996
- activeKeys: [],
36997
- checkedKeys: [],
36998
- expandedKeys: [],
36999
- checkInheritance: true
37000
- }) {
37001
- this.loading = true;
37002
- const cloneCopy = JSON.parse(JSON.stringify(this.linerData$.value));
37003
- if (typeof Worker !== 'undefined') {
37004
- // Create a new
37005
- console.log("🟢🟢 Worker works");
37006
- const worker = new Worker(liner_to_nested_array_script);
37007
- worker.addEventListener('message', ({ data }) => {
37008
- const newData = data.list;
37009
- this.comTreeData$.next(newData);
37010
- this.loading = false;
37011
- });
37012
- worker.postMessage({
37013
- list: cloneCopy,
37014
- keyField: 'id',
37015
- titleField: 'name',
37016
- parentField: 'parentId',
37017
- activeField: 'active',
37018
- checkedField: 'checked',
37019
- expandedField: 'expand',
37020
- status
37021
- });
37022
- }
37023
- else {
37024
- // Web workers are not supported in this environment.
37025
- // You should add a fallback so that your program still executes correctly.
37026
- this.recursiveService
37027
- .linerArrayToNestedArray(cloneCopy, 'id', 'name', 'parentId', 'active', 'checked', 'expand', status)
37028
- .subscribe((obj) => {
37029
- const newData = obj.list;
37030
- this.comTreeData$.next(newData);
37031
- this.loading = false;
37032
- });
37033
- }
37034
- }
37035
- 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 }); }
37036
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ComPartyService, providedIn: 'root' }); }
37037
- }
37038
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ComPartyService, decorators: [{
37039
- type: Injectable,
37040
- args: [{
37041
- providedIn: 'root'
37042
- }]
37043
- }], ctorParameters: () => [{ type: RecursiveService }, { type: AlertService }] });
37044
-
37045
- class CoreComTreeComponent extends CoreFormControlBaseComponent {
37046
- writeValue(obj) {
37047
- this.value = obj;
37048
- switch (this.accessorMode) {
37049
- case EnumCoreOrgTreeaAccessorMode.CHECKED:
37050
- if (!!obj) {
37051
- const checkedKeys = [];
37052
- this.checkedIds = obj; // <=== 24/10/2023
37053
- obj.map(x => checkedKeys.push(x.toString()));
37054
- this.loading = true;
37055
- this.recursiveService.writeValueChecked(checkedKeys, this.data, this.disabledLoopExpand).subscribe(_ => {
37056
- this.loading = false;
37057
- if (!!this.data && !!this.data?.length)
37058
- this.data[0].tree$Expanded = true;
37059
- });
37060
- }
37061
- break;
37062
- case EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE:
37063
- case EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE:
37064
- if (!!obj) {
37065
- const activatedKeys = [];
37066
- obj.map(x => activatedKeys.push(x.toString()));
37067
- this.loading = true;
37068
- this.recursiveService.writeValueActivated(activatedKeys, this.data, this.disabledLoopExpand).subscribe(_ => {
37069
- this.loading = false;
37070
- if (!!this.data && !!this.data?.length)
37071
- this.data[0].tree$Expanded = true;
37072
- });
37073
- }
37074
- break;
37075
- default:
37076
- break;
37077
- }
37078
- if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED) {
37079
- }
37080
- else /* EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE or EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE */ {
37081
- }
37082
- }
37083
- setDisabledState(disabled) {
37084
- this.disabled = disabled;
37085
- }
37086
- constructor(
37087
- //public override injector: Injector,
37088
- authService, recursiveService, mls, layoutService, coreOrgTreeService,
37089
- // private coreOrgTreeState: CoreOrgTreeState,
37090
- alertService, organizationService) {
37091
- super( /*injector*/);
37092
- this.authService = authService;
37093
- this.recursiveService = recursiveService;
37094
- this.mls = mls;
37095
- this.layoutService = layoutService;
37096
- this.coreOrgTreeService = coreOrgTreeService;
37097
- this.alertService = alertService;
37098
- this.organizationService = organizationService;
37099
- this.lineColor = 'transparent';
37100
- this.accessorMode = EnumCoreOrgTreeaAccessorMode.CHECKED;
37101
- //TO BE NEW
37102
- this.searchMode = EnumCoreOrgTreeaSearchMode.REDUCE;
37103
- this.excludedIds$ = new BehaviorSubject([]); // 2024-05-10: to be implemented
37104
- this.stateIsolated$ = new BehaviorSubject(false);
37105
- this.itemDoubleClick = new EventEmitter();
37106
- this.itemClick = new EventEmitter();
37107
- this.showSearch = false;
37108
- this.hiddenToolClickStream$ = new BehaviorSubject('');
37109
- this.value = [];
37110
- this.activeIds = [];
37111
- this.checkedIds = [];
37112
- this.subscriptions = [];
37113
- this.search$ = new Subject();
37114
- this.searchPlaceholder = "Tìm kiếm...";
37115
- this.checkInheritance = true; // default value is true
37116
- this.showDissolved = false; // default value is false
37117
- this.initializing = true;
37118
- // this.reduced$ = this.coreOrgTreeState.coreOrgTreeReduced$;
37119
- this.initializing = false;
37120
- }
37121
- ngOnChanges(changes) {
37122
- if (changes['height']) {
37123
- this.resizeHeight();
37124
- }
37125
- }
37126
- ngOnInit() {
37127
- super.register();
37128
- //this.layoutService.leftbarOpen$.next(false);
37129
- this.instanceNumber = new Date().getTime();
37130
- const newInstance = {
37131
- instanceNumber: this.instanceNumber,
37132
- selectedKey$: new BehaviorSubject(undefined),
37133
- activeKeys$: new BehaviorSubject([]),
37134
- checkedKeys$: new BehaviorSubject([]),
37135
- expandedKeys$: new BehaviorSubject([]),
37136
- checkInheritance$: new BehaviorSubject(true)
37137
- };
37138
- this.organizationService.instances.push(newInstance);
37139
- // Check xem chiều cao height có được truyền vào hay không
37140
- if (this.height === undefined) {
37141
- if (isDevMode()) {
37142
- //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);
37143
- }
37144
- this.subscriptions.push(this.layoutService.contentContainerHeight$.subscribe(x => {
37145
- // basicSpacing là paddingBottom của lớp content-container
37146
- this.height = x - this.layoutService.corePageHeaderHeight - this.layoutService.basicSpacing;
37147
- }));
37148
- }
37149
- this.subscriptions.push(this.organizationService.linerData$.subscribe((x) => {
37150
- this.linnerOrgArray = x;
37151
- }));
37152
- this.subscriptions.push(this.organizationService.buildTreeFlag$.pipe(skip(1)).subscribe(_ => {
37153
- this.buildTreeData();
37154
- }));
37155
- this.subscriptions.push(this.stateIsolated$.subscribe(x => {
37156
- if (x) {
37157
- if (!!this.statusSubscription) {
37158
- this.statusSubscription.unsubscribe();
37159
- }
37160
- }
37161
- else {
37162
- if (!this.statusSubscription) {
37163
- this.statusSubscription = this.organizationService.status$.subscribe((x) => {
37164
- console.log("this.organizationService.status$ changes", x);
37165
- const newActiveIds = [];
37166
- x.activeKeys.map((k) => {
37167
- newActiveIds.push(Number(k));
37168
- });
37169
- this.activeIds = newActiveIds;
37170
- if (this.accessorMode !== EnumCoreOrgTreeaAccessorMode.CHECKED) {
37171
- this.value = this.activeIds;
37172
- this.onChange(this.activeIds);
37173
- }
37174
- this.selectedKey = x.selectedKey;
37175
- });
37176
- }
37177
- }
37178
- }));
37179
- this.subscriptions.push(this.coreOrgTreeService.showSearch$.subscribe(x => this.showSearch = x));
37180
- this.subscriptions.push(this.hiddenToolClickStream$.pipe(buffer(this.hiddenToolClickStream$.pipe(debounceTime(250))), map$1(clicks => clicks.length), filter(clicksLength => clicksLength >= 5))
37181
- .subscribe(_ => {
37182
- this.coreOrgTreeService.showSearch$.next(!this.coreOrgTreeService.showSearch$.value);
37183
- }));
37184
- this.subscriptions.push(this.search$
37185
- .pipe(filter((x) => x !== null), debounceTime(500), distinctUntilChanged(), switchMap((text) => {
37186
- console.log('switchMap works');
37187
- this.loading = true;
37188
- // AUG 2024 NEW : MUST BE TESTED
37189
- if (this.searchMode === EnumCoreOrgTreeaSearchMode.HIGHLIGHT) {
37190
- return this.recursiveService.findItem(text, this.data);
37191
- }
37192
- else {
37193
- return of(this.recursiveService.reducingFilter(this.scrollContainer, text));
37194
- }
37195
- }))
37196
- .subscribe((x) => {
37197
- this.loading = false;
37198
- // if (this.searchMode === EnumCoreOrgTreeaSearchMode.REDUCE) {
37199
- // this.dataFiltered = x as IOrgTreeItem[];
37200
- // }
37201
- }));
37202
- this.subscriptions.push(this.organizationService.status$
37203
- .pipe(filter((value) => !!!this.initializing && !!value))
37204
- .subscribe((x) => {
37205
- if (!!localStorage) {
37206
- localStorage.setItem('coreOrgTreeStatus', JSON.stringify(x));
37207
- }
37208
- }));
37209
- this.subscriptions.push(this.mls.lang$.subscribe((x) => (this.lang = x)));
37210
- }
37211
- resizeHeight() {
37212
- // height is not given and the tree resize as standard
37213
- if (!!!this.height) {
37214
- const sizeHeaderHeight = Number(getComputedStyle(document.documentElement)
37215
- .getPropertyValue('--size-header-height')
37216
- .replace('px', ''));
37217
- const sizeCorePageHeaderHeight = Number(getComputedStyle(document.documentElement)
37218
- .getPropertyValue('--size-core-page-header-height')
37219
- .replace('px', ''));
37220
- const containerHeight = window.innerHeight - sizeHeaderHeight - sizeCorePageHeaderHeight;
37221
- const pageHeaderHeight = Number(getComputedStyle(document.documentElement)
37222
- .getPropertyValue('--size-core-page-header-height')
37223
- .replace('px', ''));
37224
- const paginationHeight = Number(getComputedStyle(document.documentElement)
37225
- .getPropertyValue('--size-core-pagination-height')
37226
- .replace('px', ''));
37227
- const sizeMarginCorePaginationFull = Number(getComputedStyle(document.documentElement)
37228
- .getPropertyValue('--size-margin-core-pagination')
37229
- .replace('px', ''));
37230
- const height = containerHeight - pageHeaderHeight - paginationHeight + sizeMarginCorePaginationFull;
37231
- console.log(height);
37232
- this.container?.nativeElement.style.setProperty('--height', height + 'px');
37233
- }
37234
- else {
37235
- this.container?.nativeElement.style.setProperty('--height', this.height + 'px');
38495
+ class CoreLazyMountComponent {
38496
+ constructor() {
38497
+ this.vcRef = inject(ViewContainerRef);
38498
+ }
38499
+ set props(value) {
38500
+ this._props = value;
38501
+ this.assignInputs();
38502
+ }
38503
+ async ngOnInit() {
38504
+ if (this.loadComponent) {
38505
+ const componentType = await this.loadComponent();
38506
+ this.componentRef = this.vcRef.createComponent(componentType);
38507
+ this.assignInputs();
37236
38508
  }
37237
38509
  }
37238
- ngAfterViewInit() {
37239
- setTimeout(() => {
37240
- this.subscriptions.push(this.organizationService.comTreeData$.subscribe((x) => {
37241
- this.data = x;
37242
- //this.dataFiltered = JSON.parse(JSON.stringify(x));
37243
- console.log("new Data coming", this.data, new Date().getTime());
37244
- if (!!this.data) {
37245
- if (!!this.data.length)
37246
- this.data[0].tree$Expanded = true;
37247
- }
37248
- }));
37249
- this.subscriptions.push(this.coreOrgTreeService.arrowFontSize$.subscribe(x => {
37250
- this.container?.nativeElement.style.setProperty('--arrow-font-size', x + 'px');
37251
- }));
37252
- this.subscriptions.push(this.coreOrgTreeService.titleWrapperMaxWidth$.pipe(filter(x => !!x)).subscribe(x => {
37253
- this.container?.nativeElement.style.setProperty('--title-wrapper-max-width', x + 'px');
37254
- }));
37255
- this.subscriptions.push(this.organizationService.status$.subscribe(x => {
37256
- if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE && !!x.activeKeys) {
37257
- this.onChange(x.activeKeys.map(i => Number(i)));
37258
- }
37259
- else if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.ACTIVATED_SINGLE) {
37260
- // tạm thời bỏ qua
37261
- }
37262
- else if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED && !!x.checkedKeys) {
37263
- this.onChange(x.checkedKeys.map(i => Number(i)));
37264
- }
37265
- }));
37266
- });
38510
+ assignInputs() {
38511
+ if (this.componentRef && this._props) {
38512
+ Object.assign(this.componentRef.instance, this._props);
38513
+ this.componentRef.changeDetectorRef.markForCheck();
38514
+ }
37267
38515
  }
37268
- onItemClickLocal(e) {
37269
- this.linnerOrgArray.map((x) => (x.active = false));
37270
- setTimeout(() => this.buildTreeData());
38516
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreLazyMountComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
38517
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: CoreLazyMountComponent, isStandalone: true, selector: "core-lazy-mount", inputs: { loadComponent: "loadComponent", props: "props" }, ngImport: i0, template: "", styles: [""] }); }
38518
+ }
38519
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreLazyMountComponent, decorators: [{
38520
+ type: Component,
38521
+ args: [{ selector: 'core-lazy-mount', imports: [], template: "" }]
38522
+ }], propDecorators: { loadComponent: [{
38523
+ type: Input
38524
+ }], props: [{
38525
+ type: Input
38526
+ }] } });
38527
+
38528
+ class ModuleItemComponent extends BaseComponent {
38529
+ constructor(mls, navigatorService, cdr, menuService) {
38530
+ super(mls);
38531
+ this.mls = mls;
38532
+ this.navigatorService = navigatorService;
38533
+ this.cdr = cdr;
38534
+ this.menuService = menuService;
38535
+ this.$item = input.required();
38536
+ this.$itemPadding = input(5);
38537
+ this.$width = input.required();
38538
+ this.$height = input.required();
38539
+ this.$iconTextVerticalMargin = input(25);
38540
+ this.$active = signal(false);
38541
+ this.iconClickStream$ = new BehaviorSubject('');
37271
38542
  }
37272
- onToggleItem(e) {
37273
- const cloneCopy = JSON.parse(JSON.stringify(this.linnerOrgArray));
37274
- const filter = cloneCopy.filter((x) => x.id === e.id);
37275
- if (filter.length === 1) {
37276
- filter[0].expand = !!!e.expand;
38543
+ ngOnInit() {
38544
+ this.subscriptions.push(this.mls.lang$.subscribe(x => {
38545
+ this.lang = x;
38546
+ this.cdr.markForCheck();
38547
+ }));
38548
+ if (!!localStorage) {
38549
+ const activeRootMenuItemId = Number(localStorage.getItem('activeRootMenuItemId') || '0');
38550
+ const active = activeRootMenuItemId === this.$item()?.id;
38551
+ this.$active.set(active);
37277
38552
  }
37278
- this.linnerOrgArray = cloneCopy;
37279
- setTimeout(() => this.buildTreeData());
37280
38553
  }
37281
- // buildTreeData(): void {
37282
- // this.loading = true;
37283
- // const cloneCopy = JSON.parse(JSON.stringify(this.linnerOrgArray));
37284
- // if (typeof Worker !== 'undefined') {
37285
- // // Create a new
37286
- // console.log("🟢🟢 Worker works");
37287
- // this.worker = new Worker(liner_to_nested_array_script);
37288
- // this.worker.addEventListener('message', ({ data }) => {
37289
- // this.data = data.list;
37290
- // //this.dataFiltered = JSON.parse(JSON.stringify(data.list));
37291
- // if (!!this.data && !!this.data?.length) this.data[0].tree$Expanded = true;
37292
- // this.loading = false;
37293
- // });
37294
- // this.worker.postMessage({
37295
- // list: cloneCopy,
37296
- // keyField: 'id',
37297
- // titleField: 'name',
37298
- // parentField: 'parentId',
37299
- // activeField: 'active',
37300
- // //inheritantActiveField: 'inheritantActive',
37301
- // checkedField: 'checked',
37302
- // expandedField: 'expand',
37303
- // });
37304
- // } else {
37305
- // // Web workers are not supported in this environment.
37306
- // // You should add a fallback so that your program still executes correctly.
37307
- // const status = this.organizationService.status$.value;
37308
- // this.subscriptions.push(
37309
- // this.recursiveService
37310
- // .linerArrayToNestedArray(
37311
- // cloneCopy,
37312
- // 'id',
37313
- // 'name',
37314
- // 'parentId',
37315
- // 'active',
37316
- // 'checked',
37317
- // 'expand',
37318
- // //status
37319
- // )
37320
- // .subscribe((obj) => {
37321
- // this.data = obj.list;
37322
- // //this.dataFiltered = JSON.parse(JSON.stringify(obj.list));
37323
- // if (!!this.data && !!this.data?.length) this.data[0].tree$Expanded = true;
37324
- // this.loading = false;
37325
- // })
37326
- // );
37327
- // }
37328
- // }
37329
- buildTreeData() {
37330
- this.loading = true;
37331
- const cloneCopy = JSON.parse(JSON.stringify(this.linnerOrgArray));
37332
- // ✅ ADD THIS FILTER
37333
- const filteredList = !this.showDissolved
37334
- ? cloneCopy.filter(x => x.active === true)
37335
- : cloneCopy;
37336
- if (typeof Worker !== 'undefined') {
37337
- this.worker = new Worker(liner_to_nested_array_script);
37338
- this.worker.addEventListener('message', ({ data }) => {
37339
- this.data = data.list;
37340
- if (!!this.data?.length)
37341
- this.data[0].tree$Expanded = true;
37342
- this.loading = false;
37343
- });
37344
- // ✅ USE filteredList INSTEAD OF cloneCopy
37345
- this.worker.postMessage({
37346
- list: filteredList,
37347
- keyField: 'id',
37348
- titleField: 'name',
37349
- parentField: 'parentId',
37350
- activeField: 'active',
37351
- checkedField: 'checked',
37352
- expandedField: 'expand',
37353
- });
38554
+ onClick(e, item) {
38555
+ this.iconClickStream$.next(crypto.randomUUID());
38556
+ if (!!item) {
38557
+ this.navigatorService.clickedItem$.next(item);
37354
38558
  }
37355
- else {
37356
- this.subscriptions.push(this.recursiveService
37357
- .linerArrayToNestedArray(filteredList, // ✅ use filteredList
37358
- 'id', 'name', 'parentId', 'active', 'checked', 'expand')
37359
- .subscribe((obj) => {
37360
- this.data = obj.list;
37361
- if (!!this.data?.length)
37362
- this.data[0].tree$Expanded = true;
37363
- this.loading = false;
37364
- }));
38559
+ if (localStorage.getItem('moduleDesignMode') === 'on')
38560
+ return;
38561
+ this.navigatorService.activeRootMenuItemId$.next(item?.id);
38562
+ if (!!localStorage) {
38563
+ localStorage.setItem('activeRootMenuItemId', (item?.id || 0).toString());
37365
38564
  }
38565
+ this.menuService.isOpen$.next(true); // trigger the LeftBar to be opened at the first time
37366
38566
  }
37367
- onExpandTogglerClick(e, event) {
37368
- event.stopPropagation();
37369
- const newValue = !e.tree$Expanded;
37370
- e.tree$Expanded = newValue;
37371
- // updating status with newValue
37372
- const currentExpandedIds = this.organizationService.status$.value?.expandedKeys;
37373
- let newExpandedIds = currentExpandedIds?.filter((_) => !!!currentExpandedIds.includes(e.id.toString()));
37374
- if (newValue) {
37375
- newExpandedIds?.push(e.id.toString());
37376
- }
37377
- newExpandedIds?.sort();
37378
- const newExpandedKeys = [];
37379
- newExpandedIds.map((x) => newExpandedKeys.push(x.toString()));
37380
- this.organizationService.status$.next({
37381
- ...this.organizationService.status$.value,
37382
- expandedKeys: newExpandedKeys,
37383
- });
38567
+ ngAfterViewInit() {
38568
+ this.subscriptions.push(this.navigatorService.activeRootMenuItemId$.subscribe(x => {
38569
+ const active = x === this.$item()?.id;
38570
+ this.$active.set(active);
38571
+ }));
38572
+ this.subscriptions.push(this.iconClickStream$.pipe(buffer(this.iconClickStream$.pipe(debounceTime(250))), map$1(clicks => clicks.length), filter(clicksLength => clicksLength >= 5))
38573
+ .subscribe(_ => {
38574
+ this.navigatorService.showEditSvg$.next(true);
38575
+ }));
37384
38576
  }
37385
- onItemCheck(e, newValue) {
37386
- this.itemClick?.emit(e);
37387
- if (this.accessorMode !== EnumCoreOrgTreeaAccessorMode.CHECKED)
37388
- return;
37389
- // We have this var to hold nodes that are being changed
37390
- let toggledIds;
37391
- // We should calculate a new state into this var:
37392
- const newCheckedIds = JSON.parse(JSON.stringify(this.checkedIds));
37393
- // We will call this function after toggledIds changed
37394
- const changeValue = () => {
37395
- // If newValue === true, we will disctintly push changed ids to the state
37396
- // Otherwise we will remove them from the state
37397
- if (!!newValue) {
37398
- toggledIds.map(x => {
37399
- if (!!!newCheckedIds.includes(x)) {
37400
- newCheckedIds.push(x);
37401
- }
37402
- });
37403
- // Then asign the state to the newCheckedIds
37404
- this.checkedIds = newCheckedIds;
37405
- }
37406
- else {
37407
- const filter = newCheckedIds.filter(x => !!!toggledIds.includes(x));
37408
- // Then asign the state to the filter
37409
- this.checkedIds = filter;
38577
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ModuleItemComponent, deps: [{ token: MultiLanguageService }, { token: NavigatorService }, { token: i0.ChangeDetectorRef }, { token: MenuService }], target: i0.ɵɵFactoryTarget.Component }); }
38578
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: ModuleItemComponent, isStandalone: true, selector: "app-module-item", inputs: { $item: { classPropertyName: "$item", publicName: "$item", isSignal: true, isRequired: true, transformFunction: null }, $itemPadding: { classPropertyName: "$itemPadding", publicName: "$itemPadding", isSignal: true, isRequired: false, transformFunction: null }, $width: { classPropertyName: "$width", publicName: "$width", isSignal: true, isRequired: true, transformFunction: null }, $height: { classPropertyName: "$height", publicName: "$height", isSignal: true, isRequired: true, transformFunction: null }, $iconTextVerticalMargin: { classPropertyName: "$iconTextVerticalMargin", publicName: "$iconTextVerticalMargin", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div class=\"menu-item-wrapper\" \r\n [class.active] = \"$active()\"\r\n (click)=\"onClick($event, $item())\" [ngStyle]=\"{\r\n width: $width() + 'px',\r\n height: $height() + 'px',\r\n padding: $itemPadding() + 'px',\r\n visibility: !!$item() ? 'visible' : 'hidden'\r\n}\">\r\n @if (!!$item()) {\r\n <div class=\"d-flex d-flex-v d-flex-center\">\r\n @if ($item()!.iconSvg) {\r\n <div class=\"d-block\">\r\n <i class=\"module-icon\">\r\n <span [innerHtml]=\"$item()!.iconSvg! | stringHtml\"></span>\r\n </i>\r\n </div>\r\n } @else if ($item()!.iconClass) {\r\n <div>\r\n <i [class]=\"$item()!.iconClass + ' module-icon'\"></i>\r\n </div>\r\n }\r\n <div [ngStyle]=\"{\r\n height: $iconTextVerticalMargin() + 'px'\r\n }\"></div>\r\n <div class=\"module-code\" [appTooltip]=\"$item()!.code! | translate: lang\" [ngStyle]=\"{\r\n width: $width() - $itemPadding() * 2 + 'px'\r\n }\">{{ $item()!.code! | translate: lang}}</div>\r\n </div>\r\n }\r\n</div>", styles: [".menu-item-wrapper{display:flex;align-items:center;justify-content:center;box-sizing:border-box;-webkit-user-select:none;user-select:none}.menu-item-wrapper:not(.active){cursor:pointer}.menu-item-wrapper:not(.active):hover{background-color:var(--color-bg-main)}.menu-item-wrapper.active{color:var(--color-basic-orange)}.module-code{font-size:var(--typo-basic-font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:center}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "pipe", type: StringHtmlPipe, name: "stringHtml" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38579
+ }
38580
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: ModuleItemComponent, decorators: [{
38581
+ type: Component,
38582
+ args: [{ selector: 'app-module-item', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
38583
+ NgStyle,
38584
+ TooltipDirective,
38585
+ StringHtmlPipe,
38586
+ TranslatePipe,
38587
+ ], template: "<div class=\"menu-item-wrapper\" \r\n [class.active] = \"$active()\"\r\n (click)=\"onClick($event, $item())\" [ngStyle]=\"{\r\n width: $width() + 'px',\r\n height: $height() + 'px',\r\n padding: $itemPadding() + 'px',\r\n visibility: !!$item() ? 'visible' : 'hidden'\r\n}\">\r\n @if (!!$item()) {\r\n <div class=\"d-flex d-flex-v d-flex-center\">\r\n @if ($item()!.iconSvg) {\r\n <div class=\"d-block\">\r\n <i class=\"module-icon\">\r\n <span [innerHtml]=\"$item()!.iconSvg! | stringHtml\"></span>\r\n </i>\r\n </div>\r\n } @else if ($item()!.iconClass) {\r\n <div>\r\n <i [class]=\"$item()!.iconClass + ' module-icon'\"></i>\r\n </div>\r\n }\r\n <div [ngStyle]=\"{\r\n height: $iconTextVerticalMargin() + 'px'\r\n }\"></div>\r\n <div class=\"module-code\" [appTooltip]=\"$item()!.code! | translate: lang\" [ngStyle]=\"{\r\n width: $width() - $itemPadding() * 2 + 'px'\r\n }\">{{ $item()!.code! | translate: lang}}</div>\r\n </div>\r\n }\r\n</div>", styles: [".menu-item-wrapper{display:flex;align-items:center;justify-content:center;box-sizing:border-box;-webkit-user-select:none;user-select:none}.menu-item-wrapper:not(.active){cursor:pointer}.menu-item-wrapper:not(.active):hover{background-color:var(--color-bg-main)}.menu-item-wrapper.active{color:var(--color-basic-orange)}.module-code{font-size:var(--typo-basic-font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:center}\n"] }]
38588
+ }], ctorParameters: () => [{ type: MultiLanguageService }, { type: NavigatorService }, { type: i0.ChangeDetectorRef }, { type: MenuService }] });
38589
+
38590
+ class CoreRootMenuItemPickerComponent extends BaseComponent {
38591
+ constructor(mls, ahs, renderer, navigatorService, layoutService, domService, menuService, sysMenuService, authService, appConfigService) {
38592
+ super(mls);
38593
+ this.mls = mls;
38594
+ this.ahs = ahs;
38595
+ this.renderer = renderer;
38596
+ this.navigatorService = navigatorService;
38597
+ this.layoutService = layoutService;
38598
+ this.domService = domService;
38599
+ this.menuService = menuService;
38600
+ this.sysMenuService = sysMenuService;
38601
+ this.authService = authService;
38602
+ this.appConfigService = appConfigService;
38603
+ this.logoPath = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTE1IiBoZWlnaHQ9IjI5IiB2aWV3Qm94PSIwIDAgMTE1IDI5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wIDI4LjU1MjhWOC41NzY4NkgyLjU2MzI5VjE2LjgxMzRIMTIuNTIzNVY4LjU3Njg2SDE1LjA4NjhWMjguNTMzOUgxMi41MjM1VjE5LjE0MjNIMi41ODE2VjI4LjUzMzlIMFYyOC41NTI4Wk0xOS4wNzgyIDExLjM2MDJWOC41NzY4NkgyMS40NTg0VjExLjM2MDJIMTkuMDc4MlpNMTkuMDc4MiAyOC41NTI4VjE0LjA4NjhIMjEuNDU4NFYyOC41NTI4SDE5LjA3ODJaTTI0LjIyMzEgMjIuMDc3MkwyOC4wMzE1IDIxLjY3OTZDMjguMjUxMiAyMi45ODYxIDI4LjcyNzIgMjMuOTUxNyAyOS40MjMgMjQuNTc2NkMzMC4xMTg3IDI1LjIwMTQgMzEuMDcwOCAyNS41MDQ0IDMyLjI0MjYgMjUuNTA0NEMzMy40ODc2IDI1LjUwNDQgMzQuNDIxNCAyNS4yMjAzIDM1LjA2MjIgMjQuNjcxMkMzNS43MDMgMjQuMTIyMSAzNi4wMTQzIDIzLjQ5NzMgMzYuMDE0MyAyMi43NTg5QzM2LjAxNDMgMjIuMjg1NSAzNS44ODYxIDIxLjg2ODkgMzUuNjExNSAyMS41NDdDMzUuMzM2OCAyMS4yMjUyIDM0Ljg3OTEgMjAuOTIyMiAzNC4yMiAyMC42NzYxQzMzLjc2MjIgMjAuNTI0NiAzMi43MzY5IDIwLjIyMTYgMzEuMTI1NyAxOS44MDUxQzI5LjAzODUgMTkuMjc0OSAyNy41NzM3IDE4LjYxMjIgMjYuNzQ5OCAxNy44MTY5QzI1LjU1OTcgMTYuNzE4NyAyNC45OTIxIDE1LjM3NDQgMjQuOTkyMSAxMy44MDI4QzI0Ljk5MjEgMTIuNzgwMyAyNS4yNjY4IDExLjgxNDcgMjUuODE2IDEwLjk0MzdDMjYuMzgzNiAxMC4wNTM4IDI3LjE3MDkgOS4zNzIxMSAyOC4yMTQ1IDguOTE3NjhDMjkuMjc2NSA4LjQ0NDMyIDMwLjUyMTUgOC4yMTcxIDMyLjAwNDYgOC4yMTcxQzM0LjQyMTQgOC4yMTcxIDM2LjIzNCA4Ljc2NjIgMzcuNDYwNyA5Ljg2NDQxQzM4LjY4NzQgMTAuOTgxNSAzOS4zMDk5IDEyLjQ1ODQgMzkuMzgzMiAxNC4zMTRMMzUuNDgzMyAxNC40NjU1QzM1LjMxODUgMTMuNDI0MSAzNC45NzA3IDEyLjY4NTcgMzQuNDIxNCAxMi4yNTAyQzMzLjg3MjEgMTEuODE0NyAzMy4wNjY1IDExLjU2ODUgMzEuOTY3OSAxMS41Njg1QzMwLjg1MTEgMTEuNTY4NSAyOS45NzIyIDExLjgxNDcgMjkuMzMxNCAxMi4yODhDMjguOTI4NiAxMi42MDk5IDI4LjcwODkgMTMuMDI2NSAyOC43MDg5IDEzLjUzNzdDMjguNzA4OSAxNC4wMTExIDI4LjkxMDMgMTQuNDI3NiAyOS4yOTQ4IDE0Ljc0OTVDMjkuNzcwOCAxNS4xODUgMzAuOTc5MiAxNS42Mzk1IDMyLjg2NTEgMTYuMTEyOEMzNC43NTA5IDE2LjU2NzIgMzYuMTYwOCAxNy4wNDA2IDM3LjA1NzkgMTcuNTUxOEMzNy45NTUxIDE4LjA0NDEgMzguNjY5MSAxOC43MjU4IDM5LjE4MTggMTkuNTc3OEMzOS42OTQ0IDIwLjQ0ODggMzkuOTUwOCAyMS40OTAyIDM5Ljk1MDggMjIuNzU4OUMzOS45NTA4IDIzLjg5NDkgMzkuNjM5NSAyNC45NzQyIDM5LjAxNyAyNS45Nzc3QzM4LjQxMjggMjYuOTgxMyAzNy41MzQgMjcuNzE5NyAzNi40MTcxIDI4LjE5MzFDMzUuMzAwMiAyOC42ODU0IDMzLjkwODcgMjguOTEyNiAzMi4yMjQzIDI4LjkxMjZDMjkuNzg5MSAyOC45MTI2IDI3LjkwMzMgMjguMzI1NiAyNi42MDMzIDI3LjE3MDZDMjUuMjY2OCAyNS45OTY3IDI0LjQ3OTUgMjQuMjkyNiAyNC4yMjMxIDIyLjA3NzJaTTQ5LjU4MTQgMTQuMDY3OVYxNy4wOTc0SDQ3LjA1NDhWMjIuOTY3MUM0Ny4wNTQ4IDI0LjE0MTEgNDcuMDczMSAyNC44NDE3IDQ3LjEwOTcgMjUuMDQ5OUM0Ny4xNjQ2IDI1LjIzOTMgNDcuMjc0NSAyNS40MDk3IDQ3LjQ1NzYgMjUuNTQyMkM0Ny42MjIzIDI1LjY3NDggNDcuODIzNyAyNS43MzE2IDQ4LjA4MDEgMjUuNzMxNkM0OC40MjggMjUuNzMxNiA0OC45MjIzIDI1LjU5OSA0OS41NjMxIDI1LjM3MThMNDkuODc0NCAyOC4zNDQ2QzQ5LjAxMzkgMjguNzIzMiA0OC4wNjE4IDI4LjkxMjYgNDYuOTYzMiAyOC45MTI2QzQ2LjMwNDEgMjguOTEyNiA0NS42OTk5IDI4Ljc5OSA0NS4xNjg5IDI4LjU3MThDNDQuNjM3OSAyOC4zNDQ2IDQ0LjIzNTEgMjguMDQxNiA0My45Nzg4IDI3LjY2MjlDNDMuNzQwOCAyNy4zMDMyIDQzLjU1NzcgMjYuNzkxOSA0My40NjYxIDI2LjE2NzFDNDMuMzkyOSAyNS43MTI2IDQzLjM1NjMgMjQuODIyNyA0My4zNTYzIDIzLjQ1OTRWMTcuMTE2NEg0MS42NzE4VjE0LjA4NjhINDMuMzU2M1YxMS4yMDg4TDQ3LjA1NDggOC45NTU1NVYxNC4wODY4SDQ5LjU4MTRWMTQuMDY3OVpNNTQuOTI3NyAxOC41MzY0TDUxLjU3NzEgMTcuOTMwNUM1MS45NjE2IDE2LjUxMDQgNTIuNjAyNSAxNS40NjkgNTMuNTE3OSAxNC43ODc0QzU0LjQ1MTcgMTQuMTI0NyA1NS44MjQ5IDEzLjc4MzkgNTcuNjM3NSAxMy43ODM5QzU5LjI4NTMgMTMuNzgzOSA2MC41MTIxIDEzLjk3MzIgNjEuMzE3NyAxNC4zODk4QzYyLjEyMzMgMTQuNzg3NCA2Mi42OTA5IDE1LjI5ODYgNjMuMDIwNCAxNS45MjM1QzYzLjM1IDE2LjU0ODMgNjMuNTE0OCAxNy42ODQ0IDYzLjUxNDggMTkuMzMxN0w2My40NTk4IDIzLjgwMDNDNjMuNDU5OCAyNS4wNjg5IDYzLjUxNDggMjUuOTk2NyA2My42NDI5IDI2LjYwMjZDNjMuNzUyOCAyNy4yMDg1IDYzLjk5MDggMjcuODcxMiA2NC4zMDIxIDI4LjU1MjhINjAuNjQwMkM2MC41MzA0IDI4LjMwNjcgNjAuNDIwNSAyNy45MjggNjAuMjkyMyAyNy40MzU3QzYwLjIzNzQgMjcuMjA4NSA2MC4xODI1IDI3LjA1NyA2MC4xNDU5IDI2Ljk4MTNDNTkuNTIzNCAyNy42MjUgNTguODQ1OSAyOC4wOTg0IDU4LjEzMTkgMjguNDIwM0M1Ny40MTc4IDI4Ljc0MjIgNTYuNjQ4OCAyOC44OTM3IDU1Ljg0MzIgMjguODkzN0M1NC40MTUxIDI4Ljg5MzcgNTMuMjc5OSAyOC40OTYgNTIuNDU2IDI3LjY4MThDNTEuNjMyMSAyNi44ODY2IDUxLjIxMSAyNS44NjQxIDUxLjIxMSAyNC42MTQ0QzUxLjIxMSAyMy44MDAzIDUxLjM5NDEgMjMuMDgwNyA1MS43Nzg1IDIyLjQzN0M1Mi4xNjMgMjEuODEyMSA1Mi42NzU3IDIxLjMwMDkgNTMuMzcxNCAyMC45NjAxQzU0LjA0ODkgMjAuNjM4MiA1NS4wMTkzIDIwLjMzNTIgNTYuMzAwOSAyMC4wNzAxQzU4LjAyMiAxOS43NDgzIDU5LjIzMDQgMTkuNDI2NCA1OS44ODk1IDE5LjE0MjNWMTguNzYzN0M1OS44ODk1IDE4LjAwNjMgNTkuNzA2NSAxNy40OTUgNTkuMzc2OSAxNy4xNzMyQzU5LjAyOSAxNi44NTEzIDU4LjM1MTYgMTYuNjgwOSA1Ny4zODEyIDE2LjY4MDlDNTYuNzIyIDE2LjY4MDkgNTYuMjA5NCAxNi44MzIzIDU1Ljg0MzIgMTcuMDk3NEM1NS40NDA0IDE3LjM4MTQgNTUuMTQ3NCAxNy44NTQ4IDU0LjkyNzcgMTguNTM2NFpNNTkuODg5NSAyMS42NDE3QzU5LjQxMzUgMjEuNzkzMiA1OC42NjI4IDIyLjAwMTUgNTcuNjM3NSAyMi4yMjg3QzU2LjYxMjIgMjIuNDU1OSA1NS45NTMxIDIyLjY4MzEgNTUuNjIzNSAyMi44OTE0QzU1LjE0NzQgMjMuMjUxMiA1NC44OTExIDIzLjY4NjYgNTQuODkxMSAyNC4yMzU3QzU0Ljg5MTEgMjQuNzg0OSA1NS4wNzQyIDI1LjIzOTMgNTUuNDc3IDI1LjYzNjlDNTUuODYxNSAyNi4wMzQ1IDU2LjMzNzUgMjYuMjIzOSA1Ni45NDE3IDI2LjIyMzlDNTcuNjE5MiAyNi4yMjM5IDU4LjI2IDI1Ljk5NjcgNTguODY0MiAyNS41NDIyQzU5LjMwMzYgMjUuMjAxNCA1OS41OTY2IDI0Ljc4NDkgNTkuNzQzMSAyNC4yNzM2QzU5LjgzNDYgMjMuOTUxNyA1OS44ODk1IDIzLjMwOCA1OS44ODk1IDIyLjM5OTFWMjEuNjQxN1pNNjUuNTQ3MSAxNC4wNjc5SDY3LjU5NzdWMTIuOTg4NkM2Ny41OTc3IDExLjc1NzkgNjcuNzI1OSAxMC44Njc5IDY3Ljk4MjIgMTAuMjYyQzY4LjIzODYgOS42NTYxMyA2OC42OTYzIDkuMTYzODMgNjkuMzczNyA4Ljc4NTE0QzcwLjA1MTIgOC40MDY0NSA3MC45MTE3IDguMjE3MSA3MS45MzcgOC4yMTcxQzcyLjk5OSA4LjIxNzEgNzQuMDQyNiA4LjM2ODU4IDc1LjA0OTYgOC43MDk0TDc0LjU3MzYgMTEuMzYwMkM3My45Njk0IDExLjIwODggNzMuMzgzNSAxMS4xMzMgNzIuODUyNSAxMS4xMzNDNzIuMzAzMiAxMS4xMzMgNzEuOTE4NyAxMS4yNjU2IDcxLjY2MjQgMTEuNTMwN0M3MS40MDYxIDExLjc5NTcgNzEuMzE0NSAxMi4yODggNzEuMzE0NSAxMy4wNDU0VjE0LjA2NzlINzQuMDc5MlYxNy4wNzg1SDcxLjMxNDVWMjguNTMzOUg2Ny42MTZWMTcuMDc4NUg2NS41NjU0VjE0LjA2NzlINjUuNTQ3MVpNNzQuNTE4NiAxNC4wNjc5SDc2LjU2OTNWMTIuOTg4NkM3Ni41NjkzIDExLjc1NzkgNzYuNjk3NCAxMC44Njc5IDc2Ljk1MzggMTAuMjYyQzc3LjIxMDEgOS42NTYxMyA3Ny42Njc4IDkuMTYzODMgNzguMzQ1MyA4Ljc4NTE0Qzc5LjAyMjcgOC40MDY0NSA3OS44ODMyIDguMjE3MSA4MC45MDg2IDguMjE3MUM4MS45NzA1IDguMjE3MSA4My4wMTQxIDguMzY4NTggODQuMDIxMSA4LjcwOTRMODMuNTQ1MSAxMS4zNjAyQzgyLjk0MDkgMTEuMjA4OCA4Mi4zNTUgMTEuMTMzIDgxLjgwNTcgMTEuMTMzQzgxLjI1NjQgMTEuMTMzIDgwLjg3MTkgMTEuMjY1NiA4MC42MTU2IDExLjUzMDdDODAuMzk1OSAxMS43OTU3IDgwLjI2NzcgMTIuMjg4IDgwLjI2NzcgMTMuMDQ1NFYxNC4wNjc5SDgzLjAzMjRWMTcuMDc4NUg4MC4yNjc3VjI4LjUzMzlINzYuNTY5M1YxNy4wNzg1SDc0LjUxODZWMTQuMDY3OVoiIGZpbGw9ImJsYWNrIi8+DQo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTk4LjY0OTggNS4yNDQ3N0M5Ny45NTQgMi43ODMyOCA5NS42NDcxIDIuNDA0NTkgOTMuNzI0NiAzLjc2Nzg4QzkxLjc0NzIgNS4xNjkwMyA5MC40Mjg5IDguMTk4NTcgOTEuMTA2NCAxMC42MjIyQzkxLjgwMjEgMTMuMDgzNyA5NC4xMDkxIDEzLjQ2MjQgOTYuMDMxNiAxMi4xMThDOTguMDA5IDEwLjcxNjkgOTkuMzI3MiA3LjY2ODQgOTguNjQ5OCA1LjI0NDc3WiIgZmlsbD0iI0YzNzU0MCIvPg0KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05MS4xNDI4IDI3LjgxNDlDOTEuOTMwMSAyNy4xMTQzIDkyLjk3MzggMjYuNDUxNiA5My44MTYgMjUuODgzNkw5NS40NjM4IDI0LjgyMzJDOTcuODQ0IDIwLjAzMjggMTAxLjA0OCAxNS41NDUzIDEwNC40MTcgMTEuNDU1NEMxMDcuNDkzIDcuNjg3NDQgMTExLjA4MiAzLjc0OTA1IDExNSAwLjkwODg2TDExNC4zNDEgMEMxMTAuMTQ4IDIuMjkxMDggMTA2LjMwMyA1LjQxNTI5IDEwMi44NDIgOC43NjY3MUM5OS4xOTg5IDEyLjMwNzUgOTUuODQ4MyAxNi4yMjY5IDkzLjE1NjggMjAuNTgxOUw5My4wNDcgMjAuNzMzNEw5Mi4yNzggMTkuMDY3MUM5MS43MTA0IDE3Ljg1NTMgOTAuMTM1OCAxNC42NTU0IDg4LjU0MjkgMTQuNjU1NEM4Ni45NSAxNC42NTU0IDg1LjQzMDMgMTUuODI5MyA4NC4zMTM1IDE2Ljk0NjRDODUuMzAyMiAxNy4zMDYyIDg2LjEyNjEgMTcuOTg3OCA4Ni43ODUyIDE4LjgyMUM4Ny44MTA1IDIwLjA3MDYgODguNjM0NSAyMS43NzQ4IDg5LjI5MzYgMjMuMjcwNkw4OS45MTYxIDI0LjY3MTdDOTAuMzE4OSAyNS42NzUzIDkwLjgxMzMgMjYuNzkyNCA5MS4xNDI4IDI3LjgxNDlaIiBmaWxsPSIjRjM3NTQwIi8+DQo8L3N2Zz4NCg==';
38604
+ this.itemsPerRow = 4;
38605
+ this.iconTextVerticalMargin = 25;
38606
+ this.items = [[]];
38607
+ this.zIndex = 1;
38608
+ this.imageErrorResolverType = EnumImageResolverType.LOGO;
38609
+ this.headerHeight = 0;
38610
+ this.width = 400;
38611
+ this.layoutService.modulePanelWidth$.subscribe(x => this.width = x);
38612
+ }
38613
+ ngOnInit() {
38614
+ this.subscriptions.push(this.mls.lang$.subscribe(x => this.lang = x));
38615
+ this.subscriptions.push(this.authService.data$.subscribe(x => this.isRoot = !!x?.isRoot));
38616
+ this.scrollWidth = this.layoutService.modulePanelWidth$.value - this.layoutService.basicSpacing * 2;
38617
+ this.scrollHeight = window.innerHeight - this.layoutService.headerHeight$.value - this.layoutService.basicSpacing * 2;
38618
+ this.itemWidth = this.scrollWidth / 4;
38619
+ }
38620
+ transformTo2DArray(flatList) {
38621
+ const result = [];
38622
+ for (let i = 0; i < flatList.length; i += this.itemsPerRow) {
38623
+ const row = flatList.slice(i, i + this.itemsPerRow);
38624
+ // If the last row has fewer than itemsPerRow, pad it with undefineds
38625
+ while (row.length < this.itemsPerRow) {
38626
+ row.push(undefined);
37410
38627
  }
37411
- // After the cases of if/else, make the control change with onChange
37412
- this.value = this.checkedIds;
37413
- this.onChange(this.checkedIds);
37414
- this.markAsTouched();
37415
- };
37416
- /* start: THIS CODE SCOPE calculates toggledIds */
37417
- if (this.checkInheritance) {
37418
- // If true, all the nested items will be checked/unchecked
37419
- this.recursiveService
37420
- .nestedToggleCheck(e, newValue, this.showDissolved)
37421
- .then((x) => {
37422
- let currentCheckedKeys = this.organizationService.status$.value.checkedKeys || [];
37423
- if (!!newValue) {
37424
- x.map(item => {
37425
- if (currentCheckedKeys.filter(i => i === item.toString()).length === 0) {
37426
- currentCheckedKeys.push(item.toString());
37427
- }
37428
- });
37429
- }
37430
- else {
37431
- currentCheckedKeys = currentCheckedKeys.filter(i => !x.includes(Number(i)));
37432
- }
37433
- this.organizationService.status$.next({
37434
- ...this.organizationService.status$.value,
37435
- checkedKeys: currentCheckedKeys //x.map(item => item.toString())
37436
- });
37437
- // The ids have been changed
37438
- toggledIds = x;
37439
- // Now toggledIds were set. We call the function we declared
37440
- changeValue();
37441
- })
37442
- .catch((x) => {
37443
- console.error(x);
37444
- });
37445
- }
37446
- else {
37447
- // Otherwise we simply toggle check for current item only
37448
- toggledIds = [e.id];
37449
- // Now toggledIds were set. We call the function we declared
37450
- changeValue();
38628
+ result.push(row);
37451
38629
  }
37452
- /* end: THIS CODE SCOPE calculates toggledIds */
37453
- // That is. Happy debugging!
37454
- }
37455
- onCheckIncludeDissolvedChange(value) {
37456
- console.log("onCheckIncludeDissolvedChange", value);
38630
+ return result;
37457
38631
  }
37458
- onCheckInheritanceChange(value) {
37459
- this.organizationService.status$.next({
37460
- ...this.organizationService.status$.value,
37461
- checkInheritance: value,
38632
+ ngAfterViewInit() {
38633
+ setTimeout(() => {
38634
+ this.designMode = localStorage.getItem('moduleDesignMode') === 'on';
38635
+ this.zIndex = this.domService.getMaxZIndex() + 1;
38636
+ // this.listenerFn = this.renderer.listen('window', 'click', (e: Event) => {
38637
+ // if (!this.designMode) {
38638
+ // if (this.container && !!!this.container.nativeElement.contains(e.target)) {
38639
+ // this.ahs.activeKey$.next(undefined);
38640
+ // }
38641
+ // }
38642
+ // });
38643
+ this.subscriptions.push(this.navigatorService.rootNavigatorItems$.subscribe(x => {
38644
+ // Transform the flat list into a 2D array
38645
+ this.items = this.transformTo2DArray(x);
38646
+ }));
38647
+ this.subscriptions.push(this.layoutService.headerHeight$.subscribe(x => {
38648
+ this.headerHeight = x;
38649
+ }));
38650
+ if (!!localStorage) {
38651
+ const activeRootMenuItemId = Number(localStorage.getItem('activeRootMenuItemId') || '0');
38652
+ this.navigatorService.activeRootMenuItemId$.next(activeRootMenuItemId);
38653
+ }
38654
+ if (window.innerWidth < this.layoutService.modulePanelWidth$.value) {
38655
+ this.layoutService.modulePanelWidth$.next(window.innerWidth);
38656
+ }
37462
38657
  });
37463
38658
  }
37464
- onObjectClick(e, event) {
37465
- // remove highlight class
37466
- // TO DO
37467
- if (!!e.protected)
37468
- return;
37469
- this.itemClick?.emit(e);
37470
- if (this.accessorMode === EnumCoreOrgTreeaAccessorMode.CHECKED)
37471
- return;
37472
- let activeIds = [];
37473
- this.data.map((item) => (item.active = false));
37474
- if (this.accessorMode ===
37475
- EnumCoreOrgTreeaAccessorMode.ACTIVATED_INHERITANCE ||
37476
- !!!this.accessorMode) {
37477
- // If true, all the nested items will be active, the others are inactive
37478
- this.recursiveService
37479
- .nestedResetActive(e, true)
37480
- .then((x) => {
37481
- activeIds = x;
37482
- activeIds.sort();
37483
- const newActiveKeys = [];
37484
- activeIds.map((x) => newActiveKeys.push(x.toString()));
37485
- this.organizationService.status$.next({
37486
- ...this.organizationService.status$.value,
37487
- activeKeys: newActiveKeys,
37488
- selectedKey: e.id.toString()
37489
- });
37490
- this.activeIds = activeIds;
37491
- console.log(this.activeIds);
37492
- this.onChange(activeIds);
37493
- })
37494
- .catch((x) => {
37495
- console.error(x);
37496
- });
38659
+ onDesignModeClick(e) {
38660
+ e.stopPropagation();
38661
+ if (localStorage.getItem('moduleDesignMode') === 'on') {
38662
+ localStorage.setItem('moduleDesignMode', 'off');
38663
+ this.designMode = false;
37497
38664
  }
37498
38665
  else {
37499
- // ACTIVATED_SINGLE
37500
- // Otherwise we simply set current item to be active only
37501
- activeIds = [e.id];
37502
- this.activeIds = activeIds;
37503
- this.organizationService.status$.next({
37504
- ...this.organizationService.status$.value,
37505
- activeKeys: [e.id.toString()],
37506
- selectedKey: e.id.toString(),
37507
- });
37508
- this.onChange(activeIds);
37509
- }
37510
- const { detail } = event;
37511
- if (detail === 2) {
37512
- console.log('This was a dblclick');
37513
- this.itemDoubleClick.emit(e);
38666
+ localStorage.setItem('moduleDesignMode', 'on');
38667
+ this.designMode = true;
37514
38668
  }
37515
- this.selectedItem = e;
37516
- }
37517
- onSearchChange(text) {
37518
- this.search$.next(text);
37519
- }
37520
- onHiddenToolClick(e) {
37521
- e.stopPropagation();
37522
- this.hiddenToolClickStream$.next(crypto.randomUUID());
37523
38669
  }
37524
38670
  ngOnDestroy() {
37525
- if (this.worker) {
37526
- this.worker.terminate();
37527
- }
37528
- this.subscriptions.map((x) => x?.unsubscribe());
37529
- if (!!this.instanceNumber) {
37530
- const tryToFind = this.organizationService.instances.filter((x) => x.instanceNumber === this.instanceNumber);
37531
- if (!!tryToFind.length) {
37532
- const newInstances = this.organizationService.instances.filter((x) => x.instanceNumber !== this.instanceNumber);
37533
- this.organizationService.instances = newInstances;
37534
- }
37535
- }
38671
+ this.subscriptions.map(x => x?.unsubscribe());
38672
+ if (this.listenerFn)
38673
+ this.listenerFn();
37536
38674
  }
37537
- 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 }); }
37538
- 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: [
37539
- {
37540
- provide: NG_VALUE_ACCESSOR,
37541
- useExisting: forwardRef(() => CoreComTreeComponent),
37542
- multi: true
37543
- }
37544
- ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "displayContent", first: true, predicate: ["displayContent"], descendants: true }, { propertyName: "reducedIconWrapper", first: true, predicate: ["reducedIconWrapper"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n minWidth: '310px',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n @if (showSearch) {\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n }\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight * (showSearch ? 1 : 0) - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <div class=\"hidden-tool\" (click)=\"onHiddenToolClick($event)\"></div>\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track $index) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n @if (accessorMode === 'CHECKED') {\r\n <div class=\"check-inheritance-wrapper\">\r\n @if (showCheckInheritance) {\r\n <core-checkbox [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler feather-chevron-down\" (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"accessorMode != 'CHECKED' && selectedKey===id.toString()\"\r\n [class.highlighted]=\"highlighted\" [class.dissolved]=\"!isActive\"\r\n [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }] }); }
38675
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerComponent, deps: [{ token: MultiLanguageService }, { token: ApplicationHelpService }, { token: i0.Renderer2 }, { token: NavigatorService }, { token: LayoutService }, { token: DomService }, { token: MenuService }, { token: SysMenuService }, { token: AuthService }, { token: AppConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
38676
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreRootMenuItemPickerComponent, isStandalone: true, selector: "core-root-menu-item-picker", inputs: { logoPath: "logoPath", itemsPerRow: "itemsPerRow", iconTextVerticalMargin: "iconTextVerticalMargin" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-root-menu-item-picker-container\" [ngStyle]=\"{\r\n zIndex: zIndex,\r\n}\">\r\n <div class=\"mudule-picker-header d-flex d-flex-between\" [ngStyle]=\"{\r\n height: 59 + 'px'\r\n }\">\r\n <div class=\"HEADER_LOGO\">\r\n <div class=\"logo-wrapper d-flex\">\r\n <img src=\"logoPath\" class=\"lg\" [ngStyle]=\"{\r\n width: '130px',\r\n height: '59px',\r\n transform: 'translate(0, -5px)'\r\n }\" appImageErrorResolver [type]=\"imageErrorResolverType\">\r\n </div>\r\n </div>\r\n @if (!!isRoot) {\r\n <i \r\n [class.feather-square]=\"!designMode\" \r\n [class.feather-play]=\"!!designMode\" \r\n class=\"stop-mode-icon\" \r\n (click)=\"onDesignModeClick($event)\"\r\n [appTooltip]=\"!designMode ? 'Chuy\u1EC3n sang ch\u1EBF \u0111\u1ED9 thi\u1EBFt k\u1EBF' : 'Chuy\u1EC3n v\u1EC1 ch\u1EBF \u0111\u1ED9 b\u00ECnh th\u01B0\u1EDDng'\"\r\n ></i>\r\n }\r\n </div>\r\n\r\n <div class=\"header-bottom\" [ngStyle]=\"{\r\n width: width + 'px'\r\n }\">\r\n <core-line></core-line>\r\n </div>\r\n\r\n <div class=\"h15\"></div>\r\n\r\n <div class=\"scroll\" [ngStyle]=\"{\r\n width: width + 'px',\r\n height: scrollHeight + 'px'\r\n }\">\r\n @for (row of items; track $index) {\r\n <div class=\"menu-row\">\r\n @for (item of row; track $index) {\r\n <app-module-item [$item]=\"item\" [$width]=\"itemWidth\" [$height]=\"100\" [$iconTextVerticalMargin]=\"iconTextVerticalMargin\"></app-module-item>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n</div>", styles: [".core-root-menu-item-picker-container .header-bottom{position:absolute;top:59px;left:0}.core-root-menu-item-picker-container .scroll{overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column;align-items:flex-start;flex-wrap:wrap;-ms-overflow-style:none}.core-root-menu-item-picker-container .scroll::-webkit-scrollbar{display:none}.core-root-menu-item-picker-container .menu-row{display:flex;flex-wrap:nowrap;justify-content:space-between}.core-root-menu-item-picker-container .stop-mode-icon{cursor:pointer;width:24px;height:24px;font-size:24px}\n"], dependencies: [{ kind: "component", type: CoreLineComponent, selector: "core-line" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ModuleItemComponent, selector: "app-module-item", inputs: ["$item", "$itemPadding", "$width", "$height", "$iconTextVerticalMargin"] }, { kind: "directive", type: ImageErrorResolverDirective, selector: "[appImageErrorResolver]", inputs: ["type", "isFemale"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }] }); }
37545
38677
  }
37546
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreComTreeComponent, decorators: [{
38678
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerComponent, decorators: [{
37547
38679
  type: Component,
37548
- args: [{ selector: 'core-com-tree', imports: [
37549
- FormsModule,
38680
+ args: [{ selector: 'core-root-menu-item-picker', imports: [
38681
+ CoreLineComponent,
37550
38682
  NgStyle,
37551
- CoreCheckboxComponent,
37552
- CoreLoadingSurfaceComponent,
37553
- TranslatePipe,
38683
+ ModuleItemComponent,
38684
+ ImageErrorResolverDirective,
37554
38685
  TooltipDirective,
37555
- ], providers: [
37556
- {
37557
- provide: NG_VALUE_ACCESSOR,
37558
- useExisting: forwardRef(() => CoreComTreeComponent),
37559
- multi: true
37560
- }
37561
- ], 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>" }]
37562
- }], ctorParameters: () => [{ type: AuthService }, { type: RecursiveService }, { type: MultiLanguageService }, { type: LayoutService }, { type: CoreOrgTreeService }, { type: AlertService }, { type: ComPartyService }], propDecorators: { lineColor: [{
37563
- type: Input
37564
- }], fullWidthMode: [{
37565
- type: Input
37566
- }], accessorMode: [{
37567
- type: Input
37568
- }], searchMode: [{
37569
- type: Input
37570
- }], fullRendering: [{
37571
- type: Input
37572
- }], height: [{
37573
- type: Input
37574
- }], disabledLoopExpand: [{
37575
- type: Input
37576
- }], showCheckInheritance: [{
38686
+ ], template: "<div #container class=\"core-root-menu-item-picker-container\" [ngStyle]=\"{\r\n zIndex: zIndex,\r\n}\">\r\n <div class=\"mudule-picker-header d-flex d-flex-between\" [ngStyle]=\"{\r\n height: 59 + 'px'\r\n }\">\r\n <div class=\"HEADER_LOGO\">\r\n <div class=\"logo-wrapper d-flex\">\r\n <img src=\"logoPath\" class=\"lg\" [ngStyle]=\"{\r\n width: '130px',\r\n height: '59px',\r\n transform: 'translate(0, -5px)'\r\n }\" appImageErrorResolver [type]=\"imageErrorResolverType\">\r\n </div>\r\n </div>\r\n @if (!!isRoot) {\r\n <i \r\n [class.feather-square]=\"!designMode\" \r\n [class.feather-play]=\"!!designMode\" \r\n class=\"stop-mode-icon\" \r\n (click)=\"onDesignModeClick($event)\"\r\n [appTooltip]=\"!designMode ? 'Chuy\u1EC3n sang ch\u1EBF \u0111\u1ED9 thi\u1EBFt k\u1EBF' : 'Chuy\u1EC3n v\u1EC1 ch\u1EBF \u0111\u1ED9 b\u00ECnh th\u01B0\u1EDDng'\"\r\n ></i>\r\n }\r\n </div>\r\n\r\n <div class=\"header-bottom\" [ngStyle]=\"{\r\n width: width + 'px'\r\n }\">\r\n <core-line></core-line>\r\n </div>\r\n\r\n <div class=\"h15\"></div>\r\n\r\n <div class=\"scroll\" [ngStyle]=\"{\r\n width: width + 'px',\r\n height: scrollHeight + 'px'\r\n }\">\r\n @for (row of items; track $index) {\r\n <div class=\"menu-row\">\r\n @for (item of row; track $index) {\r\n <app-module-item [$item]=\"item\" [$width]=\"itemWidth\" [$height]=\"100\" [$iconTextVerticalMargin]=\"iconTextVerticalMargin\"></app-module-item>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n</div>", styles: [".core-root-menu-item-picker-container .header-bottom{position:absolute;top:59px;left:0}.core-root-menu-item-picker-container .scroll{overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column;align-items:flex-start;flex-wrap:wrap;-ms-overflow-style:none}.core-root-menu-item-picker-container .scroll::-webkit-scrollbar{display:none}.core-root-menu-item-picker-container .menu-row{display:flex;flex-wrap:nowrap;justify-content:space-between}.core-root-menu-item-picker-container .stop-mode-icon{cursor:pointer;width:24px;height:24px;font-size:24px}\n"] }]
38687
+ }], ctorParameters: () => [{ type: MultiLanguageService }, { type: ApplicationHelpService }, { type: i0.Renderer2 }, { type: NavigatorService }, { type: LayoutService }, { type: DomService }, { type: MenuService }, { type: SysMenuService }, { type: AuthService }, { type: AppConfigService }], propDecorators: { logoPath: [{
37577
38688
  type: Input
37578
- }], excludedIds$: [{
38689
+ }], itemsPerRow: [{
37579
38690
  type: Input
37580
- }], stateIsolated$: [{
38691
+ }], iconTextVerticalMargin: [{
37581
38692
  type: Input
37582
- }], itemDoubleClick: [{
37583
- type: Output
37584
- }], itemClick: [{
37585
- type: Output
37586
38693
  }], container: [{
37587
38694
  type: ViewChild,
37588
38695
  args: ['container']
37589
- }], scrollContainer: [{
37590
- type: ViewChild,
37591
- args: ['scrollContainer']
37592
- }], displayContent: [{
37593
- type: ViewChild,
37594
- args: ['displayContent']
37595
- }], reducedIconWrapper: [{
37596
- type: ViewChild,
37597
- args: ['reducedIconWrapper']
37598
38696
  }] } });
37599
38697
 
38698
+ class CoreRootMenuItemPickerService {
38699
+ constructor() { }
38700
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
38701
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, providedIn: 'root' }); }
38702
+ }
38703
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRootMenuItemPickerService, decorators: [{
38704
+ type: Injectable,
38705
+ args: [{
38706
+ providedIn: 'root'
38707
+ }]
38708
+ }], ctorParameters: () => [] });
38709
+
37600
38710
  class CoreComProfileComponent extends BaseComponent {
37601
38711
  ngOnChanges(changes) {
37602
38712
  this.cdr.markForCheck();
@@ -38026,11 +39136,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
38026
39136
  const coreDocGenRoutes = [
38027
39137
  {
38028
39138
  path: 'template-list',
38029
- loadComponent: () => import('./ngx-histaff-alpha-template-list.component-36QflRwY.mjs').then(m => m.TemplateListComponent),
39139
+ loadComponent: () => import('./ngx-histaff-alpha-template-list.component-CVK_Ewx4.mjs').then(m => m.TemplateListComponent),
38030
39140
  },
38031
39141
  {
38032
39142
  path: ":id",
38033
- loadComponent: () => import('./ngx-histaff-alpha-core-template-editor.component-BBWim535.mjs').then(m => m.CoreTemplateEditorComponent),
39143
+ loadComponent: () => import('./ngx-histaff-alpha-core-template-editor.component-CwYRUlbM.mjs').then(m => m.CoreTemplateEditorComponent),
38034
39144
  canDeactivate: [CanDeactivateGuard]
38035
39145
  },
38036
39146
  {
@@ -38059,7 +39169,7 @@ const coreFormDesignRoutes = [
38059
39169
  },
38060
39170
  {
38061
39171
  path: ':id',
38062
- loadComponent: () => import('./ngx-histaff-alpha-core-form-design.component-BDh-358_.mjs').then(function (n) { return n.c; }).then(m => m.CoreFormDesignComponent)
39172
+ loadComponent: () => import('./ngx-histaff-alpha-core-form-design.component-Jzy7HTBy.mjs').then(function (n) { return n.c; }).then(m => m.CoreFormDesignComponent)
38063
39173
  }
38064
39174
  ];
38065
39175
 
@@ -38952,7 +40062,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
38952
40062
  const coreNavigationTrackerRoutes = [
38953
40063
  {
38954
40064
  path: '',
38955
- loadComponent: () => import('./ngx-histaff-alpha-tracker-studio.component-DlAdz6Wq.mjs').then(m => m.TrackerStudioComponent)
40065
+ loadComponent: () => import('./ngx-histaff-alpha-tracker-studio.component-8tqyVAcU.mjs').then(m => m.TrackerStudioComponent)
38956
40066
  }
38957
40067
  ];
38958
40068
 
@@ -41541,33 +42651,33 @@ const coreWorkflowRoutes = [
41541
42651
  {
41542
42652
  path: 'form-assign/:id',
41543
42653
  outlet: "formAssignAux",
41544
- loadComponent: () => import('./ngx-histaff-alpha-wf-form-assign.component-V9exT_fm.mjs').then(m => m.WfFormAssignComponent),
42654
+ loadComponent: () => import('./ngx-histaff-alpha-wf-form-assign.component-CRs1A8j_.mjs').then(m => m.WfFormAssignComponent),
41545
42655
  canDeactivate: [CanDeactivateGuard]
41546
42656
  }
41547
42657
  ]
41548
42658
  },
41549
42659
  {
41550
42660
  path: 'global-config',
41551
- loadComponent: () => import('./ngx-histaff-alpha-wf-global-config.component-BuCfL80F.mjs').then(m => m.WfGlobalConfigComponent)
42661
+ loadComponent: () => import('./ngx-histaff-alpha-wf-global-config.component-yeFb4wxY.mjs').then(m => m.WfGlobalConfigComponent)
41552
42662
  },
41553
42663
  {
41554
42664
  path: 'db-settings',
41555
- loadComponent: () => import('./ngx-histaff-alpha-db-settings.component-CqNPzdzL.mjs').then(m => m.DbSettingsComponent)
42665
+ loadComponent: () => import('./ngx-histaff-alpha-db-settings.component-CpjFcS3r.mjs').then(m => m.DbSettingsComponent)
41556
42666
  },
41557
42667
  {
41558
42668
  path: 'workflow-consume',
41559
- loadComponent: () => import('./ngx-histaff-alpha-core-workflow-consume.component-CvGswHbB.mjs').then(m => m.CoreWorkflowConsumeComponent),
42669
+ loadComponent: () => import('./ngx-histaff-alpha-core-workflow-consume.component-Fma_hNMb.mjs').then(m => m.CoreWorkflowConsumeComponent),
41560
42670
  children: [
41561
42671
  {
41562
42672
  path: ':id',
41563
42673
  outlet: "workflowConsume",
41564
- loadComponent: () => import('./ngx-histaff-alpha-live-form.component-FW_M5cI5.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
42674
+ loadComponent: () => import('./ngx-histaff-alpha-live-form.component-iX23HD-T.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
41565
42675
  }
41566
42676
  ]
41567
42677
  },
41568
42678
  {
41569
42679
  path: 'workflow-consume/:id',
41570
- loadComponent: () => import('./ngx-histaff-alpha-live-form.component-FW_M5cI5.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
42680
+ loadComponent: () => import('./ngx-histaff-alpha-live-form.component-iX23HD-T.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
41571
42681
  },
41572
42682
  {
41573
42683
  path: 'workflow-group-edit/:id',
@@ -41577,17 +42687,17 @@ const coreWorkflowRoutes = [
41577
42687
  },
41578
42688
  {
41579
42689
  path: 'design/:id',
41580
- loadChildren: () => import('./ngx-histaff-alpha-design-wrapper.route-B_EjwkZd.mjs').then(m => m.wfDesignWrapperRoutes),
42690
+ loadChildren: () => import('./ngx-histaff-alpha-design-wrapper.route-BPTxhFez.mjs').then(m => m.wfDesignWrapperRoutes),
41581
42691
  },
41582
42692
  ]
41583
42693
  },
41584
42694
  {
41585
42695
  path: 'react/:id',
41586
- loadComponent: () => import('./ngx-histaff-alpha-wf-instance-step-react.component-OAdGYvAN.mjs').then(m => m.WfInstanceStepReactComponent)
42696
+ loadComponent: () => import('./ngx-histaff-alpha-wf-instance-step-react.component-Bri0bRw3.mjs').then(m => m.WfInstanceStepReactComponent)
41587
42697
  },
41588
42698
  {
41589
42699
  path: 'status/:id',
41590
- loadComponent: () => import('./ngx-histaff-alpha-wf-instance-status.component-DJuPBwqR.mjs').then(m => m.WfInstanceStatusComponent)
42700
+ loadComponent: () => import('./ngx-histaff-alpha-wf-instance-status.component-Jahj4MO-.mjs').then(m => m.WfInstanceStatusComponent)
41591
42701
  }
41592
42702
  ];
41593
42703
 
@@ -43448,7 +44558,11 @@ class NavigatorComponent {
43448
44558
  else if (this.menuClickedItem?.tree$Tier == 3) { //nếu là 3 cấp
43449
44559
  array = x.filter(y => y.id == this.menuClickedItem.id);
43450
44560
  arrayParrent = x.filter(y => y.id == this.menuClickedItem.tree$Parent);
44561
+ if (!arrayParrent.length)
44562
+ return;
43451
44563
  let arrayGrandParrent = x.filter(z => z.id == arrayParrent[0].parent);
44564
+ if (!arrayGrandParrent.length)
44565
+ return;
43452
44566
  let element = document.getElementById('main-menu-' + arrayParrent[0].id);
43453
44567
  let element2 = document.getElementById('main-menu-' + arrayGrandParrent[0].id);
43454
44568
  array[0].tree$Selected = true;
@@ -44208,5 +45322,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
44208
45322
  * Generated bundle index. Do not edit.
44209
45323
  */
44210
45324
 
44211
- 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 };
44212
- //# sourceMappingURL=ngx-histaff-alpha-ngx-histaff-alpha-YPc6xct6.mjs.map
45325
+ export { CoreButtonGroupVnsComponent as $, AppService as A, BaseComponent as B, ChatService as C, DialogService as D, EnumCoreTablePipeType as E, FullscreenModalLoaderComponent as F, CoreDatePickerComponent as G, CoreFormControlSeekerComponent as H, ImageErrorResolverDirective as I, CoreCurrencyInputComponent as J, EnumActorSourceType as K, CoreParamControlComponent as L, MultiLanguageService as M, CoreRadioGroupComponent as N, GptService as O, ApplicationHelpService as P, HotKeysDirective as Q, EnumCorePageEditMode as R, SocketService as S, TranslatePipe as T, CoreFormComponent as U, NavigatorService as V, JsonService as W, AppConfigService as X, EnumCoreButtonVNSCode as Y, READONLY_WORKFLOW_FIELDS as Z, noneAutoClosedAlertOptions as _, CorePageListComponent as a, CommonHttpRequestService as a$, CoreStickerCollectionComponent as a0, HtmlTooltipDirective as a1, CoreControlNoFormArrayComponent as a2, EnumFormDesignMode as a3, CoreControlComponent as a4, JsonSafePipe as a5, CoreAttachmentComponent as a6, CoreMonthSelectorComponent as a7, EnumImageResolverType as a8, NormalizeHumanNamePipe as a9, EnumStyleButtonClass as aA, CanActivateFunctionUrlMapperGuard as aB, InitializationCanActivateFn as aC, InitializationCanMatchFn as aD, httpInterceptorProviders as aE, InterceptorSkipHeader as aF, appTypeInterceptor as aG, baseUrlInterceptor as aH, authInterceptor as aI, graphInterceptor as aJ, tokenInterceptor as aK, responseInterceptor as aL, timeZoneInterceptor as aM, cachingInterceptor as aN, langInterceptor as aO, EnumFilterOperator as aP, OnlineUsersComponent as aQ, ActionService as aR, AppInitializationService as aS, AuthService as aT, CacheService as aU, EnumSwUpdateVersionUpdatesEventType as aV, CheckForUpdateService as aW, EnumDeviceType as aX, EnumBrowserType as aY, EnumOsType as aZ, ClientService as a_, CoreIosSwitcherComponent as aa, SunnyRotatingComponent as ab, MapAppdemoToServerPipePipe as ac, MapAttachmentToServerPipe as ad, MapNewsfeedMediaToServerPipe as ae, StringHtmlPipe as af, UploadedFilenameCutoffPipe as ag, DialogStateComponent as ah, FooterComponent as ai, RightchatComponent as aj, WaittingScreenComponent as ak, longAlertOptions as al, attachmentOptions as am, CORE_VNS_BUTTONS as an, defaultPaging as ao, DESKTOP_SCREEN_HEDER_HEIGHT as ap, MOBILE_SCREEN_HEDER_HEIGHT as aq, themeBlue as ar, DATE_VALUE_ACCESSOR as as, DateValueAccessor as at, EnumDragType as au, EnumErrorType as av, EnumIconClass as aw, EnumProfileInfoSector as ax, EnumSignalRType as ay, EnumSortDirection as az, CoreCheckboxComponent as b, MutationViewComponent as b$, TLA_CONFIG as b0, ConfigService as b1, CoreTableService as b2, DndService as b3, DocxMergeService as b4, FilterKitService as b5, GrpcService as b6, HeaderService as b7, HistoryService as b8, HttpErrorHandler as b9, TopicPermissionService as bA, TopicTreeService as bB, UploadedFileService as bC, UrlService as bD, UserActivityService as bE, EvaluateDialogService as bF, EnumWorkScheduleViewMode as bG, WorkShiftDndService as bH, AtShiftPatternComponent as bI, AtShiftPatternApplyComponent as bJ, AtShiftPatternEditComponent as bK, AtWorksignComponent as bL, AtWorksignService as bM, FunctionComponent as bN, IndividualScheduleApplyComponent as bO, FunctionEditComponent as bP, FunctionIgnoreComponent as bQ, FunctionIgnoreEditComponent as bR, GroupFunctionComponent as bS, GroupFunctionEditComponent as bT, hrmSchemaRoutes as bU, InMemoryComponent as bV, LanguageComponent as bW, LanguageEditComponent as bX, MenuComponent as bY, MenuEditComponent as bZ, MutationLogComponent as b_, HubConnectionService as ba, IpServiceService as bb, LayoutService as bc, LiquidJsService as bd, MapService as be, MenuService as bf, MessageService as bg, ModalService as bh, OrganizationService as bi, PkceService as bj, PositionTransferService as bk, EnumNotificationDir as bl, NotificationActionType as bm, PushNotificationService as bn, RandomAvatarService as bo, RequestCache as bp, RequestCacheWithMap as bq, ResponseService as br, RoutingService as bs, EnumSsrsExpressFileExtension as bt, EnumSsrsExpressExportFormat as bu, SsrsExpressService as bv, StatisticService as bw, StatisticAuthService as bx, SysMenuService as by, TimeSheetService as bz, BaseEditComponent as c, CoreDocgenToolbarComponent as c$, PaSalaryPolicyComponent as c0, PaSalaryPolicyEditComponent as c1, PortalRouteComponent as c2, ScheduleOverviewComponent as c3, simpleChatRoutes as c4, PortalRouteEditComponent as c5, SysOtherListComponent as c6, SysOtherListEditComponent as c7, SysOtherListTypeComponent as c8, SysOtherListTypeEditComponent as c9, NewlyCreatedTokenService as cA, CoreApiProgressComponent as cB, CoreButtonGroupComponent as cC, EnumCoreButtonCode as cD, ActionSvgEditComponent as cE, CoreButtonGroupService as cF, CoreButtonVnsComponent as cG, CoreComTreeComponent as cH, ComPartyService as cI, CoreCommonParamKitComponent as cJ, CoreCompareDbPipelineComponent as cK, CoreCompositionState as cL, CoreCompositionService as cM, CoreCompositionComponent as cN, CoreConfirmDialogComponent as cO, ConfirmDialogStateComponent as cP, CoreLazyMountComponent as cQ, CoreRootMenuItemPickerComponent as cR, CoreRootMenuItemPickerService as cS, ECoreTableToolCode as cT, ECoreTableToolClass as cU, CoreTableComponent as cV, CoreComProfileComponent as cW, CoreContractSeekerComponent as cX, CoreControlNoGridBufferComponent as cY, CoreControlNoSeekerComponent as cZ, coreDocGenRoutes as c_, SysActionComponent as ca, SysActionEditComponent as cb, SysFunctionActionComponent as cc, SysFunctionActionEditComponent as cd, SysFunctionActionMapperComponent as ce, SysFunctionUrlMapperComponent as cf, FunctionEditService as cg, SysModuleComponent as ch, SysModuleEditComponent as ci, SysRouteAccessComponent as cj, liner_to_nested_array_script as ck, blob_to_base64_script as cl, AlertComponent as cm, EnumAlertType as cn, IAlertOptions as co, AnimatedTextService as cp, AnimatedTextComponent as cq, BaseDropdownComponent as cr, ButtonGroupModule as cs, ButtonGroupService as ct, ButtonGroupComponent as cu, EnumButtonCaptionCode as cv, CoreButtonComponent as cw, CoreAccordionComponent as cx, CoreAccordionService as cy, CoreActiveUserCountComponent as cz, EnumFormBaseContolType as d, EnumPermissionObjectType as d$, CoreEmployeeScheduleComponent as d0, CoreEmployeeSeekerComponent as d1, EnumCoreFileUploaderType as d2, CoreFileUploaderComponent as d3, CoreFilterHubComponent as d4, CoreFilterHubService as d5, ControlBase as d6, Textbox as d7, CoreControlService as d8, CustomValidators as d9, coreNavigationTrackerRoutes as dA, CoreOauthCallbackComponent as dB, CoreOauthCallbackOffice365Component as dC, EnumCoreOrgTreeaAccessorMode as dD, EnumCoreOrgTreeaSearchMode as dE, CoreOrgTreeComponent as dF, CoreOrgTreeState as dG, CoreOrgTreeService as dH, CoreOrgUnitSeekerComponent as dI, CoreOrgchartflexComponent as dJ, CoreOrgParamComponent as dK, EnumCorePageEditBootstrapClass as dL, EnumCorePageEditFieldType as dM, CorePageEditService as dN, CorePageEditLiteComponent as dO, CorePageEditTabComponent as dP, EnumExType as dQ, CorePageListService as dR, CorePageListState as dS, CorePageListContentComponent as dT, EnumCoreViewItemType as dU, CorePageViewComponent as dV, CorePaginationComponent as dW, CorePaginationFullComponent as dX, CorePaginationFullService as dY, CoreFileFormatPickerComponent as dZ, CorePermissionService as d_, URL_PATTERN as da, coreFormDesignRoutes as db, CoreFormTabComponent as dc, CoreFormLiteComponent as dd, CoreFormControlBaseComponent as de, EnumCoreSeekerColumnJob as df, EnumCoreSeekerColumnStaffProfile as dg, EnumCoreSeekerColumnContract as dh, EnumCoreSeekerColumnWorking as di, EnumCoreSeekerColumnWage as dj, EnumCoreSeekerColumnPosition as dk, EnumCoreSeekerColumnPositionConcurrent as dl, EnumCoreSeekerColumnAutoForm as dm, SeekerService as dn, CoreGridBufferComponent as dp, CoreHeaderParamsComponent as dq, CoreHelperComponent as dr, CoreLineComponent as ds, CoreLiquidWysiwygComponent as dt, CoreListComponent as du, CoreListLazyComponent as dv, CoreLoadingSurfaceComponent as dw, CoreMccComponent as dx, CoreMonthPickerComponent as dy, CoreNavigationTrackerComponent as dz, CorePageEditComponent as e, EnumRecursiveFields as e$, CorePermissionComponent as e0, CorePermissionActionsComponent as e1, CorePositionConcurrentSeekerComponent as e2, CorePositionSeekerComponent as e3, CoreQrcodeComponent as e4, EnumOparator as e5, CoreQueryBuilderComponent as e6, CoreReducerIconComponent as e7, CoreRotatingTextComponent as e8, CoreRouteAccumulatorComponent as e9, CoreYearSelectorComponent as eA, EnumCoreD3ScaleType as eB, CoreD3Service as eC, CorePieComponent as eD, CoreScatterPlotComponent as eE, EnumHrComparisonCode as eF, EnumICoreStatisticWidgetDataType as eG, CoreStatisticWidgetComponent as eH, DecisionComponent as eI, EvaluateDialogComponent as eJ, HuconcurrentlyComponent as eK, JobComponent as eL, LanguageChangerComponent as eM, DEFAULT_SVG as eN, ItemComponent as eO, NavigatorComponent as eP, OtpInputComponent as eQ, OtpInputService as eR, PageTitleComponent as eS, PaginationComponent as eT, FilterPipe as eU, normalizeHumanName as eV, PositionComponent as eW, PositionEditService as eX, CoreDatetimeService as eY, FileService as eZ, LongTaskService as e_, CoreRoutingHistoryComponent as ea, CoreSalaryPolicyPickerComponent as eb, CoreScrollComponent as ec, CoreScrollLazyComponent as ed, CoreSeenByComponent as ee, CoreShiftCardComponent as ef, CoreShiftCellComponent as eg, CoreShiftCollectionComponent as eh, CoreShiftStickerComponent as ei, STICKER_COLOR_SCHEMA as ej, CoreStatusStickerComponent as ek, CoreSubFormGroupComponent as el, CoreTabListComponent as em, CoreTagsComponent as en, CoreTopicPickerComponent as eo, EnumCoreArticleCategoryTreeaAccessorMode as ep, CoreTopicTreeComponent as eq, CoreTreeComponent as er, EnumCoreTreeGridEditMode as es, CoreTreeGridComponent as et, CoreWageSeekerComponent as eu, CoreWorkingSeekerComponent as ev, coreWorkflowRoutes as ew, CoreWorkflowBuilderComponent as ex, CoreWorkflowGroupEditComponent as ey, CoreYearPickerComponent as ez, CorePageHeaderComponent as f, RecursiveService as f0, StringService as f1, UnicodeService as f2, StaffProfileComponent as f3, ThreedotsComponent as f4, TooltipComponent as f5, UserActivityComponent as f6, WageComponent as f7, tooltip_directive as f8, coreStickerCollection_component as f9, dragReorder_directive as fa, CoreTabsComponent as g, CoreWorkflowService as h, EnumCoreFormControlSeekerSourceType as i, AlertService as j, CoreFormService as k, DbService as l, AiHintForColumnComponent as m, CoreWorkflowListComponent as n, TooltipDirective as o, DragReorderDirective as p, CanDeactivateGuard as q, TableCellPipe as r, MapAvatarToServerPipe as s, alertOptions as t, CoreTerminalSpinnerComponent as u, CoreFormDesignService as v, EnumWorkflowStepType as w, DomService as x, CoreDropdownComponent as y, CoreChecklistComponent as z };
45326
+ //# sourceMappingURL=ngx-histaff-alpha-ngx-histaff-alpha-BJ3ZVba7.mjs.map