@es.framework/ng.ui.core 2.0.64 → 2.0.66
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/README.md +3 -3
- package/attachments/README.md +3 -3
- package/base-crud/README.md +3 -3
- package/breadcrumb/README.md +3 -3
- package/checkbox/README.md +3 -3
- package/collapsible/README.md +3 -3
- package/color-picker/README.md +3 -3
- package/column-settings-popover/README.md +3 -3
- package/custom-switch/README.md +3 -3
- package/datepicker/README.md +3 -3
- package/deactivation-reason/README.md +3 -3
- package/excel-import/README.md +3 -3
- package/fesm2022/es.framework-ng.ui.core-attachments.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-attachments.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-base-crud.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-breadcrumb.mjs +108 -108
- package/fesm2022/es.framework-ng.ui.core-breadcrumb.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-checkbox.mjs +54 -54
- package/fesm2022/es.framework-ng.ui.core-checkbox.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-collapsible.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-color-picker.mjs +44 -44
- package/fesm2022/es.framework-ng.ui.core-color-picker.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-column-settings-popover.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-column-settings-popover.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-custom-switch.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-datepicker.mjs +178 -178
- package/fesm2022/es.framework-ng.ui.core-datepicker.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-deactivation-reason.mjs +46 -46
- package/fesm2022/es.framework-ng.ui.core-deactivation-reason.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-excel-import.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-filter-templates.mjs +624 -624
- package/fesm2022/es.framework-ng.ui.core-filter-templates.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-form-button.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-form-field.mjs +80 -80
- package/fesm2022/es.framework-ng.ui.core-form-field.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-form-template.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-avatar-image.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-avatar-label.mjs +44 -44
- package/fesm2022/es.framework-ng.ui.core-formly-avatar-label.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-button-selector.mjs +92 -92
- package/fesm2022/es.framework-ng.ui.core-formly-button-selector.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-button.mjs +24 -24
- package/fesm2022/es.framework-ng.ui.core-formly-button.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-presets.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-prime-icon-picker.mjs +366 -366
- package/fesm2022/es.framework-ng.ui.core-formly-prime-icon-picker.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-split-button.mjs +16 -16
- package/fesm2022/es.framework-ng.ui.core-formly-split-button.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-ui-all.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-ui.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-username-with-domain.mjs +16 -16
- package/fesm2022/es.framework-ng.ui.core-formly-username-with-domain.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-assets.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-autocomplete.mjs +38 -38
- package/fesm2022/es.framework-ng.ui.core-generic-autocomplete.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-button.mjs +8 -2
- package/fesm2022/es.framework-ng.ui.core-generic-button.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-card.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-generic-card.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-crud-table.mjs +14 -3
- package/fesm2022/es.framework-ng.ui.core-generic-crud-table.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-dialog.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-generic-dialog.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-errormessage.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-generic-errormessage.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-formly-fields.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-generic-formly-fields.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-listbox.mjs +64 -64
- package/fesm2022/es.framework-ng.ui.core-generic-listbox.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-loadingspinner.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-generic-loadingspinner.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-report-tabs.mjs +68 -68
- package/fesm2022/es.framework-ng.ui.core-generic-report-tabs.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-report.mjs +19 -3
- package/fesm2022/es.framework-ng.ui.core-generic-report.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs +442 -442
- package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-search.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-generic-search.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-selector.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-table.mjs +16 -8
- package/fesm2022/es.framework-ng.ui.core-generic-table.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-view.mjs +7 -4
- package/fesm2022/es.framework-ng.ui.core-generic-view.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-header-wrapper.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-header-wrapper.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-icon-picker.mjs +106 -106
- package/fesm2022/es.framework-ng.ui.core-icon-picker.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-input-switch.mjs +58 -58
- package/fesm2022/es.framework-ng.ui.core-input-switch.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-input-with-icon.mjs +26 -26
- package/fesm2022/es.framework-ng.ui.core-input-with-icon.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-input.mjs +64 -64
- package/fesm2022/es.framework-ng.ui.core-input.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-label-type.mjs +16 -16
- package/fesm2022/es.framework-ng.ui.core-label-type.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-loading-skeletons.mjs +22 -22
- package/fesm2022/es.framework-ng.ui.core-loading-skeletons.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-odata-query-builder.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-odata-query-builder.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-query-type.mjs +14 -14
- package/fesm2022/es.framework-ng.ui.core-query-type.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-radio.mjs +30 -30
- package/fesm2022/es.framework-ng.ui.core-radio.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-repeat.mjs +354 -354
- package/fesm2022/es.framework-ng.ui.core-repeat.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-select.mjs +84 -84
- package/fesm2022/es.framework-ng.ui.core-select.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-sidebar-cards.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-sidebar-cards.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-sidebar-toggles.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-sidebar-toggles.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-tabs.mjs +14 -14
- package/fesm2022/es.framework-ng.ui.core-tabs.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-tag-type.mjs +80 -80
- package/fesm2022/es.framework-ng.ui.core-tag-type.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-text-editor.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-textarea.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-wrappers.mjs +118 -118
- package/fesm2022/es.framework-ng.ui.core-wrappers.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core.mjs.map +1 -1
- package/filter-templates/README.md +3 -3
- package/form-button/README.md +3 -3
- package/form-field/README.md +3 -3
- package/form-template/README.md +3 -3
- package/formly-avatar-image/README.md +3 -3
- package/formly-avatar-label/README.md +3 -3
- package/formly-button/README.md +3 -3
- package/formly-button-selector/README.md +3 -3
- package/formly-presets/README.md +3 -3
- package/formly-prime-icon-picker/README.md +3 -3
- package/formly-split-button/README.md +3 -3
- package/formly-ui/README.md +3 -3
- package/formly-ui-all/README.md +3 -3
- package/formly-username-with-domain/README.md +3 -3
- package/generic-assets/README.md +3 -3
- package/generic-autocomplete/README.md +3 -3
- package/generic-button/README.md +3 -3
- package/generic-card/README.md +3 -3
- package/generic-crud-table/README.md +3 -3
- package/generic-dialog/README.md +3 -3
- package/generic-errormessage/README.md +3 -3
- package/generic-formly-fields/README.md +3 -3
- package/generic-loadingspinner/README.md +3 -3
- package/generic-report/README.md +3 -3
- package/generic-search/README.md +3 -3
- package/generic-search-advanced/README.md +3 -3
- package/generic-selector/README.md +3 -3
- package/generic-table/README.md +3 -3
- package/generic-view/README.md +3 -3
- package/header-wrapper/README.md +3 -3
- package/icon-picker/README.md +3 -3
- package/input/README.md +3 -3
- package/input-switch/README.md +3 -3
- package/input-with-icon/README.md +3 -3
- package/label-type/README.md +3 -3
- package/loading-skeletons/README.md +3 -3
- package/odata-query-builder/README.md +3 -3
- package/package.json +1 -1
- package/query-type/README.md +3 -3
- package/radio/README.md +3 -3
- package/repeat/README.md +3 -3
- package/select/README.md +3 -3
- package/sidebar-cards/README.md +3 -3
- package/sidebar-toggles/README.md +3 -3
- package/styles.css +0 -0
- package/tabs/README.md +3 -3
- package/tag-type/README.md +3 -3
- package/text-editor/README.md +3 -3
- package/textarea/README.md +3 -3
- package/types/es.framework-ng.ui.core-generic-button.d.ts +3 -1
- package/types/es.framework-ng.ui.core-generic-crud-table.d.ts +1 -0
- package/types/es.framework-ng.ui.core-generic-report.d.ts +1 -0
- package/types/es.framework-ng.ui.core-generic-table.d.ts +1 -1
- package/wrappers/README.md +3 -3
|
@@ -65,7 +65,7 @@ class GenericSearch {
|
|
|
65
65
|
this.search.emit(this.model);
|
|
66
66
|
}
|
|
67
67
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericSearch, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
68
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericSearch, isStandalone: true, selector: "lib-generic-search", inputs: { model: "model", fields: "fields" }, outputs: { search: "search" }, viewQueries: [{ propertyName: "overlay", first: true, predicate: ["overlay"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-wrap items-center gap-3 w-full\">\n <!-- Search Input with Icon -->\n <p-inputgroup class=\"w-full\">\n <input\n pInputText\n type=\"text\"\n [(ngModel)]=\"model['filter']\"\n placeholder=\"{{ 'SEARCH' | translate }}\"\n (keyup.enter)=\"onSubmit()\"\n />\n\n\n <p-inputgroup-addon>\n <p-button\n icon=\"pi pi-search\"\n severity=\"secondary\"\n (click)=\"onSubmit()\"\n ></p-button>\n </p-inputgroup-addon>\n <p-inputgroup-addon>\n <p-button\n icon=\"pi pi-filter\"\n severity=\"secondary\"\n (onClick)=\"drawerVisible = true\"\n ></p-button>\n </p-inputgroup-addon>\n @if (model['filter']) {\n <p-inputgroup-addon>\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n (click)=\"model['filter']=''; onSubmit()\"\n ></p-button>\n </p-inputgroup-addon>\n }\n </p-inputgroup>\n\n\n </div>\n\n <!-- Drawer for Advanced Multi-field Search -->\n <p-drawer\n [(visible)]=\"drawerVisible\"\n position=\"right\"\n [modal]=\"true\"\n [dismissible]=\"true\"\n styleClass=\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\"\n >\n <!-- Entire form wrapper -->\n <form [formGroup]=\"form\" class=\"flex flex-col flex-1\">\n <!-- Scrollable Form -->\n <div class=\"flex-1 overflow-auto\">\n <formly-form\n [form]=\"form\"\n [fields]=\"fields_\"\n [model]=\"model\"\n [options]=\"options\"\n >\n </formly-form>\n </div>\n </form>\n <!-- Action Buttons -->\n <ng-template pTemplate=\"footer\">\n <div class=\"flex justify-end mt-2 space-x-2 flex-none\">\n <button\n (click)=\" onSubmit(); drawerVisible=false\"\n type=\"button\"\n pButton size=\"small\"\n label=\"{{ 'SEARCH' | translate }}\">\n </button>\n <button\n type=\"button\"\n pButton\n size=\"small\"\n class=\"p-button-text\"\n (click)=\"onReset(); drawerVisible=false\"\n >\n {{ 'CLEAR' | translate }}\n </button>\n </div>\n </ng-template>\n </p-drawer>\n", dependencies: [{ kind: "component", type: FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "directive", type: i1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: InputIconModule }, { kind: "ngmodule", type: IconFieldModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i4.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: DrawerModule }, { kind: "component", type: i5.Drawer, selector: "p-drawer", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "closeButtonProps", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen", "header", "maskStyle", "closable"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "ngmodule", type: InputGroupModule }, { kind: "component", type: i6.InputGroup, selector: "p-inputgroup, p-inputGroup, p-input-group", inputs: ["styleClass"] }, { kind: "ngmodule", type: InputGroupAddonModule }, { kind: "component", type: i7.InputGroupAddon, selector: "p-inputgroup-addon, p-inputGroupAddon", inputs: ["style", "styleClass"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
68
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericSearch, isStandalone: true, selector: "lib-generic-search", inputs: { model: "model", fields: "fields" }, outputs: { search: "search" }, viewQueries: [{ propertyName: "overlay", first: true, predicate: ["overlay"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-wrap items-center gap-3 w-full\">\r\n <!-- Search Input with Icon -->\r\n <p-inputgroup class=\"w-full\">\r\n <input\r\n pInputText\r\n type=\"text\"\r\n [(ngModel)]=\"model['filter']\"\r\n placeholder=\"{{ 'SEARCH' | translate }}\"\r\n (keyup.enter)=\"onSubmit()\"\r\n />\r\n\r\n\r\n <p-inputgroup-addon>\r\n <p-button\r\n icon=\"pi pi-search\"\r\n severity=\"secondary\"\r\n (click)=\"onSubmit()\"\r\n ></p-button>\r\n </p-inputgroup-addon>\r\n <p-inputgroup-addon>\r\n <p-button\r\n icon=\"pi pi-filter\"\r\n severity=\"secondary\"\r\n (onClick)=\"drawerVisible = true\"\r\n ></p-button>\r\n </p-inputgroup-addon>\r\n @if (model['filter']) {\r\n <p-inputgroup-addon>\r\n <p-button\r\n icon=\"pi pi-times\"\r\n severity=\"danger\"\r\n (click)=\"model['filter']=''; onSubmit()\"\r\n ></p-button>\r\n </p-inputgroup-addon>\r\n }\r\n </p-inputgroup>\r\n\r\n\r\n </div>\r\n\r\n <!-- Drawer for Advanced Multi-field Search -->\r\n <p-drawer\r\n [(visible)]=\"drawerVisible\"\r\n position=\"right\"\r\n [modal]=\"true\"\r\n [dismissible]=\"true\"\r\n styleClass=\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\"\r\n >\r\n <!-- Entire form wrapper -->\r\n <form [formGroup]=\"form\" class=\"flex flex-col flex-1\">\r\n <!-- Scrollable Form -->\r\n <div class=\"flex-1 overflow-auto\">\r\n <formly-form\r\n [form]=\"form\"\r\n [fields]=\"fields_\"\r\n [model]=\"model\"\r\n [options]=\"options\"\r\n >\r\n </formly-form>\r\n </div>\r\n </form>\r\n <!-- Action Buttons -->\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"flex justify-end mt-2 space-x-2 flex-none\">\r\n <button\r\n (click)=\" onSubmit(); drawerVisible=false\"\r\n type=\"button\"\r\n pButton size=\"small\"\r\n label=\"{{ 'SEARCH' | translate }}\">\r\n </button>\r\n <button\r\n type=\"button\"\r\n pButton\r\n size=\"small\"\r\n class=\"p-button-text\"\r\n (click)=\"onReset(); drawerVisible=false\"\r\n >\r\n {{ 'CLEAR' | translate }}\r\n </button>\r\n </div>\r\n </ng-template>\r\n </p-drawer>\r\n", dependencies: [{ kind: "component", type: FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "directive", type: i1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: InputIconModule }, { kind: "ngmodule", type: IconFieldModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i4.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: DrawerModule }, { kind: "component", type: i5.Drawer, selector: "p-drawer", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "closeButtonProps", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen", "header", "maskStyle", "closable"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "ngmodule", type: InputGroupModule }, { kind: "component", type: i6.InputGroup, selector: "p-inputgroup, p-inputGroup, p-input-group", inputs: ["styleClass"] }, { kind: "ngmodule", type: InputGroupAddonModule }, { kind: "component", type: i7.InputGroupAddon, selector: "p-inputgroup-addon, p-inputGroupAddon", inputs: ["style", "styleClass"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
69
69
|
}
|
|
70
70
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericSearch, decorators: [{
|
|
71
71
|
type: Component,
|
|
@@ -83,7 +83,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
83
83
|
DrawerModule,
|
|
84
84
|
InputGroupModule,
|
|
85
85
|
InputGroupAddonModule
|
|
86
|
-
], template: "<div class=\"flex flex-wrap items-center gap-3 w-full\">\n <!-- Search Input with Icon -->\n <p-inputgroup class=\"w-full\">\n <input\n pInputText\n type=\"text\"\n [(ngModel)]=\"model['filter']\"\n placeholder=\"{{ 'SEARCH' | translate }}\"\n (keyup.enter)=\"onSubmit()\"\n />\n\n\n <p-inputgroup-addon>\n <p-button\n icon=\"pi pi-search\"\n severity=\"secondary\"\n (click)=\"onSubmit()\"\n ></p-button>\n </p-inputgroup-addon>\n <p-inputgroup-addon>\n <p-button\n icon=\"pi pi-filter\"\n severity=\"secondary\"\n (onClick)=\"drawerVisible = true\"\n ></p-button>\n </p-inputgroup-addon>\n @if (model['filter']) {\n <p-inputgroup-addon>\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n (click)=\"model['filter']=''; onSubmit()\"\n ></p-button>\n </p-inputgroup-addon>\n }\n </p-inputgroup>\n\n\n </div>\n\n <!-- Drawer for Advanced Multi-field Search -->\n <p-drawer\n [(visible)]=\"drawerVisible\"\n position=\"right\"\n [modal]=\"true\"\n [dismissible]=\"true\"\n styleClass=\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\"\n >\n <!-- Entire form wrapper -->\n <form [formGroup]=\"form\" class=\"flex flex-col flex-1\">\n <!-- Scrollable Form -->\n <div class=\"flex-1 overflow-auto\">\n <formly-form\n [form]=\"form\"\n [fields]=\"fields_\"\n [model]=\"model\"\n [options]=\"options\"\n >\n </formly-form>\n </div>\n </form>\n <!-- Action Buttons -->\n <ng-template pTemplate=\"footer\">\n <div class=\"flex justify-end mt-2 space-x-2 flex-none\">\n <button\n (click)=\" onSubmit(); drawerVisible=false\"\n type=\"button\"\n pButton size=\"small\"\n label=\"{{ 'SEARCH' | translate }}\">\n </button>\n <button\n type=\"button\"\n pButton\n size=\"small\"\n class=\"p-button-text\"\n (click)=\"onReset(); drawerVisible=false\"\n >\n {{ 'CLEAR' | translate }}\n </button>\n </div>\n </ng-template>\n </p-drawer>\n" }]
|
|
86
|
+
], template: "<div class=\"flex flex-wrap items-center gap-3 w-full\">\r\n <!-- Search Input with Icon -->\r\n <p-inputgroup class=\"w-full\">\r\n <input\r\n pInputText\r\n type=\"text\"\r\n [(ngModel)]=\"model['filter']\"\r\n placeholder=\"{{ 'SEARCH' | translate }}\"\r\n (keyup.enter)=\"onSubmit()\"\r\n />\r\n\r\n\r\n <p-inputgroup-addon>\r\n <p-button\r\n icon=\"pi pi-search\"\r\n severity=\"secondary\"\r\n (click)=\"onSubmit()\"\r\n ></p-button>\r\n </p-inputgroup-addon>\r\n <p-inputgroup-addon>\r\n <p-button\r\n icon=\"pi pi-filter\"\r\n severity=\"secondary\"\r\n (onClick)=\"drawerVisible = true\"\r\n ></p-button>\r\n </p-inputgroup-addon>\r\n @if (model['filter']) {\r\n <p-inputgroup-addon>\r\n <p-button\r\n icon=\"pi pi-times\"\r\n severity=\"danger\"\r\n (click)=\"model['filter']=''; onSubmit()\"\r\n ></p-button>\r\n </p-inputgroup-addon>\r\n }\r\n </p-inputgroup>\r\n\r\n\r\n </div>\r\n\r\n <!-- Drawer for Advanced Multi-field Search -->\r\n <p-drawer\r\n [(visible)]=\"drawerVisible\"\r\n position=\"right\"\r\n [modal]=\"true\"\r\n [dismissible]=\"true\"\r\n styleClass=\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\"\r\n >\r\n <!-- Entire form wrapper -->\r\n <form [formGroup]=\"form\" class=\"flex flex-col flex-1\">\r\n <!-- Scrollable Form -->\r\n <div class=\"flex-1 overflow-auto\">\r\n <formly-form\r\n [form]=\"form\"\r\n [fields]=\"fields_\"\r\n [model]=\"model\"\r\n [options]=\"options\"\r\n >\r\n </formly-form>\r\n </div>\r\n </form>\r\n <!-- Action Buttons -->\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"flex justify-end mt-2 space-x-2 flex-none\">\r\n <button\r\n (click)=\" onSubmit(); drawerVisible=false\"\r\n type=\"button\"\r\n pButton size=\"small\"\r\n label=\"{{ 'SEARCH' | translate }}\">\r\n </button>\r\n <button\r\n type=\"button\"\r\n pButton\r\n size=\"small\"\r\n class=\"p-button-text\"\r\n (click)=\"onReset(); drawerVisible=false\"\r\n >\r\n {{ 'CLEAR' | translate }}\r\n </button>\r\n </div>\r\n </ng-template>\r\n </p-drawer>\r\n" }]
|
|
87
87
|
}], propDecorators: { overlay: [{
|
|
88
88
|
type: ViewChild,
|
|
89
89
|
args: ['overlay']
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"es.framework-ng.ui.core-generic-search.mjs","sources":["../../../../libs/ng.ui.core/generic-search/src/lib/generic-search-module.ts","../../../../libs/ng.ui.core/generic-search/src/lib/generic-search.ts","../../../../libs/ng.ui.core/generic-search/src/lib/generic-search.html","../../../../libs/ng.ui.core/generic-search/src/es.framework-ng.ui.core-generic-search.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class GenericSearchModule {}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild, inject } from '@angular/core';\n\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyForm, FormlyFormOptions } from '@ngx-formly/core';\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { ButtonModule } from 'primeng/button';\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { DrawerModule } from 'primeng/drawer';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { LocalizationService } from '@es.framework/ng.core/services';\n\n@Component({\n selector: 'lib-generic-search',\n standalone: true,\n imports: [\n FormlyForm,\n TranslatePipe,\n ToolbarModule,\n ButtonModule,\n ReactiveFormsModule,\n PopoverModule,\n FormsModule,\n InputIconModule,\n IconFieldModule,\n InputTextModule,\n DrawerModule,\n InputGroupModule,\n InputGroupAddonModule\n],\n templateUrl: './generic-search.html',\n})\nexport class GenericSearch implements OnInit {\n @ViewChild('overlay') overlay!: Popover;\n translate = inject(LocalizationService);\ndrawerVisible = false;\n // @Input() placeholder = 'بحث...';\n\n /**\n * List of fields to search by\n * Example: [{ label: 'Name', value: 'name' }, { label: 'Email', value: 'email' }]\n */\n\n\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() search = new EventEmitter<any>();\n\n form = new FormGroup({});\n @Input() model: any = {};\n options: FormlyFormOptions = {};\n @Input() fields: FormlyFieldConfig[] = [];\n fields_: FormlyFieldConfig[] = [];\n\n// onTogglePopover(event: any) {\n// debugger\n// this.overlay.toggle(event);\n// }\n ngOnInit() {\n this.fields_ = this.fields;\n }\n\n onSubmit() {\n this.search.emit(this.model);\n }\n\n onReset() {\n this.model = {};\n this.search.emit(this.model);\n }\n}\n","<div class=\"flex flex-wrap items-center gap-3 w-full\">\n <!-- Search Input with Icon -->\n <p-inputgroup class=\"w-full\">\n <input\n pInputText\n type=\"text\"\n [(ngModel)]=\"model['filter']\"\n placeholder=\"{{ 'SEARCH' | translate }}\"\n (keyup.enter)=\"onSubmit()\"\n />\n\n\n <p-inputgroup-addon>\n <p-button\n icon=\"pi pi-search\"\n severity=\"secondary\"\n (click)=\"onSubmit()\"\n ></p-button>\n </p-inputgroup-addon>\n <p-inputgroup-addon>\n <p-button\n icon=\"pi pi-filter\"\n severity=\"secondary\"\n (onClick)=\"drawerVisible = true\"\n ></p-button>\n </p-inputgroup-addon>\n @if (model['filter']) {\n <p-inputgroup-addon>\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n (click)=\"model['filter']=''; onSubmit()\"\n ></p-button>\n </p-inputgroup-addon>\n }\n </p-inputgroup>\n\n\n </div>\n\n <!-- Drawer for Advanced Multi-field Search -->\n <p-drawer\n [(visible)]=\"drawerVisible\"\n position=\"right\"\n [modal]=\"true\"\n [dismissible]=\"true\"\n styleClass=\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\"\n >\n <!-- Entire form wrapper -->\n <form [formGroup]=\"form\" class=\"flex flex-col flex-1\">\n <!-- Scrollable Form -->\n <div class=\"flex-1 overflow-auto\">\n <formly-form\n [form]=\"form\"\n [fields]=\"fields_\"\n [model]=\"model\"\n [options]=\"options\"\n >\n </formly-form>\n </div>\n </form>\n <!-- Action Buttons -->\n <ng-template pTemplate=\"footer\">\n <div class=\"flex justify-end mt-2 space-x-2 flex-none\">\n <button\n (click)=\" onSubmit(); drawerVisible=false\"\n type=\"button\"\n pButton size=\"small\"\n label=\"{{ 'SEARCH' | translate }}\">\n </button>\n <button\n type=\"button\"\n pButton\n size=\"small\"\n class=\"p-button-text\"\n (click)=\"onReset(); drawerVisible=false\"\n >\n {{ 'CLEAR' | translate }}\n </button>\n </div>\n </ng-template>\n </p-drawer>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"es.framework-ng.ui.core-generic-search.mjs","sources":["../../../../libs/ng.ui.core/generic-search/src/lib/generic-search-module.ts","../../../../libs/ng.ui.core/generic-search/src/lib/generic-search.ts","../../../../libs/ng.ui.core/generic-search/src/lib/generic-search.html","../../../../libs/ng.ui.core/generic-search/src/es.framework-ng.ui.core-generic-search.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n})\r\nexport class GenericSearchModule {}\r\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild, inject } from '@angular/core';\r\n\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyFieldConfig, FormlyForm, FormlyFormOptions } from '@ngx-formly/core';\r\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\r\nimport { ToolbarModule } from 'primeng/toolbar';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { Popover, PopoverModule } from 'primeng/popover';\r\nimport { InputIconModule } from 'primeng/inputicon';\r\nimport { IconFieldModule } from 'primeng/iconfield';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DrawerModule } from 'primeng/drawer';\r\nimport { InputGroupModule } from 'primeng/inputgroup';\r\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\r\nimport { LocalizationService } from '@es.framework/ng.core/services';\r\n\r\n@Component({\r\n selector: 'lib-generic-search',\r\n standalone: true,\r\n imports: [\r\n FormlyForm,\r\n TranslatePipe,\r\n ToolbarModule,\r\n ButtonModule,\r\n ReactiveFormsModule,\r\n PopoverModule,\r\n FormsModule,\r\n InputIconModule,\r\n IconFieldModule,\r\n InputTextModule,\r\n DrawerModule,\r\n InputGroupModule,\r\n InputGroupAddonModule\r\n],\r\n templateUrl: './generic-search.html',\r\n})\r\nexport class GenericSearch implements OnInit {\r\n @ViewChild('overlay') overlay!: Popover;\r\n translate = inject(LocalizationService);\r\ndrawerVisible = false;\r\n // @Input() placeholder = 'بحث...';\r\n\r\n /**\r\n * List of fields to search by\r\n * Example: [{ label: 'Name', value: 'name' }, { label: 'Email', value: 'email' }]\r\n */\r\n\r\n\r\n // eslint-disable-next-line @angular-eslint/no-output-native\r\n @Output() search = new EventEmitter<any>();\r\n\r\n form = new FormGroup({});\r\n @Input() model: any = {};\r\n options: FormlyFormOptions = {};\r\n @Input() fields: FormlyFieldConfig[] = [];\r\n fields_: FormlyFieldConfig[] = [];\r\n\r\n// onTogglePopover(event: any) {\r\n// debugger\r\n// this.overlay.toggle(event);\r\n// }\r\n ngOnInit() {\r\n this.fields_ = this.fields;\r\n }\r\n\r\n onSubmit() {\r\n this.search.emit(this.model);\r\n }\r\n\r\n onReset() {\r\n this.model = {};\r\n this.search.emit(this.model);\r\n }\r\n}\r\n","<div class=\"flex flex-wrap items-center gap-3 w-full\">\r\n <!-- Search Input with Icon -->\r\n <p-inputgroup class=\"w-full\">\r\n <input\r\n pInputText\r\n type=\"text\"\r\n [(ngModel)]=\"model['filter']\"\r\n placeholder=\"{{ 'SEARCH' | translate }}\"\r\n (keyup.enter)=\"onSubmit()\"\r\n />\r\n\r\n\r\n <p-inputgroup-addon>\r\n <p-button\r\n icon=\"pi pi-search\"\r\n severity=\"secondary\"\r\n (click)=\"onSubmit()\"\r\n ></p-button>\r\n </p-inputgroup-addon>\r\n <p-inputgroup-addon>\r\n <p-button\r\n icon=\"pi pi-filter\"\r\n severity=\"secondary\"\r\n (onClick)=\"drawerVisible = true\"\r\n ></p-button>\r\n </p-inputgroup-addon>\r\n @if (model['filter']) {\r\n <p-inputgroup-addon>\r\n <p-button\r\n icon=\"pi pi-times\"\r\n severity=\"danger\"\r\n (click)=\"model['filter']=''; onSubmit()\"\r\n ></p-button>\r\n </p-inputgroup-addon>\r\n }\r\n </p-inputgroup>\r\n\r\n\r\n </div>\r\n\r\n <!-- Drawer for Advanced Multi-field Search -->\r\n <p-drawer\r\n [(visible)]=\"drawerVisible\"\r\n position=\"right\"\r\n [modal]=\"true\"\r\n [dismissible]=\"true\"\r\n styleClass=\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\"\r\n >\r\n <!-- Entire form wrapper -->\r\n <form [formGroup]=\"form\" class=\"flex flex-col flex-1\">\r\n <!-- Scrollable Form -->\r\n <div class=\"flex-1 overflow-auto\">\r\n <formly-form\r\n [form]=\"form\"\r\n [fields]=\"fields_\"\r\n [model]=\"model\"\r\n [options]=\"options\"\r\n >\r\n </formly-form>\r\n </div>\r\n </form>\r\n <!-- Action Buttons -->\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"flex justify-end mt-2 space-x-2 flex-none\">\r\n <button\r\n (click)=\" onSubmit(); drawerVisible=false\"\r\n type=\"button\"\r\n pButton size=\"small\"\r\n label=\"{{ 'SEARCH' | translate }}\">\r\n </button>\r\n <button\r\n type=\"button\"\r\n pButton\r\n size=\"small\"\r\n class=\"p-button-text\"\r\n (click)=\"onReset(); drawerVisible=false\"\r\n >\r\n {{ 'CLEAR' | translate }}\r\n </button>\r\n </div>\r\n </ng-template>\r\n </p-drawer>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"es.framework-ng.ui.core-generic-selector.mjs","sources":["../../../../libs/ng.ui.core/generic-selector/src/lib/generic-selector-module.ts","../../../../libs/ng.ui.core/generic-selector/src/lib/generic-selector.component.ts","../../../../libs/ng.ui.core/generic-selector/src/es.framework-ng.ui.core-generic-selector.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class GenericSelectorModule {}\n","import { ChangeDetectorRef, Component, Injector, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { forkJoin, Observable, Subscription } from 'rxjs';\r\nimport { finalize, map, tap } from 'rxjs/operators';\r\n\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { AutoCompleteModule, AutoComplete } from 'primeng/autocomplete';\r\nimport { InputGroupModule } from 'primeng/inputgroup';\r\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\r\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\r\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { BaseService, FilterGroup, LocalizationService, QueryParameters, QueryParser } from '@es.framework/ng.core/services';\r\nimport { GenericDialogComponent } from '@es.framework/ng.ui.core/generic-dialog';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { FormlyFieldConfig, FieldType, FormlyAttributes, FieldTypeConfig } from '@ngx-formly/core';\r\n\r\ninterface GenericSelectorProps extends FormlyFieldProps/* , FormlyFieldSelectProps */ {\r\n // appendTo?: Select['appendTo'];\r\n moduleName: string;\r\n serviceName: string;\r\n listEndpoint?: string | ((model: any) => string);\r\n loadDefaultField?: string;\r\n loadDefaultValue?: string;\r\n loadDefault?: boolean;\r\n defaultQuery?: Record<string, any> | QueryParameters;\r\n\r\n labelField?: string;\r\n labelFieldEn?: string;\r\n valueField?: string;\r\n useMultiLang?: boolean;\r\n\r\n multiple?: boolean;\r\n\r\n display?: boolean;\r\n offline?: boolean;\r\n\r\n loadSaved?: boolean;\r\n loadSavedField?: string;\r\n\r\n\r\n /** Static offline items (array of objects) */\r\n offlineItems?: any[];\r\n\r\n /** Async offline items (observable) */\r\n offlineItems$?: Observable<any[]>;\r\n\r\n /** Function-based filter for offline items */\r\n onSelect?: (field: FormlyFieldConfig, event?: any) => void;\r\n\r\n offlineDataFn?: (query?: string) => any[];\r\n query?: Record<string, any> | QueryParameters;\r\n fixedFilters?: Record<string, any>;\r\n defaultValue?: any; // id أو array of ids\r\n defaultItem?: any; // الكائن كامل (object) إذا عندك جاهز\r\n\r\n viewPermissionName?: string;\r\n editPermissionName?: string;\r\n addPermissionName?: string;\r\n idField?: string;\r\n dialogDisplayMode?: | 'drawer'\r\n | 'dialog'\r\n | 'route'\r\n | 'inline'\r\n | Partial<\r\n Record<\r\n 'add' | 'edit' | 'view',\r\n 'drawer' | 'dialog' | 'route' | 'inline'\r\n >>;\r\n canAdd?: boolean;\r\n canLookup?: boolean;\r\n formFields?: FormlyFieldConfig[];\r\n afterSave?: (field: FormlyFieldConfig, event?: any) => void;\r\n\r\n formatter?: (row: any, value?: any) => string;\r\n\r\n}\r\n\r\n@Component({\r\n selector: 'formly-generic-selector',\r\n template: `\r\n <!-- [ngStyle]=\"{'display': props.display ? 'block': 'none'}\" -->\r\n <p-inputGroup class=\"w-full\">\r\n <p-autoComplete\r\n #autoComp\r\n [ngModel]=\"selectedItem\"\r\n (ngModelChange)=\"onSelectionChange($event)\"\r\n [formlyAttributes]=\"field\"\r\n [suggestions]=\"options_\"\r\n (completeMethod)=\"search($event)\"\r\n [multiple]=\"to['multiple']\"\r\n [optionLabel]=\"optionLabel\"\r\n [dropdown]=\"false\"\r\n [forceSelection]=\"true\"\r\n [placeholder]=\"(props['placeholder'] ?? '') | translate\"\r\n [disabled]=\"!!props.disabled\"\r\n dropdownMode=\"current\"\r\n appendTo=\"body\"\r\n class=\"w-full rounded-none\"\r\n [showEmptyMessage]=\"true\"\r\n (onSelect)=\"onSelect($event)\"\r\n emptyMessage=\"{{ getEmptyMessage() | translate }}\"\r\n [showTransitionOptions]=\"'0ms'\"\r\n [showClear]=\"!(props['required'] ?? false)\"\r\n\r\n (keydown.arrowdown)=\"onArrowDown($event)\"\r\n (keydown.escape)=\"onEscape($event)\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"flex flex-col\">\r\n <span [innerHTML]=\"getFormattedLabel(item)\"></span>\r\n\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled || loading\"\r\n [icon]=\"loading ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\r\n (click)=\"onDropdownButtonClick()\"\r\n severity=\"secondary\" />\r\n </p-inputGroupAddon>\r\n <!-- Add new button -->\r\n @if (props.canAdd && props.formFields) {\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled\"\r\n icon=\"pi pi-plus\"\r\n (click)=\"onAddNewClick()\"\r\n severity=\"primary\" />\r\n </p-inputGroupAddon>\r\n }\r\n</p-inputGroup>\r\n\r\n<!-- [model]=\"model\" -->\r\n <app-generic-dialog\r\n #dialog\r\n [formFields]=\"props.formFields ?? []\"\r\n [apiName]=\"props.serviceName\"\r\n [moduleName]=\"props.moduleName\"\r\n [idField]=\"props.idField ??'id'\"\r\n [displayMode]=\"props.dialogDisplayMode ?? 'dialog'\"\r\n (afterSave)=\"afterSave($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n\r\n `,\r\n providers: [DialogService,BaseService],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n AutoCompleteModule,\r\n InputGroupModule,\r\n InputGroupAddonModule,\r\n FormlyAttributes,\r\n TranslatePipe,\r\n AutoComplete,\r\n CheckboxModule,\r\n ButtonModule,\r\n GenericDialogComponent\r\n]\r\n})\r\nexport class GenericSelectorTypeComponent extends FieldType<FieldTypeConfig<GenericSelectorProps>> implements OnInit,OnDestroy {\r\n @ViewChild('autoComp') autoComp!: AutoComplete;\r\n @ViewChild('dialog') dialog!: GenericDialogComponent;\r\n options_: any[] = [];\r\n selectedItem: any;\r\n\r\n loading = false;\r\n private _offlineList: any[] = [];\r\n private translateService= inject(LocalizationService);\r\n\r\n api: BaseService|any;\r\n private valueChangeSubscription!: Subscription; // Add a subscription to manage the observable\r\n\r\nget optionLabel(): string {\r\n if(this.to.useMultiLang == true){\r\n if(this.translateService.currentLang == 'en'){\r\n return this.to?.labelFieldEn || 'name';\r\n }\r\n return this.to?.labelField || 'name';\r\n }\r\n return this.to?.labelField || 'name';\r\n}\r\n\r\nprivate isNullOrEmpty(val: any): boolean {\r\n return val === null || val === undefined || val === '';\r\n}\r\n getFormattedLabel(item: any): SafeHtml {\r\n if (!item) return '';\r\n\r\n let value: string;\r\n\r\n // Use the formatter if provided\r\n if (this.to?.formatter) {\r\n value = this.to.formatter(item);\r\n } else {\r\n value = this.getPrimaryLabel(item);\r\n }\r\n\r\n // Sanitize it for safe HTML\r\n return this.sanitizer.bypassSecurityTrustHtml(value || '');\r\n }\r\ngetPrimaryLabel(item: any): string {\r\n const fields = [\r\n this.optionLabel, // resolved field name from getter\r\n this.to.labelField || 'name',\r\n this.to.labelFieldEn || 'name'\r\n ];\r\n\r\n for (const f of fields) {\r\n const v = item[f];\r\n if (!this.isNullOrEmpty(v)) {\r\n return v;\r\n }\r\n }\r\n\r\n return '';\r\n}\r\n\r\nprivate sanitizer: DomSanitizer = inject(DomSanitizer);\r\n\r\n constructor(private svc: BaseService,private injector: Injector,private cdr: ChangeDetectorRef) {\r\n super();\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.api = this.svc;\r\n const to = this.props;\r\n this.api.apiName = to['serviceName'];\r\n this.api.moduleName = to['moduleName'];\r\n\r\n if (to['offline']) {\r\n if (to['offlineDataFn']) {\r\n this._offlineList = to['offlineDataFn']();\r\n this.initOfflineSelection();\r\n } else if (to['offlineItems$']) {\r\n to['offlineItems$'].subscribe((list: any[]) => {\r\n this._offlineList = list;\r\n this.initOfflineSelection();\r\n });\r\n } else {\r\n this._offlineList = to['offlineItems'] || [];\r\n this.initOfflineSelection();\r\n }\r\n } else {\r\n\r\n if (this.props.loadSaved && !this.props.multiple && this.props.loadSavedField && this.props.valueField) {\r\n const vf = this.to['valueField'] || 'id';\r\n const lf = this.optionLabel;\r\n this.selectedItem =\r\n {\r\n [vf]:this.formControl.value,\r\n [lf]:this.model[this.props.loadSavedField],\r\n };\r\n if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n else{\r\n\r\n this.initOnlineSelection();\r\n }\r\n }\r\n\r\n // Subscribe to formControl value changes\r\n this.valueChangeSubscription = this.formControl.valueChanges\r\n .subscribe(() => {\r\n // This tap operator is a good place to run side effects\r\n // like calling your change handler after a value changes.\r\n // this.selectedItem = this.formControl.value;\r\n if (this.props.change) {\r\n if (to['offline']) {\r\n if (to['offlineDataFn']) {\r\n this._offlineList = to['offlineDataFn']();\r\n this.initOfflineSelection(false);\r\n } else if (to['offlineItems$']) {\r\n to['offlineItems$'].subscribe((list: any[]) => {\r\n this._offlineList = list;\r\n this.initOfflineSelection(false);\r\n });\r\n } else {\r\n this._offlineList = to['offlineItems'] || [];\r\n this.initOfflineSelection(false);\r\n }\r\n } else {\r\n this.initOnlineSelection(false);\r\n }\r\n }\r\n })\r\n ;\r\n }\r\n\r\n // Remember to unsubscribe to prevent memory leaks!\r\n ngOnDestroy() {\r\n if (this.valueChangeSubscription) {\r\n this.valueChangeSubscription.unsubscribe();\r\n }\r\n }\r\nprivate loadDefaultValue() {\r\n this.loading = true;\r\n\r\n const vf = this.to['valueField'] || 'id';\r\n const fixedFilters = this.getFixedFilters();\r\n\r\n let listEndpoint = this.props.listEndpoint;\r\n if (typeof listEndpoint === 'function') {\r\n listEndpoint = listEndpoint(this.model);\r\n }\r\n\r\n let searchParams: Record<string, any> = {};\r\n\r\n // ✅ CASE 1: defaultQuery exists (FULL dynamic query like search)\r\n if (this.to['defaultQuery']) {\r\n const dq = this.to['defaultQuery'];\r\n\r\n const queryParams: QueryParameters = {\r\n filters: [],\r\n orderBy: dq.orderBy ?? [],\r\n groupBy: dq.groupBy ?? [],\r\n expand: dq.expand ?? [],\r\n select: dq.select ?? [],\r\n top: dq.top ?? 1, // 👈 important for default (only 1)\r\n skip: dq.skip ?? 0,\r\n };\r\n\r\n // 🔹 Execute filters (function or static)\r\n let dynamicFilters: FilterGroup[] = [];\r\n\r\n if (dq.filters) {\r\n if (typeof dq.filters === 'function') {\r\n dynamicFilters = dq.filters('', this.field); // 👈 no search text\r\n } else if (Array.isArray(dq.filters)) {\r\n dynamicFilters = dq.filters;\r\n }\r\n }\r\n\r\n // 🔹 Add dynamic filters\r\n dynamicFilters.forEach((fg, index) => {\r\n if (index === 0 && queryParams.filters.length === 0) {\r\n queryParams.filters.push(fg);\r\n } else {\r\n queryParams.filters.push({\r\n ...fg,\r\n groupLogicalOperator: fg.groupLogicalOperator || 'and',\r\n });\r\n }\r\n });\r\n\r\n // 🔹 Merge fixed filters\r\n if (fixedFilters) {\r\n const fixedGroup: FilterGroup = {\r\n logicalOperator: 'and',\r\n conditions: Object.keys(fixedFilters).map(key => ({\r\n field: key,\r\n operator: 'eq',\r\n value: fixedFilters[key],\r\n })),\r\n };\r\n\r\n queryParams.filters.push({\r\n ...fixedGroup,\r\n groupLogicalOperator: 'and',\r\n });\r\n }\r\n\r\n searchParams = {\r\n query: QueryParser.toString(queryParams),\r\n };\r\n }\r\n\r\n // ✅ CASE 2: fallback (old behavior)\r\n else {\r\n const lf = this.to['loadDefaultField'] || 'isDefault';\r\n const lfValue = this.to['loadDefaultValue'] ?? true;\r\n\r\n searchParams = {\r\n [lf]: lfValue,\r\n ...fixedFilters,\r\n };\r\n }\r\n\r\n // 🚀 Call API\r\n this.api.getList(searchParams, listEndpoint)\r\n .subscribe({\r\n next: (res: any) => {\r\n const items = res?.items ?? res ?? [];\r\n\r\n if (items.length > 0) {\r\n if (this.to['multiple']) {\r\n this.formControl.setValue(items.map((c: any) => c[vf]));\r\n } else {\r\n this.formControl.setValue(items[0]?.[vf]);\r\n }\r\n }\r\n\r\n this.loading = false;\r\n },\r\n error: (err: any) => {\r\n console.error(\"Failed to load default value from API:\", err);\r\n this.loading = false;\r\n }\r\n });\r\n}\r\n // New method to handle loading the default value from the API\r\n\r\n afterSave(event: any) {\r\n this.onSelectionChange(event.record);\r\n if (this.props.afterSave) {\r\n this.props.afterSave(this.field, { item: event.response });\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n\r\n onSelect(event: any) {\r\n\r\n if (this.props.onSelect) {\r\n this.props.onSelect(this.field, { item: event.value });\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n\r\n onSelectionChange(val: any) {\r\n const vf = this.to['valueField'] || 'id';\r\n if(this.to['offline']){\r\n // this.selectedItem = val;\r\n\r\n if (this.to['multiple'] && Array.isArray(val)) {\r\n this.selectedItem = this._offlineList.filter(item =>\r\n val.includes(item[vf])\r\n );\r\n this.formControl.setValue(\r\n Array.isArray(this.selectedItem) ? this.selectedItem.map((c: any) => c[vf]) : []\r\n );\r\n } else {\r\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\r\n this.formControl.setValue(this.selectedItem?.[vf] ?? null);\r\n }\r\n }\r\n else{\r\n this.selectedItem = val;\r\n\r\n if (this.to['multiple']) {\r\n this.formControl.setValue(\r\n Array.isArray(val) ? val.map((c: any) => c[vf]) : []\r\n );\r\n } else {\r\n this.formControl.setValue(val?.[vf] ?? null);\r\n }\r\n }\r\n\r\n}\r\n private initOfflineSelection(withSetValue=true) {\r\n const val = this.formControl.value;\r\n const vf = this.to['valueField'] || 'id';\r\n\r\n if (val == null) return;\r\n\r\n if (this.to['multiple'] && Array.isArray(val)) {\r\n this.selectedItem = this._offlineList.filter(item =>\r\n val.includes(item[vf])\r\n );\r\n } else {\r\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\r\n }\r\n\r\n if(withSetValue == true){\r\n\r\n this.formControl.setValue(\r\n this.to['multiple']\r\n ? this.selectedItem.map((c: any) => c[vf])\r\n : this.selectedItem?.[vf]\r\n );\r\n }\r\n else{\r\n if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n }\r\n\r\n private initOnlineSelection(withSetValue = true) {\r\n const val = this.formControl.value;\r\n const vf = this.to['valueField'] || 'id';\r\n\r\n if (val == null || (Array.isArray(val) && val.length === 0)) {\r\n this.selectedItem = this.to['multiple'] ? [] : null;\r\n\r\n if (this.props['loadDefault'] === true) {\r\n this.loadDefaultValue();\r\n }\r\n return;\r\n }\r\n\r\n if (this.to['multiple'] && Array.isArray(val) && val.length) {\r\n this.loading = true;\r\n\r\n const fixedFilters = this.getFixedFilters();\r\n\r\n // 🔑 one getList call per id, but include fixedFilters in each\r\n const calls = val.map((id: any) =>\r\n this.api.getList({ ...fixedFilters, [vf]: id }).pipe(\r\n map((res: any) => (res?.items?.length ? res.items[0] : null))\r\n )\r\n );\r\n\r\n forkJoin(calls)\r\n .pipe(finalize(() => (this.loading = false)))\r\n .subscribe({\r\n next: (items: any[]) => {\r\n this.selectedItem = items.filter(i => i != null);\r\n\r\n if (withSetValue) {\r\n this.formControl.setValue(this.selectedItem.map((c: any) => c[vf]));\r\n } else if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n }\r\n\r\n this.cdr.detectChanges();\r\n },\r\n error: (err: any) => {\r\n console.error('Failed to load multiple selections:', err);\r\n this.selectedItem = [];\r\n this.loading = false;\r\n },\r\n });\r\n } else {\r\n this.loading = true;\r\n\r\n const fixedFilters = this.getFixedFilters();\r\n const searchParams = { ...fixedFilters, [vf]: val };\r\n\r\n this.api\r\n .getList(searchParams)\r\n .pipe(finalize(() => (this.loading = false)))\r\n .subscribe({\r\n next: (res: any) => {\r\n const item = res?.items?.[0] || null;\r\n this.selectedItem = item;\r\n\r\n if (withSetValue) {\r\n this.formControl.setValue(item?.[vf]);\r\n } else if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n }\r\n\r\n this.cdr.detectChanges();\r\n },\r\n error: (err: any) => {\r\n console.error('Failed to load selection:', err);\r\n this.selectedItem = null;\r\n this.loading = false;\r\n },\r\n });\r\n }\r\n}\r\n\r\n\r\ngetFixedFilters(query:string=''): any {\r\n const fixedFilters = this.to['fixedFilters'];\r\n\r\n if (typeof fixedFilters === 'function') {\r\n // Call with current model (and optionally field)\r\n try {\r\n return fixedFilters(query, this.field);\r\n } catch (error) {\r\n return fixedFilters(this.model);\r\n }\r\n }\r\n\r\n return fixedFilters || {};\r\n }\r\n\r\nonArrowDown(event: any) {\r\n event.preventDefault();\r\n // this.autoComp.show();\r\nthis.onDropdownButtonClick();\r\n}\r\n\r\nonEscape(event: any) {\r\n this.autoComp.hide();\r\n\r\n}\r\nonAddNewClick() {\r\n // your logic for adding a new item\r\n // e.g. open dialog or emit event\r\n console.log('Add new item clicked');\r\n this.dialog.openForm(\"create\");\r\n}\r\nonDropdownButtonClick() {\r\n this.search({ query: '' }); // trigger your own search\r\n setTimeout(() => this.autoComp.show(), 0); // force dropdown to open\r\n}\r\n// Called when dropdown button clicked\r\n onDropdownClick(event: any) {\r\n // 🚫 stop the default dropdown behavior\r\n event.originalEvent.preventDefault();\r\n event.originalEvent.stopPropagation();\r\n\r\n console.log('Dropdown clicked!', event);\r\n // ✅ your custom code here\r\n // e.g., force trigger search for empty query\r\n this.search({ query: '' });\r\n }\r\n\r\n\r\n\r\n\r\nsearch(event: { query: string }) {\r\n const q = event.query?.toString() || '';\r\n const lf = this.optionLabel;\r\n const fixedFilters = this.getFixedFilters(q);\r\n\r\n if (this.to['offline']) {\r\n this.options_ = this.to['offlineDataFn']\r\n ? this.to['offlineDataFn'](q)\r\n : this._offlineList.filter(item =>\r\n item[lf]?.toString().includes(q)\r\n );\r\n\r\n setTimeout(() => this.autoComp?.show(), 0);\r\n } else {\r\n this.loading = true;\r\n this.options_ = [];\r\n\r\n // Build QueryParameters\r\n const queryParams: QueryParameters = {\r\n filters: [],\r\n orderBy: [],\r\n groupBy: [],\r\n expand:[],\r\n select:[],\r\n top: 10,\r\n skip: 0,\r\n };\r\n\r\n // Handle main search and fixed filters\r\n if (!this.to['query']) {\r\n // Create a group for main search condition\r\n const mainGroup: FilterGroup = {\r\n logicalOperator: 'and',\r\n conditions: [\r\n {\r\n field: lf,\r\n operator: 'contains',\r\n value: q\r\n }\r\n ]\r\n };\r\n\r\n // Add fixed filters to the same group\r\n Object.keys(fixedFilters || {}).forEach(key => {\r\n const value = fixedFilters[key];\r\n if (value !== null && value !== undefined) {\r\n mainGroup.conditions.push({\r\n field: key,\r\n operator: 'eq',\r\n value: value\r\n });\r\n }\r\n });\r\n\r\n if (mainGroup.conditions.length > 0) {\r\n queryParams.filters.push(mainGroup);\r\n }\r\n }\r\n else{\r\n\r\n queryParams.skip = this.to['query'].skip ?? 0;\r\n queryParams.top = this.to['query'].top ?? 10;\r\n queryParams.orderBy = this.to['query'].orderBy;\r\n queryParams.groupBy = this.to['query'].groupBy;\r\n queryParams.expand = this.to['query'].expand;\r\n queryParams.select = this.to['query'].select;\r\n\r\n }\r\n\r\n // Merge dynamic filters (function or array)\r\n let dynamicFilters: FilterGroup[] | any[] = [];\r\n if(this.to['query'] && this.to['query']['filters']){\r\n\r\n const filtersProp = this.to['query']['filters'];\r\n if (typeof filtersProp === 'function') {\r\n dynamicFilters = filtersProp(q,this.field); // pass search text\r\n } else if (Array.isArray(filtersProp)) {\r\n dynamicFilters = filtersProp;\r\n }\r\n }\r\n // Add dynamic filters with proper groupLogicalOperator\r\n dynamicFilters.forEach((filterGroup, index) => {\r\n if (index === 0 && queryParams.filters.length === 0) {\r\n // First filter group, no groupLogicalOperator needed\r\n queryParams.filters.push(filterGroup);\r\n } else {\r\n // Subsequent groups, ensure they have groupLogicalOperator\r\n const groupWithOperator = {\r\n ...filterGroup,\r\n groupLogicalOperator: filterGroup.groupLogicalOperator || 'and'\r\n };\r\n queryParams.filters.push(groupWithOperator);\r\n }\r\n });\r\n\r\n // Use listEndpoint if available, otherwise use default\r\n let listEndpoint = this.props.listEndpoint;\r\n if (typeof listEndpoint === 'function') {\r\n listEndpoint = listEndpoint(this.model);\r\n }\r\n\r\n const searchParams: Record<string, any> = {\r\n 'query': QueryParser.toString(queryParams)\r\n };\r\n\r\n this.api.getList(searchParams, listEndpoint)\r\n .pipe(finalize(() => (this.loading = false)))\r\n .subscribe({\r\n next: (res: any) => {\r\n this.options_ = res.items ?? res ?? [];\r\n setTimeout(() => this.autoComp?.show(), 0);\r\n },\r\n error: () => {\r\n this.options_ = [];\r\n },\r\n });\r\n }\r\n}\r\n\r\n openCrud(mode: 'add' | 'edit' | 'info') {\r\n const payload = mode === 'add' ? null : this.selectedItem;\r\n\r\n // Example integration:\r\n // const ref = this.dialog.open(CrudComponent, {\r\n // data: {\r\n // serviceName: this.to.serviceName,\r\n // mode,\r\n // record: payload\r\n // }\r\n // });\r\n // ref.onClose.subscribe((updated: any) => {\r\n // if (!this.to.multiple && updated?.[this.to.valueField]) {\r\n // this.api.get(updated[this.to.valueField])\r\n // .subscribe(item => {\r\n // this.selectedItem = item;\r\n // this.formControl.setValue(item?.[this.to.valueField]);\r\n // });\r\n // }\r\n // });\r\n\r\n }\r\n\r\n getEmptyMessage(): string {\r\n if (this.loading) {\r\n return 'LOADING_DATA_MESSAGE'; // مفتاح ترجمة لـ \"جاري تحميل البيانات...\"\r\n } else if (this.options_.length === 0) {\r\n return 'NO_RESULTS_FOUND'; // مفتاح ترجمة لـ \"لا توجد نتائج مطابقة.\"\r\n }\r\n return ''; // لا تُعرض رسالة إذا كانت هناك نتائج\r\n }\r\n\r\nisItemSelected(item: any): boolean {\r\n const vf = this.to['valueField'] || 'id';\r\n return Array.isArray(this.selectedItem) &&\r\n this.selectedItem.some((sel: any) => sel[vf] === item[vf]);\r\n}\r\n\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;MAMa,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAFtB,YAAY,CAAA,EAAA,CAAA;AAEX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAFtB,YAAY,CAAA,EAAA,CAAA;;2FAEX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACxB,iBAAA;;;ACkKK,MAAQ,4BAA6B,SAAQ,SAAgD,CAAA;AA4D7E,IAAA,GAAA;AAAyB,IAAA,QAAA;AAA2B,IAAA,GAAA;AA3DjD,IAAA,QAAQ;AACV,IAAA,MAAM;IAC3B,QAAQ,GAAU,EAAE;AACpB,IAAA,YAAY;IAEZ,OAAO,GAAG,KAAK;IACP,YAAY,GAAU,EAAE;AACxB,IAAA,gBAAgB,GAAE,MAAM,CAAC,mBAAmB,CAAC;AAErD,IAAA,GAAG;IACI,uBAAuB,CAAgB;AAEhD,IAAA,IAAI,WAAW,GAAA;QACb,IAAG,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,IAAI,EAAC;YAC7B,IAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,IAAI,IAAI,EAAC;AAC7C,gBAAA,OAAO,IAAI,CAAC,EAAE,EAAE,YAAY,IAAI,MAAM;YACtC;AACC,YAAA,OAAO,IAAI,CAAC,EAAE,EAAE,UAAU,IAAI,MAAM;QACxC;AACA,QAAA,OAAO,IAAI,CAAC,EAAE,EAAE,UAAU,IAAI,MAAM;IACtC;AAEQ,IAAA,aAAa,CAAC,GAAQ,EAAA;QAC5B,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;IACxD;AACC,IAAA,iBAAiB,CAAC,IAAS,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;AAEpB,QAAA,IAAI,KAAa;;AAGjB,QAAA,IAAI,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE;YACtB,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;QACjC;aAAO;AACL,YAAA,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QACpC;;QAGA,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,IAAI,EAAE,CAAC;IAC5D;AACF,IAAA,eAAe,CAAC,IAAS,EAAA;AACvB,QAAA,MAAM,MAAM,GAAG;YACb,IAAI,CAAC,WAAW;AAChB,YAAA,IAAI,CAAC,EAAE,CAAC,UAAU,IAAI,MAAM;AAC5B,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI;SACzB;AAED,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;AAC1B,gBAAA,OAAO,CAAC;YACV;QACF;AAEA,QAAA,OAAO,EAAE;IACX;AAEQ,IAAA,SAAS,GAAiB,MAAM,CAAC,YAAY,CAAC;AAEpD,IAAA,WAAA,CAAoB,GAAgB,EAAS,QAAkB,EAAS,GAAsB,EAAA;AAC5F,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,GAAG,GAAH,GAAG;QAAsB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAAmB,IAAA,CAAA,GAAG,GAAH,GAAG;IAG3E;IAEC,QAAQ,GAAA;AACP,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK;QACrB,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC;AAEtC,QAAA,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE;AACjB,YAAA,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE;gBACvB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE;gBACzC,IAAI,CAAC,oBAAoB,EAAE;YAC7B;AAAO,iBAAA,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE;gBAC9B,EAAE,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,IAAW,KAAI;AAC5C,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;oBACxB,IAAI,CAAC,oBAAoB,EAAE;AAC7B,gBAAA,CAAC,CAAC;YACJ;iBAAO;gBACL,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE;gBAC5C,IAAI,CAAC,oBAAoB,EAAE;YAC7B;QACF;aAAO;YAEJ,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;gBACrG,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,IAAI;AACxC,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW;AAC3B,gBAAA,IAAI,CAAC,YAAY;AACjB,oBAAA;AACE,wBAAA,CAAC,EAAE,GAAE,IAAI,CAAC,WAAW,CAAC,KAAK;AAC3B,wBAAA,CAAC,EAAE,GAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;qBAC3C;AACD,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACrB,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACzD,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;gBAC3B;YACH;iBACI;gBAEF,IAAI,CAAC,mBAAmB,EAAE;YAC5B;QACH;;AAGA,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC;aAC7C,SAAS,CAAC,MAAK;;;;AAIZ,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACvB,gBAAA,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE;AACvB,oBAAA,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE;wBACvB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE;AACzC,wBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;oBAClC;AAAO,yBAAA,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE;wBAC9B,EAAE,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,IAAW,KAAI;AAC5C,4BAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,4BAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AAClC,wBAAA,CAAC,CAAC;oBACJ;yBAAO;wBACL,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE;AAC5C,wBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;oBAClC;gBACF;qBAAO;AACL,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;gBACjC;YACF;AACM,QAAA,CAAC,CAAC;IAER;;IAGA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE;QAC5C;IACF;IACM,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QAEnB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,IAAI;AACxC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;AAE3C,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY;AAC1C,QAAA,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE;AACtC,YAAA,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QACzC;QAEA,IAAI,YAAY,GAAwB,EAAE;;AAG1C,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE;YAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;AAElC,YAAA,MAAM,WAAW,GAAoB;AACnC,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE;AACzB,gBAAA,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE;AACzB,gBAAA,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,EAAE;AACvB,gBAAA,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,EAAE;AACvB,gBAAA,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;AAChB,gBAAA,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;aACnB;;YAGD,IAAI,cAAc,GAAkB,EAAE;AAEtC,YAAA,IAAI,EAAE,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,UAAU,EAAE;AACpC,oBAAA,cAAc,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9C;qBAAO,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;AACpC,oBAAA,cAAc,GAAG,EAAE,CAAC,OAAO;gBAC7B;YACF;;YAGA,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,KAAI;AACnC,gBAAA,IAAI,KAAK,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACnD,oBAAA,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B;qBAAO;AACL,oBAAA,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AACvB,wBAAA,GAAG,EAAE;AACL,wBAAA,oBAAoB,EAAE,EAAE,CAAC,oBAAoB,IAAI,KAAK;AACvD,qBAAA,CAAC;gBACJ;AACF,YAAA,CAAC,CAAC;;YAGF,IAAI,YAAY,EAAE;AAChB,gBAAA,MAAM,UAAU,GAAgB;AAC9B,oBAAA,eAAe,EAAE,KAAK;AACtB,oBAAA,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;AAChD,wBAAA,KAAK,EAAE,GAAG;AACV,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC;AACzB,qBAAA,CAAC,CAAC;iBACJ;AAED,gBAAA,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AACvB,oBAAA,GAAG,UAAU;AACb,oBAAA,oBAAoB,EAAE,KAAK;AAC5B,iBAAA,CAAC;YACJ;AAEA,YAAA,YAAY,GAAG;AACb,gBAAA,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC;aACzC;QACH;;aAGK;YACH,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,WAAW;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,IAAI;AAEnD,YAAA,YAAY,GAAG;gBACb,CAAC,EAAE,GAAG,OAAO;AACb,gBAAA,GAAG,YAAY;aAChB;QACH;;QAGA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;gBACjB,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,EAAE;AAErC,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,oBAAA,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;wBACvB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzD;yBAAO;AACL,wBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC3C;gBACF;AAEA,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACtB,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC;AAC5D,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACtB;AACD,SAAA,CAAC;IACN;;AAGI,IAAA,SAAS,CAAC,KAAU,EAAA;AAClB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;AACzD,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QAC3B;IACV;AAEI,IAAA,QAAQ,CAAC,KAAU,EAAA;AAEpB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AACrD,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QAC3B;IACV;AAEE,IAAA,iBAAiB,CAAC,GAAQ,EAAA;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,IAAI;AACzC,QAAA,IAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAC;;AAGlB,YAAA,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACjD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAC/C,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CACvB;AACD,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CACzB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CACjF;YACD;iBAAO;gBACL,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC;AACpE,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC;YAC5D;QACA;aACI;AACA,YAAA,IAAI,CAAC,YAAY,GAAG,GAAG;AAE7B,YAAA,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CACvB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CACrD;YACH;iBAAO;AACL,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC;YAC9C;QACE;IAEJ;IACU,oBAAoB,CAAC,YAAY,GAAC,IAAI,EAAA;AAC5C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK;QAClC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,IAAI;QAExC,IAAI,GAAG,IAAI,IAAI;YAAE;AAEjB,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAC/C,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CACvB;QACH;aAAO;YACL,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC;QACtE;AAEA,QAAA,IAAG,YAAY,IAAI,IAAI,EAAC;YAExB,IAAI,CAAC,WAAW,CAAC,QAAQ,CACvB,IAAI,CAAC,EAAE,CAAC,UAAU;AAChB,kBAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,CAAC;kBACvC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,CAC5B;QACH;aACI;AACF,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACf,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACzD,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;YAC3B;QACR;IACA;IAEQ,mBAAmB,CAAC,YAAY,GAAG,IAAI,EAAA;AAC/C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK;QAClC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,IAAI;AAExC,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AAC3D,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI;YAEnD,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE;gBACtC,IAAI,CAAC,gBAAgB,EAAE;YACzB;YACA;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE;AAC3D,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AAEnB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;;AAG3C,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAO,KAC5B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAClD,GAAG,CAAC,CAAC,GAAQ,MAAM,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAC9D,CACF;YAED,QAAQ,CAAC,KAAK;AACX,iBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;AAC3C,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,KAAY,KAAI;AACrB,oBAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;oBAEhD,IAAI,YAAY,EAAE;wBAChB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACrE;AAAO,yBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC5B,wBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC5D;AAEA,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;gBAC1B,CAAC;AACD,gBAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,oBAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC;AACzD,oBAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,oBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;gBACtB,CAAC;AACF,aAAA,CAAC;QACN;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AAEnB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;AAC3C,YAAA,MAAM,YAAY,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE;AAEnD,YAAA,IAAI,CAAC;iBACF,OAAO,CAAC,YAAY;AACpB,iBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;AAC3C,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;oBACjB,MAAM,IAAI,GAAG,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI;AACpC,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;oBAExB,IAAI,YAAY,EAAE;wBAChB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;oBACvC;AAAO,yBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC5B,wBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC5D;AAEA,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;gBAC1B,CAAC;AACD,gBAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,oBAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC;AAC/C,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;gBACtB,CAAC;AACF,aAAA,CAAC;QACN;IACF;IAGA,eAAe,CAAC,QAAa,EAAE,EAAA;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;AAE5C,QAAA,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE;;AAEtC,YAAA,IAAI;gBACF,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;YACxC;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;YACjC;QACF;QAEA,OAAO,YAAY,IAAI,EAAE;IAC3B;AAEF,IAAA,WAAW,CAAC,KAAU,EAAA;QACrB,KAAK,CAAC,cAAc,EAAE;;QAEvB,IAAI,CAAC,qBAAqB,EAAE;IAC5B;AAEA,IAAA,QAAQ,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IAEtB;IACA,aAAa,GAAA;;;AAGX,QAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAChC;IACA,qBAAqB,GAAA;QACnB,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3B,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5C;;AAEE,IAAA,eAAe,CAAC,KAAU,EAAA;;AAE1B,QAAA,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE;AACpC,QAAA,KAAK,CAAC,aAAa,CAAC,eAAe,EAAE;AAEnC,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC;;;QAGvC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC5B;AAKF,IAAA,MAAM,CAAC,KAAwB,EAAA;QAC7B,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;AACvC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAE5C,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;YACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,eAAe;kBACnC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;kBAC1B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAC3B,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CACjC;AAEL,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5C;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGlB,YAAA,MAAM,WAAW,GAAoB;AACnC,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,MAAM,EAAC,EAAE;AACT,gBAAA,MAAM,EAAC,EAAE;AACT,gBAAA,GAAG,EAAE,EAAE;AACP,gBAAA,IAAI,EAAE,CAAC;aACR;;YAGD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;;AAErB,gBAAA,MAAM,SAAS,GAAgB;AAC7B,oBAAA,eAAe,EAAE,KAAK;AACtB,oBAAA,UAAU,EAAE;AACV,wBAAA;AACE,4BAAA,KAAK,EAAE,EAAE;AACT,4BAAA,QAAQ,EAAE,UAAU;AACpB,4BAAA,KAAK,EAAE;AACR;AACF;iBACF;;AAGD,gBAAA,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AAC5C,oBAAA,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC;oBAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,wBAAA,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;AACxB,4BAAA,KAAK,EAAE,GAAG;AACV,4BAAA,QAAQ,EAAE,IAAI;AACd,4BAAA,KAAK,EAAE;AACR,yBAAA,CAAC;oBACJ;AACF,gBAAA,CAAC,CAAC;gBAEF,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,oBAAA,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;gBACrC;YACF;iBACI;AAEF,gBAAA,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC;AAC7C,gBAAA,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE;gBAC5C,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO;gBAC9C,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO;gBAC9C,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM;gBAC5C,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM;YAE9C;;YAGA,IAAI,cAAc,GAA0B,EAAE;AAC9C,YAAA,IAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,EAAC;gBAEnD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AAC/C,gBAAA,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;oBACrC,cAAc,GAAG,WAAW,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7C;AAAO,qBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;oBACrC,cAAc,GAAG,WAAW;gBAC9B;YACF;;YAEE,cAAc,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,KAAI;AAC5C,gBAAA,IAAI,KAAK,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;;AAEnD,oBAAA,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;gBACvC;qBAAO;;AAEL,oBAAA,MAAM,iBAAiB,GAAG;AACxB,wBAAA,GAAG,WAAW;AACd,wBAAA,oBAAoB,EAAE,WAAW,CAAC,oBAAoB,IAAI;qBAC3D;AACD,oBAAA,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBAC7C;AACF,YAAA,CAAC,CAAC;;AAGF,YAAA,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY;AAC1C,YAAA,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE;AACtC,gBAAA,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;YACzC;AAEA,YAAA,MAAM,YAAY,GAAwB;AACxC,gBAAA,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,WAAW;aAC1C;YAED,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY;AACxC,iBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;AAC3C,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;oBACjB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI,EAAE;AACtC,oBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5C,CAAC;gBACD,KAAK,EAAE,MAAK;AACV,oBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;gBACpB,CAAC;AACF,aAAA,CAAC;QACN;IACF;AAEE,IAAA,QAAQ,CAAC,IAA6B,EAAA;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY;;;;;;;;;;;;;;;;;;IAoB3D;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO,sBAAsB,CAAC;QAChC;aAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACrC,OAAO,kBAAkB,CAAC;QAC5B;QACA,OAAO,EAAE,CAAC;IACZ;AAEF,IAAA,cAAc,CAAC,IAAS,EAAA;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,IAAI;AACxC,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;YAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;IACnE;uGA5lBc,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,sEAf7B,CAAC,aAAa,EAAC,WAAW,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvE5B,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGC,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,8BACnB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,YAAA,EAAA,YAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,QAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,IAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,gBAAgB,kGAGhB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,sBAAsB,0hBAJtB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAOH,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAxFzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsET,EAAA,CAAA;AACD,oBAAA,SAAS,EAAE,CAAC,aAAa,EAAC,WAAW,CAAC;AACtC,oBAAA,OAAO,EAAE;wBACP,WAAW;wBACX,mBAAmB;wBACnB,kBAAkB;wBAClB,gBAAgB;wBAChB,qBAAqB;wBACrB,gBAAgB;wBAChB,aAAa;wBACb,YAAY;wBACZ,cAAc;wBACd,YAAY;wBACZ;AACH;AACA,iBAAA;;sBAEE,SAAS;uBAAC,UAAU;;sBACpB,SAAS;uBAAC,QAAQ;;;ACzKrB;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"es.framework-ng.ui.core-generic-selector.mjs","sources":["../../../../libs/ng.ui.core/generic-selector/src/lib/generic-selector-module.ts","../../../../libs/ng.ui.core/generic-selector/src/lib/generic-selector.component.ts","../../../../libs/ng.ui.core/generic-selector/src/es.framework-ng.ui.core-generic-selector.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n})\r\nexport class GenericSelectorModule {}\r\n","import { ChangeDetectorRef, Component, Injector, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\r\nimport { DialogService } from 'primeng/dynamicdialog';\r\nimport { forkJoin, Observable, Subscription } from 'rxjs';\r\nimport { finalize, map, tap } from 'rxjs/operators';\r\n\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { AutoCompleteModule, AutoComplete } from 'primeng/autocomplete';\r\nimport { InputGroupModule } from 'primeng/inputgroup';\r\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\r\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\r\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { BaseService, FilterGroup, LocalizationService, QueryParameters, QueryParser } from '@es.framework/ng.core/services';\r\nimport { GenericDialogComponent } from '@es.framework/ng.ui.core/generic-dialog';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { FormlyFieldConfig, FieldType, FormlyAttributes, FieldTypeConfig } from '@ngx-formly/core';\r\n\r\ninterface GenericSelectorProps extends FormlyFieldProps/* , FormlyFieldSelectProps */ {\r\n // appendTo?: Select['appendTo'];\r\n moduleName: string;\r\n serviceName: string;\r\n listEndpoint?: string | ((model: any) => string);\r\n loadDefaultField?: string;\r\n loadDefaultValue?: string;\r\n loadDefault?: boolean;\r\n defaultQuery?: Record<string, any> | QueryParameters;\r\n\r\n labelField?: string;\r\n labelFieldEn?: string;\r\n valueField?: string;\r\n useMultiLang?: boolean;\r\n\r\n multiple?: boolean;\r\n\r\n display?: boolean;\r\n offline?: boolean;\r\n\r\n loadSaved?: boolean;\r\n loadSavedField?: string;\r\n\r\n\r\n /** Static offline items (array of objects) */\r\n offlineItems?: any[];\r\n\r\n /** Async offline items (observable) */\r\n offlineItems$?: Observable<any[]>;\r\n\r\n /** Function-based filter for offline items */\r\n onSelect?: (field: FormlyFieldConfig, event?: any) => void;\r\n\r\n offlineDataFn?: (query?: string) => any[];\r\n query?: Record<string, any> | QueryParameters;\r\n fixedFilters?: Record<string, any>;\r\n defaultValue?: any; // id أو array of ids\r\n defaultItem?: any; // الكائن كامل (object) إذا عندك جاهز\r\n\r\n viewPermissionName?: string;\r\n editPermissionName?: string;\r\n addPermissionName?: string;\r\n idField?: string;\r\n dialogDisplayMode?: | 'drawer'\r\n | 'dialog'\r\n | 'route'\r\n | 'inline'\r\n | Partial<\r\n Record<\r\n 'add' | 'edit' | 'view',\r\n 'drawer' | 'dialog' | 'route' | 'inline'\r\n >>;\r\n canAdd?: boolean;\r\n canLookup?: boolean;\r\n formFields?: FormlyFieldConfig[];\r\n afterSave?: (field: FormlyFieldConfig, event?: any) => void;\r\n\r\n formatter?: (row: any, value?: any) => string;\r\n\r\n}\r\n\r\n@Component({\r\n selector: 'formly-generic-selector',\r\n template: `\r\n <!-- [ngStyle]=\"{'display': props.display ? 'block': 'none'}\" -->\r\n <p-inputGroup class=\"w-full\">\r\n <p-autoComplete\r\n #autoComp\r\n [ngModel]=\"selectedItem\"\r\n (ngModelChange)=\"onSelectionChange($event)\"\r\n [formlyAttributes]=\"field\"\r\n [suggestions]=\"options_\"\r\n (completeMethod)=\"search($event)\"\r\n [multiple]=\"to['multiple']\"\r\n [optionLabel]=\"optionLabel\"\r\n [dropdown]=\"false\"\r\n [forceSelection]=\"true\"\r\n [placeholder]=\"(props['placeholder'] ?? '') | translate\"\r\n [disabled]=\"!!props.disabled\"\r\n dropdownMode=\"current\"\r\n appendTo=\"body\"\r\n class=\"w-full rounded-none\"\r\n [showEmptyMessage]=\"true\"\r\n (onSelect)=\"onSelect($event)\"\r\n emptyMessage=\"{{ getEmptyMessage() | translate }}\"\r\n [showTransitionOptions]=\"'0ms'\"\r\n [showClear]=\"!(props['required'] ?? false)\"\r\n\r\n (keydown.arrowdown)=\"onArrowDown($event)\"\r\n (keydown.escape)=\"onEscape($event)\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"flex flex-col\">\r\n <span [innerHTML]=\"getFormattedLabel(item)\"></span>\r\n\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled || loading\"\r\n [icon]=\"loading ? 'pi pi-spinner pi-spin' : 'pi pi-chevron-down'\"\r\n (click)=\"onDropdownButtonClick()\"\r\n severity=\"secondary\" />\r\n </p-inputGroupAddon>\r\n <!-- Add new button -->\r\n @if (props.canAdd && props.formFields) {\r\n <p-inputGroupAddon>\r\n <p-button\r\n tabindex=\"-1\"\r\n [disabled]=\"!!props.disabled\"\r\n icon=\"pi pi-plus\"\r\n (click)=\"onAddNewClick()\"\r\n severity=\"primary\" />\r\n </p-inputGroupAddon>\r\n }\r\n</p-inputGroup>\r\n\r\n<!-- [model]=\"model\" -->\r\n <app-generic-dialog\r\n #dialog\r\n [formFields]=\"props.formFields ?? []\"\r\n [apiName]=\"props.serviceName\"\r\n [moduleName]=\"props.moduleName\"\r\n [idField]=\"props.idField ??'id'\"\r\n [displayMode]=\"props.dialogDisplayMode ?? 'dialog'\"\r\n (afterSave)=\"afterSave($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n\r\n `,\r\n providers: [DialogService,BaseService],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n AutoCompleteModule,\r\n InputGroupModule,\r\n InputGroupAddonModule,\r\n FormlyAttributes,\r\n TranslatePipe,\r\n AutoComplete,\r\n CheckboxModule,\r\n ButtonModule,\r\n GenericDialogComponent\r\n]\r\n})\r\nexport class GenericSelectorTypeComponent extends FieldType<FieldTypeConfig<GenericSelectorProps>> implements OnInit,OnDestroy {\r\n @ViewChild('autoComp') autoComp!: AutoComplete;\r\n @ViewChild('dialog') dialog!: GenericDialogComponent;\r\n options_: any[] = [];\r\n selectedItem: any;\r\n\r\n loading = false;\r\n private _offlineList: any[] = [];\r\n private translateService= inject(LocalizationService);\r\n\r\n api: BaseService|any;\r\n private valueChangeSubscription!: Subscription; // Add a subscription to manage the observable\r\n\r\nget optionLabel(): string {\r\n if(this.to.useMultiLang == true){\r\n if(this.translateService.currentLang == 'en'){\r\n return this.to?.labelFieldEn || 'name';\r\n }\r\n return this.to?.labelField || 'name';\r\n }\r\n return this.to?.labelField || 'name';\r\n}\r\n\r\nprivate isNullOrEmpty(val: any): boolean {\r\n return val === null || val === undefined || val === '';\r\n}\r\n getFormattedLabel(item: any): SafeHtml {\r\n if (!item) return '';\r\n\r\n let value: string;\r\n\r\n // Use the formatter if provided\r\n if (this.to?.formatter) {\r\n value = this.to.formatter(item);\r\n } else {\r\n value = this.getPrimaryLabel(item);\r\n }\r\n\r\n // Sanitize it for safe HTML\r\n return this.sanitizer.bypassSecurityTrustHtml(value || '');\r\n }\r\ngetPrimaryLabel(item: any): string {\r\n const fields = [\r\n this.optionLabel, // resolved field name from getter\r\n this.to.labelField || 'name',\r\n this.to.labelFieldEn || 'name'\r\n ];\r\n\r\n for (const f of fields) {\r\n const v = item[f];\r\n if (!this.isNullOrEmpty(v)) {\r\n return v;\r\n }\r\n }\r\n\r\n return '';\r\n}\r\n\r\nprivate sanitizer: DomSanitizer = inject(DomSanitizer);\r\n\r\n constructor(private svc: BaseService,private injector: Injector,private cdr: ChangeDetectorRef) {\r\n super();\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.api = this.svc;\r\n const to = this.props;\r\n this.api.apiName = to['serviceName'];\r\n this.api.moduleName = to['moduleName'];\r\n\r\n if (to['offline']) {\r\n if (to['offlineDataFn']) {\r\n this._offlineList = to['offlineDataFn']();\r\n this.initOfflineSelection();\r\n } else if (to['offlineItems$']) {\r\n to['offlineItems$'].subscribe((list: any[]) => {\r\n this._offlineList = list;\r\n this.initOfflineSelection();\r\n });\r\n } else {\r\n this._offlineList = to['offlineItems'] || [];\r\n this.initOfflineSelection();\r\n }\r\n } else {\r\n\r\n if (this.props.loadSaved && !this.props.multiple && this.props.loadSavedField && this.props.valueField) {\r\n const vf = this.to['valueField'] || 'id';\r\n const lf = this.optionLabel;\r\n this.selectedItem =\r\n {\r\n [vf]:this.formControl.value,\r\n [lf]:this.model[this.props.loadSavedField],\r\n };\r\n if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n else{\r\n\r\n this.initOnlineSelection();\r\n }\r\n }\r\n\r\n // Subscribe to formControl value changes\r\n this.valueChangeSubscription = this.formControl.valueChanges\r\n .subscribe(() => {\r\n // This tap operator is a good place to run side effects\r\n // like calling your change handler after a value changes.\r\n // this.selectedItem = this.formControl.value;\r\n if (this.props.change) {\r\n if (to['offline']) {\r\n if (to['offlineDataFn']) {\r\n this._offlineList = to['offlineDataFn']();\r\n this.initOfflineSelection(false);\r\n } else if (to['offlineItems$']) {\r\n to['offlineItems$'].subscribe((list: any[]) => {\r\n this._offlineList = list;\r\n this.initOfflineSelection(false);\r\n });\r\n } else {\r\n this._offlineList = to['offlineItems'] || [];\r\n this.initOfflineSelection(false);\r\n }\r\n } else {\r\n this.initOnlineSelection(false);\r\n }\r\n }\r\n })\r\n ;\r\n }\r\n\r\n // Remember to unsubscribe to prevent memory leaks!\r\n ngOnDestroy() {\r\n if (this.valueChangeSubscription) {\r\n this.valueChangeSubscription.unsubscribe();\r\n }\r\n }\r\nprivate loadDefaultValue() {\r\n this.loading = true;\r\n\r\n const vf = this.to['valueField'] || 'id';\r\n const fixedFilters = this.getFixedFilters();\r\n\r\n let listEndpoint = this.props.listEndpoint;\r\n if (typeof listEndpoint === 'function') {\r\n listEndpoint = listEndpoint(this.model);\r\n }\r\n\r\n let searchParams: Record<string, any> = {};\r\n\r\n // ✅ CASE 1: defaultQuery exists (FULL dynamic query like search)\r\n if (this.to['defaultQuery']) {\r\n const dq = this.to['defaultQuery'];\r\n\r\n const queryParams: QueryParameters = {\r\n filters: [],\r\n orderBy: dq.orderBy ?? [],\r\n groupBy: dq.groupBy ?? [],\r\n expand: dq.expand ?? [],\r\n select: dq.select ?? [],\r\n top: dq.top ?? 1, // 👈 important for default (only 1)\r\n skip: dq.skip ?? 0,\r\n };\r\n\r\n // 🔹 Execute filters (function or static)\r\n let dynamicFilters: FilterGroup[] = [];\r\n\r\n if (dq.filters) {\r\n if (typeof dq.filters === 'function') {\r\n dynamicFilters = dq.filters('', this.field); // 👈 no search text\r\n } else if (Array.isArray(dq.filters)) {\r\n dynamicFilters = dq.filters;\r\n }\r\n }\r\n\r\n // 🔹 Add dynamic filters\r\n dynamicFilters.forEach((fg, index) => {\r\n if (index === 0 && queryParams.filters.length === 0) {\r\n queryParams.filters.push(fg);\r\n } else {\r\n queryParams.filters.push({\r\n ...fg,\r\n groupLogicalOperator: fg.groupLogicalOperator || 'and',\r\n });\r\n }\r\n });\r\n\r\n // 🔹 Merge fixed filters\r\n if (fixedFilters) {\r\n const fixedGroup: FilterGroup = {\r\n logicalOperator: 'and',\r\n conditions: Object.keys(fixedFilters).map(key => ({\r\n field: key,\r\n operator: 'eq',\r\n value: fixedFilters[key],\r\n })),\r\n };\r\n\r\n queryParams.filters.push({\r\n ...fixedGroup,\r\n groupLogicalOperator: 'and',\r\n });\r\n }\r\n\r\n searchParams = {\r\n query: QueryParser.toString(queryParams),\r\n };\r\n }\r\n\r\n // ✅ CASE 2: fallback (old behavior)\r\n else {\r\n const lf = this.to['loadDefaultField'] || 'isDefault';\r\n const lfValue = this.to['loadDefaultValue'] ?? true;\r\n\r\n searchParams = {\r\n [lf]: lfValue,\r\n ...fixedFilters,\r\n };\r\n }\r\n\r\n // 🚀 Call API\r\n this.api.getList(searchParams, listEndpoint)\r\n .subscribe({\r\n next: (res: any) => {\r\n const items = res?.items ?? res ?? [];\r\n\r\n if (items.length > 0) {\r\n if (this.to['multiple']) {\r\n this.formControl.setValue(items.map((c: any) => c[vf]));\r\n } else {\r\n this.formControl.setValue(items[0]?.[vf]);\r\n }\r\n }\r\n\r\n this.loading = false;\r\n },\r\n error: (err: any) => {\r\n console.error(\"Failed to load default value from API:\", err);\r\n this.loading = false;\r\n }\r\n });\r\n}\r\n // New method to handle loading the default value from the API\r\n\r\n afterSave(event: any) {\r\n this.onSelectionChange(event.record);\r\n if (this.props.afterSave) {\r\n this.props.afterSave(this.field, { item: event.response });\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n\r\n onSelect(event: any) {\r\n\r\n if (this.props.onSelect) {\r\n this.props.onSelect(this.field, { item: event.value });\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n\r\n onSelectionChange(val: any) {\r\n const vf = this.to['valueField'] || 'id';\r\n if(this.to['offline']){\r\n // this.selectedItem = val;\r\n\r\n if (this.to['multiple'] && Array.isArray(val)) {\r\n this.selectedItem = this._offlineList.filter(item =>\r\n val.includes(item[vf])\r\n );\r\n this.formControl.setValue(\r\n Array.isArray(this.selectedItem) ? this.selectedItem.map((c: any) => c[vf]) : []\r\n );\r\n } else {\r\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\r\n this.formControl.setValue(this.selectedItem?.[vf] ?? null);\r\n }\r\n }\r\n else{\r\n this.selectedItem = val;\r\n\r\n if (this.to['multiple']) {\r\n this.formControl.setValue(\r\n Array.isArray(val) ? val.map((c: any) => c[vf]) : []\r\n );\r\n } else {\r\n this.formControl.setValue(val?.[vf] ?? null);\r\n }\r\n }\r\n\r\n}\r\n private initOfflineSelection(withSetValue=true) {\r\n const val = this.formControl.value;\r\n const vf = this.to['valueField'] || 'id';\r\n\r\n if (val == null) return;\r\n\r\n if (this.to['multiple'] && Array.isArray(val)) {\r\n this.selectedItem = this._offlineList.filter(item =>\r\n val.includes(item[vf])\r\n );\r\n } else {\r\n this.selectedItem = this._offlineList.find(item => item[vf] === val);\r\n }\r\n\r\n if(withSetValue == true){\r\n\r\n this.formControl.setValue(\r\n this.to['multiple']\r\n ? this.selectedItem.map((c: any) => c[vf])\r\n : this.selectedItem?.[vf]\r\n );\r\n }\r\n else{\r\n if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n }\r\n\r\n private initOnlineSelection(withSetValue = true) {\r\n const val = this.formControl.value;\r\n const vf = this.to['valueField'] || 'id';\r\n\r\n if (val == null || (Array.isArray(val) && val.length === 0)) {\r\n this.selectedItem = this.to['multiple'] ? [] : null;\r\n\r\n if (this.props['loadDefault'] === true) {\r\n this.loadDefaultValue();\r\n }\r\n return;\r\n }\r\n\r\n if (this.to['multiple'] && Array.isArray(val) && val.length) {\r\n this.loading = true;\r\n\r\n const fixedFilters = this.getFixedFilters();\r\n\r\n // 🔑 one getList call per id, but include fixedFilters in each\r\n const calls = val.map((id: any) =>\r\n this.api.getList({ ...fixedFilters, [vf]: id }).pipe(\r\n map((res: any) => (res?.items?.length ? res.items[0] : null))\r\n )\r\n );\r\n\r\n forkJoin(calls)\r\n .pipe(finalize(() => (this.loading = false)))\r\n .subscribe({\r\n next: (items: any[]) => {\r\n this.selectedItem = items.filter(i => i != null);\r\n\r\n if (withSetValue) {\r\n this.formControl.setValue(this.selectedItem.map((c: any) => c[vf]));\r\n } else if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n }\r\n\r\n this.cdr.detectChanges();\r\n },\r\n error: (err: any) => {\r\n console.error('Failed to load multiple selections:', err);\r\n this.selectedItem = [];\r\n this.loading = false;\r\n },\r\n });\r\n } else {\r\n this.loading = true;\r\n\r\n const fixedFilters = this.getFixedFilters();\r\n const searchParams = { ...fixedFilters, [vf]: val };\r\n\r\n this.api\r\n .getList(searchParams)\r\n .pipe(finalize(() => (this.loading = false)))\r\n .subscribe({\r\n next: (res: any) => {\r\n const item = res?.items?.[0] || null;\r\n this.selectedItem = item;\r\n\r\n if (withSetValue) {\r\n this.formControl.setValue(item?.[vf]);\r\n } else if (this.props.change) {\r\n this.props.change(this.field, { item: this.selectedItem });\r\n }\r\n\r\n this.cdr.detectChanges();\r\n },\r\n error: (err: any) => {\r\n console.error('Failed to load selection:', err);\r\n this.selectedItem = null;\r\n this.loading = false;\r\n },\r\n });\r\n }\r\n}\r\n\r\n\r\ngetFixedFilters(query:string=''): any {\r\n const fixedFilters = this.to['fixedFilters'];\r\n\r\n if (typeof fixedFilters === 'function') {\r\n // Call with current model (and optionally field)\r\n try {\r\n return fixedFilters(query, this.field);\r\n } catch (error) {\r\n return fixedFilters(this.model);\r\n }\r\n }\r\n\r\n return fixedFilters || {};\r\n }\r\n\r\nonArrowDown(event: any) {\r\n event.preventDefault();\r\n // this.autoComp.show();\r\nthis.onDropdownButtonClick();\r\n}\r\n\r\nonEscape(event: any) {\r\n this.autoComp.hide();\r\n\r\n}\r\nonAddNewClick() {\r\n // your logic for adding a new item\r\n // e.g. open dialog or emit event\r\n console.log('Add new item clicked');\r\n this.dialog.openForm(\"create\");\r\n}\r\nonDropdownButtonClick() {\r\n this.search({ query: '' }); // trigger your own search\r\n setTimeout(() => this.autoComp.show(), 0); // force dropdown to open\r\n}\r\n// Called when dropdown button clicked\r\n onDropdownClick(event: any) {\r\n // 🚫 stop the default dropdown behavior\r\n event.originalEvent.preventDefault();\r\n event.originalEvent.stopPropagation();\r\n\r\n console.log('Dropdown clicked!', event);\r\n // ✅ your custom code here\r\n // e.g., force trigger search for empty query\r\n this.search({ query: '' });\r\n }\r\n\r\n\r\n\r\n\r\nsearch(event: { query: string }) {\r\n const q = event.query?.toString() || '';\r\n const lf = this.optionLabel;\r\n const fixedFilters = this.getFixedFilters(q);\r\n\r\n if (this.to['offline']) {\r\n this.options_ = this.to['offlineDataFn']\r\n ? this.to['offlineDataFn'](q)\r\n : this._offlineList.filter(item =>\r\n item[lf]?.toString().includes(q)\r\n );\r\n\r\n setTimeout(() => this.autoComp?.show(), 0);\r\n } else {\r\n this.loading = true;\r\n this.options_ = [];\r\n\r\n // Build QueryParameters\r\n const queryParams: QueryParameters = {\r\n filters: [],\r\n orderBy: [],\r\n groupBy: [],\r\n expand:[],\r\n select:[],\r\n top: 10,\r\n skip: 0,\r\n };\r\n\r\n // Handle main search and fixed filters\r\n if (!this.to['query']) {\r\n // Create a group for main search condition\r\n const mainGroup: FilterGroup = {\r\n logicalOperator: 'and',\r\n conditions: [\r\n {\r\n field: lf,\r\n operator: 'contains',\r\n value: q\r\n }\r\n ]\r\n };\r\n\r\n // Add fixed filters to the same group\r\n Object.keys(fixedFilters || {}).forEach(key => {\r\n const value = fixedFilters[key];\r\n if (value !== null && value !== undefined) {\r\n mainGroup.conditions.push({\r\n field: key,\r\n operator: 'eq',\r\n value: value\r\n });\r\n }\r\n });\r\n\r\n if (mainGroup.conditions.length > 0) {\r\n queryParams.filters.push(mainGroup);\r\n }\r\n }\r\n else{\r\n\r\n queryParams.skip = this.to['query'].skip ?? 0;\r\n queryParams.top = this.to['query'].top ?? 10;\r\n queryParams.orderBy = this.to['query'].orderBy;\r\n queryParams.groupBy = this.to['query'].groupBy;\r\n queryParams.expand = this.to['query'].expand;\r\n queryParams.select = this.to['query'].select;\r\n\r\n }\r\n\r\n // Merge dynamic filters (function or array)\r\n let dynamicFilters: FilterGroup[] | any[] = [];\r\n if(this.to['query'] && this.to['query']['filters']){\r\n\r\n const filtersProp = this.to['query']['filters'];\r\n if (typeof filtersProp === 'function') {\r\n dynamicFilters = filtersProp(q,this.field); // pass search text\r\n } else if (Array.isArray(filtersProp)) {\r\n dynamicFilters = filtersProp;\r\n }\r\n }\r\n // Add dynamic filters with proper groupLogicalOperator\r\n dynamicFilters.forEach((filterGroup, index) => {\r\n if (index === 0 && queryParams.filters.length === 0) {\r\n // First filter group, no groupLogicalOperator needed\r\n queryParams.filters.push(filterGroup);\r\n } else {\r\n // Subsequent groups, ensure they have groupLogicalOperator\r\n const groupWithOperator = {\r\n ...filterGroup,\r\n groupLogicalOperator: filterGroup.groupLogicalOperator || 'and'\r\n };\r\n queryParams.filters.push(groupWithOperator);\r\n }\r\n });\r\n\r\n // Use listEndpoint if available, otherwise use default\r\n let listEndpoint = this.props.listEndpoint;\r\n if (typeof listEndpoint === 'function') {\r\n listEndpoint = listEndpoint(this.model);\r\n }\r\n\r\n const searchParams: Record<string, any> = {\r\n 'query': QueryParser.toString(queryParams)\r\n };\r\n\r\n this.api.getList(searchParams, listEndpoint)\r\n .pipe(finalize(() => (this.loading = false)))\r\n .subscribe({\r\n next: (res: any) => {\r\n this.options_ = res.items ?? res ?? [];\r\n setTimeout(() => this.autoComp?.show(), 0);\r\n },\r\n error: () => {\r\n this.options_ = [];\r\n },\r\n });\r\n }\r\n}\r\n\r\n openCrud(mode: 'add' | 'edit' | 'info') {\r\n const payload = mode === 'add' ? null : this.selectedItem;\r\n\r\n // Example integration:\r\n // const ref = this.dialog.open(CrudComponent, {\r\n // data: {\r\n // serviceName: this.to.serviceName,\r\n // mode,\r\n // record: payload\r\n // }\r\n // });\r\n // ref.onClose.subscribe((updated: any) => {\r\n // if (!this.to.multiple && updated?.[this.to.valueField]) {\r\n // this.api.get(updated[this.to.valueField])\r\n // .subscribe(item => {\r\n // this.selectedItem = item;\r\n // this.formControl.setValue(item?.[this.to.valueField]);\r\n // });\r\n // }\r\n // });\r\n\r\n }\r\n\r\n getEmptyMessage(): string {\r\n if (this.loading) {\r\n return 'LOADING_DATA_MESSAGE'; // مفتاح ترجمة لـ \"جاري تحميل البيانات...\"\r\n } else if (this.options_.length === 0) {\r\n return 'NO_RESULTS_FOUND'; // مفتاح ترجمة لـ \"لا توجد نتائج مطابقة.\"\r\n }\r\n return ''; // لا تُعرض رسالة إذا كانت هناك نتائج\r\n }\r\n\r\nisItemSelected(item: any): boolean {\r\n const vf = this.to['valueField'] || 'id';\r\n return Array.isArray(this.selectedItem) &&\r\n this.selectedItem.some((sel: any) => sel[vf] === item[vf]);\r\n}\r\n\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -108,11 +108,11 @@ class ActionMenuComponent {
|
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ActionMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
111
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: ActionMenuComponent, isStandalone: true, selector: "app-action-menu", inputs: { items: "items" }, viewQueries: [{ propertyName: "menuItems", predicate: ["menuItem"], descendants: true }], ngImport: i0, template: "<div class=\"inline-block relative\">\n <button type=\"button\"\n class=\"p-ripple p-button p-button-icon-only p-button-outlined p-component\"\n #trigger\n (click)=\"toggle()\">\n <span class=\"pi pi-ellipsis-v\"></span>\n </button>\n\n <p-overlay [(visible)]=\"open\" [appendTo]=\"'body'\" (onShow)=\"focusFirst()\">\n <div class=\"w-48 rounded-lg shadow-lg bg-white border border-gray-200\"\n tabindex=\"0\"\n (keydown)=\"onMenuKeydown($event)\">\n @for (item of items; track item) {\n <button #menuItem\n (click)=\"onClick(item, $event)\"\n class=\"flex items-center w-full text-left px-4 py-2 text-sm hover:bg-gray-100 focus:bg-gray-100 focus:outline-none\">\n @if (item.icon) {\n <i [class]=\"item.icon + ' ml-2 mr-2 text-gray-500'\"></i>\n }\n <span>{{ item.label }}</span>\n </button>\n }\n </div>\n </p-overlay>\n</div>\n", dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "component", type: i1.Overlay, selector: "p-overlay", inputs: ["hostName", "visible", "mode", "style", "styleClass", "contentStyle", "contentStyleClass", "target", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "listener", "responsive", "options", "appendTo", "hostAttrSelector"], outputs: ["visibleChange", "onBeforeShow", "onShow", "onBeforeHide", "onHide", "onAnimationStart", "onAnimationDone"] }, { kind: "ngmodule", type: ButtonModule }] });
|
|
111
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: ActionMenuComponent, isStandalone: true, selector: "app-action-menu", inputs: { items: "items" }, viewQueries: [{ propertyName: "menuItems", predicate: ["menuItem"], descendants: true }], ngImport: i0, template: "<div class=\"inline-block relative\">\r\n <button type=\"button\"\r\n class=\"p-ripple p-button p-button-icon-only p-button-outlined p-component\"\r\n #trigger\r\n (click)=\"toggle()\">\r\n <span class=\"pi pi-ellipsis-v\"></span>\r\n </button>\r\n\r\n <p-overlay [(visible)]=\"open\" [appendTo]=\"'body'\" (onShow)=\"focusFirst()\">\r\n <div class=\"w-48 rounded-lg shadow-lg bg-white border border-gray-200\"\r\n tabindex=\"0\"\r\n (keydown)=\"onMenuKeydown($event)\">\r\n @for (item of items; track item) {\r\n <button #menuItem\r\n (click)=\"onClick(item, $event)\"\r\n class=\"flex items-center w-full text-left px-4 py-2 text-sm hover:bg-gray-100 focus:bg-gray-100 focus:outline-none\">\r\n @if (item.icon) {\r\n <i [class]=\"item.icon + ' ml-2 mr-2 text-gray-500'\"></i>\r\n }\r\n <span>{{ item.label }}</span>\r\n </button>\r\n }\r\n </div>\r\n </p-overlay>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "component", type: i1.Overlay, selector: "p-overlay", inputs: ["hostName", "visible", "mode", "style", "styleClass", "contentStyle", "contentStyleClass", "target", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "listener", "responsive", "options", "appendTo", "hostAttrSelector"], outputs: ["visibleChange", "onBeforeShow", "onShow", "onBeforeHide", "onHide", "onAnimationStart", "onAnimationDone"] }, { kind: "ngmodule", type: ButtonModule }] });
|
|
112
112
|
}
|
|
113
113
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ActionMenuComponent, decorators: [{
|
|
114
114
|
type: Component,
|
|
115
|
-
args: [{ selector: 'app-action-menu', imports: [OverlayModule, ButtonModule], template: "<div class=\"inline-block relative\">\n <button type=\"button\"\n class=\"p-ripple p-button p-button-icon-only p-button-outlined p-component\"\n #trigger\n (click)=\"toggle()\">\n <span class=\"pi pi-ellipsis-v\"></span>\n </button>\n\n <p-overlay [(visible)]=\"open\" [appendTo]=\"'body'\" (onShow)=\"focusFirst()\">\n <div class=\"w-48 rounded-lg shadow-lg bg-white border border-gray-200\"\n tabindex=\"0\"\n (keydown)=\"onMenuKeydown($event)\">\n @for (item of items; track item) {\n <button #menuItem\n (click)=\"onClick(item, $event)\"\n class=\"flex items-center w-full text-left px-4 py-2 text-sm hover:bg-gray-100 focus:bg-gray-100 focus:outline-none\">\n @if (item.icon) {\n <i [class]=\"item.icon + ' ml-2 mr-2 text-gray-500'\"></i>\n }\n <span>{{ item.label }}</span>\n </button>\n }\n </div>\n </p-overlay>\n</div>\n" }]
|
|
115
|
+
args: [{ selector: 'app-action-menu', imports: [OverlayModule, ButtonModule], template: "<div class=\"inline-block relative\">\r\n <button type=\"button\"\r\n class=\"p-ripple p-button p-button-icon-only p-button-outlined p-component\"\r\n #trigger\r\n (click)=\"toggle()\">\r\n <span class=\"pi pi-ellipsis-v\"></span>\r\n </button>\r\n\r\n <p-overlay [(visible)]=\"open\" [appendTo]=\"'body'\" (onShow)=\"focusFirst()\">\r\n <div class=\"w-48 rounded-lg shadow-lg bg-white border border-gray-200\"\r\n tabindex=\"0\"\r\n (keydown)=\"onMenuKeydown($event)\">\r\n @for (item of items; track item) {\r\n <button #menuItem\r\n (click)=\"onClick(item, $event)\"\r\n class=\"flex items-center w-full text-left px-4 py-2 text-sm hover:bg-gray-100 focus:bg-gray-100 focus:outline-none\">\r\n @if (item.icon) {\r\n <i [class]=\"item.icon + ' ml-2 mr-2 text-gray-500'\"></i>\r\n }\r\n <span>{{ item.label }}</span>\r\n </button>\r\n }\r\n </div>\r\n </p-overlay>\r\n</div>\r\n" }]
|
|
116
116
|
}], propDecorators: { items: [{
|
|
117
117
|
type: Input
|
|
118
118
|
}], menuItems: [{
|
|
@@ -195,7 +195,7 @@ class GenericTable {
|
|
|
195
195
|
// }
|
|
196
196
|
// this.selectionChange.emit(this._selection);
|
|
197
197
|
// }
|
|
198
|
-
onInternalSelectionChange(event) {
|
|
198
|
+
onInternalSelectionChange(event, selected) {
|
|
199
199
|
// ───────────── Header checkbox ─────────────
|
|
200
200
|
if ('checked' in event) {
|
|
201
201
|
this._selection = event.checked ? [...this.data] : [];
|
|
@@ -206,7 +206,10 @@ class GenericTable {
|
|
|
206
206
|
// ───────────── MULTI SELECTION ─────────────
|
|
207
207
|
if (Array.isArray(this._selection)) {
|
|
208
208
|
const index = this._selection.findIndex(r => this.isSameRow(r, row));
|
|
209
|
-
if (
|
|
209
|
+
if (selected === false) {
|
|
210
|
+
this._selection = this._selection.filter(r => !this.isSameRow(r, row));
|
|
211
|
+
}
|
|
212
|
+
else if (index === -1) {
|
|
210
213
|
// Not selected → add
|
|
211
214
|
this._selection = [...this._selection, row];
|
|
212
215
|
}
|
|
@@ -217,12 +220,17 @@ class GenericTable {
|
|
|
217
220
|
}
|
|
218
221
|
// ───────────── SINGLE SELECTION ─────────────
|
|
219
222
|
else {
|
|
220
|
-
this._selection = row;
|
|
223
|
+
this._selection = selected === false ? null : row;
|
|
221
224
|
}
|
|
222
225
|
this.selectionChange.emit(this._selection);
|
|
223
226
|
}
|
|
224
227
|
isSameRow(a, b) {
|
|
225
|
-
|
|
228
|
+
const aKey = this.resolveFieldData(a, this.dataKey);
|
|
229
|
+
const bKey = this.resolveFieldData(b, this.dataKey);
|
|
230
|
+
if (aKey != null && bKey != null) {
|
|
231
|
+
return aKey === bKey;
|
|
232
|
+
}
|
|
233
|
+
return a === b;
|
|
226
234
|
}
|
|
227
235
|
resolveFieldData(data, field) {
|
|
228
236
|
if (!field)
|
|
@@ -318,11 +326,11 @@ class GenericTable {
|
|
|
318
326
|
}
|
|
319
327
|
}
|
|
320
328
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericTable, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
321
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericTable, isStandalone: true, selector: "lib-generic-table", inputs: { data: "data", columns: "columns", columnFormFields: "columnFormFields", loading: "loading", actions: "actions", actionsPosition: "actionsPosition", actionsMode: "actionsMode", first: "first", rows: "rows", totalRecords: "totalRecords", sortField: "sortField", sortOrder: "sortOrder", globalFilterFields: "globalFilterFields", addButtonConfigs: "addButtonConfigs", scrollHeight: "scrollHeight", rowEditable: "rowEditable", rowSelectable: "rowSelectable", selection: "selection", dataKey: "dataKey", paginator: "paginator", showRowSelectionCheckbox: "showRowSelectionCheckbox" }, outputs: { action: "action", pageChange: "pageChange", onAddNew: "onAddNew", rowSelect: "rowSelect", selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "dt", first: true, predicate: ["dt"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col h-screen\" style=\" height: 60vh;\">\n <div class=\"flex-1 border rounded-lg overflow-hidden flex flex-col\">\n\n <!-- PrimeNG Table -->\n <p-table #dt\n [value]=\"data_\"\n [dataKey]=\"dataKey\"\n [columns]=\"columns\"\n [lazy]=\"true\"\n [paginator]=\"false\"\n [rows]=\"rows\"\n [first]=\"first\"\n [totalRecords]=\"totalRecords\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [globalFilterFields]=\"globalFilterFields\"\n [loading]=\"loading\"\n [scrollable]=\"true\"\n scrollHeight=\"flex\"\n [selectionMode]=\"showRowSelectionCheckbox ? 'multiple' : (rowSelectable ? 'single' : undefined)\"\n [(selection)]=\"_selection\"\n (onRowSelect)=\"onInternalSelectionChange($event)\"\n (onRowUnselect)=\"onInternalSelectionChange($event)\"\n (onHeaderCheckboxToggle)=\"onInternalSelectionChange($event)\"\n tableLayout=\"fixed\"\n [customSort]=\"false\"\n class=\"flex-1 overflow-auto\"\n >\n\n <!-- Empty message -->\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td colspan=\"10\">\n <div class=\"flex flex-col items-center justify-center py-10 text-center w-full\">\n <i class=\"pi pi-inbox text-4xl text-gray-400 mb-4\"></i>\n <p class=\"text-gray-500 mb-4\">{{ 'NO_DATA_FOUND' | translate }}</p>\n\n @for (btn of addButtonConfigs; track trackByIdx($index, btn)) {\n @if (!btn.visible || btn.visible === true) {\n <lib-generic-button\n [icon]=\"btn.icon\"\n [label]=\"btn.label | translate\"\n [variant]=\"btn.variant\"\n [size]=\"btn.size\"\n [model]=\"btn.splitActions\"\n [permission]=\"btn.permission\"\n (clicked)=\"onAddNew.emit({ name: btn.actionName, row: null! })\"\n class=\"mb-2\"\n ></lib-generic-button>\n }\n }\n </div>\n </td>\n </tr>\n </ng-template>\n\n <!-- Table header -->\n <ng-template pTemplate=\"header\" let-columns>\n <tr class=\"bg-gray-200 sticky top-0 z-10\">\n @if (showRowSelectionCheckbox) {\n <th style=\"width: 2rem\">\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\n </th>\n }\n @if (actions.length > 0 && actionsPosition === 'start') {\n <th class=\"px-4 py-2 text-sm font-medium text-center sticky right-0\">\n {{ '*' | translate }}\n </th>\n }\n @for (col of columns; track trackByFn($index, col)) {\n <th\n [pSortableColumn]=\"col.props.entityKey || col.key\"\n class=\"px-4 py-2 text-sm font-medium text-center\"\n [style.min-width]=\"col.props?.table?.props?.width || '150px'\"\n >\n {{ col.props?.label | translate }}\n <p-sortIcon [field]=\"col.props.entityKey || col.key\"></p-sortIcon>\n </th>\n }\n\n @if (actions.length > 0 && actionsPosition === 'end') {\n <th class=\"px-4 py-2 text-sm font-medium text-center sticky left-0\">\n {{ '*' | translate }}\n </th>\n }\n </tr>\n </ng-template>\n\n <!-- Table body -->\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-i=\"rowIndex\">\n <tr class=\"even:bg-gray-50 hover:bg-gray-100 cursor-pointer\" (click)=\"rowSelect.emit(rowData)\">\n @if (showRowSelectionCheckbox) {\n <td style=\"width: 2rem\">\n <p-tableCheckbox [value]=\"rowData\"></p-tableCheckbox>\n </td>\n }\n @if (actions.length > 0 && actionsPosition === 'start') {\n <td class=\"border-t border-gray-200 px-4 py-2 text-center sticky right-0 bg-gray-50\">\n <ng-container\n *ngTemplateOutlet=\"actionsTemplate; context: {$implicit: rowData}\">\n </ng-container>\n </td>\n }\n\n @for (col of rowData.rowFields; track trackByFn(colIndex, col); let colIndex = $index) {\n <td\n class=\"border-t border-gray-200 px-4 py-2 text-center text-sm text-gray-700\"\n [style.width]=\"col.props?.table?.props?.width\"\n >\n <formly-form\n [model]=\"rowData\"\n [form]=\"getForm(i, colIndex)\"\n [fields]=\"[col]\"\n [options]=\"options\"\n (modelChange)=\"onRowModelChange(rowData)\"\n ></formly-form>\n </td>\n }\n\n @if (actions.length > 0 && actionsPosition === 'end') {\n <td class=\"border-t border-gray-200 px-4 py-2 text-center sticky left-0\">\n <ng-container\n *ngTemplateOutlet=\"actionsTemplate; context: {$implicit: rowData}\">\n </ng-container>\n </td>\n }\n </tr>\n\n </ng-template>\n\n\n </p-table>\n </div>\n</div>\n\n<ng-template #actionsTemplate let-rowData>\n @switch (actionsMode) {\n @case ('buttons') {\n @for (act of sortedActions; track act) {\n @if ((act.icon || act.label) && (!act.visible || act.visible(rowData))) {\n <button\n pButton\n [icon]=\"act.icon || ''\"\n [label]=\"(act.label ?? '') | translate\"\n [class]=\"act.styleClass || ''\"\n class=\"p-button-sm mx-1\"\n (click)=\"onAction(act, rowData)\">\n </button>\n }\n }\n }\n @case ('menu') {\n <app-action-menu [items]=\"getMenuItems(rowData) || []\"></app-action-menu>\n <!-- <p-menu #menu [model]=\"getMenuItems(rowData)\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <p-button\n outlined\n icon=\"pi pi-ellipsis-v\"\n class=\"p-button-text p-button-sm\"\n (onClick)=\"menu.toggle($event)\"\n ></p-button> -->\n }\n }\n</ng-template>\n\n", styles: [".custom-button-medium{font-size:1.1rem;width:2.5rem;height:2.5rem;line-height:2.5rem;padding:0}.custom-button-gray{color:#333;background-color:transparent;border:none}.custom-button-gray:hover{background-color:#eee;color:#000}.icon-delete{color:red!important}.icon-edit{color:#333}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i2.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i2.TableCheckbox, selector: "p-tableCheckbox", inputs: ["value", "disabled", "required", "index", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i2.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "component", type: GenericButton, selector: "lib-generic-button", inputs: ["model", "type", "icon", "label", "variant", "severity", "size", "iconPosition", "disabled", "loading", "ariaLabel", "extraClasses", "permission"], outputs: ["clicked", "itemClick"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: ActionMenuComponent, selector: "app-action-menu", inputs: ["items"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
329
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericTable, isStandalone: true, selector: "lib-generic-table", inputs: { data: "data", columns: "columns", columnFormFields: "columnFormFields", loading: "loading", actions: "actions", actionsPosition: "actionsPosition", actionsMode: "actionsMode", first: "first", rows: "rows", totalRecords: "totalRecords", sortField: "sortField", sortOrder: "sortOrder", globalFilterFields: "globalFilterFields", addButtonConfigs: "addButtonConfigs", scrollHeight: "scrollHeight", rowEditable: "rowEditable", rowSelectable: "rowSelectable", selection: "selection", dataKey: "dataKey", paginator: "paginator", showRowSelectionCheckbox: "showRowSelectionCheckbox" }, outputs: { action: "action", pageChange: "pageChange", onAddNew: "onAddNew", rowSelect: "rowSelect", selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "dt", first: true, predicate: ["dt"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col h-screen\" style=\" height: 60vh;\">\r\n <div class=\"flex-1 border rounded-lg overflow-hidden flex flex-col\">\r\n\r\n <!-- PrimeNG Table -->\r\n <p-table #dt\r\n [value]=\"data_\"\r\n [dataKey]=\"dataKey\"\r\n [columns]=\"columns\"\r\n [lazy]=\"true\"\r\n [paginator]=\"false\"\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n (onLazyLoad)=\"onLazyLoad($event)\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [loading]=\"loading\"\r\n [scrollable]=\"true\"\r\n scrollHeight=\"flex\"\r\n [selectionMode]=\"showRowSelectionCheckbox ? 'multiple' : (rowSelectable ? 'single' : undefined)\"\r\n [(selection)]=\"_selection\"\r\n (onRowSelect)=\"onInternalSelectionChange($event, true)\"\r\n (onRowUnselect)=\"onInternalSelectionChange($event, false)\"\r\n (onHeaderCheckboxToggle)=\"onInternalSelectionChange($event)\"\r\n tableLayout=\"fixed\"\r\n [customSort]=\"false\"\r\n class=\"flex-1 overflow-auto\"\r\n >\r\n\r\n <!-- Empty message -->\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"10\">\r\n <div class=\"flex flex-col items-center justify-center py-10 text-center w-full\">\r\n <i class=\"pi pi-inbox text-4xl text-gray-400 mb-4\"></i>\r\n <p class=\"text-gray-500 mb-4\">{{ 'NO_DATA_FOUND' | translate }}</p>\r\n\r\n @for (btn of addButtonConfigs; track trackByIdx($index, btn)) {\r\n @if (!btn.visible || btn.visible === true) {\r\n <lib-generic-button\r\n [icon]=\"btn.icon\"\r\n [label]=\"btn.label | translate\"\r\n [variant]=\"btn.variant\"\r\n [size]=\"btn.size\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"onAddNew.emit({ name: btn.actionName, row: null! })\"\r\n class=\"mb-2\"\r\n ></lib-generic-button>\r\n }\r\n }\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- Table header -->\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr class=\"bg-gray-200 sticky top-0 z-10\">\r\n @if (showRowSelectionCheckbox) {\r\n <th style=\"width: 2rem\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n }\r\n @if (actions.length > 0 && actionsPosition === 'start') {\r\n <th class=\"px-4 py-2 text-sm font-medium text-center sticky right-0\">\r\n {{ '*' | translate }}\r\n </th>\r\n }\r\n @for (col of columns; track trackByFn($index, col)) {\r\n <th\r\n [pSortableColumn]=\"col.props.entityKey || col.key\"\r\n class=\"px-4 py-2 text-sm font-medium text-center\"\r\n [style.min-width]=\"col.props?.table?.props?.width || '150px'\"\r\n >\r\n {{ col.props?.label | translate }}\r\n <p-sortIcon [field]=\"col.props.entityKey || col.key\"></p-sortIcon>\r\n </th>\r\n }\r\n\r\n @if (actions.length > 0 && actionsPosition === 'end') {\r\n <th class=\"px-4 py-2 text-sm font-medium text-center sticky left-0\">\r\n {{ '*' | translate }}\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- Table body -->\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-i=\"rowIndex\">\r\n <tr class=\"even:bg-gray-50 hover:bg-gray-100 cursor-pointer\" (click)=\"rowSelect.emit(rowData)\">\r\n @if (showRowSelectionCheckbox) {\r\n <td style=\"width: 2rem\">\r\n <p-tableCheckbox [value]=\"rowData\"></p-tableCheckbox>\r\n </td>\r\n }\r\n @if (actions.length > 0 && actionsPosition === 'start') {\r\n <td class=\"border-t border-gray-200 px-4 py-2 text-center sticky right-0 bg-gray-50\">\r\n <ng-container\r\n *ngTemplateOutlet=\"actionsTemplate; context: {$implicit: rowData}\">\r\n </ng-container>\r\n </td>\r\n }\r\n\r\n @for (col of rowData.rowFields; track trackByFn(colIndex, col); let colIndex = $index) {\r\n <td\r\n class=\"border-t border-gray-200 px-4 py-2 text-center text-sm text-gray-700\"\r\n [style.width]=\"col.props?.table?.props?.width\"\r\n >\r\n <formly-form\r\n [model]=\"rowData\"\r\n [form]=\"getForm(i, colIndex)\"\r\n [fields]=\"[col]\"\r\n [options]=\"options\"\r\n (modelChange)=\"onRowModelChange(rowData)\"\r\n ></formly-form>\r\n </td>\r\n }\r\n\r\n @if (actions.length > 0 && actionsPosition === 'end') {\r\n <td class=\"border-t border-gray-200 px-4 py-2 text-center sticky left-0\">\r\n <ng-container\r\n *ngTemplateOutlet=\"actionsTemplate; context: {$implicit: rowData}\">\r\n </ng-container>\r\n </td>\r\n }\r\n </tr>\r\n\r\n </ng-template>\r\n\r\n\r\n </p-table>\r\n </div>\r\n</div>\r\n\r\n<ng-template #actionsTemplate let-rowData>\r\n @switch (actionsMode) {\r\n @case ('buttons') {\r\n @for (act of sortedActions; track act) {\r\n @if ((act.icon || act.label) && (!act.visible || act.visible(rowData))) {\r\n <button\r\n pButton\r\n [icon]=\"act.icon || ''\"\r\n [label]=\"(act.label ?? '') | translate\"\r\n [class]=\"act.styleClass || ''\"\r\n class=\"p-button-sm mx-1\"\r\n (click)=\"onAction(act, rowData)\">\r\n </button>\r\n }\r\n }\r\n }\r\n @case ('menu') {\r\n <app-action-menu [items]=\"getMenuItems(rowData) || []\"></app-action-menu>\r\n <!-- <p-menu #menu [model]=\"getMenuItems(rowData)\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <p-button\r\n outlined\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"p-button-text p-button-sm\"\r\n (onClick)=\"menu.toggle($event)\"\r\n ></p-button> -->\r\n }\r\n }\r\n</ng-template>\r\n\r\n", styles: [".custom-button-medium{font-size:1.1rem;width:2.5rem;height:2.5rem;line-height:2.5rem;padding:0}.custom-button-gray{color:#333;background-color:transparent;border:none}.custom-button-gray:hover{background-color:#eee;color:#000}.icon-delete{color:red!important}.icon-edit{color:#333}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i2.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i2.TableCheckbox, selector: "p-tableCheckbox", inputs: ["value", "disabled", "required", "index", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i2.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "component", type: GenericButton, selector: "lib-generic-button", inputs: ["model", "type", "icon", "label", "tooltip", "tooltipPosition", "variant", "severity", "size", "iconPosition", "disabled", "loading", "ariaLabel", "extraClasses", "permission"], outputs: ["clicked", "itemClick"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: ActionMenuComponent, selector: "app-action-menu", inputs: ["items"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
322
330
|
}
|
|
323
331
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericTable, decorators: [{
|
|
324
332
|
type: Component,
|
|
325
|
-
args: [{ selector: 'lib-generic-table', imports: [CommonModule, TableModule, ButtonModule, MenuModule, TranslatePipe, FormlyField, FormlyForm, TranslatePipe, Menu, Button, GenericButton, PaginatorModule, ActionMenuComponent], template: "<div class=\"flex flex-col h-screen\" style=\" height: 60vh;\">\n <div class=\"flex-1 border rounded-lg overflow-hidden flex flex-col\">\n\n <!-- PrimeNG Table -->\n <p-table #dt\n [value]=\"data_\"\n [dataKey]=\"dataKey\"\n [columns]=\"columns\"\n [lazy]=\"true\"\n [paginator]=\"false\"\n [rows]=\"rows\"\n [first]=\"first\"\n [totalRecords]=\"totalRecords\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [globalFilterFields]=\"globalFilterFields\"\n [loading]=\"loading\"\n [scrollable]=\"true\"\n scrollHeight=\"flex\"\n [selectionMode]=\"showRowSelectionCheckbox ? 'multiple' : (rowSelectable ? 'single' : undefined)\"\n [(selection)]=\"_selection\"\n (onRowSelect)=\"onInternalSelectionChange($event)\"\n (onRowUnselect)=\"onInternalSelectionChange($event)\"\n (onHeaderCheckboxToggle)=\"onInternalSelectionChange($event)\"\n tableLayout=\"fixed\"\n [customSort]=\"false\"\n class=\"flex-1 overflow-auto\"\n >\n\n <!-- Empty message -->\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td colspan=\"10\">\n <div class=\"flex flex-col items-center justify-center py-10 text-center w-full\">\n <i class=\"pi pi-inbox text-4xl text-gray-400 mb-4\"></i>\n <p class=\"text-gray-500 mb-4\">{{ 'NO_DATA_FOUND' | translate }}</p>\n\n @for (btn of addButtonConfigs; track trackByIdx($index, btn)) {\n @if (!btn.visible || btn.visible === true) {\n <lib-generic-button\n [icon]=\"btn.icon\"\n [label]=\"btn.label | translate\"\n [variant]=\"btn.variant\"\n [size]=\"btn.size\"\n [model]=\"btn.splitActions\"\n [permission]=\"btn.permission\"\n (clicked)=\"onAddNew.emit({ name: btn.actionName, row: null! })\"\n class=\"mb-2\"\n ></lib-generic-button>\n }\n }\n </div>\n </td>\n </tr>\n </ng-template>\n\n <!-- Table header -->\n <ng-template pTemplate=\"header\" let-columns>\n <tr class=\"bg-gray-200 sticky top-0 z-10\">\n @if (showRowSelectionCheckbox) {\n <th style=\"width: 2rem\">\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\n </th>\n }\n @if (actions.length > 0 && actionsPosition === 'start') {\n <th class=\"px-4 py-2 text-sm font-medium text-center sticky right-0\">\n {{ '*' | translate }}\n </th>\n }\n @for (col of columns; track trackByFn($index, col)) {\n <th\n [pSortableColumn]=\"col.props.entityKey || col.key\"\n class=\"px-4 py-2 text-sm font-medium text-center\"\n [style.min-width]=\"col.props?.table?.props?.width || '150px'\"\n >\n {{ col.props?.label | translate }}\n <p-sortIcon [field]=\"col.props.entityKey || col.key\"></p-sortIcon>\n </th>\n }\n\n @if (actions.length > 0 && actionsPosition === 'end') {\n <th class=\"px-4 py-2 text-sm font-medium text-center sticky left-0\">\n {{ '*' | translate }}\n </th>\n }\n </tr>\n </ng-template>\n\n <!-- Table body -->\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-i=\"rowIndex\">\n <tr class=\"even:bg-gray-50 hover:bg-gray-100 cursor-pointer\" (click)=\"rowSelect.emit(rowData)\">\n @if (showRowSelectionCheckbox) {\n <td style=\"width: 2rem\">\n <p-tableCheckbox [value]=\"rowData\"></p-tableCheckbox>\n </td>\n }\n @if (actions.length > 0 && actionsPosition === 'start') {\n <td class=\"border-t border-gray-200 px-4 py-2 text-center sticky right-0 bg-gray-50\">\n <ng-container\n *ngTemplateOutlet=\"actionsTemplate; context: {$implicit: rowData}\">\n </ng-container>\n </td>\n }\n\n @for (col of rowData.rowFields; track trackByFn(colIndex, col); let colIndex = $index) {\n <td\n class=\"border-t border-gray-200 px-4 py-2 text-center text-sm text-gray-700\"\n [style.width]=\"col.props?.table?.props?.width\"\n >\n <formly-form\n [model]=\"rowData\"\n [form]=\"getForm(i, colIndex)\"\n [fields]=\"[col]\"\n [options]=\"options\"\n (modelChange)=\"onRowModelChange(rowData)\"\n ></formly-form>\n </td>\n }\n\n @if (actions.length > 0 && actionsPosition === 'end') {\n <td class=\"border-t border-gray-200 px-4 py-2 text-center sticky left-0\">\n <ng-container\n *ngTemplateOutlet=\"actionsTemplate; context: {$implicit: rowData}\">\n </ng-container>\n </td>\n }\n </tr>\n\n </ng-template>\n\n\n </p-table>\n </div>\n</div>\n\n<ng-template #actionsTemplate let-rowData>\n @switch (actionsMode) {\n @case ('buttons') {\n @for (act of sortedActions; track act) {\n @if ((act.icon || act.label) && (!act.visible || act.visible(rowData))) {\n <button\n pButton\n [icon]=\"act.icon || ''\"\n [label]=\"(act.label ?? '') | translate\"\n [class]=\"act.styleClass || ''\"\n class=\"p-button-sm mx-1\"\n (click)=\"onAction(act, rowData)\">\n </button>\n }\n }\n }\n @case ('menu') {\n <app-action-menu [items]=\"getMenuItems(rowData) || []\"></app-action-menu>\n <!-- <p-menu #menu [model]=\"getMenuItems(rowData)\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <p-button\n outlined\n icon=\"pi pi-ellipsis-v\"\n class=\"p-button-text p-button-sm\"\n (onClick)=\"menu.toggle($event)\"\n ></p-button> -->\n }\n }\n</ng-template>\n\n", styles: [".custom-button-medium{font-size:1.1rem;width:2.5rem;height:2.5rem;line-height:2.5rem;padding:0}.custom-button-gray{color:#333;background-color:transparent;border:none}.custom-button-gray:hover{background-color:#eee;color:#000}.icon-delete{color:red!important}.icon-edit{color:#333}\n"] }]
|
|
333
|
+
args: [{ selector: 'lib-generic-table', imports: [CommonModule, TableModule, ButtonModule, MenuModule, TranslatePipe, FormlyField, FormlyForm, TranslatePipe, Menu, Button, GenericButton, PaginatorModule, ActionMenuComponent], template: "<div class=\"flex flex-col h-screen\" style=\" height: 60vh;\">\r\n <div class=\"flex-1 border rounded-lg overflow-hidden flex flex-col\">\r\n\r\n <!-- PrimeNG Table -->\r\n <p-table #dt\r\n [value]=\"data_\"\r\n [dataKey]=\"dataKey\"\r\n [columns]=\"columns\"\r\n [lazy]=\"true\"\r\n [paginator]=\"false\"\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n (onLazyLoad)=\"onLazyLoad($event)\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [loading]=\"loading\"\r\n [scrollable]=\"true\"\r\n scrollHeight=\"flex\"\r\n [selectionMode]=\"showRowSelectionCheckbox ? 'multiple' : (rowSelectable ? 'single' : undefined)\"\r\n [(selection)]=\"_selection\"\r\n (onRowSelect)=\"onInternalSelectionChange($event, true)\"\r\n (onRowUnselect)=\"onInternalSelectionChange($event, false)\"\r\n (onHeaderCheckboxToggle)=\"onInternalSelectionChange($event)\"\r\n tableLayout=\"fixed\"\r\n [customSort]=\"false\"\r\n class=\"flex-1 overflow-auto\"\r\n >\r\n\r\n <!-- Empty message -->\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"10\">\r\n <div class=\"flex flex-col items-center justify-center py-10 text-center w-full\">\r\n <i class=\"pi pi-inbox text-4xl text-gray-400 mb-4\"></i>\r\n <p class=\"text-gray-500 mb-4\">{{ 'NO_DATA_FOUND' | translate }}</p>\r\n\r\n @for (btn of addButtonConfigs; track trackByIdx($index, btn)) {\r\n @if (!btn.visible || btn.visible === true) {\r\n <lib-generic-button\r\n [icon]=\"btn.icon\"\r\n [label]=\"btn.label | translate\"\r\n [variant]=\"btn.variant\"\r\n [size]=\"btn.size\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"onAddNew.emit({ name: btn.actionName, row: null! })\"\r\n class=\"mb-2\"\r\n ></lib-generic-button>\r\n }\r\n }\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- Table header -->\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr class=\"bg-gray-200 sticky top-0 z-10\">\r\n @if (showRowSelectionCheckbox) {\r\n <th style=\"width: 2rem\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n }\r\n @if (actions.length > 0 && actionsPosition === 'start') {\r\n <th class=\"px-4 py-2 text-sm font-medium text-center sticky right-0\">\r\n {{ '*' | translate }}\r\n </th>\r\n }\r\n @for (col of columns; track trackByFn($index, col)) {\r\n <th\r\n [pSortableColumn]=\"col.props.entityKey || col.key\"\r\n class=\"px-4 py-2 text-sm font-medium text-center\"\r\n [style.min-width]=\"col.props?.table?.props?.width || '150px'\"\r\n >\r\n {{ col.props?.label | translate }}\r\n <p-sortIcon [field]=\"col.props.entityKey || col.key\"></p-sortIcon>\r\n </th>\r\n }\r\n\r\n @if (actions.length > 0 && actionsPosition === 'end') {\r\n <th class=\"px-4 py-2 text-sm font-medium text-center sticky left-0\">\r\n {{ '*' | translate }}\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- Table body -->\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-i=\"rowIndex\">\r\n <tr class=\"even:bg-gray-50 hover:bg-gray-100 cursor-pointer\" (click)=\"rowSelect.emit(rowData)\">\r\n @if (showRowSelectionCheckbox) {\r\n <td style=\"width: 2rem\">\r\n <p-tableCheckbox [value]=\"rowData\"></p-tableCheckbox>\r\n </td>\r\n }\r\n @if (actions.length > 0 && actionsPosition === 'start') {\r\n <td class=\"border-t border-gray-200 px-4 py-2 text-center sticky right-0 bg-gray-50\">\r\n <ng-container\r\n *ngTemplateOutlet=\"actionsTemplate; context: {$implicit: rowData}\">\r\n </ng-container>\r\n </td>\r\n }\r\n\r\n @for (col of rowData.rowFields; track trackByFn(colIndex, col); let colIndex = $index) {\r\n <td\r\n class=\"border-t border-gray-200 px-4 py-2 text-center text-sm text-gray-700\"\r\n [style.width]=\"col.props?.table?.props?.width\"\r\n >\r\n <formly-form\r\n [model]=\"rowData\"\r\n [form]=\"getForm(i, colIndex)\"\r\n [fields]=\"[col]\"\r\n [options]=\"options\"\r\n (modelChange)=\"onRowModelChange(rowData)\"\r\n ></formly-form>\r\n </td>\r\n }\r\n\r\n @if (actions.length > 0 && actionsPosition === 'end') {\r\n <td class=\"border-t border-gray-200 px-4 py-2 text-center sticky left-0\">\r\n <ng-container\r\n *ngTemplateOutlet=\"actionsTemplate; context: {$implicit: rowData}\">\r\n </ng-container>\r\n </td>\r\n }\r\n </tr>\r\n\r\n </ng-template>\r\n\r\n\r\n </p-table>\r\n </div>\r\n</div>\r\n\r\n<ng-template #actionsTemplate let-rowData>\r\n @switch (actionsMode) {\r\n @case ('buttons') {\r\n @for (act of sortedActions; track act) {\r\n @if ((act.icon || act.label) && (!act.visible || act.visible(rowData))) {\r\n <button\r\n pButton\r\n [icon]=\"act.icon || ''\"\r\n [label]=\"(act.label ?? '') | translate\"\r\n [class]=\"act.styleClass || ''\"\r\n class=\"p-button-sm mx-1\"\r\n (click)=\"onAction(act, rowData)\">\r\n </button>\r\n }\r\n }\r\n }\r\n @case ('menu') {\r\n <app-action-menu [items]=\"getMenuItems(rowData) || []\"></app-action-menu>\r\n <!-- <p-menu #menu [model]=\"getMenuItems(rowData)\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <p-button\r\n outlined\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"p-button-text p-button-sm\"\r\n (onClick)=\"menu.toggle($event)\"\r\n ></p-button> -->\r\n }\r\n }\r\n</ng-template>\r\n\r\n", styles: [".custom-button-medium{font-size:1.1rem;width:2.5rem;height:2.5rem;line-height:2.5rem;padding:0}.custom-button-gray{color:#333;background-color:transparent;border:none}.custom-button-gray:hover{background-color:#eee;color:#000}.icon-delete{color:red!important}.icon-edit{color:#333}\n"] }]
|
|
326
334
|
}], propDecorators: { dt: [{
|
|
327
335
|
type: ViewChild,
|
|
328
336
|
args: ['dt']
|