ngx-histaff-alpha 6.6.4 → 6.6.7
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.
- package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-JXH8uW2J.mjs → ngx-histaff-alpha-ai-hint-for-table.component-CN312QCn.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-JXH8uW2J.mjs.map → ngx-histaff-alpha-ai-hint-for-table.component-CN312QCn.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-core-form-design.component-Cy_mOM1n.mjs → ngx-histaff-alpha-core-form-design.component-D6TrPmpG.mjs} +24 -7
- package/fesm2022/ngx-histaff-alpha-core-form-design.component-D6TrPmpG.mjs.map +1 -0
- package/fesm2022/{ngx-histaff-alpha-core-sys-action.component-DSjGTh1K.mjs → ngx-histaff-alpha-core-sys-action.component-YqAEn6iz.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-core-sys-action.component-DSjGTh1K.mjs.map → ngx-histaff-alpha-core-sys-action.component-YqAEn6iz.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-D1XlpSNr.mjs → ngx-histaff-alpha-core-template-editor.component-CvJChUao.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-D1XlpSNr.mjs.map → ngx-histaff-alpha-core-template-editor.component-CvJChUao.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-ClmryTzj.mjs → ngx-histaff-alpha-core-toast-loading.component-DYxZA2xa.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-ClmryTzj.mjs.map → ngx-histaff-alpha-core-toast-loading.component-DYxZA2xa.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-DV84nxOo.mjs → ngx-histaff-alpha-core-workflow-consume.component-K-_atwQM.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-DV84nxOo.mjs.map → ngx-histaff-alpha-core-workflow-consume.component-K-_atwQM.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-db-settings.component-AwS6B8Ne.mjs → ngx-histaff-alpha-db-settings.component-D0JhoiHQ.mjs} +5 -5
- package/fesm2022/{ngx-histaff-alpha-db-settings.component-AwS6B8Ne.mjs.map → ngx-histaff-alpha-db-settings.component-D0JhoiHQ.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-C_EM0bEs.mjs → ngx-histaff-alpha-design-wrapper.component-C7SJCccg.mjs} +131 -82
- package/fesm2022/ngx-histaff-alpha-design-wrapper.component-C7SJCccg.mjs.map +1 -0
- package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-DIZLQKWJ.mjs → ngx-histaff-alpha-design-wrapper.route-DVdapOzd.mjs} +5 -5
- package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-DIZLQKWJ.mjs.map → ngx-histaff-alpha-design-wrapper.route-DVdapOzd.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-DPqZBYnx.mjs → ngx-histaff-alpha-hrm-schema.component-BTzEGNfX.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-DPqZBYnx.mjs.map → ngx-histaff-alpha-hrm-schema.component-BTzEGNfX.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-live-form.component-CatM7zte.mjs → ngx-histaff-alpha-live-form.component-CYB3NnkR.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-live-form.component-CatM7zte.mjs.map → ngx-histaff-alpha-live-form.component-CYB3NnkR.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-ngx-histaff-alpha-BZdzGBj5.mjs → ngx-histaff-alpha-ngx-histaff-alpha-BsbSArBq.mjs} +1221 -51
- package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-BsbSArBq.mjs.map +1 -0
- package/fesm2022/{ngx-histaff-alpha-simple-chat.component-CQvQzfwA.mjs → ngx-histaff-alpha-simple-chat.component-CWWWy9FV.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-simple-chat.component-CQvQzfwA.mjs.map → ngx-histaff-alpha-simple-chat.component-CWWWy9FV.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-sys-smtp-client-edit.component-DQyeSL3y.mjs → ngx-histaff-alpha-sys-smtp-client-edit.component-Cn1CYwCF.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-sys-smtp-client-edit.component-DQyeSL3y.mjs.map → ngx-histaff-alpha-sys-smtp-client-edit.component-Cn1CYwCF.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-sys-smtp-client.component-5f4Hm6sZ.mjs → ngx-histaff-alpha-sys-smtp-client.component-CtRfWRoX.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-sys-smtp-client.component-5f4Hm6sZ.mjs.map → ngx-histaff-alpha-sys-smtp-client.component-CtRfWRoX.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-template-list.component-Hxk1mvGh.mjs → ngx-histaff-alpha-template-list.component-TYq8bPtG.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-template-list.component-Hxk1mvGh.mjs.map → ngx-histaff-alpha-template-list.component-TYq8bPtG.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-Dhp9w826.mjs → ngx-histaff-alpha-tracker-studio.component-BEMXswAW.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-Dhp9w826.mjs.map → ngx-histaff-alpha-tracker-studio.component-BEMXswAW.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-ClY5trbS.mjs → ngx-histaff-alpha-wf-form-assign.component-Bck-IKZX.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-ClY5trbS.mjs.map → ngx-histaff-alpha-wf-form-assign.component-Bck-IKZX.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-wf-global-config.component-Cr5x7Ejg.mjs → ngx-histaff-alpha-wf-global-config.component-DhTw3REl.mjs} +15 -5
- package/fesm2022/ngx-histaff-alpha-wf-global-config.component-DhTw3REl.mjs.map +1 -0
- package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-BIvdd1YN.mjs → ngx-histaff-alpha-wf-instance-status.component-D-KD7Veu.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-BIvdd1YN.mjs.map → ngx-histaff-alpha-wf-instance-status.component-D-KD7Veu.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-1yYa-SfK.mjs → ngx-histaff-alpha-wf-instance-step-react.component-DE5sJiVw.mjs} +3 -3
- package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-1yYa-SfK.mjs.map → ngx-histaff-alpha-wf-instance-step-react.component-DE5sJiVw.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-wf-lab.component-mbJjrJ6v.mjs → ngx-histaff-alpha-wf-lab.component-DoFDdaIu.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-wf-lab.component-mbJjrJ6v.mjs.map → ngx-histaff-alpha-wf-lab.component-DoFDdaIu.mjs.map} +1 -1
- package/fesm2022/ngx-histaff-alpha.mjs +1 -1
- package/lib/app/enum/EnumFormBaseContolType.d.ts +2 -1
- package/lib/app/libraries/core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode.d.ts +1 -0
- package/lib/app/libraries/core-dom-decision-editor/core-dom-decision-editor.component.d.ts +37 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/action-code.enum.d.ts +17 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/intent-descriptor.model.d.ts +64 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/intent-descriptor.registry.d.ts +3 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/intent-draft.model.d.ts +6 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/omega-decision.d.ts +6 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/omega-intent.d.ts +7 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/omega-projection.vm.d.ts +13 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/others.d.ts +10 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/r-code.enum.d.ts +15 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/CREATE_O.d.ts +2 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/CREATE_S.d.ts +2 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/CREATE_TREE.d.ts +2 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/DECLARE_SNAPSHOT.d.ts +2 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/LINK_O_O.d.ts +2 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/LINK_P_S_INTERNAL.d.ts +2 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/LINK_S_O.d.ts +2 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/LINK_S_S.d.ts +2 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/SET_O_ATTR.d.ts +2 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/SET_P_ATTR.d.ts +2 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/SET_S_ATTR.d.ts +2 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/SHORTEN_O_O.d.ts +2 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/SHORTEN_S_O.d.ts +2 -0
- package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/SHORTEN_S_S.d.ts +2 -0
- package/lib/app/libraries/core-dom-decision-editor/intent-composer/intent-composer.component.d.ts +39 -0
- package/lib/app/libraries/core-form/core-form/enum-interfaces.d.ts +4 -0
- package/lib/app/libraries/core-form/core-form-array/core-form-array.component.d.ts +21 -2
- package/lib/app/libraries/core-form-design/core-form-design.component.d.ts +1 -1
- package/lib/app/libraries/core-form-design/core-form-group-editor.component.d.ts +1 -1
- package/lib/app/libraries/core-rule-set/core-rule-set.component.d.ts +7 -0
- package/lib/app/libraries/core-table/EnumCoreTablePipeType.d.ts +2 -1
- package/lib/app/libraries/core-timezone/core-timezone.component.d.ts +15 -0
- package/lib/app/libraries/core-tree-reference/core-tree-reference.component.d.ts +12 -0
- package/lib/app/libraries/core-tree-reference/core-tree-reference.node.d.ts +6 -0
- package/lib/app/libraries/core-tree-reference/moke.data.d.ts +2 -0
- package/lib/app/libraries/core-workflow-builder/core-workflow.service.d.ts +0 -11
- package/lib/app/libraries/core-workflow-builder/interfaces/IUiDelegation.d.ts +1 -0
- package/lib/app/libraries/core-workflow-builder/wf-delegation/wf-delegation.component.d.ts +5 -0
- package/lib/app/services/app-config.service.d.ts +1 -0
- package/package.json +2 -2
- package/public-api.d.ts +2 -0
- package/fesm2022/ngx-histaff-alpha-core-form-design.component-Cy_mOM1n.mjs.map +0 -1
- package/fesm2022/ngx-histaff-alpha-design-wrapper.component-C_EM0bEs.mjs.map +0 -1
- package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-BZdzGBj5.mjs.map +0 -1
- package/fesm2022/ngx-histaff-alpha-wf-global-config.component-Cr5x7Ejg.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component, Injectable, Pipe, Directive, ViewChild, forwardRef, HostListener, inject, Input, isDevMode, Inject, signal, InjectionToken, computed, effect, Injector, EventEmitter, Output, ViewContainerRef, ApplicationRef, EnvironmentInjector, createComponent, ViewEncapsulation, ChangeDetectorRef, input, ChangeDetectionStrategy, output, ViewChildren, viewChild, viewChildren, TemplateRef, NgModule, DestroyRef,
|
|
2
|
+
import { Component, Injectable, Pipe, Directive, ViewChild, forwardRef, HostListener, inject, Input, isDevMode, Inject, signal, InjectionToken, computed, effect, Injector, EventEmitter, Output, ViewContainerRef, ApplicationRef, EnvironmentInjector, createComponent, ViewEncapsulation, ChangeDetectorRef, input, ChangeDetectionStrategy, output, ViewChildren, viewChild, viewChildren, ElementRef, TemplateRef, NgModule, DestroyRef, Renderer2 } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/platform-browser';
|
|
4
4
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
5
5
|
import { of, BehaviorSubject, Subject, filter, Observable, catchError as catchError$1, distinctUntilChanged, zip, tap as tap$1, throwError, take, switchMap, finalize as finalize$1, map as map$1, interval, concat, buffer, debounceTime, combineLatestWith, fromEvent, skip, delay, Subscription, takeUntil, combineLatest } from 'rxjs';
|
|
@@ -10,7 +10,7 @@ import { last, map, catchError, tap, finalize, first, filter as filter$1, deboun
|
|
|
10
10
|
import * as i3 from '@angular/common';
|
|
11
11
|
import { CommonModule, NgTemplateOutlet, JsonPipe, NgStyle, UpperCasePipe, AsyncPipe, NgClass, LowerCasePipe, NgIf, NgFor } from '@angular/common';
|
|
12
12
|
import * as i1$4 from '@angular/forms';
|
|
13
|
-
import { NG_VALUE_ACCESSOR, Validators, FormControl, FormGroup, FormArray, NgControl, ControlContainer, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
13
|
+
import { NG_VALUE_ACCESSOR, Validators, FormControl, FormGroup, FormArray, NgControl, ControlContainer, FormsModule, ReactiveFormsModule, FormBuilder } from '@angular/forms';
|
|
14
14
|
import * as i1$2 from '@angular/router';
|
|
15
15
|
import { Router, RouterModule, ActivatedRoute, NavigationStart, NavigationEnd, NavigationCancel, NavigationError, RouteConfigLoadEnd, RoutesRecognized, RouterOutlet } from '@angular/router';
|
|
16
16
|
import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
@@ -1017,6 +1017,7 @@ var EnumCoreButtonVNSCode;
|
|
|
1017
1017
|
EnumCoreButtonVNSCode["HEADER_TERMINATE"] = "HEADER_TERMINATE";
|
|
1018
1018
|
EnumCoreButtonVNSCode["HEADER_REVOKE"] = "HEADER_REVOKE";
|
|
1019
1019
|
EnumCoreButtonVNSCode["HEADER_DEBUG"] = "HEADER_DEBUG";
|
|
1020
|
+
EnumCoreButtonVNSCode["HEADER_APPROVE_SEND_OTP"] = "HEADER_APPROVE_SEND_OTP";
|
|
1020
1021
|
//
|
|
1021
1022
|
// CÁC NÚT CỦA PHẦN FORM - KHÔNG LIÊN QUAN TỚI PHÂN QUYỀN
|
|
1022
1023
|
// NONE_HEADER_ category
|
|
@@ -1884,6 +1885,7 @@ var EnumFormBaseContolType;
|
|
|
1884
1885
|
EnumFormBaseContolType["LIQUID_WYSIWYG"] = "LIQUID_WYSIWYG";
|
|
1885
1886
|
EnumFormBaseContolType["STICKER_COLLECTION"] = "STICKER_COLLECTION";
|
|
1886
1887
|
EnumFormBaseContolType["RULE_SET"] = "RULE_SET";
|
|
1888
|
+
EnumFormBaseContolType["DOM_DECISION_EDITOR"] = "DOM_DECISION_EDITOR";
|
|
1887
1889
|
})(EnumFormBaseContolType || (EnumFormBaseContolType = {}));
|
|
1888
1890
|
|
|
1889
1891
|
class HubConnectionService {
|
|
@@ -3930,11 +3932,12 @@ class AppInitializationService {
|
|
|
3930
3932
|
if (window.opener && window.opener.globalPopupId) {
|
|
3931
3933
|
//alert(window.opener.globalPopupId);
|
|
3932
3934
|
}
|
|
3933
|
-
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, EVOLUTION_UseSysActionOrderNum, EVOLUTION_UseQueryOrgWithPositionsAndQuotas, UI_VERSION_OrgChart, 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, }) => {
|
|
3935
|
+
fetch('../../assets/app.config.json').then(res => res.json()).then(({ APP_TYPE, APP_UIID, ALLOW_IN_APP_NOTIFICATION, SHOW_LOGIN_NOTIFICATION, DEFAULT_IANA_TIMEZONE_ID, 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, EVOLUTION_UseSysActionOrderNum, EVOLUTION_UseQueryOrgWithPositionsAndQuotas, UI_VERSION_OrgChart, 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, }) => {
|
|
3934
3936
|
this.appConfigService.APP_TYPE = APP_TYPE;
|
|
3935
3937
|
this.appConfigService.APP_UIID = APP_UIID;
|
|
3936
3938
|
this.appConfigService.ALLOW_IN_APP_NOTIFICATION = ALLOW_IN_APP_NOTIFICATION;
|
|
3937
3939
|
this.appConfigService.SHOW_LOGIN_NOTIFICATION = SHOW_LOGIN_NOTIFICATION;
|
|
3940
|
+
this.appConfigService.DEFAULT_IANA_TIMEZONE_ID = DEFAULT_IANA_TIMEZONE_ID;
|
|
3938
3941
|
this.appConfigService.FEDERATION_COM_PARTY_ENABLED = FEDERATION_COM_PARTY_ENABLED;
|
|
3939
3942
|
this.appConfigService.IGNORE_PARTIAL_URL_MATCH_FOR_FUNCTION = IGNORE_PARTIAL_URL_MATCH_FOR_FUNCTION;
|
|
3940
3943
|
this.appConfigService.IGNORE_PARTIAL_URL_MATCH_FOR_PROFILE_CENTER = IGNORE_PARTIAL_URL_MATCH_FOR_PROFILE_CENTER;
|
|
@@ -8846,17 +8849,6 @@ class CoreWorkflowService {
|
|
|
8846
8849
|
this.$showStepConfig = signal(false);
|
|
8847
8850
|
this.$stepUpdated = signal(0); // force trigger for watchers
|
|
8848
8851
|
this.standardConnectorHeight = 90;
|
|
8849
|
-
/**
|
|
8850
|
-
id: string;
|
|
8851
|
-
name: string;
|
|
8852
|
-
branchId: string;
|
|
8853
|
-
type: EnumWorkflowStepType;
|
|
8854
|
-
label: string;
|
|
8855
|
-
config?: IStepConfig;
|
|
8856
|
-
branches?: IWorkflowBranch[];
|
|
8857
|
-
isPseudo?: boolean;
|
|
8858
|
-
isInFallbackBranch?: boolean;
|
|
8859
|
-
*/
|
|
8860
8852
|
this.$currentSteps = signal([
|
|
8861
8853
|
{
|
|
8862
8854
|
id: crypto.randomUUID(),
|
|
@@ -9340,7 +9332,11 @@ class CoreWorkflowService {
|
|
|
9340
9332
|
const currentFlow = this.$currentFlow();
|
|
9341
9333
|
if (!!currentFlow) {
|
|
9342
9334
|
currentFlow.processDefinition = this.$stepsJsonPreview();
|
|
9335
|
+
currentFlow.delegationJson = this.$currentDelegationJson();
|
|
9336
|
+
currentFlow.uiDelegation = this.delegationForm.getRawValue();
|
|
9343
9337
|
}
|
|
9338
|
+
this.$currentFlow.set(currentFlow);
|
|
9339
|
+
console.log(this.$currentFlow());
|
|
9344
9340
|
return this.appService.post('/api/WfWorkflow/Publish', this.$currentFlow());
|
|
9345
9341
|
}
|
|
9346
9342
|
getById(id) {
|
|
@@ -9713,7 +9709,6 @@ class CoreDatetimeService {
|
|
|
9713
9709
|
}
|
|
9714
9710
|
//Load full IANA time zones (browser-supported)
|
|
9715
9711
|
loadFullTimezones() {
|
|
9716
|
-
const result = [];
|
|
9717
9712
|
// 1. Load full IANA time zones (browser-supported)
|
|
9718
9713
|
const timeZones = Intl.supportedValuesOf("timeZone");
|
|
9719
9714
|
this.$timeZones.set(timeZones);
|
|
@@ -11603,6 +11598,7 @@ var EnumCoreTablePipeType;
|
|
|
11603
11598
|
EnumCoreTablePipeType["NORMALIZE_HUMAN_NAME"] = "NORMALIZE_HUMAN_NAME";
|
|
11604
11599
|
EnumCoreTablePipeType["UPLOADED_FILENAME_CUT_OFF"] = "UPLOADED_FILENAME_CUT_OFF";
|
|
11605
11600
|
EnumCoreTablePipeType["TRIM"] = "TRIM";
|
|
11601
|
+
EnumCoreTablePipeType["UNDEFINED_TO_EMPTY_STRING"] = "UNDEFINED_TO_EMPTY_STRING";
|
|
11606
11602
|
})(EnumCoreTablePipeType || (EnumCoreTablePipeType = {}));
|
|
11607
11603
|
|
|
11608
11604
|
const normalizeHumanName = (value) => {
|
|
@@ -11679,6 +11675,7 @@ class TableCellPipe {
|
|
|
11679
11675
|
EnumCoreTablePipeType.DECIMAL_TO_FIX_5,
|
|
11680
11676
|
EnumCoreTablePipeType.UPLOADED_FILENAME_CUT_OFF,
|
|
11681
11677
|
EnumCoreTablePipeType.TRIM,
|
|
11678
|
+
EnumCoreTablePipeType.UNDEFINED_TO_EMPTY_STRING
|
|
11682
11679
|
];
|
|
11683
11680
|
if (!!!availableTypes.includes(pipe))
|
|
11684
11681
|
return value;
|
|
@@ -11856,6 +11853,13 @@ class TableCellPipe {
|
|
|
11856
11853
|
else {
|
|
11857
11854
|
return value;
|
|
11858
11855
|
}
|
|
11856
|
+
case EnumCoreTablePipeType.UNDEFINED_TO_EMPTY_STRING:
|
|
11857
|
+
if (value === undefined) {
|
|
11858
|
+
return '';
|
|
11859
|
+
}
|
|
11860
|
+
else {
|
|
11861
|
+
return value;
|
|
11862
|
+
}
|
|
11859
11863
|
default:
|
|
11860
11864
|
return value;
|
|
11861
11865
|
}
|
|
@@ -12191,6 +12195,7 @@ class CoreIosSwitcherComponent extends CoreFormControlBaseComponent {
|
|
|
12191
12195
|
this.width = 80;
|
|
12192
12196
|
this.height = 28;
|
|
12193
12197
|
this.readonly = false;
|
|
12198
|
+
this.value = false;
|
|
12194
12199
|
this.subscriptions = [];
|
|
12195
12200
|
this.truelyText = 'on';
|
|
12196
12201
|
this.falsyText = 'off';
|
|
@@ -12237,7 +12242,7 @@ class CoreIosSwitcherComponent extends CoreFormControlBaseComponent {
|
|
|
12237
12242
|
{
|
|
12238
12243
|
provide: NG_VALUE_ACCESSOR,
|
|
12239
12244
|
multi: true,
|
|
12240
|
-
useExisting: CoreIosSwitcherComponent
|
|
12245
|
+
useExisting: forwardRef(() => CoreIosSwitcherComponent)
|
|
12241
12246
|
}
|
|
12242
12247
|
], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<input type=\"checkbox\" [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\">\r\n\r\n<label #container class=\"core-ios-switcher-container\">\r\n\r\n @if (!!readonly) {\r\n <div class=\"outer\" [class.truely]=\"value\">\r\n <div class=\"circle\"></div>\r\n <label [class.opacity0]=\"!showOnOffText\">{{ labelText }}</label>\r\n </div>\r\n } @else {\r\n <div class=\"outer\" [class.truely]=\"value\" (click)=\"onClick()\">\r\n <div class=\"circle\"></div>\r\n <label [class.opacity0]=\"!showOnOffText\">{{ labelText }}</label>\r\n </div>\r\n }\r\n\r\n</label>\r\n", styles: ["input{display:none}.core-ios-switcher-container{--outer-width: 80px;--outer-height: 28px;--outer-falsy-border: solid #E9E9EB;--outer-truely-border: solid #FFA427;--outer-border-width: 2px;--outer-falsy-bg-color: #E9E9EB;--outer-falsy-color: black;--outer-truely-bg-color: #FFA427;--outer-truely-color: white;--outer-font-size: 14px;--circle-bg-color: white;--checkbox-size: 18px;--checkbox-border-color: #B9B9B9;--checkbox-hover-bg: #B9B9B9;--checkbox-bg: #FFFFFF;--checkbox-checked-bg: #358ccb;--checkbox-color: #FFFFFF;--font-size: 15px;--text-color: gray;display:flex;align-items:center;justify-content:flex-start;position:relative;font-size:var(--outer-font-size);font-weight:400;color:var(--text-color);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.core-ios-switcher-container .outer{box-sizing:border-box;display:flex;align-items:center;justify-content:center;width:var(--outer-width);height:var(--outer-height);border:var(--outer-falsy-border);border-width:var(--outer-border-width);border-radius:var(--outer-height);background-color:var(--outer-falsy-bg-color);color:var(--outer-falsy-color);cursor:pointer;transition:.5s ease-out}.core-ios-switcher-container .outer .circle{width:21px;height:21px;border-radius:50%;display:block;position:absolute;background-color:var(--circle-bg-color);cursor:pointer;left:var(--outer-border-width);transition:left .5s ease-out!important}.core-ios-switcher-container .outer label{cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:var(--font-size);padding-left:var(--outer-height);padding-right:0}.core-ios-switcher-container .truely{border:solid var(--outer-truely-border);background-color:var(--outer-truely-bg-color)!important;color:var(--outer-truely-color)!important;transition:.5s ease-out}.core-ios-switcher-container .truely label{padding-left:0!important;padding-right:var(--outer-height)!important;transition:.5s ease-out}.core-ios-switcher-container .truely .circle{left:calc(var(--outer-width) - var(--outer-border-width) - 21px)!important;transition:left .5s ease-out!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
|
|
12243
12248
|
}
|
|
@@ -12252,7 +12257,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
12252
12257
|
{
|
|
12253
12258
|
provide: NG_VALUE_ACCESSOR,
|
|
12254
12259
|
multi: true,
|
|
12255
|
-
useExisting: CoreIosSwitcherComponent
|
|
12260
|
+
useExisting: forwardRef(() => CoreIosSwitcherComponent)
|
|
12256
12261
|
}
|
|
12257
12262
|
], template: "<input type=\"checkbox\" [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\">\r\n\r\n<label #container class=\"core-ios-switcher-container\">\r\n\r\n @if (!!readonly) {\r\n <div class=\"outer\" [class.truely]=\"value\">\r\n <div class=\"circle\"></div>\r\n <label [class.opacity0]=\"!showOnOffText\">{{ labelText }}</label>\r\n </div>\r\n } @else {\r\n <div class=\"outer\" [class.truely]=\"value\" (click)=\"onClick()\">\r\n <div class=\"circle\"></div>\r\n <label [class.opacity0]=\"!showOnOffText\">{{ labelText }}</label>\r\n </div>\r\n }\r\n\r\n</label>\r\n", styles: ["input{display:none}.core-ios-switcher-container{--outer-width: 80px;--outer-height: 28px;--outer-falsy-border: solid #E9E9EB;--outer-truely-border: solid #FFA427;--outer-border-width: 2px;--outer-falsy-bg-color: #E9E9EB;--outer-falsy-color: black;--outer-truely-bg-color: #FFA427;--outer-truely-color: white;--outer-font-size: 14px;--circle-bg-color: white;--checkbox-size: 18px;--checkbox-border-color: #B9B9B9;--checkbox-hover-bg: #B9B9B9;--checkbox-bg: #FFFFFF;--checkbox-checked-bg: #358ccb;--checkbox-color: #FFFFFF;--font-size: 15px;--text-color: gray;display:flex;align-items:center;justify-content:flex-start;position:relative;font-size:var(--outer-font-size);font-weight:400;color:var(--text-color);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.core-ios-switcher-container .outer{box-sizing:border-box;display:flex;align-items:center;justify-content:center;width:var(--outer-width);height:var(--outer-height);border:var(--outer-falsy-border);border-width:var(--outer-border-width);border-radius:var(--outer-height);background-color:var(--outer-falsy-bg-color);color:var(--outer-falsy-color);cursor:pointer;transition:.5s ease-out}.core-ios-switcher-container .outer .circle{width:21px;height:21px;border-radius:50%;display:block;position:absolute;background-color:var(--circle-bg-color);cursor:pointer;left:var(--outer-border-width);transition:left .5s ease-out!important}.core-ios-switcher-container .outer label{cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:var(--font-size);padding-left:var(--outer-height);padding-right:0}.core-ios-switcher-container .truely{border:solid var(--outer-truely-border);background-color:var(--outer-truely-bg-color)!important;color:var(--outer-truely-color)!important;transition:.5s ease-out}.core-ios-switcher-container .truely label{padding-left:0!important;padding-right:var(--outer-height)!important;transition:.5s ease-out}.core-ios-switcher-container .truely .circle{left:calc(var(--outer-width) - var(--outer-border-width) - 21px)!important;transition:left .5s ease-out!important}\n"] }]
|
|
12258
12263
|
}], ctorParameters: () => [{ type: MultiLanguageService }], propDecorators: { bgColor: [{
|
|
@@ -21335,7 +21340,7 @@ class CoreDropdownComponent extends CoreFormControlBaseComponent {
|
|
|
21335
21340
|
//getByIdObject$
|
|
21336
21341
|
if (!!!this.getByIdObject$ && isDevMode() && !!!this.warningDisable) {
|
|
21337
21342
|
this.alertService.error(`CoreDropdownComponent Error: Required inputs:
|
|
21338
|
-
getByIdObject$: BehaviorSubject<any> (for '${this.ngControl
|
|
21343
|
+
getByIdObject$: BehaviorSubject<any> (for '${this.ngControl?.name ?? "-"}')`);
|
|
21339
21344
|
}
|
|
21340
21345
|
if (!!!this.shownFrom && isDevMode() && !!!this.warningDisable) {
|
|
21341
21346
|
this.alertService.error(`CoreDropdownComponent Error: Required inputs:
|
|
@@ -23323,13 +23328,20 @@ class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent {
|
|
|
23323
23328
|
/* END: CHECK INPUTS */
|
|
23324
23329
|
this.subscriptions.push(this.getByIdObject$?.subscribe(x => {
|
|
23325
23330
|
if (!!x) {
|
|
23326
|
-
if (
|
|
23331
|
+
if (!this.multiMode) {
|
|
23327
23332
|
this.valueToShow = x[this.shownFrom];
|
|
23328
23333
|
this.enrichment.register(this.form, this.fieldName, x[this.shownFrom]);
|
|
23334
|
+
if (!!this.alsoBindTo) {
|
|
23335
|
+
this.alsoBindTo.forEach(a => {
|
|
23336
|
+
this.form.patchValue({
|
|
23337
|
+
[a.bindTo]: x[a.takeFrom]
|
|
23338
|
+
});
|
|
23339
|
+
});
|
|
23340
|
+
}
|
|
23329
23341
|
}
|
|
23330
23342
|
}
|
|
23331
23343
|
else {
|
|
23332
|
-
if (
|
|
23344
|
+
if (!this.multiMode) {
|
|
23333
23345
|
this.valueToShow = "";
|
|
23334
23346
|
this.enrichment.register(this.form, this.fieldName, "");
|
|
23335
23347
|
}
|
|
@@ -26449,11 +26461,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
26449
26461
|
class CoreRuleSetComponent extends CoreFormControlBaseComponent {
|
|
26450
26462
|
constructor() {
|
|
26451
26463
|
super();
|
|
26464
|
+
this.$container = viewChild('container');
|
|
26452
26465
|
this.value = null;
|
|
26453
26466
|
this.$open = signal(false);
|
|
26454
26467
|
this.crts = inject(CoreRuleTreeService);
|
|
26468
|
+
this.el = inject((ElementRef));
|
|
26455
26469
|
this.ruleTreeForm = this.crts.createGroupForm();
|
|
26456
26470
|
this.wfs = inject(CoreWorkflowService);
|
|
26471
|
+
this.ds = inject(DomService);
|
|
26472
|
+
effect(() => {
|
|
26473
|
+
const container = this.$container()?.nativeElement;
|
|
26474
|
+
if (!container)
|
|
26475
|
+
return;
|
|
26476
|
+
container.style.setProperty('--popup-z-index', this.ds.getMaxZIndex() + 1);
|
|
26477
|
+
});
|
|
26457
26478
|
}
|
|
26458
26479
|
onToggleOpen() {
|
|
26459
26480
|
this.$open.update(x => !x);
|
|
@@ -26463,14 +26484,23 @@ class CoreRuleSetComponent extends CoreFormControlBaseComponent {
|
|
|
26463
26484
|
this.onChange(e);
|
|
26464
26485
|
this.markAsTouched();
|
|
26465
26486
|
}
|
|
26487
|
+
onDocumentClick(event) {
|
|
26488
|
+
const clickedInside = this.el.nativeElement.contains(event.target);
|
|
26489
|
+
if (!clickedInside) {
|
|
26490
|
+
this.onClickOutside();
|
|
26491
|
+
}
|
|
26492
|
+
}
|
|
26493
|
+
onClickOutside() {
|
|
26494
|
+
this.$open.set(false);
|
|
26495
|
+
}
|
|
26466
26496
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRuleSetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26467
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
26497
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.5", type: CoreRuleSetComponent, isStandalone: true, selector: "core-rule-set", host: { listeners: { "document:click": "onDocumentClick($event)" } }, providers: [
|
|
26468
26498
|
{
|
|
26469
26499
|
provide: NG_VALUE_ACCESSOR,
|
|
26470
26500
|
multi: true,
|
|
26471
26501
|
useExisting: forwardRef(() => CoreRuleSetComponent)
|
|
26472
26502
|
}
|
|
26473
|
-
], usesInheritance: true, ngImport: i0, template: "<div class=\"core-rule-set-container\">\r\n <button type=\"button\" class=\"btn btn-primary
|
|
26503
|
+
], viewQueries: [{ propertyName: "$container", first: true, predicate: ["container"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-rule-set-container\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onToggleOpen()\" [class.disabled]=\"disabled\">Rule set</button>\r\n <div class=\"rule-set-popup\" [class.open]=\"$open()\">\r\n <core-rule-tree \r\n [$totalCols]=\"wfs.$availableCols()\"\r\n [$mainForm]=\"ruleTreeForm\"\r\n ($jsonEmitter)=\"onRuleTreeJsonChange($event)\"\r\n />\r\n </div>\r\n</div>\r\n", styles: [".core-rule-set-container{--popup-z-index: 1;position:relative}.core-rule-set-container .form-control{line-height:unset}.core-rule-set-container .rule-set-popup{display:none;background-color:#fff;position:absolute;left:0;top:100%;width:360px;height:fit-content;box-shadow:.4rem 0 2rem #0000002e;padding:15px 15px 0;z-index:var(--popup-z-index)}.core-rule-set-container .rule-set-popup.open{display:block}\n"], dependencies: [{ kind: "component", type: CoreRuleTreeComponent, selector: "core-rule-tree", inputs: ["$totalCols", "$mainForm", "$filterStringInput", "$expressionInput", "$form", "$field"], outputs: ["$jsonEmitter"] }] }); }
|
|
26474
26504
|
}
|
|
26475
26505
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRuleSetComponent, decorators: [{
|
|
26476
26506
|
type: Component,
|
|
@@ -26482,7 +26512,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
26482
26512
|
multi: true,
|
|
26483
26513
|
useExisting: forwardRef(() => CoreRuleSetComponent)
|
|
26484
26514
|
}
|
|
26485
|
-
],
|
|
26515
|
+
], host: {
|
|
26516
|
+
'(document:click)': 'onDocumentClick($event)'
|
|
26517
|
+
}, template: "<div #container class=\"core-rule-set-container\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onToggleOpen()\" [class.disabled]=\"disabled\">Rule set</button>\r\n <div class=\"rule-set-popup\" [class.open]=\"$open()\">\r\n <core-rule-tree \r\n [$totalCols]=\"wfs.$availableCols()\"\r\n [$mainForm]=\"ruleTreeForm\"\r\n ($jsonEmitter)=\"onRuleTreeJsonChange($event)\"\r\n />\r\n </div>\r\n</div>\r\n", styles: [".core-rule-set-container{--popup-z-index: 1;position:relative}.core-rule-set-container .form-control{line-height:unset}.core-rule-set-container .rule-set-popup{display:none;background-color:#fff;position:absolute;left:0;top:100%;width:360px;height:fit-content;box-shadow:.4rem 0 2rem #0000002e;padding:15px 15px 0;z-index:var(--popup-z-index)}.core-rule-set-container .rule-set-popup.open{display:block}\n"] }]
|
|
26486
26518
|
}], ctorParameters: () => [] });
|
|
26487
26519
|
|
|
26488
26520
|
class CoreControlNoFormArrayComponent extends BaseComponent {
|
|
@@ -26659,14 +26691,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
26659
26691
|
}] } });
|
|
26660
26692
|
|
|
26661
26693
|
class CoreFormArrayComponent extends CoreFormControlBaseComponent {
|
|
26694
|
+
// --- System field names (framework contract) ---
|
|
26695
|
+
static { this.SYSTEM_DELETE_FIELD = 'formArrayItemDeleted'; }
|
|
26662
26696
|
constructor() {
|
|
26663
26697
|
super();
|
|
26698
|
+
this.formArrayIdentityField = 'id';
|
|
26664
26699
|
this.addNewMode$ = new BehaviorSubject(false);
|
|
26665
26700
|
this.lang = signal('vi');
|
|
26666
26701
|
this.controlGroups = signal([]);
|
|
26667
26702
|
this.subscriptions = [];
|
|
26668
26703
|
//enrichment = inject(CoreFormEnrichmentService);
|
|
26669
26704
|
this.cfs = inject(CoreFormService);
|
|
26705
|
+
this.removeCache = new WeakMap();
|
|
26670
26706
|
const mls = inject(MultiLanguageService);
|
|
26671
26707
|
this.subscriptions.push(mls.lang$.subscribe(x => this.lang.set(x)));
|
|
26672
26708
|
// Optional: log whenever groups change
|
|
@@ -26705,26 +26741,91 @@ class CoreFormArrayComponent extends CoreFormControlBaseComponent {
|
|
|
26705
26741
|
updateControlGroups() {
|
|
26706
26742
|
this.controlGroups.set(this.formArray.controls);
|
|
26707
26743
|
}
|
|
26744
|
+
canRemove(group) {
|
|
26745
|
+
if (this.removeCache.has(group)) {
|
|
26746
|
+
return this.removeCache.get(group);
|
|
26747
|
+
}
|
|
26748
|
+
const result = this.evaluateCanRemove(group);
|
|
26749
|
+
this.removeCache.set(group, result);
|
|
26750
|
+
return result;
|
|
26751
|
+
}
|
|
26752
|
+
clearRemoveCache() {
|
|
26753
|
+
this.removeCache = new WeakMap();
|
|
26754
|
+
}
|
|
26755
|
+
evaluateCanRemove(group) {
|
|
26756
|
+
const rule = this.removeDisabledIf;
|
|
26757
|
+
if (!rule)
|
|
26758
|
+
return true;
|
|
26759
|
+
const control = group.get(rule.field);
|
|
26760
|
+
if (!control)
|
|
26761
|
+
return true;
|
|
26762
|
+
const controlValue = control.value;
|
|
26763
|
+
if ('notNull' in rule) {
|
|
26764
|
+
// disable remove nếu value NOT NULL
|
|
26765
|
+
return controlValue == null;
|
|
26766
|
+
}
|
|
26767
|
+
if ('equals' in rule) {
|
|
26768
|
+
// disable remove nếu value === equals
|
|
26769
|
+
return controlValue !== rule.equals;
|
|
26770
|
+
}
|
|
26771
|
+
if ('in' in rule) {
|
|
26772
|
+
// disable remove nếu value nằm trong list
|
|
26773
|
+
return !rule.in.includes(controlValue);
|
|
26774
|
+
}
|
|
26775
|
+
return true;
|
|
26776
|
+
}
|
|
26777
|
+
evaluateCanHideRemoveButton(group) {
|
|
26778
|
+
if (group.get("formArrayItemDeleted")?.value === true) {
|
|
26779
|
+
return true;
|
|
26780
|
+
}
|
|
26781
|
+
return false;
|
|
26782
|
+
}
|
|
26708
26783
|
addItem() {
|
|
26709
26784
|
const group = this.cfs.buildGroupFromConfig(this.config);
|
|
26710
26785
|
this.formArray.push(group);
|
|
26711
26786
|
this.updateControlGroups();
|
|
26712
26787
|
}
|
|
26713
|
-
removeItem(index) {
|
|
26714
|
-
this.
|
|
26788
|
+
removeItem(index, group) {
|
|
26789
|
+
if (!this.evaluateCanRemove(group)) {
|
|
26790
|
+
this.as.info(this.removeDisabledIfMessage ?? 'This row can not be removed', alertOptions);
|
|
26791
|
+
return;
|
|
26792
|
+
}
|
|
26793
|
+
//this.formArray.removeAt(index);
|
|
26794
|
+
//this.updateControlGroups();
|
|
26795
|
+
const identityField = this.formArrayIdentityField;
|
|
26796
|
+
const deleteField = CoreFormArrayComponent.SYSTEM_DELETE_FIELD;
|
|
26797
|
+
// 🔴 Dev-only invariant check
|
|
26798
|
+
if (!group.contains(deleteField)) {
|
|
26799
|
+
if (isDevMode()) {
|
|
26800
|
+
this.as.error(`[CoreFormArray] Missing system delete field '${deleteField}'.`, alertOptions);
|
|
26801
|
+
}
|
|
26802
|
+
}
|
|
26803
|
+
const identityValue = identityField
|
|
26804
|
+
? group.get(identityField)?.value
|
|
26805
|
+
: null;
|
|
26806
|
+
// 🟢 A. Transient item (no identity) → physical remove
|
|
26807
|
+
if (!identityValue) {
|
|
26808
|
+
this.formArray.removeAt(index);
|
|
26809
|
+
this.updateControlGroups();
|
|
26810
|
+
return;
|
|
26811
|
+
}
|
|
26812
|
+
// 🔵 B. Persisted item → soft delete (change-tracked)
|
|
26813
|
+
group.patchValue({ [deleteField]: true }, { emitEvent: true });
|
|
26814
|
+
// Optional: lock editing after delete intent
|
|
26815
|
+
group.disable({ emitEvent: false });
|
|
26715
26816
|
this.updateControlGroups();
|
|
26716
26817
|
}
|
|
26717
26818
|
ngOnDestroy() {
|
|
26718
26819
|
this.subscriptions.forEach(x => x?.unsubscribe());
|
|
26719
26820
|
}
|
|
26720
26821
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreFormArrayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26721
|
-
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$", addNewMode$: "addNewMode$", readonly: "readonly", disabled: "disabled" }, providers: [
|
|
26822
|
+
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$", formArrayIdentityField: "formArrayIdentityField", addNewMode$: "addNewMode$", readonly: "readonly", disabled: "disabled", removeDisabledIf: "removeDisabledIf", removeDisabledIfMessage: "removeDisabledIfMessage" }, providers: [
|
|
26722
26823
|
{
|
|
26723
26824
|
provide: NG_VALUE_ACCESSOR,
|
|
26724
26825
|
multi: true,
|
|
26725
26826
|
useExisting: forwardRef(() => CoreFormArrayComponent),
|
|
26726
26827
|
}
|
|
26727
|
-
], 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\" [class.d-none]=\"col.flexSize === 0\">\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$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
|
|
26828
|
+
], 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\" [class.d-none]=\"col.flexSize === 0\">\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 @let canRemoveRow = canRemove(group);\r\n <!-- @if (evaluateCanHideRemoveButton(group)) { -->\r\n <button type=\"button\" class=\"btn btn-danger btn-sm feather-trash-2\" (click)=\"removeItem(i, group)\"\r\n [class.used]=\"!canRemoveRow\"\r\n [appTooltip]=\"canRemoveRow ? 'Remove group' : removeDisabledIfMessage \" [showAnyway]=\"true\"></button>\r\n <!-- } -->\r\n </div>\r\n }\r\n </div>\r\n <hr />\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;margin-bottom:15px}.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)}.core-form-array-container .form-array-item .form-array-toolbar button.used{opacity:.5}\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$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
|
|
26728
26829
|
}
|
|
26729
26830
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreFormArrayComponent, decorators: [{
|
|
26730
26831
|
type: Component,
|
|
@@ -26740,7 +26841,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
26740
26841
|
TooltipDirective,
|
|
26741
26842
|
CoreControlNoFormArrayComponent,
|
|
26742
26843
|
ReactiveFormsModule
|
|
26743
|
-
], 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\" [class.d-none]=\"col.flexSize === 0\">\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"] }]
|
|
26844
|
+
], 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\" [class.d-none]=\"col.flexSize === 0\">\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 @let canRemoveRow = canRemove(group);\r\n <!-- @if (evaluateCanHideRemoveButton(group)) { -->\r\n <button type=\"button\" class=\"btn btn-danger btn-sm feather-trash-2\" (click)=\"removeItem(i, group)\"\r\n [class.used]=\"!canRemoveRow\"\r\n [appTooltip]=\"canRemoveRow ? 'Remove group' : removeDisabledIfMessage \" [showAnyway]=\"true\"></button>\r\n <!-- } -->\r\n </div>\r\n }\r\n </div>\r\n <hr />\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;margin-bottom:15px}.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)}.core-form-array-container .form-array-item .form-array-toolbar button.used{opacity:.5}\n"] }]
|
|
26744
26845
|
}], ctorParameters: () => [], propDecorators: { formArrayName: [{
|
|
26745
26846
|
type: Input,
|
|
26746
26847
|
args: [{ required: true }]
|
|
@@ -26756,12 +26857,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
26756
26857
|
}], checkError$: [{
|
|
26757
26858
|
type: Input,
|
|
26758
26859
|
args: [{ required: true }]
|
|
26860
|
+
}], formArrayIdentityField: [{
|
|
26861
|
+
type: Input
|
|
26759
26862
|
}], addNewMode$: [{
|
|
26760
26863
|
type: Input
|
|
26761
26864
|
}], readonly: [{
|
|
26762
26865
|
type: Input
|
|
26763
26866
|
}], disabled: [{
|
|
26764
26867
|
type: Input
|
|
26868
|
+
}], removeDisabledIf: [{
|
|
26869
|
+
type: Input
|
|
26870
|
+
}], removeDisabledIfMessage: [{
|
|
26871
|
+
type: Input
|
|
26765
26872
|
}] } });
|
|
26766
26873
|
|
|
26767
26874
|
class CoreDocgenToolbarComponent {
|
|
@@ -27661,6 +27768,1068 @@ var coreStickerCollection_component = /*#__PURE__*/Object.freeze({
|
|
|
27661
27768
|
CoreStickerCollectionComponent: CoreStickerCollectionComponent
|
|
27662
27769
|
});
|
|
27663
27770
|
|
|
27771
|
+
var EnumActionCode;
|
|
27772
|
+
(function (EnumActionCode) {
|
|
27773
|
+
EnumActionCode["CREATE_TREE"] = "CREATE_TREE";
|
|
27774
|
+
EnumActionCode["CREATE_O"] = "CREATE_O";
|
|
27775
|
+
EnumActionCode["CREATE_S"] = "CREATE_S";
|
|
27776
|
+
EnumActionCode["LINK_O_O"] = "LINK_O_O";
|
|
27777
|
+
EnumActionCode["SHORTEN_O_O"] = "SHORTEN_O_O";
|
|
27778
|
+
EnumActionCode["LINK_S_O"] = "LINK_S_O";
|
|
27779
|
+
EnumActionCode["SHORTEN_S_O"] = "SHORTEN_S_O";
|
|
27780
|
+
EnumActionCode["LINK_S_S"] = "LINK_S_S";
|
|
27781
|
+
EnumActionCode["SHORTEN_S_S"] = "SHORTEN_S_S";
|
|
27782
|
+
EnumActionCode["LINK_P_S_INTERNAL"] = "LINK_P_S_INTERNAL";
|
|
27783
|
+
EnumActionCode["SHORTEN_P_S"] = "SHORTEN_P_S";
|
|
27784
|
+
EnumActionCode["SET_O_ATTR"] = "SET_O_ATTR";
|
|
27785
|
+
EnumActionCode["SET_S_ATTR"] = "SET_S_ATTR";
|
|
27786
|
+
EnumActionCode["SET_P_ATTR"] = "SET_P_ATTR";
|
|
27787
|
+
EnumActionCode["DECLARE_SNAPSHOT"] = "DECLARE_SNAPSHOT";
|
|
27788
|
+
})(EnumActionCode || (EnumActionCode = {}));
|
|
27789
|
+
|
|
27790
|
+
const CREATE_TREE = {
|
|
27791
|
+
actionCode: EnumActionCode.CREATE_TREE,
|
|
27792
|
+
label: 'Tạo không gian tổ chức',
|
|
27793
|
+
description: 'Tạo một không gian tổ chức mới trong DOM.',
|
|
27794
|
+
category: 'Organization',
|
|
27795
|
+
quickEmoji: '🌳',
|
|
27796
|
+
inputs: [
|
|
27797
|
+
{
|
|
27798
|
+
key: 'TREE_NAME',
|
|
27799
|
+
label: 'Tên cây',
|
|
27800
|
+
kind: 'string',
|
|
27801
|
+
validators: {
|
|
27802
|
+
required: true,
|
|
27803
|
+
minLength: 3,
|
|
27804
|
+
maxLength: 255
|
|
27805
|
+
},
|
|
27806
|
+
row: 1
|
|
27807
|
+
},
|
|
27808
|
+
{
|
|
27809
|
+
key: 'IS_HR',
|
|
27810
|
+
label: 'Là không gian nhân sự chính thống (ngành ngang)',
|
|
27811
|
+
kind: 'boolean',
|
|
27812
|
+
defaultValue: true,
|
|
27813
|
+
validators: {
|
|
27814
|
+
required: true
|
|
27815
|
+
},
|
|
27816
|
+
row: 2
|
|
27817
|
+
},
|
|
27818
|
+
],
|
|
27819
|
+
};
|
|
27820
|
+
|
|
27821
|
+
const CREATE_O = {
|
|
27822
|
+
actionCode: EnumActionCode.CREATE_O,
|
|
27823
|
+
label: 'Tạo tổ chức',
|
|
27824
|
+
description: 'Tạo một tổ chức mới trong DOM.',
|
|
27825
|
+
category: 'Organization',
|
|
27826
|
+
quickEmoji: '🏗️',
|
|
27827
|
+
inputs: [
|
|
27828
|
+
{
|
|
27829
|
+
key: 'ID',
|
|
27830
|
+
label: 'ID',
|
|
27831
|
+
kind: 'string',
|
|
27832
|
+
defaultValue: crypto.randomUUID(),
|
|
27833
|
+
disabled: true
|
|
27834
|
+
},
|
|
27835
|
+
{
|
|
27836
|
+
key: 'ORIGINAL_NAME',
|
|
27837
|
+
label: 'Tên chính danh lịch sử của tổ chức',
|
|
27838
|
+
kind: 'string',
|
|
27839
|
+
validators: {
|
|
27840
|
+
required: true,
|
|
27841
|
+
minLength: 3,
|
|
27842
|
+
maxLength: 255
|
|
27843
|
+
}
|
|
27844
|
+
},
|
|
27845
|
+
{
|
|
27846
|
+
key: 'CODE',
|
|
27847
|
+
label: 'Mã hệ thống',
|
|
27848
|
+
kind: 'string',
|
|
27849
|
+
defaultValue: crypto.randomUUID(),
|
|
27850
|
+
validators: {
|
|
27851
|
+
required: true,
|
|
27852
|
+
minLength: 3,
|
|
27853
|
+
maxLength: 255
|
|
27854
|
+
},
|
|
27855
|
+
hidden: true
|
|
27856
|
+
},
|
|
27857
|
+
{
|
|
27858
|
+
key: 'SHORT_CODE',
|
|
27859
|
+
label: 'Mã giao diện (ghép sau tên gốc)',
|
|
27860
|
+
kind: 'string',
|
|
27861
|
+
validators: {
|
|
27862
|
+
required: true,
|
|
27863
|
+
minLength: 3,
|
|
27864
|
+
maxLength: 255
|
|
27865
|
+
},
|
|
27866
|
+
disabled: true
|
|
27867
|
+
},
|
|
27868
|
+
{
|
|
27869
|
+
key: 'TREE_ID',
|
|
27870
|
+
label: 'Cây tổ chức',
|
|
27871
|
+
kind: 'treeId',
|
|
27872
|
+
defaultValue: true,
|
|
27873
|
+
validators: {
|
|
27874
|
+
required: true
|
|
27875
|
+
}
|
|
27876
|
+
},
|
|
27877
|
+
{
|
|
27878
|
+
key: 'IS_ROOT',
|
|
27879
|
+
label: 'Là đơn vị gốc',
|
|
27880
|
+
kind: 'boolean',
|
|
27881
|
+
defaultValue: false,
|
|
27882
|
+
validators: {
|
|
27883
|
+
required: true
|
|
27884
|
+
}
|
|
27885
|
+
},
|
|
27886
|
+
{
|
|
27887
|
+
key: 'AVAILABLE_UTC',
|
|
27888
|
+
label: 'Khả dụng từ',
|
|
27889
|
+
kind: 'date',
|
|
27890
|
+
validators: {
|
|
27891
|
+
required: true
|
|
27892
|
+
}
|
|
27893
|
+
},
|
|
27894
|
+
{
|
|
27895
|
+
key: 'TIMEZONE_ID',
|
|
27896
|
+
label: 'Múi giờ',
|
|
27897
|
+
kind: 'timezoneId',
|
|
27898
|
+
defaultValue: 'Asia/Saigon',
|
|
27899
|
+
validators: {
|
|
27900
|
+
required: true
|
|
27901
|
+
},
|
|
27902
|
+
errorMessages: {
|
|
27903
|
+
required: 'Phải xác định múi giờ nghiệp vụ'
|
|
27904
|
+
},
|
|
27905
|
+
row: 2,
|
|
27906
|
+
flexSize: 4
|
|
27907
|
+
}
|
|
27908
|
+
],
|
|
27909
|
+
};
|
|
27910
|
+
|
|
27911
|
+
var EnumRCodeForward;
|
|
27912
|
+
(function (EnumRCodeForward) {
|
|
27913
|
+
EnumRCodeForward["O_IS_PART_OF_O"] = "O_IS_PART_OF_O";
|
|
27914
|
+
EnumRCodeForward["S_BELONGS_TO_O"] = "S_BELONGS_TO_O";
|
|
27915
|
+
EnumRCodeForward["P_OCCUPIES_S"] = "P_OCCUPIES_S";
|
|
27916
|
+
EnumRCodeForward["S_WORKS_UNDER_S"] = "S_WORKS_UNDER_S";
|
|
27917
|
+
EnumRCodeForward["S_REPORTS_TO_S"] = "S_REPORTS_TO_S";
|
|
27918
|
+
})(EnumRCodeForward || (EnumRCodeForward = {}));
|
|
27919
|
+
var EnumRCodeOneBackward;
|
|
27920
|
+
(function (EnumRCodeOneBackward) {
|
|
27921
|
+
EnumRCodeOneBackward["O_HAS_PART_O"] = "O_HAS_PART_O";
|
|
27922
|
+
EnumRCodeOneBackward["O_HAS_SEAT_S"] = "O_HAS_SEAT_S";
|
|
27923
|
+
EnumRCodeOneBackward["S_IS_OCCUPIED_BY_P"] = "S_IS_OCCUPIED_BY_P";
|
|
27924
|
+
EnumRCodeOneBackward["S_MANAGES_S"] = "S_MANAGES_S";
|
|
27925
|
+
EnumRCodeOneBackward["S_REPORTED_BY_S"] = "S_REPORTED_BY_S";
|
|
27926
|
+
})(EnumRCodeOneBackward || (EnumRCodeOneBackward = {}));
|
|
27927
|
+
const RCODE_FORWARD_VALUES = Object.values(EnumRCodeForward);
|
|
27928
|
+
|
|
27929
|
+
const LINK_O_O = {
|
|
27930
|
+
actionCode: EnumActionCode.LINK_O_O,
|
|
27931
|
+
label: 'Thiết lập quan hệ tổ chức',
|
|
27932
|
+
description: 'Thiết lập quan hệ hiệu lực giữa hai tổ chức.',
|
|
27933
|
+
category: 'Organization',
|
|
27934
|
+
quickEmoji: '🔗🏢',
|
|
27935
|
+
inputs: [
|
|
27936
|
+
{
|
|
27937
|
+
key: 'VF_UTC',
|
|
27938
|
+
label: 'Hiệu lực từ',
|
|
27939
|
+
kind: 'date',
|
|
27940
|
+
validators: { required: true },
|
|
27941
|
+
errorMessages: {
|
|
27942
|
+
required: 'Phải xác định thời điểm bắt đầu hiệu lực'
|
|
27943
|
+
},
|
|
27944
|
+
hint: 'Thời điểm được hiểu theo múi giờ nghiệp vụ bên dưới',
|
|
27945
|
+
row: 1,
|
|
27946
|
+
flexSize: 4
|
|
27947
|
+
},
|
|
27948
|
+
{
|
|
27949
|
+
key: 'A_ID', label: 'Tổ chức con', kind: 'orgGardenReference', validators: {
|
|
27950
|
+
required: true
|
|
27951
|
+
},
|
|
27952
|
+
row: 1,
|
|
27953
|
+
flexSize: 4
|
|
27954
|
+
},
|
|
27955
|
+
{
|
|
27956
|
+
key: 'R_CODE', label: 'Mã quan hệ', kind: 'rCode', defaultValue: EnumRCodeForward.O_IS_PART_OF_O, hidden: true
|
|
27957
|
+
},
|
|
27958
|
+
{
|
|
27959
|
+
key: 'B_ID', label: 'Tổ chức cha', kind: 'orgGardenReference', validators: {
|
|
27960
|
+
required: true
|
|
27961
|
+
},
|
|
27962
|
+
row: 1,
|
|
27963
|
+
flexSize: 4
|
|
27964
|
+
},
|
|
27965
|
+
{
|
|
27966
|
+
key: 'VT_UTC',
|
|
27967
|
+
label: 'Hiệu lực đến',
|
|
27968
|
+
kind: 'date',
|
|
27969
|
+
defaultValue: new Date(9999, 11, 31),
|
|
27970
|
+
row: 2,
|
|
27971
|
+
flexSize: 4
|
|
27972
|
+
},
|
|
27973
|
+
{
|
|
27974
|
+
key: 'TIMEZONE_ID',
|
|
27975
|
+
label: 'Múi giờ',
|
|
27976
|
+
kind: 'timezoneId',
|
|
27977
|
+
defaultValue: 'Asia/Saigon',
|
|
27978
|
+
validators: {
|
|
27979
|
+
required: true
|
|
27980
|
+
},
|
|
27981
|
+
errorMessages: {
|
|
27982
|
+
required: 'Phải xác định múi giờ nghiệp vụ'
|
|
27983
|
+
},
|
|
27984
|
+
row: 2,
|
|
27985
|
+
flexSize: 4
|
|
27986
|
+
}
|
|
27987
|
+
],
|
|
27988
|
+
};
|
|
27989
|
+
|
|
27990
|
+
const SHORTEN_O_O = {
|
|
27991
|
+
actionCode: EnumActionCode.SHORTEN_O_O,
|
|
27992
|
+
label: 'Rút ngắn hiệu lực quan hệ tổ chức',
|
|
27993
|
+
description: 'Rút ngắn hiệu lực quan hệ tổ chức.',
|
|
27994
|
+
category: 'Organization',
|
|
27995
|
+
quickEmoji: '✂️🏢',
|
|
27996
|
+
inputs: [
|
|
27997
|
+
{
|
|
27998
|
+
key: 'VF_UTC',
|
|
27999
|
+
label: 'Hiệu lực từ',
|
|
28000
|
+
kind: 'date',
|
|
28001
|
+
validators: { required: true },
|
|
28002
|
+
errorMessages: {
|
|
28003
|
+
required: 'Phải xác định thời điểm bắt đầu hiệu lực'
|
|
28004
|
+
}
|
|
28005
|
+
},
|
|
28006
|
+
{
|
|
28007
|
+
key: 'A_ID', label: 'Tổ chức con', kind: 'reference', validators: {
|
|
28008
|
+
required: true
|
|
28009
|
+
}
|
|
28010
|
+
},
|
|
28011
|
+
{
|
|
28012
|
+
key: 'R_CODE', label: 'Mã quan hệ', kind: 'rCode', defaultValue: EnumRCodeForward.O_IS_PART_OF_O, hidden: true
|
|
28013
|
+
},
|
|
28014
|
+
{
|
|
28015
|
+
key: 'B_ID', label: 'Tổ chức cha', kind: 'reference', validators: {
|
|
28016
|
+
required: true
|
|
28017
|
+
}
|
|
28018
|
+
},
|
|
28019
|
+
{
|
|
28020
|
+
key: 'VT_UTC',
|
|
28021
|
+
label: 'Hiệu lực đến',
|
|
28022
|
+
kind: 'date',
|
|
28023
|
+
defaultValue: new Date(9999, 11, 31)
|
|
28024
|
+
},
|
|
28025
|
+
{
|
|
28026
|
+
key: 'TIMEZONE_ID',
|
|
28027
|
+
label: 'Múi giờ',
|
|
28028
|
+
kind: 'timezoneId',
|
|
28029
|
+
defaultValue: 'Asia/Saigon',
|
|
28030
|
+
validators: {
|
|
28031
|
+
required: true
|
|
28032
|
+
},
|
|
28033
|
+
errorMessages: {
|
|
28034
|
+
required: 'Phải xác định múi giờ nghiệp vụ'
|
|
28035
|
+
}
|
|
28036
|
+
}
|
|
28037
|
+
],
|
|
28038
|
+
};
|
|
28039
|
+
|
|
28040
|
+
const CREATE_S = {
|
|
28041
|
+
actionCode: EnumActionCode.CREATE_S,
|
|
28042
|
+
label: 'Tạo ghế',
|
|
28043
|
+
description: 'Tạo một ghế (seat) mới trong tổ chức.',
|
|
28044
|
+
category: 'Seat',
|
|
28045
|
+
quickEmoji: '🪑',
|
|
28046
|
+
inputs: [
|
|
28047
|
+
{
|
|
28048
|
+
key: 'CODE', label: 'Mã ghế', kind: 'string', validators: {
|
|
28049
|
+
required: true
|
|
28050
|
+
}
|
|
28051
|
+
},
|
|
28052
|
+
],
|
|
28053
|
+
};
|
|
28054
|
+
|
|
28055
|
+
const LINK_S_O = {
|
|
28056
|
+
actionCode: EnumActionCode.LINK_S_O,
|
|
28057
|
+
label: 'Gắn ghế vào tổ chức',
|
|
28058
|
+
description: 'Gắn một ghế vào một tổ chức.',
|
|
28059
|
+
category: 'Seat',
|
|
28060
|
+
quickEmoji: '📎🪑🏢',
|
|
28061
|
+
inputs: [
|
|
28062
|
+
{
|
|
28063
|
+
key: 'A_ID', label: 'Ghế', kind: 'reference', validators: {
|
|
28064
|
+
required: true
|
|
28065
|
+
}
|
|
28066
|
+
},
|
|
28067
|
+
{
|
|
28068
|
+
key: 'R_CODE', label: 'Mã quan hệ', kind: 'rCode', defaultValue: EnumRCodeForward.S_BELONGS_TO_O, hidden: true
|
|
28069
|
+
},
|
|
28070
|
+
{
|
|
28071
|
+
key: 'B_ID', label: 'Tổ chức', kind: 'reference', validators: {
|
|
28072
|
+
required: true
|
|
28073
|
+
}
|
|
28074
|
+
},
|
|
28075
|
+
],
|
|
28076
|
+
};
|
|
28077
|
+
|
|
28078
|
+
const SHORTEN_S_O = {
|
|
28079
|
+
actionCode: EnumActionCode.SHORTEN_S_O,
|
|
28080
|
+
label: 'Rút ngắn hiệu lực ghế–tổ chức',
|
|
28081
|
+
description: 'Rút ngắn hiệu lực ghế–tổ chức.',
|
|
28082
|
+
category: 'Seat',
|
|
28083
|
+
quickEmoji: '✂️🪑🏢',
|
|
28084
|
+
inputs: [
|
|
28085
|
+
{
|
|
28086
|
+
key: 'A_ID', label: 'Ghế', kind: 'reference', validators: {
|
|
28087
|
+
required: true
|
|
28088
|
+
}
|
|
28089
|
+
},
|
|
28090
|
+
{
|
|
28091
|
+
key: 'R_CODE', label: 'Mã quan hệ', kind: 'rCode', defaultValue: EnumRCodeForward.S_BELONGS_TO_O, hidden: true
|
|
28092
|
+
},
|
|
28093
|
+
{
|
|
28094
|
+
key: 'B_ID', label: 'Tổ chức', kind: 'reference', validators: {
|
|
28095
|
+
required: true
|
|
28096
|
+
}
|
|
28097
|
+
},
|
|
28098
|
+
],
|
|
28099
|
+
};
|
|
28100
|
+
|
|
28101
|
+
const LINK_S_S = {
|
|
28102
|
+
actionCode: EnumActionCode.LINK_S_S,
|
|
28103
|
+
label: 'Mở hiệu lực tuyến quyền lực',
|
|
28104
|
+
description: 'Mở hiệu lực điều phối giữa hai ghế.',
|
|
28105
|
+
category: 'PowerLine',
|
|
28106
|
+
quickEmoji: '🧭🪑➡️🪑',
|
|
28107
|
+
inputs: [
|
|
28108
|
+
{
|
|
28109
|
+
key: 'A_ID', label: 'Ghế nguồn', kind: 'reference', validators: {
|
|
28110
|
+
required: true
|
|
28111
|
+
}
|
|
28112
|
+
},
|
|
28113
|
+
{
|
|
28114
|
+
key: 'R_CODE', label: 'Mã quan hệ', kind: 'rCode', defaultValue: EnumRCodeForward.S_WORKS_UNDER_S, hidden: true
|
|
28115
|
+
},
|
|
28116
|
+
{
|
|
28117
|
+
key: 'B_ID', label: 'Ghế đích', kind: 'reference', validators: {
|
|
28118
|
+
required: true
|
|
28119
|
+
}
|
|
28120
|
+
},
|
|
28121
|
+
],
|
|
28122
|
+
};
|
|
28123
|
+
|
|
28124
|
+
const SHORTEN_S_S = {
|
|
28125
|
+
actionCode: EnumActionCode.SHORTEN_S_S,
|
|
28126
|
+
label: 'Rút ngắn hiệu lực tuyến quyền lực',
|
|
28127
|
+
description: 'Rút ngắn hiệu lực tuyến quyền lực giữa hai ghế.',
|
|
28128
|
+
category: 'PowerLine',
|
|
28129
|
+
quickEmoji: '⛔🧭🪑➡️🪑',
|
|
28130
|
+
inputs: [
|
|
28131
|
+
{
|
|
28132
|
+
key: 'A_ID', label: 'Ghế nguồn', kind: 'reference', validators: {
|
|
28133
|
+
required: true
|
|
28134
|
+
}
|
|
28135
|
+
},
|
|
28136
|
+
{
|
|
28137
|
+
key: 'R_CODE', label: 'Mã quan hệ', kind: 'rCode', defaultValue: EnumRCodeForward.S_WORKS_UNDER_S, hidden: true
|
|
28138
|
+
},
|
|
28139
|
+
{
|
|
28140
|
+
key: 'B_ID', label: 'Ghế đích', kind: 'reference', validators: {
|
|
28141
|
+
required: true
|
|
28142
|
+
}
|
|
28143
|
+
}
|
|
28144
|
+
],
|
|
28145
|
+
};
|
|
28146
|
+
|
|
28147
|
+
const LINK_P_S_INTERNAL = {
|
|
28148
|
+
actionCode: EnumActionCode.LINK_P_S_INTERNAL,
|
|
28149
|
+
label: 'Gán người vào ghế (quyết định nội bộ)',
|
|
28150
|
+
description: 'OM chủ động gán người ngoài HR vào ghế trong ngành dọc.',
|
|
28151
|
+
category: 'Assignment',
|
|
28152
|
+
quickEmoji: '👤➡️🪑',
|
|
28153
|
+
inputs: [
|
|
28154
|
+
{
|
|
28155
|
+
key: 'A_ID', label: 'Người', kind: 'reference', validators: {
|
|
28156
|
+
required: true
|
|
28157
|
+
}
|
|
28158
|
+
},
|
|
28159
|
+
{
|
|
28160
|
+
key: 'R_CODE', label: 'Mã quan hệ', kind: 'rCode', defaultValue: EnumRCodeForward.P_OCCUPIES_S, hidden: true
|
|
28161
|
+
},
|
|
28162
|
+
{
|
|
28163
|
+
key: 'ROLE', label: 'Vai trò', kind: 'role'
|
|
28164
|
+
},
|
|
28165
|
+
{
|
|
28166
|
+
key: 'B_ID', label: 'Ghế', kind: 'reference', validators: {
|
|
28167
|
+
required: true
|
|
28168
|
+
}
|
|
28169
|
+
},
|
|
28170
|
+
],
|
|
28171
|
+
};
|
|
28172
|
+
|
|
28173
|
+
const SET_O_ATTR = {
|
|
28174
|
+
actionCode: EnumActionCode.SET_O_ATTR,
|
|
28175
|
+
label: 'Ghi thuộc tính tổ chức (có hiệu lực)',
|
|
28176
|
+
description: 'Ghi diễn giải / thuộc tính cho tổ chức (có hiệu lực).',
|
|
28177
|
+
category: 'Attribute',
|
|
28178
|
+
quickEmoji: '→ 📝🏢',
|
|
28179
|
+
inputs: [
|
|
28180
|
+
{
|
|
28181
|
+
key: 'ID', label: 'Tổ chức', kind: 'reference', validators: {
|
|
28182
|
+
required: true
|
|
28183
|
+
}
|
|
28184
|
+
},
|
|
28185
|
+
{
|
|
28186
|
+
key: 'ATTRIBUTE_NAME', label: 'Thuộc tính', kind: 'orgAttributeName', validators: {
|
|
28187
|
+
required: true
|
|
28188
|
+
}
|
|
28189
|
+
}
|
|
28190
|
+
],
|
|
28191
|
+
};
|
|
28192
|
+
|
|
28193
|
+
const SET_S_ATTR = {
|
|
28194
|
+
actionCode: EnumActionCode.SET_S_ATTR,
|
|
28195
|
+
label: 'Ghi thuộc tính ghế',
|
|
28196
|
+
description: 'Ghi diễn giải / thuộc tính cho ghế.',
|
|
28197
|
+
category: 'Attribute',
|
|
28198
|
+
quickEmoji: '→ 📝🪑',
|
|
28199
|
+
inputs: [
|
|
28200
|
+
{
|
|
28201
|
+
key: 'A_ID', label: 'Ghế', kind: 'reference', validators: {
|
|
28202
|
+
required: true
|
|
28203
|
+
}
|
|
28204
|
+
},
|
|
28205
|
+
{
|
|
28206
|
+
key: 'ATTRIBUTE_NAME', label: 'Thuộc tính', kind: 'seatAttributeName', validators: {
|
|
28207
|
+
required: true
|
|
28208
|
+
}
|
|
28209
|
+
}
|
|
28210
|
+
],
|
|
28211
|
+
};
|
|
28212
|
+
|
|
28213
|
+
const SET_P_ATTR = {
|
|
28214
|
+
actionCode: EnumActionCode.SET_P_ATTR,
|
|
28215
|
+
label: 'Ghi thuộc tính người ngoài HR',
|
|
28216
|
+
description: 'Ghi diễn giải / thuộc tính cho người ngoài HR.',
|
|
28217
|
+
category: 'Attribute',
|
|
28218
|
+
quickEmoji: '→ 📝👤',
|
|
28219
|
+
inputs: [
|
|
28220
|
+
{
|
|
28221
|
+
key: 'ID', label: 'Người', kind: 'reference', validators: {
|
|
28222
|
+
required: true
|
|
28223
|
+
}
|
|
28224
|
+
},
|
|
28225
|
+
{
|
|
28226
|
+
key: 'ATTRIBUTE_NAME', label: 'Thuộc tính', kind: 'personAttributeName', validators: {
|
|
28227
|
+
required: true
|
|
28228
|
+
}
|
|
28229
|
+
}
|
|
28230
|
+
],
|
|
28231
|
+
};
|
|
28232
|
+
|
|
28233
|
+
const DECLARE_SNAPSHOT = {
|
|
28234
|
+
actionCode: EnumActionCode.DECLARE_SNAPSHOT,
|
|
28235
|
+
label: 'Khai báo mốc tổ chức',
|
|
28236
|
+
description: 'Khai báo mốc tổ chức phục vụ audit / snapshot.',
|
|
28237
|
+
category: 'Snapshot',
|
|
28238
|
+
quickEmoji: '→ 🕰️',
|
|
28239
|
+
inputs: [
|
|
28240
|
+
{
|
|
28241
|
+
key: 'NOTE', label: 'Ghi chú mốc', kind: 'string', validators: {
|
|
28242
|
+
required: true
|
|
28243
|
+
}
|
|
28244
|
+
},
|
|
28245
|
+
],
|
|
28246
|
+
};
|
|
28247
|
+
|
|
28248
|
+
const TEMPORAL_INTENT_INPUTS = [
|
|
28249
|
+
{
|
|
28250
|
+
key: 'VF_UTC',
|
|
28251
|
+
label: 'Hiệu lực từ',
|
|
28252
|
+
kind: 'date',
|
|
28253
|
+
validators: { required: true },
|
|
28254
|
+
errorMessages: {
|
|
28255
|
+
required: 'Phải xác định thời điểm bắt đầu hiệu lực'
|
|
28256
|
+
}
|
|
28257
|
+
},
|
|
28258
|
+
{
|
|
28259
|
+
key: 'VT_UTC',
|
|
28260
|
+
label: 'Hiệu lực đến',
|
|
28261
|
+
kind: 'date',
|
|
28262
|
+
defaultValue: new Date(9999, 11, 31)
|
|
28263
|
+
},
|
|
28264
|
+
{
|
|
28265
|
+
key: 'TIMEZONE_ID',
|
|
28266
|
+
label: 'Múi giờ',
|
|
28267
|
+
kind: 'timezoneId',
|
|
28268
|
+
defaultValue: 'Asia/Saigon',
|
|
28269
|
+
validators: {
|
|
28270
|
+
required: true
|
|
28271
|
+
},
|
|
28272
|
+
errorMessages: {
|
|
28273
|
+
required: 'Phải xác định múi giờ nghiệp vụ'
|
|
28274
|
+
}
|
|
28275
|
+
}
|
|
28276
|
+
];
|
|
28277
|
+
const INTENT_DESCRIPTOR_REGISTRY = [
|
|
28278
|
+
/* =========================
|
|
28279
|
+
* ORGANIZATION (O)
|
|
28280
|
+
* ========================= */
|
|
28281
|
+
CREATE_TREE,
|
|
28282
|
+
CREATE_O,
|
|
28283
|
+
LINK_O_O,
|
|
28284
|
+
SHORTEN_O_O,
|
|
28285
|
+
/* =========================
|
|
28286
|
+
* SEAT / POSITION (S)
|
|
28287
|
+
* ========================= */
|
|
28288
|
+
CREATE_S,
|
|
28289
|
+
LINK_S_O,
|
|
28290
|
+
SHORTEN_S_O,
|
|
28291
|
+
/* =========================
|
|
28292
|
+
* POWER LINE (S ↔ S)
|
|
28293
|
+
* ========================= */
|
|
28294
|
+
LINK_S_S,
|
|
28295
|
+
SHORTEN_S_S,
|
|
28296
|
+
/* =========================
|
|
28297
|
+
* PERSON ↔ SEAT (P ↔ S)
|
|
28298
|
+
* ========================= */
|
|
28299
|
+
LINK_P_S_INTERNAL,
|
|
28300
|
+
/* =========================
|
|
28301
|
+
* ATTRIBUTE
|
|
28302
|
+
* ========================= */
|
|
28303
|
+
SET_O_ATTR,
|
|
28304
|
+
SET_S_ATTR,
|
|
28305
|
+
SET_P_ATTR,
|
|
28306
|
+
/* =========================
|
|
28307
|
+
* SNAPSHOT / MILESTONE
|
|
28308
|
+
* ========================= */
|
|
28309
|
+
DECLARE_SNAPSHOT
|
|
28310
|
+
];
|
|
28311
|
+
|
|
28312
|
+
class CoreTimezoneComponent extends CoreFormControlBaseComponent {
|
|
28313
|
+
constructor() {
|
|
28314
|
+
super(...arguments);
|
|
28315
|
+
this.cdts = inject(CoreDatetimeService);
|
|
28316
|
+
this.dropdownOptions$ = new BehaviorSubject([]);
|
|
28317
|
+
this.value = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
28318
|
+
}
|
|
28319
|
+
ngAfterViewInit() {
|
|
28320
|
+
setTimeout(() => {
|
|
28321
|
+
this.dropdownOptions$.next(this.cdts.$timeZones().map(x => ({
|
|
28322
|
+
value: x, text: x
|
|
28323
|
+
})));
|
|
28324
|
+
});
|
|
28325
|
+
}
|
|
28326
|
+
onValueChange(e) {
|
|
28327
|
+
this.markAsTouched();
|
|
28328
|
+
this.onChange(e);
|
|
28329
|
+
}
|
|
28330
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreTimezoneComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
28331
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: CoreTimezoneComponent, isStandalone: true, selector: "core-timezone", providers: [
|
|
28332
|
+
{
|
|
28333
|
+
provide: NG_VALUE_ACCESSOR,
|
|
28334
|
+
multi: true,
|
|
28335
|
+
useExisting: forwardRef(() => CoreTimezoneComponent),
|
|
28336
|
+
},
|
|
28337
|
+
], usesInheritance: true, ngImport: i0, template: "<div class=\"core-timezone-container\">\r\n <core-dropdown \r\n [options$]=\"dropdownOptions$\"\r\n [warningDisable]=\"true\"\r\n [(ngModel)]=\"value\"\r\n (ngModelOnchange)=\"onValueChange($event)\"\r\n />\r\n</div>\r\n", styles: [""], dependencies: [{ 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: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
28338
|
+
}
|
|
28339
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreTimezoneComponent, decorators: [{
|
|
28340
|
+
type: Component,
|
|
28341
|
+
args: [{ selector: 'core-timezone', imports: [
|
|
28342
|
+
CoreDropdownComponent,
|
|
28343
|
+
FormsModule,
|
|
28344
|
+
], providers: [
|
|
28345
|
+
{
|
|
28346
|
+
provide: NG_VALUE_ACCESSOR,
|
|
28347
|
+
multi: true,
|
|
28348
|
+
useExisting: forwardRef(() => CoreTimezoneComponent),
|
|
28349
|
+
},
|
|
28350
|
+
], template: "<div class=\"core-timezone-container\">\r\n <core-dropdown \r\n [options$]=\"dropdownOptions$\"\r\n [warningDisable]=\"true\"\r\n [(ngModel)]=\"value\"\r\n (ngModelOnchange)=\"onValueChange($event)\"\r\n />\r\n</div>\r\n" }]
|
|
28351
|
+
}] });
|
|
28352
|
+
|
|
28353
|
+
class CoreTreeReferenceComponent extends CoreFormControlBaseComponent {
|
|
28354
|
+
constructor() {
|
|
28355
|
+
super(...arguments);
|
|
28356
|
+
this.$data = input.required();
|
|
28357
|
+
this.$itemTemplateRef = input();
|
|
28358
|
+
this.selected = output();
|
|
28359
|
+
}
|
|
28360
|
+
onSelect(node) {
|
|
28361
|
+
this.selected.emit(node);
|
|
28362
|
+
this.value = node.id;
|
|
28363
|
+
console.log("onSelect", this.value);
|
|
28364
|
+
}
|
|
28365
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreTreeReferenceComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
28366
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreTreeReferenceComponent, isStandalone: true, selector: "core-tree-reference", inputs: { $data: { classPropertyName: "$data", publicName: "$data", isSignal: true, isRequired: true, transformFunction: null }, $itemTemplateRef: { classPropertyName: "$itemTemplateRef", publicName: "$itemTemplateRef", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected" }, providers: [
|
|
28367
|
+
{
|
|
28368
|
+
provide: NG_VALUE_ACCESSOR,
|
|
28369
|
+
multi: true,
|
|
28370
|
+
useExisting: forwardRef(() => CoreTreeReferenceComponent),
|
|
28371
|
+
},
|
|
28372
|
+
], usesInheritance: true, ngImport: i0, template: "<ul class=\"core-tree-root\">\r\n @for (node of $data(); track node.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"nodeWrapperTpl\"\r\n [ngTemplateOutletContext]=\"{ node: node, level: 0 }\">\r\n </ng-container>\r\n }\r\n</ul>\r\n\r\n<ng-template #nodeWrapperTpl let-node=\"node\" let-level=\"level\">\r\n <li\r\n class=\"core-tree-node\"\r\n [style.paddingLeft.px]=\"level * 16\"\r\n (click)=\"onSelect(node)\"\r\n >\r\n <!-- CH\u1EC8 render n\u1ED9i dung -->\r\n <ng-container\r\n [ngTemplateOutlet]=\"$itemTemplateRef() ?? defaultItemTpl\"\r\n [ngTemplateOutletContext]=\"{ node: node, level: level }\">\r\n </ng-container>\r\n </li>\r\n\r\n @if (node.children?.length) {\r\n @for (child of node.children; track child.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"nodeWrapperTpl\"\r\n [ngTemplateOutletContext]=\"{ node: child, level: level + 1 }\">\r\n </ng-container>\r\n }\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultItemTpl let-node=\"node\">\r\n <span class=\"node-label\">{{ node.label }}</span>\r\n</ng-template>\r\n", styles: [".core-tree-root{list-style:none;margin:0;padding:0}.core-tree-node{display:flex;align-items:center;gap:8px;padding:4px 8px;cursor:pointer;border-radius:4px}.core-tree-node:hover{background-color:#f3f5f7}.node-label{font-size:14px;color:#1f2937}.node-hint{font-size:11px;color:#6b7280;opacity:.7}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
|
28373
|
+
}
|
|
28374
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreTreeReferenceComponent, decorators: [{
|
|
28375
|
+
type: Component,
|
|
28376
|
+
args: [{ selector: 'core-tree-reference', imports: [
|
|
28377
|
+
NgTemplateOutlet
|
|
28378
|
+
], providers: [
|
|
28379
|
+
{
|
|
28380
|
+
provide: NG_VALUE_ACCESSOR,
|
|
28381
|
+
multi: true,
|
|
28382
|
+
useExisting: forwardRef(() => CoreTreeReferenceComponent),
|
|
28383
|
+
},
|
|
28384
|
+
], template: "<ul class=\"core-tree-root\">\r\n @for (node of $data(); track node.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"nodeWrapperTpl\"\r\n [ngTemplateOutletContext]=\"{ node: node, level: 0 }\">\r\n </ng-container>\r\n }\r\n</ul>\r\n\r\n<ng-template #nodeWrapperTpl let-node=\"node\" let-level=\"level\">\r\n <li\r\n class=\"core-tree-node\"\r\n [style.paddingLeft.px]=\"level * 16\"\r\n (click)=\"onSelect(node)\"\r\n >\r\n <!-- CH\u1EC8 render n\u1ED9i dung -->\r\n <ng-container\r\n [ngTemplateOutlet]=\"$itemTemplateRef() ?? defaultItemTpl\"\r\n [ngTemplateOutletContext]=\"{ node: node, level: level }\">\r\n </ng-container>\r\n </li>\r\n\r\n @if (node.children?.length) {\r\n @for (child of node.children; track child.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"nodeWrapperTpl\"\r\n [ngTemplateOutletContext]=\"{ node: child, level: level + 1 }\">\r\n </ng-container>\r\n }\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultItemTpl let-node=\"node\">\r\n <span class=\"node-label\">{{ node.label }}</span>\r\n</ng-template>\r\n", styles: [".core-tree-root{list-style:none;margin:0;padding:0}.core-tree-node{display:flex;align-items:center;gap:8px;padding:4px 8px;cursor:pointer;border-radius:4px}.core-tree-node:hover{background-color:#f3f5f7}.node-label{font-size:14px;color:#1f2937}.node-hint{font-size:11px;color:#6b7280;opacity:.7}\n"] }]
|
|
28385
|
+
}] });
|
|
28386
|
+
|
|
28387
|
+
// Mock data for CoreTreeReferenceComponent
|
|
28388
|
+
// Demonstrates:
|
|
28389
|
+
// - Multiple root trees
|
|
28390
|
+
// - Horizontal (HR) vs Vertical (Project/Committee) structures
|
|
28391
|
+
// - Core component neutrality (no domain assumption)
|
|
28392
|
+
const MOCK_DATA = [
|
|
28393
|
+
{
|
|
28394
|
+
id: '63c5046d-1c44-470e-a5b2-ee86249ae4a2',
|
|
28395
|
+
label: 'Headquarters',
|
|
28396
|
+
meta: {
|
|
28397
|
+
isRoot: true,
|
|
28398
|
+
isHr: true,
|
|
28399
|
+
hint: 'Green (Cây ngành ngang duy nhất)'
|
|
28400
|
+
},
|
|
28401
|
+
children: [
|
|
28402
|
+
{
|
|
28403
|
+
id: '0051c3a0-c481-47a4-b356-057ff5f333f1',
|
|
28404
|
+
label: 'R&D Division',
|
|
28405
|
+
children: [
|
|
28406
|
+
{
|
|
28407
|
+
id: 'ae0043c6-f304-48e1-8e74-4a4b727ab2ef',
|
|
28408
|
+
label: 'Backend Team',
|
|
28409
|
+
},
|
|
28410
|
+
{
|
|
28411
|
+
id: 'abef3813-d928-4cbc-93de-11059fa1f50b',
|
|
28412
|
+
label: 'Frontend Team',
|
|
28413
|
+
},
|
|
28414
|
+
{
|
|
28415
|
+
id: '0d6bb481-23f7-4bdb-b952-b9a9ba4083c6',
|
|
28416
|
+
label: 'QA Team',
|
|
28417
|
+
}
|
|
28418
|
+
]
|
|
28419
|
+
},
|
|
28420
|
+
{
|
|
28421
|
+
id: '8c999b2f-9fa6-4212-b904-3d1bc95c3d34',
|
|
28422
|
+
label: 'Human Resources',
|
|
28423
|
+
children: [
|
|
28424
|
+
{
|
|
28425
|
+
id: '6143c4f7-3f4e-4e35-bcbb-d5529a66d3f0',
|
|
28426
|
+
label: 'HR Administration',
|
|
28427
|
+
},
|
|
28428
|
+
{
|
|
28429
|
+
id: '8847a41e-4f78-456e-816f-bd41076c771b',
|
|
28430
|
+
label: 'Payroll & Benefits',
|
|
28431
|
+
}
|
|
28432
|
+
]
|
|
28433
|
+
},
|
|
28434
|
+
{
|
|
28435
|
+
id: '2c1e287a-b390-4ade-be37-c7121521456d',
|
|
28436
|
+
label: 'Sales Division',
|
|
28437
|
+
children: [
|
|
28438
|
+
{
|
|
28439
|
+
id: '1cce1776-1ebf-482f-bb34-39e9e488911e',
|
|
28440
|
+
label: 'Domestic Sales',
|
|
28441
|
+
},
|
|
28442
|
+
{
|
|
28443
|
+
id: '8aaa7acf-31ab-437f-bd57-e1e0454e337e',
|
|
28444
|
+
label: 'Global Sales',
|
|
28445
|
+
children: [
|
|
28446
|
+
{
|
|
28447
|
+
id: '94935ddb-bb47-4f1e-8ce6-7baabfc9fd8f',
|
|
28448
|
+
label: 'APAC Region',
|
|
28449
|
+
},
|
|
28450
|
+
{
|
|
28451
|
+
id: '44b4c0c9-cde8-4a5d-8f4a-b8041e01d511',
|
|
28452
|
+
label: 'EMEA Region',
|
|
28453
|
+
}
|
|
28454
|
+
]
|
|
28455
|
+
}
|
|
28456
|
+
]
|
|
28457
|
+
}
|
|
28458
|
+
]
|
|
28459
|
+
},
|
|
28460
|
+
{
|
|
28461
|
+
id: 'f9e929f3-dadd-49f1-aa80-ac022d37dcbc',
|
|
28462
|
+
label: 'Project X',
|
|
28463
|
+
meta: {
|
|
28464
|
+
isRoot: true,
|
|
28465
|
+
isHr: false,
|
|
28466
|
+
hint: 'Red (Cây ngành dọc)'
|
|
28467
|
+
},
|
|
28468
|
+
children: [
|
|
28469
|
+
{
|
|
28470
|
+
id: '7a0a3f8d-ef7c-4e8f-9b5b-38fcd6a9c021',
|
|
28471
|
+
label: 'Steering Committee',
|
|
28472
|
+
},
|
|
28473
|
+
{
|
|
28474
|
+
id: '9b6b1b2e-0df0-4f6e-9e7c-8b8f6a7c0d11',
|
|
28475
|
+
label: 'Execution Team',
|
|
28476
|
+
children: [
|
|
28477
|
+
{
|
|
28478
|
+
id: 'b1c3e7a9-5f0a-4e7d-9c8a-6f4a2b9d0e31',
|
|
28479
|
+
label: 'Technical Lead',
|
|
28480
|
+
},
|
|
28481
|
+
{
|
|
28482
|
+
id: 'c4f9a2e1-7b6d-4a1e-9c0f-3a2b8d9e7f61',
|
|
28483
|
+
label: 'Business Coordinator',
|
|
28484
|
+
}
|
|
28485
|
+
]
|
|
28486
|
+
}
|
|
28487
|
+
]
|
|
28488
|
+
},
|
|
28489
|
+
{
|
|
28490
|
+
id: 'bd8c8633-9302-4510-ad7a-2eebc6e6a143',
|
|
28491
|
+
label: 'Committee Y',
|
|
28492
|
+
meta: {
|
|
28493
|
+
isRoot: true,
|
|
28494
|
+
isHr: false,
|
|
28495
|
+
hint: 'Red (Cây ngành dọc)'
|
|
28496
|
+
},
|
|
28497
|
+
children: [
|
|
28498
|
+
{
|
|
28499
|
+
id: 'a0c2f8d4-4e9b-4b6e-9f4d-5e6a1b7c9d21',
|
|
28500
|
+
label: 'Chairman Office',
|
|
28501
|
+
},
|
|
28502
|
+
{
|
|
28503
|
+
id: 'd9e8f7c6-5b4a-4e3d-9c2b-1a0f8e7d6c51',
|
|
28504
|
+
label: 'Advisory Panel',
|
|
28505
|
+
children: [
|
|
28506
|
+
{
|
|
28507
|
+
id: 'e3a7d9c8-4b5f-4a6e-9d0c-2f1b8e7a6c91',
|
|
28508
|
+
label: 'Legal Advisor',
|
|
28509
|
+
},
|
|
28510
|
+
{
|
|
28511
|
+
id: 'f2b1a0c9-8e7d-4f6a-9b5c-3d4e6a7c8b11',
|
|
28512
|
+
label: 'Financial Advisor',
|
|
28513
|
+
}
|
|
28514
|
+
]
|
|
28515
|
+
}
|
|
28516
|
+
]
|
|
28517
|
+
}
|
|
28518
|
+
];
|
|
28519
|
+
|
|
28520
|
+
class IntentComposerComponent extends BaseComponent {
|
|
28521
|
+
constructor(mls) {
|
|
28522
|
+
super(mls);
|
|
28523
|
+
this.mls = mls;
|
|
28524
|
+
this.MOCK_DATA = MOCK_DATA;
|
|
28525
|
+
// ===== Inputs / Outputs =====
|
|
28526
|
+
this.$descriptor = input.required();
|
|
28527
|
+
this.$intentComposed = output();
|
|
28528
|
+
this.$cancelled = output();
|
|
28529
|
+
// ===== Local UI-only state =====
|
|
28530
|
+
this.$draftInput = signal({});
|
|
28531
|
+
this.$errors = signal([]);
|
|
28532
|
+
this.$checkError = signal(true);
|
|
28533
|
+
this.$defaultOrgItemTpl = viewChild('defaultOrgItemTpl');
|
|
28534
|
+
// ===== Services =====
|
|
28535
|
+
this.fb = inject(FormBuilder);
|
|
28536
|
+
this.as = inject(AlertService);
|
|
28537
|
+
this.form = this.fb.group({});
|
|
28538
|
+
this.$rowableInputs = computed(() => {
|
|
28539
|
+
const inputs = this.$descriptor().inputs ?? [];
|
|
28540
|
+
// Map<row, inputs[]>
|
|
28541
|
+
const rowMap = new Map();
|
|
28542
|
+
for (const input of inputs) {
|
|
28543
|
+
const row = input.row ?? 0;
|
|
28544
|
+
if (!rowMap.has(row)) {
|
|
28545
|
+
rowMap.set(row, []);
|
|
28546
|
+
}
|
|
28547
|
+
rowMap.get(row).push(input);
|
|
28548
|
+
}
|
|
28549
|
+
// Preserve row order (ascending)
|
|
28550
|
+
return Array
|
|
28551
|
+
.from(rowMap.entries())
|
|
28552
|
+
.sort(([a], [b]) => a - b)
|
|
28553
|
+
.map(([row, inputs]) => ({
|
|
28554
|
+
row,
|
|
28555
|
+
inputs
|
|
28556
|
+
}));
|
|
28557
|
+
});
|
|
28558
|
+
this.rCodeOptions$ = new BehaviorSubject(RCODE_FORWARD_VALUES.map(x => ({ value: x, text: x })));
|
|
28559
|
+
this.roleOptions$ = new BehaviorSubject([
|
|
28560
|
+
{
|
|
28561
|
+
value: 'MASTER',
|
|
28562
|
+
text: 'MASTER',
|
|
28563
|
+
},
|
|
28564
|
+
{
|
|
28565
|
+
value: 'CONCURRENT',
|
|
28566
|
+
text: 'CONCURRENT',
|
|
28567
|
+
},
|
|
28568
|
+
{
|
|
28569
|
+
value: 'INTERIM',
|
|
28570
|
+
text: 'INTERIM',
|
|
28571
|
+
},
|
|
28572
|
+
]);
|
|
28573
|
+
this.treeIdOptions$ = new BehaviorSubject([
|
|
28574
|
+
{
|
|
28575
|
+
value: 'bddb5729-9da1-48f7-bfe4-98ce2d71eba1',
|
|
28576
|
+
text: 'HR'
|
|
28577
|
+
},
|
|
28578
|
+
]);
|
|
28579
|
+
effect(() => {
|
|
28580
|
+
const descriptor = this.$descriptor();
|
|
28581
|
+
if (!descriptor)
|
|
28582
|
+
return;
|
|
28583
|
+
this.buildForm(descriptor);
|
|
28584
|
+
});
|
|
28585
|
+
}
|
|
28586
|
+
// ===== Methods =====
|
|
28587
|
+
buildForm(descriptor) {
|
|
28588
|
+
const controls = {};
|
|
28589
|
+
// Logical inputs
|
|
28590
|
+
for (const input of descriptor.inputs) {
|
|
28591
|
+
controls[input.key] = new FormControl(input.defaultValue ?? null, this.buildValidators(input.validators));
|
|
28592
|
+
if (input.disabled) {
|
|
28593
|
+
controls[input.key].disable();
|
|
28594
|
+
}
|
|
28595
|
+
}
|
|
28596
|
+
this.form = new FormGroup(controls);
|
|
28597
|
+
}
|
|
28598
|
+
onInputChange(key, value) {
|
|
28599
|
+
this.$draftInput.update(prev => ({
|
|
28600
|
+
...prev,
|
|
28601
|
+
[key]: value,
|
|
28602
|
+
}));
|
|
28603
|
+
}
|
|
28604
|
+
onConfirm() {
|
|
28605
|
+
this.form.markAllAsTouched();
|
|
28606
|
+
this.rebuildErrors();
|
|
28607
|
+
if (this.$errors().length > 0) {
|
|
28608
|
+
return;
|
|
28609
|
+
}
|
|
28610
|
+
this.$intentComposed.emit({
|
|
28611
|
+
actionCode: this.$descriptor().actionCode,
|
|
28612
|
+
input: this.form.getRawValue()
|
|
28613
|
+
});
|
|
28614
|
+
}
|
|
28615
|
+
onCancel() {
|
|
28616
|
+
this.$cancelled.emit();
|
|
28617
|
+
}
|
|
28618
|
+
buildValidators(schema) {
|
|
28619
|
+
if (!schema)
|
|
28620
|
+
return [];
|
|
28621
|
+
const validators = [];
|
|
28622
|
+
if (schema.required) {
|
|
28623
|
+
validators.push(Validators.required);
|
|
28624
|
+
}
|
|
28625
|
+
if (schema.minLength !== undefined) {
|
|
28626
|
+
validators.push(Validators.minLength(schema.minLength));
|
|
28627
|
+
}
|
|
28628
|
+
if (schema.maxLength !== undefined) {
|
|
28629
|
+
validators.push(Validators.maxLength(schema.maxLength));
|
|
28630
|
+
}
|
|
28631
|
+
if (schema.min !== undefined) {
|
|
28632
|
+
validators.push(Validators.min(schema.min));
|
|
28633
|
+
}
|
|
28634
|
+
if (schema.max !== undefined) {
|
|
28635
|
+
validators.push(Validators.max(schema.max));
|
|
28636
|
+
}
|
|
28637
|
+
if (schema.pattern) {
|
|
28638
|
+
validators.push(Validators.pattern(schema.pattern));
|
|
28639
|
+
}
|
|
28640
|
+
return validators;
|
|
28641
|
+
}
|
|
28642
|
+
rebuildErrors() {
|
|
28643
|
+
this.$errors.set([]);
|
|
28644
|
+
if (!this.form)
|
|
28645
|
+
return;
|
|
28646
|
+
const descriptor = this.$descriptor();
|
|
28647
|
+
if (!descriptor)
|
|
28648
|
+
return;
|
|
28649
|
+
for (const input of descriptor.inputs) {
|
|
28650
|
+
const control = this.form.get(input.key);
|
|
28651
|
+
if (!control)
|
|
28652
|
+
continue;
|
|
28653
|
+
// Chỉ hiện lỗi khi user đã "dám chạm"
|
|
28654
|
+
if (!control.touched || !control.errors)
|
|
28655
|
+
continue;
|
|
28656
|
+
for (const errorCode of Object.keys(control.errors)) {
|
|
28657
|
+
const policyMessage = input.errorMessages?.[errorCode];
|
|
28658
|
+
const fallbackMessage = this.buildFallbackErrorMessage(input, errorCode, control.errors[errorCode]);
|
|
28659
|
+
this.$errors.update(c => {
|
|
28660
|
+
c.push({
|
|
28661
|
+
fieldKey: input.key,
|
|
28662
|
+
fieldLabel: input.label,
|
|
28663
|
+
errorCode,
|
|
28664
|
+
errorMessage: policyMessage ?? fallbackMessage
|
|
28665
|
+
});
|
|
28666
|
+
return [...c];
|
|
28667
|
+
});
|
|
28668
|
+
}
|
|
28669
|
+
}
|
|
28670
|
+
}
|
|
28671
|
+
// Fallback message (phòng khi descriptor không khai báo)
|
|
28672
|
+
buildFallbackErrorMessage(input, errorCode, errorData) {
|
|
28673
|
+
switch (errorCode) {
|
|
28674
|
+
case 'required':
|
|
28675
|
+
return `${input.label} là bắt buộc`;
|
|
28676
|
+
case 'minLength':
|
|
28677
|
+
case 'minlength':
|
|
28678
|
+
return `${input.label} phải có ít nhất ${errorData.requiredLength} ký tự`;
|
|
28679
|
+
case 'maxLength':
|
|
28680
|
+
case 'maxlength':
|
|
28681
|
+
return `${input.label} không được vượt quá ${errorData.requiredLength} ký tự`;
|
|
28682
|
+
case 'min':
|
|
28683
|
+
return `${input.label} phải ≥ ${errorData.min}`;
|
|
28684
|
+
case 'max':
|
|
28685
|
+
return `${input.label} phải ≤ ${errorData.max}`;
|
|
28686
|
+
case 'pattern':
|
|
28687
|
+
return `${input.label} không đúng định dạng`;
|
|
28688
|
+
default:
|
|
28689
|
+
return `${input.label} không hợp lệ`;
|
|
28690
|
+
}
|
|
28691
|
+
}
|
|
28692
|
+
getErrorsOfField(fieldKey) {
|
|
28693
|
+
return this.$errors().filter(e => e.fieldKey === fieldKey);
|
|
28694
|
+
}
|
|
28695
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: IntentComposerComponent, deps: [{ token: MultiLanguageService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28696
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: IntentComposerComponent, isStandalone: true, selector: "intent-composer", inputs: { $descriptor: { classPropertyName: "$descriptor", publicName: "$descriptor", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { $intentComposed: "$intentComposed", $cancelled: "$cancelled" }, viewQueries: [{ propertyName: "$defaultOrgItemTpl", first: true, predicate: ["defaultOrgItemTpl"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!--\r\n IntentComposerComponent\r\n Purpose:\r\n - Collect human input for a single OM intent\r\n - Emit IntentDraft only\r\n Must NOT:\r\n - Mutate Omega\r\n - Modify IntentChain\r\n-->\r\n@if (form) {\r\n<form\r\n class=\"intent-composer-container\"\r\n [formGroup]=\"form\"\r\n (ngSubmit)=\"onConfirm()\"\r\n autocomplete=\"off\"\r\n>\r\n\r\n <!-- Header -->\r\n <h3>{{ $descriptor().label }}</h3>\r\n <p class=\"desc\">{{ $descriptor().quickEmoji }} | {{ $descriptor().description }}</p>\r\n\r\n <!-- Inputs -->\r\n <div class=\"intent-inputs\">\r\n\r\n\r\n @for (row of $rowableInputs(); track $index) {\r\n\r\n <div class=\"intent-row\">\r\n @for (input of row.inputs; track $index) {\r\n <div\r\n class=\"intent-cell\"\r\n [style.flex]=\"input.flexSize ?? 1\"\r\n [class.hidden]=\"input.hidden\"\r\n >\r\n\r\n <div class=\"intent-input\">\r\n\r\n <label [class.required]=\"input.validators?.required\">\r\n {{ input.label }}\r\n </label>\r\n\r\n @switch (input.kind) {\r\n\r\n @case ('string') {\r\n <input\r\n class=\"form-control\"\r\n [formControlName]=\"input.key\"\r\n type=\"text\"\r\n (input)=\"onInputChange(input.key, $event.target.value)\" />\r\n }\r\n\r\n @case ('treeId') {\r\n <core-dropdown\r\n [options$]=\"treeIdOptions$\"\r\n [warningDisable]=\"true\"\r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('boolean') {\r\n <core-ios-switcher [formControlName]=\"input.key\" [showOnOffText]=\"false\" [width]=\"66\" />\r\n <!-- <input\r\n type=\"text\"\r\n (input)=\"onInputChange(input.key, $event.target.value)\" /> -->\r\n }\r\n\r\n @case ('number') {\r\n <input\r\n [formControlName]=\"input.key\"\r\n type=\"number\"\r\n (input)=\"onInputChange(input.key, $event.target.valueAsNumber)\" />\r\n }\r\n\r\n @case ('date') {\r\n <core-date-picker \r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('dropdown') {\r\n <core-date-picker \r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('timezoneId') {\r\n <core-timezone \r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('orgGardenReference') {\r\n <!-- <core-tree-reference \r\n [formControlName]=\"input.key\"\r\n [$data]=\"MOCK_DATA\"\r\n [$itemTemplateRef]=\"$defaultOrgItemTpl()\"\r\n /> -->\r\n <core-tree-reference \r\n [formControlName]=\"input.key\"\r\n [$data]=\"MOCK_DATA\"\r\n /> \r\n }\r\n\r\n @case ('rCode') {\r\n <core-dropdown\r\n [options$]=\"rCodeOptions$\"\r\n [warningDisable]=\"true\"\r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('role') {\r\n <core-dropdown\r\n [options$]=\"roleOptions$\"\r\n [warningDisable]=\"true\"\r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('reference') {\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-outline\"\r\n (click)=\"onInputChange(input.key, '__REF__')\">\r\n Ch\u1ECDn \u0111\u1ED1i t\u01B0\u1EE3ng\u2026\r\n </button>\r\n }\r\n\r\n @case ('object') {\r\n <textarea\r\n [formControlName]=\"input.key\"\r\n rows=\"3\"\r\n (input)=\"onInputChange(input.key, $event.target.value)\">\r\n </textarea>\r\n }\r\n\r\n @default {\r\n <em class=\"unsupported\">\r\n Ki\u1EC3u input ch\u01B0a \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3\r\n </em>\r\n }\r\n\r\n }\r\n\r\n <!-- START: ERROR SESSION -->\r\n @for (error of getErrorsOfField(input.key); track $index) {\r\n <div class=\"form-control-error\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n }\r\n @if (!getErrorsOfField(input.key).length && !!$checkError()) {\r\n <div> </div>\r\n }\r\n <!-- END: ERROR SESSION -->\r\n\r\n </div> \r\n\r\n </div>\r\n }\r\n </div> \r\n\r\n }\r\n\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"composer-actions\">\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-secondary\"\r\n (click)=\"onCancel()\">\r\n Quay l\u1EA1i\r\n </button>\r\n\r\n <button\r\n type=\"submit\"\r\n class=\"btn btn-primary\"\r\n >\r\n X\u00E1c nh\u1EADn\r\n </button>\r\n </div>\r\n\r\n</form>\r\n}\r\n\r\n<ng-template #defaultOrgItemTpl let-node=\"node\" let-level=\"level\">\r\n <div class=\"test-itemTemplateRef\">\r\n {{ node.label }}\r\n </div>\r\n</ng-template>", styles: [".intent-composer-container .intent-inputs .intent-row{display:flex;gap:12px}.intent-composer-container .intent-inputs .intent-row .intent-cell.hidden{display:none}.intent-composer-container .intent-inputs .intent-row .intent-input{display:flex;flex-direction:column;margin-top:15px;margin-bottom:15px}.intent-composer-container .intent-inputs .intent-row .intent-input label{color:#464646}.intent-composer-container .intent-inputs .intent-row .intent-input label.required:after{content:\"*\";color:#ff040b}.intent-composer-container .composer-actions{display:flex;justify-content:space-between}.test-itemTemplateRef{padding:15px;background-color:#6495ed;color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.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$4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CoreIosSwitcherComponent, selector: "core-ios-switcher", inputs: ["bgColor", "showOnOffText", "width", "height", "readonly"] }, { kind: "component", type: CoreDatePickerComponent, selector: "core-date-picker", inputs: ["enableTimeZoneConverter", "showPlaceholder", "popupWidth", "popupXPadding", "popupAlign", "rangeLimit", "placeholder", "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: CoreTimezoneComponent, selector: "core-timezone" }, { kind: "component", type: CoreTreeReferenceComponent, selector: "core-tree-reference", inputs: ["$data", "$itemTemplateRef"], outputs: ["selected"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
28697
|
+
}
|
|
28698
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: IntentComposerComponent, decorators: [{
|
|
28699
|
+
type: Component,
|
|
28700
|
+
args: [{ selector: 'intent-composer', imports: [
|
|
28701
|
+
ReactiveFormsModule,
|
|
28702
|
+
HtmlTooltipDirective,
|
|
28703
|
+
CoreIosSwitcherComponent,
|
|
28704
|
+
CoreDatePickerComponent,
|
|
28705
|
+
CoreDropdownComponent,
|
|
28706
|
+
CoreTimezoneComponent,
|
|
28707
|
+
CoreTreeReferenceComponent,
|
|
28708
|
+
TranslatePipe,
|
|
28709
|
+
], template: "<!--\r\n IntentComposerComponent\r\n Purpose:\r\n - Collect human input for a single OM intent\r\n - Emit IntentDraft only\r\n Must NOT:\r\n - Mutate Omega\r\n - Modify IntentChain\r\n-->\r\n@if (form) {\r\n<form\r\n class=\"intent-composer-container\"\r\n [formGroup]=\"form\"\r\n (ngSubmit)=\"onConfirm()\"\r\n autocomplete=\"off\"\r\n>\r\n\r\n <!-- Header -->\r\n <h3>{{ $descriptor().label }}</h3>\r\n <p class=\"desc\">{{ $descriptor().quickEmoji }} | {{ $descriptor().description }}</p>\r\n\r\n <!-- Inputs -->\r\n <div class=\"intent-inputs\">\r\n\r\n\r\n @for (row of $rowableInputs(); track $index) {\r\n\r\n <div class=\"intent-row\">\r\n @for (input of row.inputs; track $index) {\r\n <div\r\n class=\"intent-cell\"\r\n [style.flex]=\"input.flexSize ?? 1\"\r\n [class.hidden]=\"input.hidden\"\r\n >\r\n\r\n <div class=\"intent-input\">\r\n\r\n <label [class.required]=\"input.validators?.required\">\r\n {{ input.label }}\r\n </label>\r\n\r\n @switch (input.kind) {\r\n\r\n @case ('string') {\r\n <input\r\n class=\"form-control\"\r\n [formControlName]=\"input.key\"\r\n type=\"text\"\r\n (input)=\"onInputChange(input.key, $event.target.value)\" />\r\n }\r\n\r\n @case ('treeId') {\r\n <core-dropdown\r\n [options$]=\"treeIdOptions$\"\r\n [warningDisable]=\"true\"\r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('boolean') {\r\n <core-ios-switcher [formControlName]=\"input.key\" [showOnOffText]=\"false\" [width]=\"66\" />\r\n <!-- <input\r\n type=\"text\"\r\n (input)=\"onInputChange(input.key, $event.target.value)\" /> -->\r\n }\r\n\r\n @case ('number') {\r\n <input\r\n [formControlName]=\"input.key\"\r\n type=\"number\"\r\n (input)=\"onInputChange(input.key, $event.target.valueAsNumber)\" />\r\n }\r\n\r\n @case ('date') {\r\n <core-date-picker \r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('dropdown') {\r\n <core-date-picker \r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('timezoneId') {\r\n <core-timezone \r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('orgGardenReference') {\r\n <!-- <core-tree-reference \r\n [formControlName]=\"input.key\"\r\n [$data]=\"MOCK_DATA\"\r\n [$itemTemplateRef]=\"$defaultOrgItemTpl()\"\r\n /> -->\r\n <core-tree-reference \r\n [formControlName]=\"input.key\"\r\n [$data]=\"MOCK_DATA\"\r\n /> \r\n }\r\n\r\n @case ('rCode') {\r\n <core-dropdown\r\n [options$]=\"rCodeOptions$\"\r\n [warningDisable]=\"true\"\r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('role') {\r\n <core-dropdown\r\n [options$]=\"roleOptions$\"\r\n [warningDisable]=\"true\"\r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('reference') {\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-outline\"\r\n (click)=\"onInputChange(input.key, '__REF__')\">\r\n Ch\u1ECDn \u0111\u1ED1i t\u01B0\u1EE3ng\u2026\r\n </button>\r\n }\r\n\r\n @case ('object') {\r\n <textarea\r\n [formControlName]=\"input.key\"\r\n rows=\"3\"\r\n (input)=\"onInputChange(input.key, $event.target.value)\">\r\n </textarea>\r\n }\r\n\r\n @default {\r\n <em class=\"unsupported\">\r\n Ki\u1EC3u input ch\u01B0a \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3\r\n </em>\r\n }\r\n\r\n }\r\n\r\n <!-- START: ERROR SESSION -->\r\n @for (error of getErrorsOfField(input.key); track $index) {\r\n <div class=\"form-control-error\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n }\r\n @if (!getErrorsOfField(input.key).length && !!$checkError()) {\r\n <div> </div>\r\n }\r\n <!-- END: ERROR SESSION -->\r\n\r\n </div> \r\n\r\n </div>\r\n }\r\n </div> \r\n\r\n }\r\n\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"composer-actions\">\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-secondary\"\r\n (click)=\"onCancel()\">\r\n Quay l\u1EA1i\r\n </button>\r\n\r\n <button\r\n type=\"submit\"\r\n class=\"btn btn-primary\"\r\n >\r\n X\u00E1c nh\u1EADn\r\n </button>\r\n </div>\r\n\r\n</form>\r\n}\r\n\r\n<ng-template #defaultOrgItemTpl let-node=\"node\" let-level=\"level\">\r\n <div class=\"test-itemTemplateRef\">\r\n {{ node.label }}\r\n </div>\r\n</ng-template>", styles: [".intent-composer-container .intent-inputs .intent-row{display:flex;gap:12px}.intent-composer-container .intent-inputs .intent-row .intent-cell.hidden{display:none}.intent-composer-container .intent-inputs .intent-row .intent-input{display:flex;flex-direction:column;margin-top:15px;margin-bottom:15px}.intent-composer-container .intent-inputs .intent-row .intent-input label{color:#464646}.intent-composer-container .intent-inputs .intent-row .intent-input label.required:after{content:\"*\";color:#ff040b}.intent-composer-container .composer-actions{display:flex;justify-content:space-between}.test-itemTemplateRef{padding:15px;background-color:#6495ed;color:#fff}\n"] }]
|
|
28710
|
+
}], ctorParameters: () => [{ type: MultiLanguageService }] });
|
|
28711
|
+
|
|
28712
|
+
/**
|
|
28713
|
+
* CoreDomDecisionEditor
|
|
28714
|
+
*
|
|
28715
|
+
* Boundary UI for composing a single DOM-level organizational decision.
|
|
28716
|
+
* This component produces an immutable Omega string for approval.
|
|
28717
|
+
*
|
|
28718
|
+
* ❌ Not a workflow editor
|
|
28719
|
+
* ❌ Not a configuration screen
|
|
28720
|
+
* ❌ Not a live OM state editor
|
|
28721
|
+
*
|
|
28722
|
+
* Any intelligence must stop here.
|
|
28723
|
+
*/
|
|
28724
|
+
class CoreDomDecisionEditorComponent extends CoreFormControlBaseComponent {
|
|
28725
|
+
constructor() {
|
|
28726
|
+
super(...arguments);
|
|
28727
|
+
this.$omega = signal({
|
|
28728
|
+
omegaVersion: '1.0',
|
|
28729
|
+
inputChain: []
|
|
28730
|
+
});
|
|
28731
|
+
this.value = '';
|
|
28732
|
+
this.INTENT_DESCRIPTOR_REGISTRY = INTENT_DESCRIPTOR_REGISTRY;
|
|
28733
|
+
// UI-only popup flag
|
|
28734
|
+
this.$showIntentComposer = signal(false);
|
|
28735
|
+
this.$selectedIntentDescriptor = signal(null);
|
|
28736
|
+
this.$projection = computed(() => {
|
|
28737
|
+
const omega = this.$omega();
|
|
28738
|
+
// Trường hợp cực đoan (chỉ khi anh vẫn cho omega nullable)
|
|
28739
|
+
if (!omega) {
|
|
28740
|
+
return {
|
|
28741
|
+
intentCount: 0,
|
|
28742
|
+
validityLabel: 'Chưa có quyết định',
|
|
28743
|
+
intents: [],
|
|
28744
|
+
outputs: [],
|
|
28745
|
+
};
|
|
28746
|
+
}
|
|
28747
|
+
return this.rebuildProjectionFromOmega(omega);
|
|
28748
|
+
});
|
|
28749
|
+
}
|
|
28750
|
+
writeValue(omega) {
|
|
28751
|
+
this.value = omega ?? '';
|
|
28752
|
+
//this.$projection.set(this.rebuildProjectionFromOmega(this.value));
|
|
28753
|
+
}
|
|
28754
|
+
rebuildProjectionFromOmega(omega) {
|
|
28755
|
+
const intents = omega.inputChain.map(intent => {
|
|
28756
|
+
const descriptor = INTENT_DESCRIPTOR_REGISTRY
|
|
28757
|
+
.find(d => d.actionCode === intent.actionCode);
|
|
28758
|
+
const actionLabel = descriptor?.label ?? intent.actionCode;
|
|
28759
|
+
return {
|
|
28760
|
+
seq: intent.seq,
|
|
28761
|
+
actionLabel,
|
|
28762
|
+
summary: "TO DO"
|
|
28763
|
+
};
|
|
28764
|
+
});
|
|
28765
|
+
return {
|
|
28766
|
+
intentCount: intents.length,
|
|
28767
|
+
validityLabel: intents.length === 0
|
|
28768
|
+
? 'Chưa có quyết định'
|
|
28769
|
+
: 'Đang soạn thảo',
|
|
28770
|
+
intents,
|
|
28771
|
+
outputs: []
|
|
28772
|
+
};
|
|
28773
|
+
}
|
|
28774
|
+
onAddIntent() {
|
|
28775
|
+
// Entry point for intent composition
|
|
28776
|
+
// This method MUST NOT mutate Omega or projection directly
|
|
28777
|
+
// Actual intent creation will happen in a dedicated composer (modal / panel)
|
|
28778
|
+
this.$showIntentComposer.set(true);
|
|
28779
|
+
}
|
|
28780
|
+
onCloseIntentComposer() {
|
|
28781
|
+
this.$showIntentComposer.set(false);
|
|
28782
|
+
}
|
|
28783
|
+
onViewIntent(e) {
|
|
28784
|
+
}
|
|
28785
|
+
onRemoveIntent(e) {
|
|
28786
|
+
}
|
|
28787
|
+
onSelectIntent(descriptor) {
|
|
28788
|
+
this.$selectedIntentDescriptor.set(descriptor);
|
|
28789
|
+
}
|
|
28790
|
+
onCancelIntentCompose() {
|
|
28791
|
+
this.$selectedIntentDescriptor.set(null);
|
|
28792
|
+
}
|
|
28793
|
+
onIntentDrafted(draft) {
|
|
28794
|
+
this.$omega.update(omega => {
|
|
28795
|
+
const nextSeq = omega.inputChain.length + 1;
|
|
28796
|
+
return {
|
|
28797
|
+
...omega,
|
|
28798
|
+
inputChain: [
|
|
28799
|
+
...omega.inputChain,
|
|
28800
|
+
{
|
|
28801
|
+
seq: nextSeq,
|
|
28802
|
+
actionCode: draft.actionCode,
|
|
28803
|
+
input: draft.input
|
|
28804
|
+
}
|
|
28805
|
+
]
|
|
28806
|
+
};
|
|
28807
|
+
});
|
|
28808
|
+
this.$showIntentComposer.set(false);
|
|
28809
|
+
}
|
|
28810
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreDomDecisionEditorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
28811
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreDomDecisionEditorComponent, isStandalone: true, selector: "core-dom-decision-editor", providers: [
|
|
28812
|
+
{
|
|
28813
|
+
provide: NG_VALUE_ACCESSOR,
|
|
28814
|
+
multi: true,
|
|
28815
|
+
useExisting: forwardRef(() => CoreDomDecisionEditorComponent),
|
|
28816
|
+
},
|
|
28817
|
+
], usesInheritance: true, ngImport: i0, template: "<div class=\"core-dom-decision-editor-container\">\r\n\r\n <!-- ========================= -->\r\n <!-- Decision Overview / Header -->\r\n <!-- ========================= -->\r\n <header class=\"editor-header\">\r\n <div class=\"editor-title\">\r\n <h2>Quy\u1EBFt \u0111\u1ECBnh t\u1ED5 ch\u1EE9c</h2>\r\n <p class=\"editor-subtitle\">\r\n So\u1EA1n th\u1EA3o m\u1ED9t quy\u1EBFt \u0111\u1ECBnh OM b\u1EA5t bi\u1EBFn (Omega)\r\n </p>\r\n </div>\r\n\r\n <div class=\"editor-meta\">\r\n <!-- read-only meta derived from Omega -->\r\n <span class=\"meta-item\">\r\n Intent count:\r\n <strong>{{ $projection().intentCount }}</strong>\r\n </span>\r\n\r\n <span class=\"meta-item\">\r\n Tr\u1EA1ng th\u00E1i:\r\n <strong>{{ $projection().validityLabel }}</strong>\r\n </span>\r\n </div>\r\n </header>\r\n\r\n <!-- ========================= -->\r\n <!-- Intent Chain Projection -->\r\n <!-- ========================= -->\r\n <section class=\"intent-chain\">\r\n\r\n <h3>Chu\u1ED7i \u00FD \u0111\u1ECBnh (Intent Chain)</h3>\r\n\r\n @if ($projection().intents.length === 0) {\r\n <div class=\"empty-state\">\r\n <p>Ch\u01B0a c\u00F3 intent n\u00E0o trong quy\u1EBFt \u0111\u1ECBnh n\u00E0y.</p>\r\n <p class=\"hint\">\r\n B\u1EAFt \u0111\u1EA7u b\u1EB1ng c\u00E1ch th\u00EAm intent \u0111\u1EA7u ti\u00EAn.\r\n </p>\r\n </div>\r\n } @else {\r\n <ol class=\"intent-list\">\r\n @for (intent of $projection().intents; track $index) {\r\n <li class=\"intent-item\">\r\n <div class=\"intent-card\">\r\n\r\n <!-- Header -->\r\n <div class=\"intent-header\">\r\n <span class=\"intent-seq\">#{{ intent.seq }}</span>\r\n <span class=\"intent-label\">{{ intent.actionLabel }}</span>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"intent-body\">\r\n @if (intent.summary) {\r\n <div class=\"intent-summary\">\r\n {{ intent.summary }}\r\n </div>\r\n } @else {\r\n <div class=\"intent-summary muted\">\r\n (Ch\u01B0a c\u00F3 di\u1EC5n gi\u1EA3i chi ti\u1EBFt)\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"intent-footer\">\r\n <button type=\"button\" class=\"btn btn-ghost\">\r\n Xem\r\n </button>\r\n <button type=\"button\" class=\"btn btn-danger-ghost\">\r\n G\u1EE1\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </li>\r\n }\r\n </ol>\r\n\r\n }\r\n\r\n </section>\r\n\r\n <!-- ========================= -->\r\n <!-- Add Intent Entry Point -->\r\n <!-- ========================= -->\r\n <section class=\"intent-actions-panel\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onAddIntent()\">\r\n + Th\u00EAm Intent\r\n </button>\r\n </section>\r\n\r\n <!-- ========================= -->\r\n <!-- Output Preview (Derived) -->\r\n <!-- ========================= -->\r\n <section class=\"output-preview\">\r\n <h3>K\u1EBFt qu\u1EA3 d\u1EF1 ki\u1EBFn (Preview)</h3>\r\n\r\n <p class=\"hint\">\r\n K\u1EBFt qu\u1EA3 n\u00E0y \u0111\u01B0\u1EE3c suy ra t\u1EEB Intent Chain, kh\u00F4ng th\u1EC3 ch\u1EC9nh s\u1EEDa.\r\n </p>\r\n\r\n @if ($projection().outputs.length === 0) {\r\n <div class=\"empty-state\">\r\n <p>Ch\u01B0a c\u00F3 output n\u00E0o \u0111\u01B0\u1EE3c sinh ra.</p>\r\n </div>\r\n } @else {\r\n <ul class=\"output-list\">\r\n @for (output of $projection().outputs; track $index) {\r\n <li class=\"output-item\">\r\n <span class=\"output-key\">{{ output.key }}</span>\r\n <span class=\"output-desc\">{{ output.description }}</span>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </section>\r\n\r\n <!-- ========================= -->\r\n <!-- Raw Omega (Optional / Debug) -->\r\n <!-- ========================= -->\r\n <details class=\"omega-raw\">\r\n <summary>Xem Omega (raw)</summary>\r\n <pre>{{ $omega() | json }}</pre>\r\n </details>\r\n\r\n @if ($showIntentComposer()) {\r\n <!--\r\n Intent Composer Popup\r\n Purpose: Enter intent composition mode only.\r\n MUST NOT:\r\n - Mutate Omega\r\n - Mutate projection\r\n - Execute OM logic\r\n -->\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root\">\r\n <div class=\"intent-composer-entry\">\r\n <p><strong>So\u1EA1n th\u1EA3o Intent m\u1EDBi</strong></p>\r\n\r\n @if ($selectedIntentDescriptor()) {\r\n\r\n <intent-composer\r\n [$descriptor]=\"$selectedIntentDescriptor()!\"\r\n ($intentComposed)=\"onIntentDrafted($event)\"\r\n ($cancelled)=\"onCancelIntentCompose()\">\r\n </intent-composer>\r\n\r\n } @else {\r\n\r\n <!-- N\u1ED9i dung composer s\u1EBD \u0111\u01B0\u1EE3c c\u1EAFm sau -->\r\n <ul class=\"intent-item-registry\">\r\n @for (intent of INTENT_DESCRIPTOR_REGISTRY; track $index) {\r\n <li class=\"intent-item-point\">\r\n <div class=\"intent-item\"\r\n (click)=\"onSelectIntent(intent)\">\r\n <object>{{ intent.actionCode }} | {{ intent.quickEmoji }}</object>\r\n <strong>{{ intent.label }}</strong>\r\n <p>{{ intent.description }}</p>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n\r\n }\r\n <hr />\r\n <div class=\"popup-actions\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"onCloseIntentComposer()\">\r\n H\u1EE7y\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>", styles: [".core-dom-decision-editor-container .modal-container{overflow:scroll}.core-dom-decision-editor-container .modal-container .modal-content-root{overflow:visible;max-height:unset}.core-dom-decision-editor-container .modal-container .modal-content-root ul.intent-item-registry{padding-left:0;overflow-y:scroll;height:60vh}.core-dom-decision-editor-container .modal-container .modal-content-root ul.intent-item-registry li.intent-item-point{cursor:pointer;padding:8px}.core-dom-decision-editor-container .modal-container .modal-content-root ul.intent-item-registry li.intent-item-point:hover{color:#fff;background-color:#09f}.core-dom-decision-editor-container .intent-chain .intent-list{list-style:none;padding:0;margin:0}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item{margin-bottom:12px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card{border:1px solid #d0d7de;border-radius:4px;background:#fff;padding:10px 12px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-header{display:flex;align-items:center;gap:8px;font-weight:600;margin-bottom:6px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-header .intent-seq{background:#e6f0ff;color:#084298;border-radius:3px;padding:2px 6px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-header .intent-label{color:#212529}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-body{padding-left:28px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-body .intent-summary{color:#495057}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-body .intent-summary.muted{color:#adb5bd;font-style:italic}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer{display:flex;gap:8px;margin-top:8px;padding-left:28px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn{border:none;background:none;cursor:pointer;font-size:13px;padding:2px 6px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-ghost{color:#0d6efd}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-ghost:hover{text-decoration:underline}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-danger-ghost{color:#dc3545}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-danger-ghost:hover{text-decoration:underline}\n"], dependencies: [{ kind: "component", type: IntentComposerComponent, selector: "intent-composer", inputs: ["$descriptor"], outputs: ["$intentComposed", "$cancelled"] }, { kind: "pipe", type: JsonPipe, name: "json" }] }); }
|
|
28818
|
+
}
|
|
28819
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreDomDecisionEditorComponent, decorators: [{
|
|
28820
|
+
type: Component,
|
|
28821
|
+
args: [{ selector: 'core-dom-decision-editor', imports: [
|
|
28822
|
+
IntentComposerComponent,
|
|
28823
|
+
JsonPipe,
|
|
28824
|
+
], providers: [
|
|
28825
|
+
{
|
|
28826
|
+
provide: NG_VALUE_ACCESSOR,
|
|
28827
|
+
multi: true,
|
|
28828
|
+
useExisting: forwardRef(() => CoreDomDecisionEditorComponent),
|
|
28829
|
+
},
|
|
28830
|
+
], template: "<div class=\"core-dom-decision-editor-container\">\r\n\r\n <!-- ========================= -->\r\n <!-- Decision Overview / Header -->\r\n <!-- ========================= -->\r\n <header class=\"editor-header\">\r\n <div class=\"editor-title\">\r\n <h2>Quy\u1EBFt \u0111\u1ECBnh t\u1ED5 ch\u1EE9c</h2>\r\n <p class=\"editor-subtitle\">\r\n So\u1EA1n th\u1EA3o m\u1ED9t quy\u1EBFt \u0111\u1ECBnh OM b\u1EA5t bi\u1EBFn (Omega)\r\n </p>\r\n </div>\r\n\r\n <div class=\"editor-meta\">\r\n <!-- read-only meta derived from Omega -->\r\n <span class=\"meta-item\">\r\n Intent count:\r\n <strong>{{ $projection().intentCount }}</strong>\r\n </span>\r\n\r\n <span class=\"meta-item\">\r\n Tr\u1EA1ng th\u00E1i:\r\n <strong>{{ $projection().validityLabel }}</strong>\r\n </span>\r\n </div>\r\n </header>\r\n\r\n <!-- ========================= -->\r\n <!-- Intent Chain Projection -->\r\n <!-- ========================= -->\r\n <section class=\"intent-chain\">\r\n\r\n <h3>Chu\u1ED7i \u00FD \u0111\u1ECBnh (Intent Chain)</h3>\r\n\r\n @if ($projection().intents.length === 0) {\r\n <div class=\"empty-state\">\r\n <p>Ch\u01B0a c\u00F3 intent n\u00E0o trong quy\u1EBFt \u0111\u1ECBnh n\u00E0y.</p>\r\n <p class=\"hint\">\r\n B\u1EAFt \u0111\u1EA7u b\u1EB1ng c\u00E1ch th\u00EAm intent \u0111\u1EA7u ti\u00EAn.\r\n </p>\r\n </div>\r\n } @else {\r\n <ol class=\"intent-list\">\r\n @for (intent of $projection().intents; track $index) {\r\n <li class=\"intent-item\">\r\n <div class=\"intent-card\">\r\n\r\n <!-- Header -->\r\n <div class=\"intent-header\">\r\n <span class=\"intent-seq\">#{{ intent.seq }}</span>\r\n <span class=\"intent-label\">{{ intent.actionLabel }}</span>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"intent-body\">\r\n @if (intent.summary) {\r\n <div class=\"intent-summary\">\r\n {{ intent.summary }}\r\n </div>\r\n } @else {\r\n <div class=\"intent-summary muted\">\r\n (Ch\u01B0a c\u00F3 di\u1EC5n gi\u1EA3i chi ti\u1EBFt)\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"intent-footer\">\r\n <button type=\"button\" class=\"btn btn-ghost\">\r\n Xem\r\n </button>\r\n <button type=\"button\" class=\"btn btn-danger-ghost\">\r\n G\u1EE1\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </li>\r\n }\r\n </ol>\r\n\r\n }\r\n\r\n </section>\r\n\r\n <!-- ========================= -->\r\n <!-- Add Intent Entry Point -->\r\n <!-- ========================= -->\r\n <section class=\"intent-actions-panel\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onAddIntent()\">\r\n + Th\u00EAm Intent\r\n </button>\r\n </section>\r\n\r\n <!-- ========================= -->\r\n <!-- Output Preview (Derived) -->\r\n <!-- ========================= -->\r\n <section class=\"output-preview\">\r\n <h3>K\u1EBFt qu\u1EA3 d\u1EF1 ki\u1EBFn (Preview)</h3>\r\n\r\n <p class=\"hint\">\r\n K\u1EBFt qu\u1EA3 n\u00E0y \u0111\u01B0\u1EE3c suy ra t\u1EEB Intent Chain, kh\u00F4ng th\u1EC3 ch\u1EC9nh s\u1EEDa.\r\n </p>\r\n\r\n @if ($projection().outputs.length === 0) {\r\n <div class=\"empty-state\">\r\n <p>Ch\u01B0a c\u00F3 output n\u00E0o \u0111\u01B0\u1EE3c sinh ra.</p>\r\n </div>\r\n } @else {\r\n <ul class=\"output-list\">\r\n @for (output of $projection().outputs; track $index) {\r\n <li class=\"output-item\">\r\n <span class=\"output-key\">{{ output.key }}</span>\r\n <span class=\"output-desc\">{{ output.description }}</span>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </section>\r\n\r\n <!-- ========================= -->\r\n <!-- Raw Omega (Optional / Debug) -->\r\n <!-- ========================= -->\r\n <details class=\"omega-raw\">\r\n <summary>Xem Omega (raw)</summary>\r\n <pre>{{ $omega() | json }}</pre>\r\n </details>\r\n\r\n @if ($showIntentComposer()) {\r\n <!--\r\n Intent Composer Popup\r\n Purpose: Enter intent composition mode only.\r\n MUST NOT:\r\n - Mutate Omega\r\n - Mutate projection\r\n - Execute OM logic\r\n -->\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root\">\r\n <div class=\"intent-composer-entry\">\r\n <p><strong>So\u1EA1n th\u1EA3o Intent m\u1EDBi</strong></p>\r\n\r\n @if ($selectedIntentDescriptor()) {\r\n\r\n <intent-composer\r\n [$descriptor]=\"$selectedIntentDescriptor()!\"\r\n ($intentComposed)=\"onIntentDrafted($event)\"\r\n ($cancelled)=\"onCancelIntentCompose()\">\r\n </intent-composer>\r\n\r\n } @else {\r\n\r\n <!-- N\u1ED9i dung composer s\u1EBD \u0111\u01B0\u1EE3c c\u1EAFm sau -->\r\n <ul class=\"intent-item-registry\">\r\n @for (intent of INTENT_DESCRIPTOR_REGISTRY; track $index) {\r\n <li class=\"intent-item-point\">\r\n <div class=\"intent-item\"\r\n (click)=\"onSelectIntent(intent)\">\r\n <object>{{ intent.actionCode }} | {{ intent.quickEmoji }}</object>\r\n <strong>{{ intent.label }}</strong>\r\n <p>{{ intent.description }}</p>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n\r\n }\r\n <hr />\r\n <div class=\"popup-actions\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"onCloseIntentComposer()\">\r\n H\u1EE7y\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>", styles: [".core-dom-decision-editor-container .modal-container{overflow:scroll}.core-dom-decision-editor-container .modal-container .modal-content-root{overflow:visible;max-height:unset}.core-dom-decision-editor-container .modal-container .modal-content-root ul.intent-item-registry{padding-left:0;overflow-y:scroll;height:60vh}.core-dom-decision-editor-container .modal-container .modal-content-root ul.intent-item-registry li.intent-item-point{cursor:pointer;padding:8px}.core-dom-decision-editor-container .modal-container .modal-content-root ul.intent-item-registry li.intent-item-point:hover{color:#fff;background-color:#09f}.core-dom-decision-editor-container .intent-chain .intent-list{list-style:none;padding:0;margin:0}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item{margin-bottom:12px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card{border:1px solid #d0d7de;border-radius:4px;background:#fff;padding:10px 12px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-header{display:flex;align-items:center;gap:8px;font-weight:600;margin-bottom:6px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-header .intent-seq{background:#e6f0ff;color:#084298;border-radius:3px;padding:2px 6px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-header .intent-label{color:#212529}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-body{padding-left:28px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-body .intent-summary{color:#495057}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-body .intent-summary.muted{color:#adb5bd;font-style:italic}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer{display:flex;gap:8px;margin-top:8px;padding-left:28px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn{border:none;background:none;cursor:pointer;font-size:13px;padding:2px 6px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-ghost{color:#0d6efd}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-ghost:hover{text-decoration:underline}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-danger-ghost{color:#dc3545}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-danger-ghost:hover{text-decoration:underline}\n"] }]
|
|
28831
|
+
}] });
|
|
28832
|
+
|
|
27664
28833
|
class CoreControlComponent extends BaseComponent {
|
|
27665
28834
|
constructor(mls, alertService) {
|
|
27666
28835
|
super(mls);
|
|
@@ -27798,7 +28967,7 @@ class CoreControlComponent extends BaseComponent {
|
|
|
27798
28967
|
}
|
|
27799
28968
|
}
|
|
27800
28969
|
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 }); }
|
|
27801
|
-
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 [addNewMode$]=\"control.addNewMode$!\"\r\n [checkError$]=\"checkError$\"\r\n >\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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 {{ ' ' }}\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$4.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$4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$4.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$", "addNewMode$", "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", "selfEnrichmentApiDriven", "selfEnrichmentApi", "selfEnrichmentHttpVerb", "selfEnrichmentHttpPayload", "selfEnrichmentShownFrom"], 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", "$translateShownFrom", "$tooltipFrom", "$initialChecked", "$showMore", "$showMoreTooltip", "$hideShowMoreIfNotSelected", "$enableFilter", "$enableQuickCheck"], outputs: ["$checkedChange", "$onShowMore"] }, { kind: "directive", type: HtmlTooltipDirective, selector: "[htmlTooltip]", inputs: ["htmlTooltip", "tooltipContext", "maxWidthUnset", "color", "backgroundColor", "hold$"] }] }); }
|
|
28970
|
+
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 [formArrayIdentityField]=\"control.formArrayIdentityField ?? 'id'\"\r\n [config]=\"control.formArraySections! ?? []\"\r\n [disabled]=\"control.disabled!\"\r\n [readonly]=\"control.readonly!\"\r\n [addNewMode$]=\"control.addNewMode$!\"\r\n [removeDisabledIf]=\"control.removeDisabledIf!\"\r\n [removeDisabledIfMessage]=\"control.removeDisabledIfMessage!\"\r\n [checkError$]=\"checkError$\"\r\n >\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 (\"DOM_DECISION_EDITOR\") {\r\n <core-dom-decision-editor />\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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 {{ ' ' }}\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$4.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$4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$4.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$", "formArrayIdentityField", "addNewMode$", "readonly", "disabled", "removeDisabledIf", "removeDisabledIfMessage"] }, { 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", "selfEnrichmentApiDriven", "selfEnrichmentApi", "selfEnrichmentHttpVerb", "selfEnrichmentHttpPayload", "selfEnrichmentShownFrom"], 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", "$translateShownFrom", "$tooltipFrom", "$initialChecked", "$showMore", "$showMoreTooltip", "$hideShowMoreIfNotSelected", "$enableFilter", "$enableQuickCheck"], outputs: ["$checkedChange", "$onShowMore"] }, { kind: "component", type: CoreDomDecisionEditorComponent, selector: "core-dom-decision-editor" }, { kind: "directive", type: HtmlTooltipDirective, selector: "[htmlTooltip]", inputs: ["htmlTooltip", "tooltipContext", "maxWidthUnset", "color", "backgroundColor", "hold$"] }] }); }
|
|
27802
28971
|
}
|
|
27803
28972
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreControlComponent, decorators: [{
|
|
27804
28973
|
type: Component,
|
|
@@ -27831,8 +29000,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
27831
29000
|
CoreIosSwitcherComponent,
|
|
27832
29001
|
CoreLiquidWysiwygComponent,
|
|
27833
29002
|
CoreStickerCollectionComponent,
|
|
29003
|
+
CoreDomDecisionEditorComponent,
|
|
27834
29004
|
HtmlTooltipDirective
|
|
27835
|
-
], 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 [addNewMode$]=\"control.addNewMode$!\"\r\n [checkError$]=\"checkError$\"\r\n >\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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 {{ ' ' }}\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"] }]
|
|
29005
|
+
], 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 [formArrayIdentityField]=\"control.formArrayIdentityField ?? 'id'\"\r\n [config]=\"control.formArraySections! ?? []\"\r\n [disabled]=\"control.disabled!\"\r\n [readonly]=\"control.readonly!\"\r\n [addNewMode$]=\"control.addNewMode$!\"\r\n [removeDisabledIf]=\"control.removeDisabledIf!\"\r\n [removeDisabledIfMessage]=\"control.removeDisabledIfMessage!\"\r\n [checkError$]=\"checkError$\"\r\n >\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 (\"DOM_DECISION_EDITOR\") {\r\n <core-dom-decision-editor />\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\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 {{ ' ' }}\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"] }]
|
|
27836
29006
|
}], ctorParameters: () => [{ type: MultiLanguageService }, { type: AlertService }], propDecorators: { control: [{
|
|
27837
29007
|
type: Input
|
|
27838
29008
|
}], form: [{
|
|
@@ -32726,7 +33896,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
32726
33896
|
const hrmSchemaRoutes = [
|
|
32727
33897
|
{
|
|
32728
33898
|
path: '',
|
|
32729
|
-
loadComponent: () => import('./ngx-histaff-alpha-hrm-schema.component-
|
|
33899
|
+
loadComponent: () => import('./ngx-histaff-alpha-hrm-schema.component-BTzEGNfX.mjs').then(m => m.HrmSchemaComponent)
|
|
32730
33900
|
}
|
|
32731
33901
|
];
|
|
32732
33902
|
|
|
@@ -34899,7 +36069,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
34899
36069
|
const simpleChatRoutes = [
|
|
34900
36070
|
{
|
|
34901
36071
|
path: '',
|
|
34902
|
-
loadComponent: () => import('./ngx-histaff-alpha-simple-chat.component-
|
|
36072
|
+
loadComponent: () => import('./ngx-histaff-alpha-simple-chat.component-CWWWy9FV.mjs').then(m => m.SimpleChatComponent)
|
|
34903
36073
|
}
|
|
34904
36074
|
];
|
|
34905
36075
|
|
|
@@ -35565,7 +36735,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
35565
36735
|
const coreSysActionRoutes = [
|
|
35566
36736
|
{
|
|
35567
36737
|
path: "",
|
|
35568
|
-
loadComponent: () => import('./ngx-histaff-alpha-core-sys-action.component-
|
|
36738
|
+
loadComponent: () => import('./ngx-histaff-alpha-core-sys-action.component-YqAEn6iz.mjs').then(m => m.CoreSysActionComponent),
|
|
35569
36739
|
children: [
|
|
35570
36740
|
{
|
|
35571
36741
|
path: ":id",
|
|
@@ -36958,11 +38128,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
36958
38128
|
const sysSmtpClientRoutes = [
|
|
36959
38129
|
{
|
|
36960
38130
|
path: '',
|
|
36961
|
-
loadComponent: () => import('./ngx-histaff-alpha-sys-smtp-client.component-
|
|
38131
|
+
loadComponent: () => import('./ngx-histaff-alpha-sys-smtp-client.component-CtRfWRoX.mjs').then(m => m.SysSmtpClientComponent),
|
|
36962
38132
|
children: [
|
|
36963
38133
|
{
|
|
36964
38134
|
path: ':id',
|
|
36965
|
-
loadComponent: () => import('./ngx-histaff-alpha-sys-smtp-client-edit.component-
|
|
38135
|
+
loadComponent: () => import('./ngx-histaff-alpha-sys-smtp-client-edit.component-Cn1CYwCF.mjs').then(m => m.SysSmtpClientEditComponent),
|
|
36966
38136
|
outlet: 'corePageListAux'
|
|
36967
38137
|
}
|
|
36968
38138
|
]
|
|
@@ -38148,11 +39318,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
38148
39318
|
const coreDocGenRoutes = [
|
|
38149
39319
|
{
|
|
38150
39320
|
path: 'template-list',
|
|
38151
|
-
loadComponent: () => import('./ngx-histaff-alpha-template-list.component-
|
|
39321
|
+
loadComponent: () => import('./ngx-histaff-alpha-template-list.component-TYq8bPtG.mjs').then(m => m.TemplateListComponent),
|
|
38152
39322
|
},
|
|
38153
39323
|
{
|
|
38154
39324
|
path: ":id",
|
|
38155
|
-
loadComponent: () => import('./ngx-histaff-alpha-core-template-editor.component-
|
|
39325
|
+
loadComponent: () => import('./ngx-histaff-alpha-core-template-editor.component-CvJChUao.mjs').then(m => m.CoreTemplateEditorComponent),
|
|
38156
39326
|
canDeactivate: [CanDeactivateGuard]
|
|
38157
39327
|
},
|
|
38158
39328
|
{
|
|
@@ -38181,7 +39351,7 @@ const coreFormDesignRoutes = [
|
|
|
38181
39351
|
},
|
|
38182
39352
|
{
|
|
38183
39353
|
path: ':id',
|
|
38184
|
-
loadComponent: () => import('./ngx-histaff-alpha-core-form-design.component-
|
|
39354
|
+
loadComponent: () => import('./ngx-histaff-alpha-core-form-design.component-D6TrPmpG.mjs').then(m => m.CoreFormDesignComponent)
|
|
38185
39355
|
}
|
|
38186
39356
|
];
|
|
38187
39357
|
|
|
@@ -39092,7 +40262,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
39092
40262
|
const coreNavigationTrackerRoutes = [
|
|
39093
40263
|
{
|
|
39094
40264
|
path: '',
|
|
39095
|
-
loadComponent: () => import('./ngx-histaff-alpha-tracker-studio.component-
|
|
40265
|
+
loadComponent: () => import('./ngx-histaff-alpha-tracker-studio.component-BEMXswAW.mjs').then(m => m.TrackerStudioComponent)
|
|
39096
40266
|
}
|
|
39097
40267
|
];
|
|
39098
40268
|
|
|
@@ -42195,33 +43365,33 @@ const coreWorkflowRoutes = [
|
|
|
42195
43365
|
{
|
|
42196
43366
|
path: 'form-assign/:id',
|
|
42197
43367
|
outlet: "formAssignAux",
|
|
42198
|
-
loadComponent: () => import('./ngx-histaff-alpha-wf-form-assign.component-
|
|
43368
|
+
loadComponent: () => import('./ngx-histaff-alpha-wf-form-assign.component-Bck-IKZX.mjs').then(m => m.WfFormAssignComponent),
|
|
42199
43369
|
canDeactivate: [CanDeactivateGuard]
|
|
42200
43370
|
}
|
|
42201
43371
|
]
|
|
42202
43372
|
},
|
|
42203
43373
|
{
|
|
42204
43374
|
path: 'global-config',
|
|
42205
|
-
loadComponent: () => import('./ngx-histaff-alpha-wf-global-config.component-
|
|
43375
|
+
loadComponent: () => import('./ngx-histaff-alpha-wf-global-config.component-DhTw3REl.mjs').then(m => m.WfGlobalConfigComponent)
|
|
42206
43376
|
},
|
|
42207
43377
|
{
|
|
42208
43378
|
path: 'db-settings',
|
|
42209
|
-
loadComponent: () => import('./ngx-histaff-alpha-db-settings.component-
|
|
43379
|
+
loadComponent: () => import('./ngx-histaff-alpha-db-settings.component-D0JhoiHQ.mjs').then(m => m.DbSettingsComponent)
|
|
42210
43380
|
},
|
|
42211
43381
|
{
|
|
42212
43382
|
path: 'workflow-consume',
|
|
42213
|
-
loadComponent: () => import('./ngx-histaff-alpha-core-workflow-consume.component-
|
|
43383
|
+
loadComponent: () => import('./ngx-histaff-alpha-core-workflow-consume.component-K-_atwQM.mjs').then(m => m.CoreWorkflowConsumeComponent),
|
|
42214
43384
|
children: [
|
|
42215
43385
|
{
|
|
42216
43386
|
path: ':id',
|
|
42217
43387
|
outlet: "workflowConsume",
|
|
42218
|
-
loadComponent: () => import('./ngx-histaff-alpha-live-form.component-
|
|
43388
|
+
loadComponent: () => import('./ngx-histaff-alpha-live-form.component-CYB3NnkR.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
|
|
42219
43389
|
}
|
|
42220
43390
|
]
|
|
42221
43391
|
},
|
|
42222
43392
|
{
|
|
42223
43393
|
path: 'workflow-consume/:id',
|
|
42224
|
-
loadComponent: () => import('./ngx-histaff-alpha-live-form.component-
|
|
43394
|
+
loadComponent: () => import('./ngx-histaff-alpha-live-form.component-CYB3NnkR.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
|
|
42225
43395
|
},
|
|
42226
43396
|
{
|
|
42227
43397
|
path: 'workflow-group-edit/:id',
|
|
@@ -42231,21 +43401,21 @@ const coreWorkflowRoutes = [
|
|
|
42231
43401
|
},
|
|
42232
43402
|
{
|
|
42233
43403
|
path: 'design/:id',
|
|
42234
|
-
loadChildren: () => import('./ngx-histaff-alpha-design-wrapper.route-
|
|
43404
|
+
loadChildren: () => import('./ngx-histaff-alpha-design-wrapper.route-DVdapOzd.mjs').then(m => m.wfDesignWrapperRoutes),
|
|
42235
43405
|
},
|
|
42236
43406
|
]
|
|
42237
43407
|
},
|
|
42238
43408
|
{
|
|
42239
43409
|
path: 'react/:id',
|
|
42240
|
-
loadComponent: () => import('./ngx-histaff-alpha-wf-instance-step-react.component-
|
|
43410
|
+
loadComponent: () => import('./ngx-histaff-alpha-wf-instance-step-react.component-DE5sJiVw.mjs').then(m => m.WfInstanceStepReactComponent)
|
|
42241
43411
|
},
|
|
42242
43412
|
{
|
|
42243
43413
|
path: 'status/:id',
|
|
42244
|
-
loadComponent: () => import('./ngx-histaff-alpha-wf-instance-status.component-
|
|
43414
|
+
loadComponent: () => import('./ngx-histaff-alpha-wf-instance-status.component-D-KD7Veu.mjs').then(m => m.WfInstanceStatusComponent)
|
|
42245
43415
|
},
|
|
42246
43416
|
{
|
|
42247
43417
|
path: 'lab',
|
|
42248
|
-
loadComponent: () => import('./ngx-histaff-alpha-wf-lab.component-
|
|
43418
|
+
loadComponent: () => import('./ngx-histaff-alpha-wf-lab.component-DoFDdaIu.mjs').then(m => m.WfLabComponent)
|
|
42249
43419
|
}
|
|
42250
43420
|
];
|
|
42251
43421
|
|
|
@@ -44853,5 +46023,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
44853
46023
|
* Generated bundle index. Do not edit.
|
|
44854
46024
|
*/
|
|
44855
46025
|
|
|
44856
|
-
export { noneAutoClosedAlertOptions as $, AppService as A, BaseComponent as B, ChatService as C, DragReorderDirective as D, EnumFormBaseContolType as E, FullscreenModalLoaderComponent as F, DomService as G, EnumActorSourceType as H, ImageErrorResolverDirective as I, CoreParamControlComponent as J, CoreRadioGroupComponent as K, GptService as L, MultiLanguageService as M, CoreRuleTreeService as N, CoreRuleTreeComponent as O, CoreStickerCollectionComponent as P, ApplicationHelpService as Q, HotKeysDirective as R, StringHtmlPipe as S, TooltipDirective as T, CoreDatetimeService as U, EnumCorePageEditMode as V, CoreFormComponent as W, NavigatorService as X, JsonService as Y, EnumCoreButtonVNSCode as Z, READONLY_WORKFLOW_FIELDS as _, AppConfigService as a, EnumDeviceType as a$, CoreButtonGroupVnsComponent as a0, CoreDropdownComponent as a1, EnumFilterOperator as a2, HtmlTooltipDirective as a3, CoreControlNoFormArrayComponent as a4, EnumFormDesignMode as a5, CoreControlComponent as a6, JsonSafePipe as a7, CoreChecklistComponent as a8, CoreFormControlSeekerComponent as a9, EnumErrorType as aA, EnumIconClass as aB, EnumProfileInfoSector as aC, EnumSignalRType as aD, EnumSortDirection as aE, EnumStyleButtonClass as aF, CanActivateFunctionUrlMapperGuard as aG, InitializationCanActivateFn as aH, InitializationCanMatchFn as aI, httpInterceptorProviders as aJ, InterceptorSkipHeader as aK, appTypeInterceptor as aL, baseUrlInterceptor as aM, authInterceptor as aN, graphInterceptor as aO, tokenInterceptor as aP, responseInterceptor as aQ, timeZoneInterceptor as aR, cachingInterceptor as aS, langInterceptor as aT, OnlineUsersComponent as aU, ActionService as aV, AppInitializationService as aW, AuthService as aX, CacheService as aY, EnumSwUpdateVersionUpdatesEventType as aZ, CheckForUpdateService as a_, CoreAttachmentComponent as aa, CoreDatePickerComponent as ab, CoreMonthSelectorComponent as ac, CoreCurrencyInputComponent as ad, EnumImageResolverType as ae, NormalizeHumanNamePipe as af, CoreIosSwitcherComponent as ag, SunnyRotatingComponent as ah, MapAppdemoToServerPipePipe as ai, MapAttachmentToServerPipe as aj, MapNewsfeedMediaToServerPipe as ak, UploadedFilenameCutoffPipe as al, DialogStateComponent as am, FooterComponent as an, RightchatComponent as ao, WaittingScreenComponent as ap, longAlertOptions as aq, attachmentOptions as ar, CORE_VNS_BUTTONS as as, defaultPaging as at, DESKTOP_SCREEN_HEDER_HEIGHT as au, MOBILE_SCREEN_HEDER_HEIGHT as av, themeBlue as aw, DATE_VALUE_ACCESSOR as ax, DateValueAccessor as ay, EnumDragType as az, AlertService as b, LanguageComponent as b$, EnumBrowserType as b0, EnumOsType as b1, ClientService as b2, CommonHttpRequestService as b3, TLA_CONFIG as b4, ConfigService as b5, CoreLocalStorageService as b6, CoreTableService as b7, DndService as b8, DocxMergeService as b9, SsrsExpressService as bA, StatisticService as bB, StatisticAuthService as bC, SysMenuService as bD, TimeSheetService as bE, TopicPermissionService as bF, TopicTreeService as bG, UploadedFileService as bH, UrlService as bI, UserActivityService as bJ, EvaluateDialogService as bK, EnumWorkScheduleViewMode as bL, WorkShiftDndService as bM, AtShiftPatternComponent as bN, AtShiftPatternApplyComponent as bO, AtShiftPatternEditComponent as bP, AtWorksignComponent as bQ, AtWorksignService as bR, FunctionComponent as bS, IndividualScheduleApplyComponent as bT, FunctionEditComponent as bU, FunctionIgnoreComponent as bV, FunctionIgnoreEditComponent as bW, GroupFunctionComponent as bX, GroupFunctionEditComponent as bY, hrmSchemaRoutes as bZ, InMemoryComponent as b_, FilterKitService as ba, GrpcService as bb, HeaderService as bc, HistoryService as bd, HttpErrorHandler as be, HubConnectionService as bf, IpServiceService as bg, LayoutService as bh, LiquidJsService as bi, MapService as bj, MenuService as bk, MessageService as bl, ModalService as bm, OrganizationService as bn, PkceService as bo, PositionTransferService as bp, EnumNotificationDir as bq, NotificationActionType as br, PushNotificationService as bs, RandomAvatarService as bt, RequestCache as bu, RequestCacheWithMap as bv, ResponseService as bw, RoutingService as bx, EnumSsrsExpressFileExtension as by, EnumSsrsExpressExportFormat as bz, CoreTerminalSpinnerComponent as c, CoreContractSeekerComponent as c$, LanguageEditComponent as c0, MenuComponent as c1, MenuEditComponent as c2, MutationLogComponent as c3, MutationViewComponent as c4, PaSalaryPolicyComponent as c5, PaSalaryPolicyEditComponent as c6, PortalRouteComponent as c7, ScheduleOverviewComponent as c8, simpleChatRoutes as c9, ButtonGroupService as cA, ButtonGroupComponent as cB, EnumButtonCaptionCode as cC, CoreButtonComponent as cD, CoreAccordionComponent as cE, CoreAccordionService as cF, CoreActiveUserCountComponent as cG, NewlyCreatedTokenService as cH, CoreApiProgressComponent as cI, CoreButtonGroupComponent as cJ, EnumCoreButtonCode as cK, ActionSvgEditComponent as cL, CoreButtonGroupService as cM, CoreButtonVnsComponent as cN, CoreCommonParamKitComponent as cO, CoreCompareDbPipelineComponent as cP, CoreCompositionState as cQ, CoreCompositionService as cR, CoreCompositionComponent as cS, CoreConfirmDialogComponent as cT, ConfirmDialogStateComponent as cU, CoreLazyMountComponent as cV, CoreRootMenuItemPickerComponent as cW, CoreRootMenuItemPickerService as cX, ECoreTableToolCode as cY, ECoreTableToolClass as cZ, CoreTableComponent as c_, PortalRouteEditComponent as ca, SysOtherListComponent as cb, SysOtherListEditComponent as cc, SysOtherListTypeComponent as cd, SysOtherListTypeEditComponent as ce, coreSysActionRoutes as cf, SysActionComponent as cg, SysActionEditComponent as ch, SysFunctionActionComponent as ci, SysFunctionActionEditComponent as cj, SysFunctionActionMapperComponent as ck, SysFunctionUrlMapperComponent as cl, FunctionEditService as cm, SysModuleComponent as cn, SysModuleEditComponent as co, SysRouteAccessComponent as cp, sysSmtpClientRoutes as cq, liner_to_nested_array_script as cr, blob_to_base64_script as cs, AlertComponent as ct, EnumAlertType as cu, IAlertOptions as cv, AnimatedTextService as cw, AnimatedTextComponent as cx, BaseDropdownComponent as cy, ButtonGroupModule as cz, CorePageHeaderComponent as d, EnumCoreViewItemType as d$, CoreControlNoGridBufferComponent as d0, CoreControlNoSeekerComponent as d1, coreDocGenRoutes as d2, CoreDocgenToolbarComponent as d3, CoreEmployeeScheduleComponent as d4, CoreEmployeeSeekerComponent as d5, EnumCoreFileUploaderType as d6, CoreFileUploaderComponent as d7, CoreFilterHubComponent as d8, CoreFilterHubService as d9, CoreLoadingSurfaceComponent as dA, CoreMccComponent as dB, CoreMonthPickerComponent as dC, CoreNavigationTrackerComponent as dD, coreNavigationTrackerRoutes as dE, CoreOauthCallbackComponent as dF, CoreOauthCallbackOffice365Component as dG, EnumCoreOrgTreeaAccessorMode as dH, EnumCoreOrgTreeaSearchMode as dI, CoreOrgTreeComponent as dJ, CoreOrgTreeState as dK, CoreOrgTreeService as dL, CoreOrgUnitSeekerComponent as dM, CoreOrgchartflexComponent as dN, CARD_COLORS as dO, CoreOrgchartflexWrapperComponent as dP, coreOrgchartflexRoutes as dQ, CoreOrgParamComponent as dR, EnumCorePageEditBootstrapClass as dS, EnumCorePageEditFieldType as dT, CorePageEditService as dU, CorePageEditLiteComponent as dV, CorePageEditTabComponent as dW, EnumExType as dX, CorePageListService as dY, CorePageListState as dZ, CorePageListContentComponent as d_, ControlBase as da, Textbox as db, CoreControlService as dc, CustomValidators as dd, URL_PATTERN as de, coreFormDesignRoutes as df, CoreFormTabComponent as dg, CoreFormLiteComponent as dh, CoreFormControlBaseComponent as di, EnumCoreSeekerColumnJob as dj, EnumCoreSeekerColumnStaffProfile as dk, EnumCoreSeekerColumnContract as dl, EnumCoreSeekerColumnWorking as dm, EnumCoreSeekerColumnWage as dn, EnumCoreSeekerColumnPosition as dp, EnumCoreSeekerColumnPositionConcurrent as dq, EnumCoreSeekerColumnAutoForm as dr, SeekerService as ds, CoreGridBufferComponent as dt, CoreHeaderParamsComponent as du, CoreHelperComponent as dv, CoreLineComponent as dw, CoreLiquidWysiwygComponent as dx, CoreListComponent as dy, CoreListLazyComponent as dz, TranslatePipe as e, normalizeHumanName as e$, CorePageViewComponent as e0, CorePaginationComponent as e1, CorePaginationFullComponent as e2, CorePaginationFullService as e3, CoreFileFormatPickerComponent as e4, CorePermissionService as e5, EnumPermissionObjectType as e6, CorePermissionComponent as e7, CorePermissionActionsComponent as e8, CorePositionConcurrentSeekerComponent as e9, CoreWageSeekerComponent as eA, CoreWorkingSeekerComponent as eB, coreWorkflowRoutes as eC, CoreWorkflowBuilderComponent as eD, CoreWorkflowGroupEditComponent as eE, CoreYearPickerComponent as eF, CoreYearSelectorComponent as eG, EnumCoreD3ScaleType as eH, CoreD3Service as eI, CorePieComponent as eJ, CoreScatterPlotComponent as eK, EnumHrComparisonCode as eL, EnumICoreStatisticWidgetDataType as eM, CoreStatisticWidgetComponent as eN, DecisionComponent as eO, EvaluateDialogComponent as eP, HuconcurrentlyComponent as eQ, JobComponent as eR, LanguageChangerComponent as eS, DEFAULT_SVG as eT, ItemComponent as eU, NavigatorComponent as eV, OtpInputComponent as eW, OtpInputService as eX, PageTitleComponent as eY, PaginationComponent as eZ, FilterPipe as e_, CorePositionSeekerComponent as ea, CoreQrcodeComponent as eb, EnumOparator as ec, CoreQueryBuilderComponent as ed, CoreReducerIconComponent as ee, CoreRotatingTextComponent as ef, CoreRouteAccumulatorComponent as eg, CoreRoutingHistoryComponent as eh, CoreSalaryPolicyPickerComponent as ei, CoreScrollComponent as ej, CoreScrollLazyComponent as ek, CoreSeenByComponent as el, CoreShiftCardComponent as em, CoreShiftCellComponent as en, CoreShiftCollectionComponent as eo, CoreShiftStickerComponent as ep, STICKER_COLOR_SCHEMA as eq, CoreSubFormGroupComponent as er, CoreTabListComponent as es, CoreTagsComponent as et, CoreTopicPickerComponent as eu, EnumCoreArticleCategoryTreeaAccessorMode as ev, CoreTopicTreeComponent as ew, CoreTreeComponent as ex, EnumCoreTreeGridEditMode as ey, CoreTreeGridComponent as ez, CorePageListComponent as f, PositionComponent as f0, PositionEditService as f1, FileService as f2, LongTaskService as f3, EnumRecursiveFields as f4, RecursiveService as f5, StringService as f6, UnicodeService as f7, StaffProfileComponent as f8, ThreedotsComponent as f9, TooltipComponent as fa, UserActivityComponent as fb, WageComponent as fc, tooltip_directive as fd, coreStickerCollection_component as fe, dragReorder_directive as ff, CoreStatusStickerComponent as g, BaseEditComponent as h, DialogService as i, CorePageEditComponent as j, EnumCoreTablePipeType as k, CoreCheckboxComponent as l, CoreTabsComponent as m, CoreWorkflowService as n, EnumCoreFormControlSeekerSourceType as o, CoreFormService as p, DbService as q, AiHintForColumnComponent as r, CoreWorkflowListComponent as s, CanDeactivateGuard as t, TableCellPipe as u, MapAvatarToServerPipe as v, alertOptions as w, SocketService as x, CoreFormDesignService as y, EnumWorkflowStepType as z };
|
|
44857
|
-
//# sourceMappingURL=ngx-histaff-alpha-ngx-histaff-alpha-
|
|
46026
|
+
export { noneAutoClosedAlertOptions as $, AppService as A, BaseComponent as B, ChatService as C, DragReorderDirective as D, EnumFormBaseContolType as E, FullscreenModalLoaderComponent as F, DomService as G, EnumActorSourceType as H, ImageErrorResolverDirective as I, CoreParamControlComponent as J, CoreRadioGroupComponent as K, GptService as L, MultiLanguageService as M, CoreRuleTreeService as N, CoreRuleTreeComponent as O, CoreStickerCollectionComponent as P, ApplicationHelpService as Q, HotKeysDirective as R, StringHtmlPipe as S, TooltipDirective as T, CoreDatetimeService as U, EnumCorePageEditMode as V, CoreFormComponent as W, NavigatorService as X, JsonService as Y, EnumCoreButtonVNSCode as Z, READONLY_WORKFLOW_FIELDS as _, AppConfigService as a, CheckForUpdateService as a$, CoreButtonGroupVnsComponent as a0, CoreDropdownComponent as a1, EnumFilterOperator as a2, CoreDomDecisionEditorComponent as a3, HtmlTooltipDirective as a4, CoreControlNoFormArrayComponent as a5, EnumFormDesignMode as a6, CoreControlComponent as a7, JsonSafePipe as a8, CoreChecklistComponent as a9, EnumDragType as aA, EnumErrorType as aB, EnumIconClass as aC, EnumProfileInfoSector as aD, EnumSignalRType as aE, EnumSortDirection as aF, EnumStyleButtonClass as aG, CanActivateFunctionUrlMapperGuard as aH, InitializationCanActivateFn as aI, InitializationCanMatchFn as aJ, httpInterceptorProviders as aK, InterceptorSkipHeader as aL, appTypeInterceptor as aM, baseUrlInterceptor as aN, authInterceptor as aO, graphInterceptor as aP, tokenInterceptor as aQ, responseInterceptor as aR, timeZoneInterceptor as aS, cachingInterceptor as aT, langInterceptor as aU, OnlineUsersComponent as aV, ActionService as aW, AppInitializationService as aX, AuthService as aY, CacheService as aZ, EnumSwUpdateVersionUpdatesEventType as a_, CoreFormControlSeekerComponent as aa, CoreAttachmentComponent as ab, CoreDatePickerComponent as ac, CoreMonthSelectorComponent as ad, CoreCurrencyInputComponent as ae, EnumImageResolverType as af, NormalizeHumanNamePipe as ag, CoreIosSwitcherComponent as ah, SunnyRotatingComponent as ai, MapAppdemoToServerPipePipe as aj, MapAttachmentToServerPipe as ak, MapNewsfeedMediaToServerPipe as al, UploadedFilenameCutoffPipe as am, DialogStateComponent as an, FooterComponent as ao, RightchatComponent as ap, WaittingScreenComponent as aq, longAlertOptions as ar, attachmentOptions as as, CORE_VNS_BUTTONS as at, defaultPaging as au, DESKTOP_SCREEN_HEDER_HEIGHT as av, MOBILE_SCREEN_HEDER_HEIGHT as aw, themeBlue as ax, DATE_VALUE_ACCESSOR as ay, DateValueAccessor as az, AlertService as b, InMemoryComponent as b$, EnumDeviceType as b0, EnumBrowserType as b1, EnumOsType as b2, ClientService as b3, CommonHttpRequestService as b4, TLA_CONFIG as b5, ConfigService as b6, CoreLocalStorageService as b7, CoreTableService as b8, DndService as b9, EnumSsrsExpressExportFormat as bA, SsrsExpressService as bB, StatisticService as bC, StatisticAuthService as bD, SysMenuService as bE, TimeSheetService as bF, TopicPermissionService as bG, TopicTreeService as bH, UploadedFileService as bI, UrlService as bJ, UserActivityService as bK, EvaluateDialogService as bL, EnumWorkScheduleViewMode as bM, WorkShiftDndService as bN, AtShiftPatternComponent as bO, AtShiftPatternApplyComponent as bP, AtShiftPatternEditComponent as bQ, AtWorksignComponent as bR, AtWorksignService as bS, FunctionComponent as bT, IndividualScheduleApplyComponent as bU, FunctionEditComponent as bV, FunctionIgnoreComponent as bW, FunctionIgnoreEditComponent as bX, GroupFunctionComponent as bY, GroupFunctionEditComponent as bZ, hrmSchemaRoutes as b_, DocxMergeService as ba, FilterKitService as bb, GrpcService as bc, HeaderService as bd, HistoryService as be, HttpErrorHandler as bf, HubConnectionService as bg, IpServiceService as bh, LayoutService as bi, LiquidJsService as bj, MapService as bk, MenuService as bl, MessageService as bm, ModalService as bn, OrganizationService as bo, PkceService as bp, PositionTransferService as bq, EnumNotificationDir as br, NotificationActionType as bs, PushNotificationService as bt, RandomAvatarService as bu, RequestCache as bv, RequestCacheWithMap as bw, ResponseService as bx, RoutingService as by, EnumSsrsExpressFileExtension as bz, CoreTerminalSpinnerComponent as c, CoreTableComponent as c$, LanguageComponent as c0, LanguageEditComponent as c1, MenuComponent as c2, MenuEditComponent as c3, MutationLogComponent as c4, MutationViewComponent as c5, PaSalaryPolicyComponent as c6, PaSalaryPolicyEditComponent as c7, PortalRouteComponent as c8, ScheduleOverviewComponent as c9, ButtonGroupModule as cA, ButtonGroupService as cB, ButtonGroupComponent as cC, EnumButtonCaptionCode as cD, CoreButtonComponent as cE, CoreAccordionComponent as cF, CoreAccordionService as cG, CoreActiveUserCountComponent as cH, NewlyCreatedTokenService as cI, CoreApiProgressComponent as cJ, CoreButtonGroupComponent as cK, EnumCoreButtonCode as cL, ActionSvgEditComponent as cM, CoreButtonGroupService as cN, CoreButtonVnsComponent as cO, CoreCommonParamKitComponent as cP, CoreCompareDbPipelineComponent as cQ, CoreCompositionState as cR, CoreCompositionService as cS, CoreCompositionComponent as cT, CoreConfirmDialogComponent as cU, ConfirmDialogStateComponent as cV, CoreLazyMountComponent as cW, CoreRootMenuItemPickerComponent as cX, CoreRootMenuItemPickerService as cY, ECoreTableToolCode as cZ, ECoreTableToolClass as c_, simpleChatRoutes as ca, PortalRouteEditComponent as cb, SysOtherListComponent as cc, SysOtherListEditComponent as cd, SysOtherListTypeComponent as ce, SysOtherListTypeEditComponent as cf, coreSysActionRoutes as cg, SysActionComponent as ch, SysActionEditComponent as ci, SysFunctionActionComponent as cj, SysFunctionActionEditComponent as ck, SysFunctionActionMapperComponent as cl, SysFunctionUrlMapperComponent as cm, FunctionEditService as cn, SysModuleComponent as co, SysModuleEditComponent as cp, SysRouteAccessComponent as cq, sysSmtpClientRoutes as cr, liner_to_nested_array_script as cs, blob_to_base64_script as ct, AlertComponent as cu, EnumAlertType as cv, IAlertOptions as cw, AnimatedTextService as cx, AnimatedTextComponent as cy, BaseDropdownComponent as cz, CorePageHeaderComponent as d, CorePageListContentComponent as d$, CoreContractSeekerComponent as d0, CoreControlNoGridBufferComponent as d1, CoreControlNoSeekerComponent as d2, coreDocGenRoutes as d3, CoreDocgenToolbarComponent as d4, CoreEmployeeScheduleComponent as d5, CoreEmployeeSeekerComponent as d6, EnumCoreFileUploaderType as d7, CoreFileUploaderComponent as d8, CoreFilterHubComponent as d9, CoreListLazyComponent as dA, CoreLoadingSurfaceComponent as dB, CoreMccComponent as dC, CoreMonthPickerComponent as dD, CoreNavigationTrackerComponent as dE, coreNavigationTrackerRoutes as dF, CoreOauthCallbackComponent as dG, CoreOauthCallbackOffice365Component as dH, EnumCoreOrgTreeaAccessorMode as dI, EnumCoreOrgTreeaSearchMode as dJ, CoreOrgTreeComponent as dK, CoreOrgTreeState as dL, CoreOrgTreeService as dM, CoreOrgUnitSeekerComponent as dN, CoreOrgchartflexComponent as dO, CARD_COLORS as dP, CoreOrgchartflexWrapperComponent as dQ, coreOrgchartflexRoutes as dR, CoreOrgParamComponent as dS, EnumCorePageEditBootstrapClass as dT, EnumCorePageEditFieldType as dU, CorePageEditService as dV, CorePageEditLiteComponent as dW, CorePageEditTabComponent as dX, EnumExType as dY, CorePageListService as dZ, CorePageListState as d_, CoreFilterHubService as da, ControlBase as db, Textbox as dc, CoreControlService as dd, CustomValidators as de, URL_PATTERN as df, coreFormDesignRoutes as dg, CoreFormTabComponent as dh, CoreFormLiteComponent as di, CoreFormControlBaseComponent as dj, EnumCoreSeekerColumnJob as dk, EnumCoreSeekerColumnStaffProfile as dl, EnumCoreSeekerColumnContract as dm, EnumCoreSeekerColumnWorking as dn, EnumCoreSeekerColumnWage as dp, EnumCoreSeekerColumnPosition as dq, EnumCoreSeekerColumnPositionConcurrent as dr, EnumCoreSeekerColumnAutoForm as ds, SeekerService as dt, CoreGridBufferComponent as du, CoreHeaderParamsComponent as dv, CoreHelperComponent as dw, CoreLineComponent as dx, CoreLiquidWysiwygComponent as dy, CoreListComponent as dz, TranslatePipe as e, PageTitleComponent as e$, EnumCoreViewItemType as e0, CorePageViewComponent as e1, CorePaginationComponent as e2, CorePaginationFullComponent as e3, CorePaginationFullService as e4, CoreFileFormatPickerComponent as e5, CorePermissionService as e6, EnumPermissionObjectType as e7, CorePermissionComponent as e8, CorePermissionActionsComponent as e9, EnumCoreTreeGridEditMode as eA, CoreTreeGridComponent as eB, CoreTreeReferenceComponent as eC, CoreWageSeekerComponent as eD, CoreWorkingSeekerComponent as eE, coreWorkflowRoutes as eF, CoreWorkflowBuilderComponent as eG, CoreWorkflowGroupEditComponent as eH, CoreYearPickerComponent as eI, CoreYearSelectorComponent as eJ, EnumCoreD3ScaleType as eK, CoreD3Service as eL, CorePieComponent as eM, CoreScatterPlotComponent as eN, EnumHrComparisonCode as eO, EnumICoreStatisticWidgetDataType as eP, CoreStatisticWidgetComponent as eQ, DecisionComponent as eR, EvaluateDialogComponent as eS, HuconcurrentlyComponent as eT, JobComponent as eU, LanguageChangerComponent as eV, DEFAULT_SVG as eW, ItemComponent as eX, NavigatorComponent as eY, OtpInputComponent as eZ, OtpInputService as e_, CorePositionConcurrentSeekerComponent as ea, CorePositionSeekerComponent as eb, CoreQrcodeComponent as ec, EnumOparator as ed, CoreQueryBuilderComponent as ee, CoreReducerIconComponent as ef, CoreRotatingTextComponent as eg, CoreRouteAccumulatorComponent as eh, CoreRoutingHistoryComponent as ei, CoreSalaryPolicyPickerComponent as ej, CoreScrollComponent as ek, CoreScrollLazyComponent as el, CoreSeenByComponent as em, CoreShiftCardComponent as en, CoreShiftCellComponent as eo, CoreShiftCollectionComponent as ep, CoreShiftStickerComponent as eq, STICKER_COLOR_SCHEMA as er, CoreSubFormGroupComponent as es, CoreTabListComponent as et, CoreTagsComponent as eu, CoreTopicPickerComponent as ev, EnumCoreArticleCategoryTreeaAccessorMode as ew, CoreTopicTreeComponent as ex, CoreTimezoneComponent as ey, CoreTreeComponent as ez, CorePageListComponent as f, PaginationComponent as f0, FilterPipe as f1, normalizeHumanName as f2, PositionComponent as f3, PositionEditService as f4, FileService as f5, LongTaskService as f6, EnumRecursiveFields as f7, RecursiveService as f8, StringService as f9, UnicodeService as fa, StaffProfileComponent as fb, ThreedotsComponent as fc, TooltipComponent as fd, UserActivityComponent as fe, WageComponent as ff, tooltip_directive as fg, coreStickerCollection_component as fh, dragReorder_directive as fi, CoreStatusStickerComponent as g, BaseEditComponent as h, DialogService as i, CorePageEditComponent as j, EnumCoreTablePipeType as k, CoreCheckboxComponent as l, CoreTabsComponent as m, CoreWorkflowService as n, EnumCoreFormControlSeekerSourceType as o, CoreFormService as p, DbService as q, AiHintForColumnComponent as r, CoreWorkflowListComponent as s, CanDeactivateGuard as t, TableCellPipe as u, MapAvatarToServerPipe as v, alertOptions as w, SocketService as x, CoreFormDesignService as y, EnumWorkflowStepType as z };
|
|
46027
|
+
//# sourceMappingURL=ngx-histaff-alpha-ngx-histaff-alpha-BsbSArBq.mjs.map
|