@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
|
@@ -29,6 +29,8 @@ class GenericButton {
|
|
|
29
29
|
type = 'button';
|
|
30
30
|
icon = '';
|
|
31
31
|
label = '';
|
|
32
|
+
tooltip;
|
|
33
|
+
tooltipPosition = 'top';
|
|
32
34
|
variant = 'raised';
|
|
33
35
|
severity = 'primary';
|
|
34
36
|
size = 'small';
|
|
@@ -105,11 +107,11 @@ class GenericButton {
|
|
|
105
107
|
this.itemClick.emit(evt);
|
|
106
108
|
}
|
|
107
109
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
108
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericButton, isStandalone: true, selector: "lib-generic-button", inputs: { model: "model", type: "type", icon: "icon", label: "label", variant: "variant", severity: "severity", size: "size", iconPosition: "iconPosition", disabled: "disabled", loading: "loading", ariaLabel: "ariaLabel", extraClasses: "extraClasses", permission: "permission" }, outputs: { clicked: "clicked", itemClick: "itemClick" }, ngImport: i0, template: "\n\n<ng-container *hasPermission=\"permission ? [permission] : []\">\n @if (model && model?.length) {\n <!-- Split Button -->\n <!-- [outlined]=\"outlined\" -->\n <p-splitButton\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n [label]=\"label | translate\"\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [model]=\"model || []\"\n [disabled]=\"disabled || loading\"\n [severity]=\"severity || 'primary'\"\n (onClick)=\"onClick()\"\n (onItemClick)=\"onItemClick($event)\"\n >\n </p-splitButton>\n } @else {\n <!-- \u062D\u0627\u0644\u0629 \u0627\u0644\u0632\u0631\u0651 \u0627\u0644\u0639\u0627\u062F\u064A -->\n <!-- [size]=\"size || 'small'\" -->\n <button\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n pButton\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [label]=\"label | translate\"\n class=\"hidden sm:inline\"\n [pTooltip]=\"label | translate\"\n tooltipPosition=\"
|
|
110
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericButton, isStandalone: true, selector: "lib-generic-button", inputs: { model: "model", type: "type", icon: "icon", label: "label", tooltip: "tooltip", tooltipPosition: "tooltipPosition", variant: "variant", severity: "severity", size: "size", iconPosition: "iconPosition", disabled: "disabled", loading: "loading", ariaLabel: "ariaLabel", extraClasses: "extraClasses", permission: "permission" }, outputs: { clicked: "clicked", itemClick: "itemClick" }, ngImport: i0, template: "\r\n\r\n<ng-container *hasPermission=\"permission ? [permission] : []\">\r\n @if (model && model?.length) {\r\n <!-- Split Button -->\r\n <!-- [outlined]=\"outlined\" -->\r\n <p-splitButton\r\n [class]=\"twClasses\"\r\n [attr.type]=\"type\"\r\n [label]=\"label | translate\"\r\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\r\n [model]=\"model || []\"\r\n [disabled]=\"disabled || loading\"\r\n [severity]=\"severity || 'primary'\"\r\n [pTooltip]=\"(tooltip || label) | translate\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n (onClick)=\"onClick()\"\r\n (onItemClick)=\"onItemClick($event)\"\r\n >\r\n </p-splitButton>\r\n } @else {\r\n <!-- \u062D\u0627\u0644\u0629 \u0627\u0644\u0632\u0631\u0651 \u0627\u0644\u0639\u0627\u062F\u064A -->\r\n <!-- [size]=\"size || 'small'\" -->\r\n <button\r\n [class]=\"twClasses\"\r\n [attr.type]=\"type\"\r\n pButton\r\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\r\n [label]=\"label | translate\"\r\n class=\"hidden sm:inline\"\r\n [pTooltip]=\"(tooltip || label) | translate\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n [severity]=\"severity || 'primary'\"\r\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\r\n [disabled]=\"disabled || loading\"\r\n (click)=\"onClick()\"\r\n >\r\n <!-- \u0645\u062D\u062A\u0648\u0649 \u0645\u062E\u0635\u0651\u0635 -->\r\n @if (!label && !icon && !loading) {\r\n <ng-content></ng-content>\r\n }\r\n </button>\r\n }\r\n\r\n</ng-container>\r\n", styles: [":host ::ng-deep .p-button-label{display:none}@media(min-width:768px){:host ::ng-deep .p-button-label{display:inline-block}}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i2.SplitButton, selector: "p-splitbutton, p-splitButton, p-split-button", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "styleClass", "menuStyle", "menuStyleClass", "dropdownIcon", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
109
111
|
}
|
|
110
112
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericButton, decorators: [{
|
|
111
113
|
type: Component,
|
|
112
|
-
args: [{ selector: 'lib-generic-button', standalone: true, imports: [ButtonModule, SplitButtonModule, HasPermissionDirective, TranslatePipe, TooltipModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "\n\n<ng-container *hasPermission=\"permission ? [permission] : []\">\n @if (model && model?.length) {\n <!-- Split Button -->\n <!-- [outlined]=\"outlined\" -->\n <p-splitButton\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n [label]=\"label | translate\"\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [model]=\"model || []\"\n [disabled]=\"disabled || loading\"\n [severity]=\"severity || 'primary'\"\n (onClick)=\"onClick()\"\n (onItemClick)=\"onItemClick($event)\"\n >\n </p-splitButton>\n } @else {\n <!-- \u062D\u0627\u0644\u0629 \u0627\u0644\u0632\u0631\u0651 \u0627\u0644\u0639\u0627\u062F\u064A -->\n <!-- [size]=\"size || 'small'\" -->\n <button\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n pButton\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [label]=\"label | translate\"\n class=\"hidden sm:inline\"\n [pTooltip]=\"label | translate\"\n tooltipPosition=\"
|
|
114
|
+
args: [{ selector: 'lib-generic-button', standalone: true, imports: [ButtonModule, SplitButtonModule, HasPermissionDirective, TranslatePipe, TooltipModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "\r\n\r\n<ng-container *hasPermission=\"permission ? [permission] : []\">\r\n @if (model && model?.length) {\r\n <!-- Split Button -->\r\n <!-- [outlined]=\"outlined\" -->\r\n <p-splitButton\r\n [class]=\"twClasses\"\r\n [attr.type]=\"type\"\r\n [label]=\"label | translate\"\r\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\r\n [model]=\"model || []\"\r\n [disabled]=\"disabled || loading\"\r\n [severity]=\"severity || 'primary'\"\r\n [pTooltip]=\"(tooltip || label) | translate\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n (onClick)=\"onClick()\"\r\n (onItemClick)=\"onItemClick($event)\"\r\n >\r\n </p-splitButton>\r\n } @else {\r\n <!-- \u062D\u0627\u0644\u0629 \u0627\u0644\u0632\u0631\u0651 \u0627\u0644\u0639\u0627\u062F\u064A -->\r\n <!-- [size]=\"size || 'small'\" -->\r\n <button\r\n [class]=\"twClasses\"\r\n [attr.type]=\"type\"\r\n pButton\r\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\r\n [label]=\"label | translate\"\r\n class=\"hidden sm:inline\"\r\n [pTooltip]=\"(tooltip || label) | translate\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n [severity]=\"severity || 'primary'\"\r\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\r\n [disabled]=\"disabled || loading\"\r\n (click)=\"onClick()\"\r\n >\r\n <!-- \u0645\u062D\u062A\u0648\u0649 \u0645\u062E\u0635\u0651\u0635 -->\r\n @if (!label && !icon && !loading) {\r\n <ng-content></ng-content>\r\n }\r\n </button>\r\n }\r\n\r\n</ng-container>\r\n", styles: [":host ::ng-deep .p-button-label{display:none}@media(min-width:768px){:host ::ng-deep .p-button-label{display:inline-block}}\n"] }]
|
|
113
115
|
}], propDecorators: { model: [{
|
|
114
116
|
type: Input
|
|
115
117
|
}], type: [{
|
|
@@ -118,6 +120,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
118
120
|
type: Input
|
|
119
121
|
}], label: [{
|
|
120
122
|
type: Input
|
|
123
|
+
}], tooltip: [{
|
|
124
|
+
type: Input
|
|
125
|
+
}], tooltipPosition: [{
|
|
126
|
+
type: Input
|
|
121
127
|
}], variant: [{
|
|
122
128
|
type: Input
|
|
123
129
|
}], severity: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"es.framework-ng.ui.core-generic-button.mjs","sources":["../../../../libs/ng.ui.core/generic-button/src/lib/generic-button-module.ts","../../../../libs/ng.ui.core/generic-button/src/lib/generic-button.ts","../../../../libs/ng.ui.core/generic-button/src/lib/generic-button.html","../../../../libs/ng.ui.core/generic-button/src/es.framework-ng.ui.core-generic-button.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class GenericButtonModule {}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\nimport { ButtonModule } from 'primeng/button';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { MenuItem } from 'primeng/api';\nimport { HasPermissionDirective } from '@es.framework/ng.core/directives';\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\nimport { ButtonSeverity, ButtonSize, ButtonVariant, IconPosition } from '@es.framework/ng.core/models';\nimport { TooltipModule } from \"primeng/tooltip\";\n\n@Component({\n selector: 'lib-generic-button',\n standalone: true,\n imports: [ButtonModule, SplitButtonModule, HasPermissionDirective, TranslatePipe, TooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './generic-button.html',\n styleUrls: ['./generic-button.css']\n})\nexport class GenericButton {\n\n // permissionChecker = inject(PermissionCheckerService);\n\n // لو وُجدت هذه المصفوفة، نُستخدم splitButton\n @Input() model?: MenuItem[];\n\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n @Input() icon = '';\n @Input() label = '';\n @Input() variant: ButtonVariant = 'raised';\n @Input() severity: ButtonSeverity = 'primary';\n @Input() size: ButtonSize = 'small';\n @Input() iconPosition: IconPosition = 'left';\n @Input() disabled = false;\n @Input() loading = false;\n @Input() ariaLabel?: string;\n @Input() extraClasses = ''; // لأي Tailwind إضافي\n @Input() permission?: string;\n @Output() clicked = new EventEmitter<void>();\n @Output() itemClick = new EventEmitter<any>();\n\n\n // خريطة أحجام\n private sizeMap: Record<ButtonSize,string> = {\n small: 'text-sm',\n // normal: 'px-4 py-2 text-base',\n large: 'text-lg',\n };\n\n // خريطة ألوان للـ raised و rounded\n private colorMap: Record<ButtonSeverity,string> = {\n primary: 'bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 text-white',\n secondary: 'bg-gray-600 hover:bg-gray-700 focus:ring-gray-500 text-white',\n success: 'bg-green-600 hover:bg-green-700 focus:ring-green-500 text-white',\n info: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\n warn: 'bg-yellow-500 hover:bg-yellow-600 focus:ring-yellow-400 text-white',\n danger: 'bg-red-600 hover:bg-red-700 focus:ring-red-500 text-white',\n help: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\n contrast: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\n };\n\n // خريطة حدوده للـ outlined\n private outlinedMap: Record<ButtonSeverity,string> = {\n primary: 'border border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500',\n secondary: 'border border-gray-600 text-gray-600 hover:bg-gray-50 focus:ring-gray-500',\n success: 'border border-green-600 text-green-600 hover:bg-green-50 focus:ring-green-500',\n info: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\n help: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\n contrast: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\n warn: 'border border-yellow-500 text-yellow-500 hover:bg-yellow-50 focus:ring-yellow-400',\n danger: 'border border-red-600 text-red-600 hover:bg-red-50 focus:ring-red-500',\n };\n\n get twClasses(): string {\n const base = [\n // 'inline-flex items-center justify-center font-medium',\n // 'focus:outline-none focus:ring-2 focus:ring-offset-2 transition',\n this.sizeMap[this.size]\n ];\n // // variant-specific\n // if (this.variant === 'outlined') {\n // base.push(this.outlinedMap[this.severity]);\n // } else {\n // base.push(this.colorMap[this.severity]);\n // }\n // if (this.variant === 'text') {\n // base.push('bg-transparent hover:bg-gray-100 focus:ring-gray-200 text-gray-700');\n // }\n // if (this.variant === 'rounded') {\n // base.push('rounded-full');\n // } else {\n // base.push('rounded-md');\n // }\n // if (this.disabled || this.loading) {\n // base.push('opacity-50 cursor-not-allowed');\n // }\n // if (this.extraClasses) {\n // base.push(this.extraClasses);\n // }\n return base.join(' ');\n }\n\n onClick() {\n if (!this.disabled && !this.loading) {\n this.clicked.emit();\n }\n }\n\n onItemClick(evt: any) {\n this.itemClick.emit(evt);\n }\n\n\n}\n","\n\n<ng-container *hasPermission=\"permission ? [permission] : []\">\n @if (model && model?.length) {\n <!-- Split Button -->\n <!-- [outlined]=\"outlined\" -->\n <p-splitButton\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n [label]=\"label | translate\"\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [model]=\"model || []\"\n [disabled]=\"disabled || loading\"\n [severity]=\"severity || 'primary'\"\n (onClick)=\"onClick()\"\n (onItemClick)=\"onItemClick($event)\"\n >\n </p-splitButton>\n } @else {\n <!-- حالة الزرّ العادي -->\n <!-- [size]=\"size || 'small'\" -->\n <button\n [class]=\"twClasses\"\n [attr.type]=\"type\"\n pButton\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\n [label]=\"label | translate\"\n class=\"hidden sm:inline\"\n [pTooltip]=\"label | translate\"\n tooltipPosition=\"top\"\n [severity]=\"severity || 'primary'\"\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\n [disabled]=\"disabled || loading\" (onClick)=\"onClick()\"\n (click)=\"onClick()\"\n >\n <!-- محتوى مخصّص -->\n @if (!label && !icon && !loading) {\n <ng-content></ng-content>\n }\n </button>\n }\n\n</ng-container>\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-button.mjs","sources":["../../../../libs/ng.ui.core/generic-button/src/lib/generic-button-module.ts","../../../../libs/ng.ui.core/generic-button/src/lib/generic-button.ts","../../../../libs/ng.ui.core/generic-button/src/lib/generic-button.html","../../../../libs/ng.ui.core/generic-button/src/es.framework-ng.ui.core-generic-button.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 GenericButtonModule {}\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\r\n\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { SplitButtonModule } from 'primeng/splitbutton';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { HasPermissionDirective } from '@es.framework/ng.core/directives';\r\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\r\nimport { ButtonSeverity, ButtonSize, ButtonVariant, IconPosition } from '@es.framework/ng.core/models';\r\nimport { TooltipModule } from \"primeng/tooltip\";\r\n\r\n@Component({\r\n selector: 'lib-generic-button',\r\n standalone: true,\r\n imports: [ButtonModule, SplitButtonModule, HasPermissionDirective, TranslatePipe, TooltipModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './generic-button.html',\r\n styleUrls: ['./generic-button.css']\r\n})\r\nexport class GenericButton {\r\n\r\n // permissionChecker = inject(PermissionCheckerService);\r\n\r\n // لو وُجدت هذه المصفوفة، نُستخدم splitButton\r\n @Input() model?: MenuItem[];\r\n\r\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\r\n @Input() icon = '';\r\n @Input() label = '';\r\n @Input() tooltip?: string;\r\n @Input() tooltipPosition: 'top' | 'bottom' | 'left' | 'right' = 'top';\r\n @Input() variant: ButtonVariant = 'raised';\r\n @Input() severity: ButtonSeverity = 'primary';\r\n @Input() size: ButtonSize = 'small';\r\n @Input() iconPosition: IconPosition = 'left';\r\n @Input() disabled = false;\r\n @Input() loading = false;\r\n @Input() ariaLabel?: string;\r\n @Input() extraClasses = ''; // لأي Tailwind إضافي\r\n @Input() permission?: string;\r\n @Output() clicked = new EventEmitter<void>();\r\n @Output() itemClick = new EventEmitter<any>();\r\n\r\n\r\n // خريطة أحجام\r\n private sizeMap: Record<ButtonSize,string> = {\r\n small: 'text-sm',\r\n // normal: 'px-4 py-2 text-base',\r\n large: 'text-lg',\r\n };\r\n\r\n // خريطة ألوان للـ raised و rounded\r\n private colorMap: Record<ButtonSeverity,string> = {\r\n primary: 'bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 text-white',\r\n secondary: 'bg-gray-600 hover:bg-gray-700 focus:ring-gray-500 text-white',\r\n success: 'bg-green-600 hover:bg-green-700 focus:ring-green-500 text-white',\r\n info: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\r\n warn: 'bg-yellow-500 hover:bg-yellow-600 focus:ring-yellow-400 text-white',\r\n danger: 'bg-red-600 hover:bg-red-700 focus:ring-red-500 text-white',\r\n help: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\r\n contrast: 'bg-teal-600 hover:bg-teal-700 focus:ring-teal-500 text-white',\r\n };\r\n\r\n // خريطة حدوده للـ outlined\r\n private outlinedMap: Record<ButtonSeverity,string> = {\r\n primary: 'border border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500',\r\n secondary: 'border border-gray-600 text-gray-600 hover:bg-gray-50 focus:ring-gray-500',\r\n success: 'border border-green-600 text-green-600 hover:bg-green-50 focus:ring-green-500',\r\n info: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\r\n help: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\r\n contrast: 'border border-teal-600 text-teal-600 hover:bg-teal-50 focus:ring-teal-500',\r\n warn: 'border border-yellow-500 text-yellow-500 hover:bg-yellow-50 focus:ring-yellow-400',\r\n danger: 'border border-red-600 text-red-600 hover:bg-red-50 focus:ring-red-500',\r\n };\r\n\r\n get twClasses(): string {\r\n const base = [\r\n // 'inline-flex items-center justify-center font-medium',\r\n // 'focus:outline-none focus:ring-2 focus:ring-offset-2 transition',\r\n this.sizeMap[this.size]\r\n ];\r\n // // variant-specific\r\n // if (this.variant === 'outlined') {\r\n // base.push(this.outlinedMap[this.severity]);\r\n // } else {\r\n // base.push(this.colorMap[this.severity]);\r\n // }\r\n // if (this.variant === 'text') {\r\n // base.push('bg-transparent hover:bg-gray-100 focus:ring-gray-200 text-gray-700');\r\n // }\r\n // if (this.variant === 'rounded') {\r\n // base.push('rounded-full');\r\n // } else {\r\n // base.push('rounded-md');\r\n // }\r\n // if (this.disabled || this.loading) {\r\n // base.push('opacity-50 cursor-not-allowed');\r\n // }\r\n // if (this.extraClasses) {\r\n // base.push(this.extraClasses);\r\n // }\r\n return base.join(' ');\r\n }\r\n\r\n onClick() {\r\n if (!this.disabled && !this.loading) {\r\n this.clicked.emit();\r\n }\r\n }\r\n\r\n onItemClick(evt: any) {\r\n this.itemClick.emit(evt);\r\n }\r\n\r\n\r\n}\r\n","\r\n\r\n<ng-container *hasPermission=\"permission ? [permission] : []\">\r\n @if (model && model?.length) {\r\n <!-- Split Button -->\r\n <!-- [outlined]=\"outlined\" -->\r\n <p-splitButton\r\n [class]=\"twClasses\"\r\n [attr.type]=\"type\"\r\n [label]=\"label | translate\"\r\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\r\n [model]=\"model || []\"\r\n [disabled]=\"disabled || loading\"\r\n [severity]=\"severity || 'primary'\"\r\n [pTooltip]=\"(tooltip || label) | translate\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n (onClick)=\"onClick()\"\r\n (onItemClick)=\"onItemClick($event)\"\r\n >\r\n </p-splitButton>\r\n } @else {\r\n <!-- حالة الزرّ العادي -->\r\n <!-- [size]=\"size || 'small'\" -->\r\n <button\r\n [class]=\"twClasses\"\r\n [attr.type]=\"type\"\r\n pButton\r\n [icon]=\"loading ? 'pi pi-spin pi-spinner' : icon\"\r\n [label]=\"label | translate\"\r\n class=\"hidden sm:inline\"\r\n [pTooltip]=\"(tooltip || label) | translate\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n [severity]=\"severity || 'primary'\"\r\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\r\n [disabled]=\"disabled || loading\"\r\n (click)=\"onClick()\"\r\n >\r\n <!-- محتوى مخصّص -->\r\n @if (!label && !icon && !loading) {\r\n <ng-content></ng-content>\r\n }\r\n </button>\r\n }\r\n\r\n</ng-container>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -169,7 +169,7 @@ class GenericCard {
|
|
|
169
169
|
return item.id || index;
|
|
170
170
|
}
|
|
171
171
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
172
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericCard, isStandalone: true, selector: "lib-generic-card", inputs: { data: "data", columns: "columns", loading: "loading", actions: "actions", actionsMode: "actionsMode", showOperations: "showOperations", rowSelectable: "rowSelectable", showRowSelectionCheckbox: "showRowSelectionCheckbox", paginator: "paginator", rowClassFn: "rowClassFn", selection: "selection" }, outputs: { action: "action", selectionChange: "selectionChange", rowSelect: "rowSelect" }, ngImport: i0, template: "\n<div class=\"p-4 p-4 flex flex-col gap-6 font-inter\">\n @if (loading) {\n <div class=\"col-span-full text-center py-8\">\n <div class=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500 inline-block\"></div>\n <p class=\"mt-4 text-gray-600\">Loading data...</p>\n </div>\n }\n\n @if (!loading && data.length === 0) {\n <div class=\"col-span-full text-center py-8 text-gray-500\">\n No records found.\n </div>\n }\n\n @for (item of data; track trackById($index, item)) {\n <div\n [ngClass]=\"rowClassFn(item)\"\n class=\"bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-300 overflow-hidden flex flex-row items-center\"\n (click)=\"handleCardClick(item)\"\n [class.cursor-pointer]=\"rowSelectable && !showRowSelectionCheckbox\">\n @if (showRowSelectionCheckbox) {\n <div class=\"p-4\">\n <input type=\"checkbox\"\n [checked]=\"isItemSelected(item)\"\n (change)=\"toggleItemSelection(item, $event)\"\n class=\"form-checkbox h-5 w-5 text-blue-600 rounded focus:ring-blue-500\">\n </div>\n }\n <div class=\"p-6 flex-grow\">\n <div class=\"flex flex-wrap -mx-2\">\n @for (col of columns; track col) {\n @if (col.isCardVisible) {\n <div class=\"px-2 mb-2 w-full sm:w-1/5\">\n <div class=\"flex flex-col sm:flex-row sm:items-center text-sm\">\n <span class=\"font-semibold text-gray-700 sm:w-1/3 sm:min-w-[80px] sm:pr-2\">{{ col.header | translate }}:</span>\n <div class=\"flex-grow text-gray-800 text-left mt-1 sm:mt-0\">\n @if (col.clickable) {\n <span class=\"cursor-pointer hover:underline text-blue-600\"\n (click)=\"handleCellClick(col, item, $event)\"\n (mouseenter)=\"col.hoverable && onCellHover(col, item, $event)\"\n (mouseleave)=\"col.hoverable && onCellLeave(col, item, $event)\">\n @if (col.formatter) {\n <span [innerHTML]=\"col.formatter(item)\"></span>\n } @else {\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n }\n </span>\n } @else {\n <span>\n @if (col.formatter) {\n <span [innerHTML]=\"col.formatter(item)\"></span>\n } @else {\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n }\n </span>\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n @if (showOperations && actions.length > 0) {\n <div class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\n @if (actionsMode === 'buttons') {\n @for (act of actions; track act) {\n <button\n pButton\n type=\"button\"\n [icon]=\"act.icon || ''\"\n [title]=\"act.label?? '' | translate\"\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600 custom-button-medium mr-1\"\n [ngClass]=\"act.styleClass\"\n (click)=\"action.emit({ name: act.name, row: item })\"\n ></button>\n }\n } @else {\n <p-menu\n #cardMenu\n [model]=\"getMenuItems(item)\"\n popup=\"true\"\n appendTo=\"body\">\n </p-menu>\n <button\n pButton\n type=\"button\"\n icon=\"pi pi-ellipsis-v\"\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600\"\n (click)=\"cardMenu.toggle($event)\">\n </button>\n }\n </div>\n }\n </div>\n }\n</div>\n", styles: [".custom-button-medium{width:2.5rem;height:2.5rem}.icon-delete{color:#ef4444}.icon-edit{color:#2563eb}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "ngmodule", type: MenuModule }, { kind: "component", type: i3.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex", "appendTo"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
172
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericCard, isStandalone: true, selector: "lib-generic-card", inputs: { data: "data", columns: "columns", loading: "loading", actions: "actions", actionsMode: "actionsMode", showOperations: "showOperations", rowSelectable: "rowSelectable", showRowSelectionCheckbox: "showRowSelectionCheckbox", paginator: "paginator", rowClassFn: "rowClassFn", selection: "selection" }, outputs: { action: "action", selectionChange: "selectionChange", rowSelect: "rowSelect" }, ngImport: i0, template: "\r\n<div class=\"p-4 p-4 flex flex-col gap-6 font-inter\">\r\n @if (loading) {\r\n <div class=\"col-span-full text-center py-8\">\r\n <div class=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500 inline-block\"></div>\r\n <p class=\"mt-4 text-gray-600\">Loading data...</p>\r\n </div>\r\n }\r\n\r\n @if (!loading && data.length === 0) {\r\n <div class=\"col-span-full text-center py-8 text-gray-500\">\r\n No records found.\r\n </div>\r\n }\r\n\r\n @for (item of data; track trackById($index, item)) {\r\n <div\r\n [ngClass]=\"rowClassFn(item)\"\r\n class=\"bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-300 overflow-hidden flex flex-row items-center\"\r\n (click)=\"handleCardClick(item)\"\r\n [class.cursor-pointer]=\"rowSelectable && !showRowSelectionCheckbox\">\r\n @if (showRowSelectionCheckbox) {\r\n <div class=\"p-4\">\r\n <input type=\"checkbox\"\r\n [checked]=\"isItemSelected(item)\"\r\n (change)=\"toggleItemSelection(item, $event)\"\r\n class=\"form-checkbox h-5 w-5 text-blue-600 rounded focus:ring-blue-500\">\r\n </div>\r\n }\r\n <div class=\"p-6 flex-grow\">\r\n <div class=\"flex flex-wrap -mx-2\">\r\n @for (col of columns; track col) {\r\n @if (col.isCardVisible) {\r\n <div class=\"px-2 mb-2 w-full sm:w-1/5\">\r\n <div class=\"flex flex-col sm:flex-row sm:items-center text-sm\">\r\n <span class=\"font-semibold text-gray-700 sm:w-1/3 sm:min-w-[80px] sm:pr-2\">{{ col.header | translate }}:</span>\r\n <div class=\"flex-grow text-gray-800 text-left mt-1 sm:mt-0\">\r\n @if (col.clickable) {\r\n <span class=\"cursor-pointer hover:underline text-blue-600\"\r\n (click)=\"handleCellClick(col, item, $event)\"\r\n (mouseenter)=\"col.hoverable && onCellHover(col, item, $event)\"\r\n (mouseleave)=\"col.hoverable && onCellLeave(col, item, $event)\">\r\n @if (col.formatter) {\r\n <span [innerHTML]=\"col.formatter(item)\"></span>\r\n } @else {\r\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\r\n }\r\n </span>\r\n } @else {\r\n <span>\r\n @if (col.formatter) {\r\n <span [innerHTML]=\"col.formatter(item)\"></span>\r\n } @else {\r\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n @if (showOperations && actions.length > 0) {\r\n <div class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\r\n @if (actionsMode === 'buttons') {\r\n @for (act of actions; track act) {\r\n <button\r\n pButton\r\n type=\"button\"\r\n [icon]=\"act.icon || ''\"\r\n [title]=\"act.label?? '' | translate\"\r\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600 custom-button-medium mr-1\"\r\n [ngClass]=\"act.styleClass\"\r\n (click)=\"action.emit({ name: act.name, row: item })\"\r\n ></button>\r\n }\r\n } @else {\r\n <p-menu\r\n #cardMenu\r\n [model]=\"getMenuItems(item)\"\r\n popup=\"true\"\r\n appendTo=\"body\">\r\n </p-menu>\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600\"\r\n (click)=\"cardMenu.toggle($event)\">\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".custom-button-medium{width:2.5rem;height:2.5rem}.icon-delete{color:#ef4444}.icon-edit{color:#2563eb}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "ngmodule", type: MenuModule }, { kind: "component", type: i3.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex", "appendTo"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
173
173
|
}
|
|
174
174
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCard, decorators: [{
|
|
175
175
|
type: Component,
|
|
@@ -179,7 +179,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
179
179
|
MenuModule,
|
|
180
180
|
TranslatePipe,
|
|
181
181
|
FormsModule,
|
|
182
|
-
], template: "\n<div class=\"p-4 p-4 flex flex-col gap-6 font-inter\">\n @if (loading) {\n <div class=\"col-span-full text-center py-8\">\n <div class=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500 inline-block\"></div>\n <p class=\"mt-4 text-gray-600\">Loading data...</p>\n </div>\n }\n\n @if (!loading && data.length === 0) {\n <div class=\"col-span-full text-center py-8 text-gray-500\">\n No records found.\n </div>\n }\n\n @for (item of data; track trackById($index, item)) {\n <div\n [ngClass]=\"rowClassFn(item)\"\n class=\"bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-300 overflow-hidden flex flex-row items-center\"\n (click)=\"handleCardClick(item)\"\n [class.cursor-pointer]=\"rowSelectable && !showRowSelectionCheckbox\">\n @if (showRowSelectionCheckbox) {\n <div class=\"p-4\">\n <input type=\"checkbox\"\n [checked]=\"isItemSelected(item)\"\n (change)=\"toggleItemSelection(item, $event)\"\n class=\"form-checkbox h-5 w-5 text-blue-600 rounded focus:ring-blue-500\">\n </div>\n }\n <div class=\"p-6 flex-grow\">\n <div class=\"flex flex-wrap -mx-2\">\n @for (col of columns; track col) {\n @if (col.isCardVisible) {\n <div class=\"px-2 mb-2 w-full sm:w-1/5\">\n <div class=\"flex flex-col sm:flex-row sm:items-center text-sm\">\n <span class=\"font-semibold text-gray-700 sm:w-1/3 sm:min-w-[80px] sm:pr-2\">{{ col.header | translate }}:</span>\n <div class=\"flex-grow text-gray-800 text-left mt-1 sm:mt-0\">\n @if (col.clickable) {\n <span class=\"cursor-pointer hover:underline text-blue-600\"\n (click)=\"handleCellClick(col, item, $event)\"\n (mouseenter)=\"col.hoverable && onCellHover(col, item, $event)\"\n (mouseleave)=\"col.hoverable && onCellLeave(col, item, $event)\">\n @if (col.formatter) {\n <span [innerHTML]=\"col.formatter(item)\"></span>\n } @else {\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n }\n </span>\n } @else {\n <span>\n @if (col.formatter) {\n <span [innerHTML]=\"col.formatter(item)\"></span>\n } @else {\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n }\n </span>\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n @if (showOperations && actions.length > 0) {\n <div class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\n @if (actionsMode === 'buttons') {\n @for (act of actions; track act) {\n <button\n pButton\n type=\"button\"\n [icon]=\"act.icon || ''\"\n [title]=\"act.label?? '' | translate\"\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600 custom-button-medium mr-1\"\n [ngClass]=\"act.styleClass\"\n (click)=\"action.emit({ name: act.name, row: item })\"\n ></button>\n }\n } @else {\n <p-menu\n #cardMenu\n [model]=\"getMenuItems(item)\"\n popup=\"true\"\n appendTo=\"body\">\n </p-menu>\n <button\n pButton\n type=\"button\"\n icon=\"pi pi-ellipsis-v\"\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600\"\n (click)=\"cardMenu.toggle($event)\">\n </button>\n }\n </div>\n }\n </div>\n }\n</div>\n", styles: [".custom-button-medium{width:2.5rem;height:2.5rem}.icon-delete{color:#ef4444}.icon-edit{color:#2563eb}\n"] }]
|
|
182
|
+
], template: "\r\n<div class=\"p-4 p-4 flex flex-col gap-6 font-inter\">\r\n @if (loading) {\r\n <div class=\"col-span-full text-center py-8\">\r\n <div class=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500 inline-block\"></div>\r\n <p class=\"mt-4 text-gray-600\">Loading data...</p>\r\n </div>\r\n }\r\n\r\n @if (!loading && data.length === 0) {\r\n <div class=\"col-span-full text-center py-8 text-gray-500\">\r\n No records found.\r\n </div>\r\n }\r\n\r\n @for (item of data; track trackById($index, item)) {\r\n <div\r\n [ngClass]=\"rowClassFn(item)\"\r\n class=\"bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-300 overflow-hidden flex flex-row items-center\"\r\n (click)=\"handleCardClick(item)\"\r\n [class.cursor-pointer]=\"rowSelectable && !showRowSelectionCheckbox\">\r\n @if (showRowSelectionCheckbox) {\r\n <div class=\"p-4\">\r\n <input type=\"checkbox\"\r\n [checked]=\"isItemSelected(item)\"\r\n (change)=\"toggleItemSelection(item, $event)\"\r\n class=\"form-checkbox h-5 w-5 text-blue-600 rounded focus:ring-blue-500\">\r\n </div>\r\n }\r\n <div class=\"p-6 flex-grow\">\r\n <div class=\"flex flex-wrap -mx-2\">\r\n @for (col of columns; track col) {\r\n @if (col.isCardVisible) {\r\n <div class=\"px-2 mb-2 w-full sm:w-1/5\">\r\n <div class=\"flex flex-col sm:flex-row sm:items-center text-sm\">\r\n <span class=\"font-semibold text-gray-700 sm:w-1/3 sm:min-w-[80px] sm:pr-2\">{{ col.header | translate }}:</span>\r\n <div class=\"flex-grow text-gray-800 text-left mt-1 sm:mt-0\">\r\n @if (col.clickable) {\r\n <span class=\"cursor-pointer hover:underline text-blue-600\"\r\n (click)=\"handleCellClick(col, item, $event)\"\r\n (mouseenter)=\"col.hoverable && onCellHover(col, item, $event)\"\r\n (mouseleave)=\"col.hoverable && onCellLeave(col, item, $event)\">\r\n @if (col.formatter) {\r\n <span [innerHTML]=\"col.formatter(item)\"></span>\r\n } @else {\r\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\r\n }\r\n </span>\r\n } @else {\r\n <span>\r\n @if (col.formatter) {\r\n <span [innerHTML]=\"col.formatter(item)\"></span>\r\n } @else {\r\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n @if (showOperations && actions.length > 0) {\r\n <div class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\r\n @if (actionsMode === 'buttons') {\r\n @for (act of actions; track act) {\r\n <button\r\n pButton\r\n type=\"button\"\r\n [icon]=\"act.icon || ''\"\r\n [title]=\"act.label?? '' | translate\"\r\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600 custom-button-medium mr-1\"\r\n [ngClass]=\"act.styleClass\"\r\n (click)=\"action.emit({ name: act.name, row: item })\"\r\n ></button>\r\n }\r\n } @else {\r\n <p-menu\r\n #cardMenu\r\n [model]=\"getMenuItems(item)\"\r\n popup=\"true\"\r\n appendTo=\"body\">\r\n </p-menu>\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600\"\r\n (click)=\"cardMenu.toggle($event)\">\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".custom-button-medium{width:2.5rem;height:2.5rem}.icon-delete{color:#ef4444}.icon-edit{color:#2563eb}\n"] }]
|
|
183
183
|
}], propDecorators: { data: [{
|
|
184
184
|
type: Input
|
|
185
185
|
}], columns: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"es.framework-ng.ui.core-generic-card.mjs","sources":["../../../../libs/ng.ui.core/generic-card/src/lib/generic-card-module.ts","../../../../libs/ng.ui.core/generic-card/src/lib/generic-card.ts","../../../../libs/ng.ui.core/generic-card/src/lib/generic-card.html","../../../../libs/ng.ui.core/generic-card/src/es.framework-ng.ui.core-generic-card.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class GenericCardModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActionDef } from '@es.framework/ng.core/models';\nimport { ColumnDef } from '@es.framework/ng.core/models';\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\nimport { MenuItem } from 'primeng/api';\nimport { ButtonModule } from 'primeng/button';\nimport { MenuModule } from 'primeng/menu';\n\n@Component({\n selector: 'lib-generic-card',\n imports: [\n CommonModule,\n ButtonModule,\n MenuModule,\n TranslatePipe,\n FormsModule,\n ],\n templateUrl: './generic-card.html',\n styleUrl: './generic-card.css'\n})\nexport class GenericCard <T extends { [key: string]: any }> {\n\n @Input() data: T[] = [];\n @Input() columns: ColumnDef<T>[] = [];\n @Input() loading = false;\n @Input() actions: ActionDef<T>[] = [];\n @Input() actionsMode: 'buttons' | 'menu' = 'buttons';\n @Input() showOperations = true;\n\n // Added inputs for selection mirroring the table component\n @Input() rowSelectable = false;\n @Input() showRowSelectionCheckbox = false;\n @Input() paginator = false; // Indicates if pagination is externally managed\n\n // Row class function, mirroring the table component\n @Input() rowClassFn: (rowData: any) => string = () => '';\n\n @Output() action = new EventEmitter<{ name: string; row: T }>();\n\n\n _selection: T | T[] | null = null;\n @Input()\n get selection(): T | T[] | null {\n return this._selection;\n }\n set selection(val: T | T[] | null) {\n this._selection = val;\n // No emit here, emit only from actual user interaction methods\n }\n\n @Output() selectionChange = new EventEmitter<T | T[] | null>();\n @Output() rowSelect = new EventEmitter<T>();\n // Note: onLazyLoad is not directly applicable as the card component doesn't have internal pagination UI.\n // The parent component should manage data slicing and pass the correct 'data' array.\n\n\n\n /**\n * Generates menu items for the action menu.\n * @param row The data row for which to generate actions.\n * @returns An array of PrimeNG MenuItem objects.\n */\n getMenuItems(row: T): MenuItem[] {\n return this.actions.map(act => ({\n label: act.label,\n icon: act.icon,\n command: () => this.action.emit({ name: act.name, row }),\n styleClass: act.styleClass\n }));\n }\n\n /**\n * Handles click events on a clickable cell.\n * @param col The ColumnDef of the clicked column.\n * @param rowData The data row of the clicked cell.\n * @param event The mouse event.\n */\n handleCellClick(col: ColumnDef<any>, rowData: any, event: MouseEvent): void {\n event.stopPropagation(); // Prevent card selection if applicable\n if (col.clickAction) {\n col.clickAction(rowData, event);\n }\n }\n\n /**\n * Handles mouse enter events on a hoverable cell.\n * @param col The ColumnDef of the hovered column.\n * @param rowData The data row of the hovered cell.\n * @param event The mouse event.\n */\n onCellHover(col: ColumnDef<T>, row: T, event: MouseEvent): void {\n event.stopPropagation();\n col.onCellMouseEnter?.(row, event);\n }\n\n /**\n * Handles mouse leave events on a hoverable cell.\n * @param col The ColumnDef of the hovered column.\n * @param rowData The data row of the hovered cell.\n * @param event The mouse event.\n */\n onCellLeave(col: ColumnDef<T>, row: T, event: MouseEvent): void {\n event.stopPropagation();\n col.onCellMouseLeave?.(row, event);\n }\n\n /**\n * Handles click on the entire card for row selection (if not using checkboxes).\n * @param item The data item associated with the clicked card.\n */\n handleCardClick(item: T): void {\n if (this.rowSelectable && !this.showRowSelectionCheckbox) {\n // Single selection mode logic\n if (this._selection === item) {\n this._selection = null; // Deselect if already selected\n } else {\n this._selection = item; // Select the current item\n }\n this.selectionChange.emit(this._selection);\n this.rowSelect.emit(item); // Emit the selected item\n }\n }\n\n /**\n * Checks if an item is currently selected.\n * Used for checkbox binding.\n * @param item The item to check.\n * @returns True if the item is selected, false otherwise.\n */\n isItemSelected(item: T): boolean {\n if (!this._selection) {\n return false;\n }\n if (Array.isArray(this._selection)) {\n // Check if item exists in the array (for multi-select)\n return (this._selection as T[]).includes(item);\n }\n // Single selection mode\n return this._selection === item;\n }\n\n /**\n * Toggles the selection state of an item.\n * Used when a checkbox is clicked.\n * @param item The item to toggle.\n * @param event The change event from the checkbox.\n */\n toggleItemSelection(item: T, event: Event): void {\n event.stopPropagation(); // Prevent card click event from firing\n const isChecked = (event.target as HTMLInputElement).checked;\n\n if (this.showRowSelectionCheckbox) {\n // Multi-selection logic\n let currentSelectionArray = Array.isArray(this._selection) ? [...this._selection] : [];\n\n if (isChecked) {\n if (!currentSelectionArray.includes(item)) {\n currentSelectionArray.push(item);\n }\n } else {\n currentSelectionArray = currentSelectionArray.filter(selectedItem => selectedItem !== item);\n }\n this._selection = currentSelectionArray;\n } else if (this.rowSelectable) {\n // Single selection logic (if no checkboxes, this block would be redundant with handleCardClick, but kept for clarity)\n this._selection = isChecked ? item : null;\n }\n this.selectionChange.emit(this._selection);\n if (isChecked) {\n this.rowSelect.emit(item);\n }\n }\n\n /**\n * Used by *ngFor to optimize rendering.\n * Assumes each item has a unique 'id' property.\n * @param index The index of the item.\n * @param item The data item.\n * @returns The unique identifier of the item.\n */\n trackById(index: number, item: T): any {\n // You might need to adjust 'id' if your data uses a different unique identifier\n return (item as any).id || index;\n }\n\n}\n","\n<div class=\"p-4 p-4 flex flex-col gap-6 font-inter\">\n @if (loading) {\n <div class=\"col-span-full text-center py-8\">\n <div class=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500 inline-block\"></div>\n <p class=\"mt-4 text-gray-600\">Loading data...</p>\n </div>\n }\n\n @if (!loading && data.length === 0) {\n <div class=\"col-span-full text-center py-8 text-gray-500\">\n No records found.\n </div>\n }\n\n @for (item of data; track trackById($index, item)) {\n <div\n [ngClass]=\"rowClassFn(item)\"\n class=\"bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-300 overflow-hidden flex flex-row items-center\"\n (click)=\"handleCardClick(item)\"\n [class.cursor-pointer]=\"rowSelectable && !showRowSelectionCheckbox\">\n @if (showRowSelectionCheckbox) {\n <div class=\"p-4\">\n <input type=\"checkbox\"\n [checked]=\"isItemSelected(item)\"\n (change)=\"toggleItemSelection(item, $event)\"\n class=\"form-checkbox h-5 w-5 text-blue-600 rounded focus:ring-blue-500\">\n </div>\n }\n <div class=\"p-6 flex-grow\">\n <div class=\"flex flex-wrap -mx-2\">\n @for (col of columns; track col) {\n @if (col.isCardVisible) {\n <div class=\"px-2 mb-2 w-full sm:w-1/5\">\n <div class=\"flex flex-col sm:flex-row sm:items-center text-sm\">\n <span class=\"font-semibold text-gray-700 sm:w-1/3 sm:min-w-[80px] sm:pr-2\">{{ col.header | translate }}:</span>\n <div class=\"flex-grow text-gray-800 text-left mt-1 sm:mt-0\">\n @if (col.clickable) {\n <span class=\"cursor-pointer hover:underline text-blue-600\"\n (click)=\"handleCellClick(col, item, $event)\"\n (mouseenter)=\"col.hoverable && onCellHover(col, item, $event)\"\n (mouseleave)=\"col.hoverable && onCellLeave(col, item, $event)\">\n @if (col.formatter) {\n <span [innerHTML]=\"col.formatter(item)\"></span>\n } @else {\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n }\n </span>\n } @else {\n <span>\n @if (col.formatter) {\n <span [innerHTML]=\"col.formatter(item)\"></span>\n } @else {\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\n }\n </span>\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n @if (showOperations && actions.length > 0) {\n <div class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\n @if (actionsMode === 'buttons') {\n @for (act of actions; track act) {\n <button\n pButton\n type=\"button\"\n [icon]=\"act.icon || ''\"\n [title]=\"act.label?? '' | translate\"\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600 custom-button-medium mr-1\"\n [ngClass]=\"act.styleClass\"\n (click)=\"action.emit({ name: act.name, row: item })\"\n ></button>\n }\n } @else {\n <p-menu\n #cardMenu\n [model]=\"getMenuItems(item)\"\n popup=\"true\"\n appendTo=\"body\">\n </p-menu>\n <button\n pButton\n type=\"button\"\n icon=\"pi pi-ellipsis-v\"\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600\"\n (click)=\"cardMenu.toggle($event)\">\n </button>\n }\n </div>\n }\n </div>\n }\n</div>\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-card.mjs","sources":["../../../../libs/ng.ui.core/generic-card/src/lib/generic-card-module.ts","../../../../libs/ng.ui.core/generic-card/src/lib/generic-card.ts","../../../../libs/ng.ui.core/generic-card/src/lib/generic-card.html","../../../../libs/ng.ui.core/generic-card/src/es.framework-ng.ui.core-generic-card.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 GenericCardModule {}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ActionDef } from '@es.framework/ng.core/models';\r\nimport { ColumnDef } from '@es.framework/ng.core/models';\r\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { MenuModule } from 'primeng/menu';\r\n\r\n@Component({\r\n selector: 'lib-generic-card',\r\n imports: [\r\n CommonModule,\r\n ButtonModule,\r\n MenuModule,\r\n TranslatePipe,\r\n FormsModule,\r\n ],\r\n templateUrl: './generic-card.html',\r\n styleUrl: './generic-card.css'\r\n})\r\nexport class GenericCard <T extends { [key: string]: any }> {\r\n\r\n @Input() data: T[] = [];\r\n @Input() columns: ColumnDef<T>[] = [];\r\n @Input() loading = false;\r\n @Input() actions: ActionDef<T>[] = [];\r\n @Input() actionsMode: 'buttons' | 'menu' = 'buttons';\r\n @Input() showOperations = true;\r\n\r\n // Added inputs for selection mirroring the table component\r\n @Input() rowSelectable = false;\r\n @Input() showRowSelectionCheckbox = false;\r\n @Input() paginator = false; // Indicates if pagination is externally managed\r\n\r\n // Row class function, mirroring the table component\r\n @Input() rowClassFn: (rowData: any) => string = () => '';\r\n\r\n @Output() action = new EventEmitter<{ name: string; row: T }>();\r\n\r\n\r\n _selection: T | T[] | null = null;\r\n @Input()\r\n get selection(): T | T[] | null {\r\n return this._selection;\r\n }\r\n set selection(val: T | T[] | null) {\r\n this._selection = val;\r\n // No emit here, emit only from actual user interaction methods\r\n }\r\n\r\n @Output() selectionChange = new EventEmitter<T | T[] | null>();\r\n @Output() rowSelect = new EventEmitter<T>();\r\n // Note: onLazyLoad is not directly applicable as the card component doesn't have internal pagination UI.\r\n // The parent component should manage data slicing and pass the correct 'data' array.\r\n\r\n\r\n\r\n /**\r\n * Generates menu items for the action menu.\r\n * @param row The data row for which to generate actions.\r\n * @returns An array of PrimeNG MenuItem objects.\r\n */\r\n getMenuItems(row: T): MenuItem[] {\r\n return this.actions.map(act => ({\r\n label: act.label,\r\n icon: act.icon,\r\n command: () => this.action.emit({ name: act.name, row }),\r\n styleClass: act.styleClass\r\n }));\r\n }\r\n\r\n /**\r\n * Handles click events on a clickable cell.\r\n * @param col The ColumnDef of the clicked column.\r\n * @param rowData The data row of the clicked cell.\r\n * @param event The mouse event.\r\n */\r\n handleCellClick(col: ColumnDef<any>, rowData: any, event: MouseEvent): void {\r\n event.stopPropagation(); // Prevent card selection if applicable\r\n if (col.clickAction) {\r\n col.clickAction(rowData, event);\r\n }\r\n }\r\n\r\n /**\r\n * Handles mouse enter events on a hoverable cell.\r\n * @param col The ColumnDef of the hovered column.\r\n * @param rowData The data row of the hovered cell.\r\n * @param event The mouse event.\r\n */\r\n onCellHover(col: ColumnDef<T>, row: T, event: MouseEvent): void {\r\n event.stopPropagation();\r\n col.onCellMouseEnter?.(row, event);\r\n }\r\n\r\n /**\r\n * Handles mouse leave events on a hoverable cell.\r\n * @param col The ColumnDef of the hovered column.\r\n * @param rowData The data row of the hovered cell.\r\n * @param event The mouse event.\r\n */\r\n onCellLeave(col: ColumnDef<T>, row: T, event: MouseEvent): void {\r\n event.stopPropagation();\r\n col.onCellMouseLeave?.(row, event);\r\n }\r\n\r\n /**\r\n * Handles click on the entire card for row selection (if not using checkboxes).\r\n * @param item The data item associated with the clicked card.\r\n */\r\n handleCardClick(item: T): void {\r\n if (this.rowSelectable && !this.showRowSelectionCheckbox) {\r\n // Single selection mode logic\r\n if (this._selection === item) {\r\n this._selection = null; // Deselect if already selected\r\n } else {\r\n this._selection = item; // Select the current item\r\n }\r\n this.selectionChange.emit(this._selection);\r\n this.rowSelect.emit(item); // Emit the selected item\r\n }\r\n }\r\n\r\n /**\r\n * Checks if an item is currently selected.\r\n * Used for checkbox binding.\r\n * @param item The item to check.\r\n * @returns True if the item is selected, false otherwise.\r\n */\r\n isItemSelected(item: T): boolean {\r\n if (!this._selection) {\r\n return false;\r\n }\r\n if (Array.isArray(this._selection)) {\r\n // Check if item exists in the array (for multi-select)\r\n return (this._selection as T[]).includes(item);\r\n }\r\n // Single selection mode\r\n return this._selection === item;\r\n }\r\n\r\n /**\r\n * Toggles the selection state of an item.\r\n * Used when a checkbox is clicked.\r\n * @param item The item to toggle.\r\n * @param event The change event from the checkbox.\r\n */\r\n toggleItemSelection(item: T, event: Event): void {\r\n event.stopPropagation(); // Prevent card click event from firing\r\n const isChecked = (event.target as HTMLInputElement).checked;\r\n\r\n if (this.showRowSelectionCheckbox) {\r\n // Multi-selection logic\r\n let currentSelectionArray = Array.isArray(this._selection) ? [...this._selection] : [];\r\n\r\n if (isChecked) {\r\n if (!currentSelectionArray.includes(item)) {\r\n currentSelectionArray.push(item);\r\n }\r\n } else {\r\n currentSelectionArray = currentSelectionArray.filter(selectedItem => selectedItem !== item);\r\n }\r\n this._selection = currentSelectionArray;\r\n } else if (this.rowSelectable) {\r\n // Single selection logic (if no checkboxes, this block would be redundant with handleCardClick, but kept for clarity)\r\n this._selection = isChecked ? item : null;\r\n }\r\n this.selectionChange.emit(this._selection);\r\n if (isChecked) {\r\n this.rowSelect.emit(item);\r\n }\r\n }\r\n\r\n /**\r\n * Used by *ngFor to optimize rendering.\r\n * Assumes each item has a unique 'id' property.\r\n * @param index The index of the item.\r\n * @param item The data item.\r\n * @returns The unique identifier of the item.\r\n */\r\n trackById(index: number, item: T): any {\r\n // You might need to adjust 'id' if your data uses a different unique identifier\r\n return (item as any).id || index;\r\n }\r\n\r\n}\r\n","\r\n<div class=\"p-4 p-4 flex flex-col gap-6 font-inter\">\r\n @if (loading) {\r\n <div class=\"col-span-full text-center py-8\">\r\n <div class=\"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-500 inline-block\"></div>\r\n <p class=\"mt-4 text-gray-600\">Loading data...</p>\r\n </div>\r\n }\r\n\r\n @if (!loading && data.length === 0) {\r\n <div class=\"col-span-full text-center py-8 text-gray-500\">\r\n No records found.\r\n </div>\r\n }\r\n\r\n @for (item of data; track trackById($index, item)) {\r\n <div\r\n [ngClass]=\"rowClassFn(item)\"\r\n class=\"bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-300 overflow-hidden flex flex-row items-center\"\r\n (click)=\"handleCardClick(item)\"\r\n [class.cursor-pointer]=\"rowSelectable && !showRowSelectionCheckbox\">\r\n @if (showRowSelectionCheckbox) {\r\n <div class=\"p-4\">\r\n <input type=\"checkbox\"\r\n [checked]=\"isItemSelected(item)\"\r\n (change)=\"toggleItemSelection(item, $event)\"\r\n class=\"form-checkbox h-5 w-5 text-blue-600 rounded focus:ring-blue-500\">\r\n </div>\r\n }\r\n <div class=\"p-6 flex-grow\">\r\n <div class=\"flex flex-wrap -mx-2\">\r\n @for (col of columns; track col) {\r\n @if (col.isCardVisible) {\r\n <div class=\"px-2 mb-2 w-full sm:w-1/5\">\r\n <div class=\"flex flex-col sm:flex-row sm:items-center text-sm\">\r\n <span class=\"font-semibold text-gray-700 sm:w-1/3 sm:min-w-[80px] sm:pr-2\">{{ col.header | translate }}:</span>\r\n <div class=\"flex-grow text-gray-800 text-left mt-1 sm:mt-0\">\r\n @if (col.clickable) {\r\n <span class=\"cursor-pointer hover:underline text-blue-600\"\r\n (click)=\"handleCellClick(col, item, $event)\"\r\n (mouseenter)=\"col.hoverable && onCellHover(col, item, $event)\"\r\n (mouseleave)=\"col.hoverable && onCellLeave(col, item, $event)\">\r\n @if (col.formatter) {\r\n <span [innerHTML]=\"col.formatter(item)\"></span>\r\n } @else {\r\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\r\n }\r\n </span>\r\n } @else {\r\n <span>\r\n @if (col.formatter) {\r\n <span [innerHTML]=\"col.formatter(item)\"></span>\r\n } @else {\r\n {{ col.pipe ? col.pipe(item[col.field]) : item[col.field] }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n @if (showOperations && actions.length > 0) {\r\n <div class=\"border-l border-gray-200 p-4 flex justify-end items-center\">\r\n @if (actionsMode === 'buttons') {\r\n @for (act of actions; track act) {\r\n <button\r\n pButton\r\n type=\"button\"\r\n [icon]=\"act.icon || ''\"\r\n [title]=\"act.label?? '' | translate\"\r\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600 custom-button-medium mr-1\"\r\n [ngClass]=\"act.styleClass\"\r\n (click)=\"action.emit({ name: act.name, row: item })\"\r\n ></button>\r\n }\r\n } @else {\r\n <p-menu\r\n #cardMenu\r\n [model]=\"getMenuItems(item)\"\r\n popup=\"true\"\r\n appendTo=\"body\">\r\n </p-menu>\r\n <button\r\n pButton\r\n type=\"button\"\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"p-button-rounded p-button-text text-gray-600 hover:text-blue-600\"\r\n (click)=\"cardMenu.toggle($event)\">\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -243,7 +243,7 @@ class GenericCrudHeaderComponent {
|
|
|
243
243
|
// etc.
|
|
244
244
|
}
|
|
245
245
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCrudHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
246
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericCrudHeaderComponent, isStandalone: true, selector: "app-generic-crud-header", inputs: { mode: "mode", breadcrumb: "breadcrumb", isSingleItemSelected: "isSingleItemSelected", selectedItems: "selectedItems", singleActionButtons: "singleActionButtons", bulkActionButtons: "bulkActionButtons", addButtonConfigs: "addButtonConfigs", mergedButtonConfigs: "mergedButtonConfigs", filters: "filters", filterModel: "filterModel", showSearch: "showSearch", first: "first", rows: "rows", totalRecords: "totalRecords", moduleName: "moduleName", apiName: "apiName", actions: "actions", showAdvancedFilter: "showAdvancedFilter", advancedFilterIcon: "advancedFilterIcon", searchTabs: "searchTabs", showViewMode: "showViewMode", viewMode: "viewMode" }, outputs: { singleItemAction: "singleItemAction", bulkAction: "bulkAction", search: "search", resetSearch: "resetSearch", action: "action", paginateChange: "paginateChange", viewModeChange: "viewModeChange" }, providers: [DialogService], ngImport: i0, template: "@if (mode !== 'form-only' && mode !== 'detail') {\r\n<div class=\"flex items-start gap-2 justify-between\">\r\n <div>\r\n <app-breadcrumb\r\n class=\"xs:block hidden\"\r\n [breadcrumb]=\"breadcrumb\"\r\n ></app-breadcrumb>\r\n </div>\r\n\r\n <div class=\"flex items-center gap-2 justify-end flex-wrap\">\r\n @if (mode === 'full') {\r\n <!-- \u0623\u0632\u0631\u0627\u0631 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0645\u0641\u0631\u062F\u0629 -->\r\n @if (isSingleItemSelected) {\r\n @for (btn of singleActionButtons; track trackByIdx($index)) {\r\n @if (!btn.visible || (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 [severity]=\"btn.severity\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"onSingleItemAction(btn)\"\r\n ></lib-generic-button>\r\n }\r\n }\r\n }\r\n\r\n <!-- \u0623\u0632\u0631\u0627\u0631 \u0645\u062A\u0639\u062F\u062F\u0629 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 -->\r\n @if (selectedItems.length > 0) {\r\n @for (btn of bulkActionButtons; track trackByIdx($index)) {\r\n @if (!btn.visible || (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 [severity]=\"btn.severity\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"onInternalBulkAction(btn)\"\r\n ></lib-generic-button>\r\n }\r\n }\r\n }\r\n\r\n <!-- \u0623\u0632\u0631\u0627\u0631 \u0627\u0644\u0625\u0636\u0627\u0641\u0629 -->\r\n @for (btn of mergedButtonConfigs; track trackByIdx($index)) {\r\n @if (!btn.visible || (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 [severity]=\"btn.severity\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"handleButtonClick(btn)\"\r\n ></lib-generic-button>\r\n }\r\n }\r\n }\r\n </div>\r\n</div>\r\n}\r\n\r\n@if (mode !== 'form-only' && mode !== 'detail') {\r\n<div class=\"mt-2 mb-4 flex items-center justify-between\">\r\n <!-- \u0627\u0644\u0628\u062D\u062B -->\r\n @if (showSearch && filters) {\r\n <lib-generic-search-advanced\r\n [model]=\"filterModel\"\r\n [fields]=\"filters\"\r\n (search)=\"applySearch($event)\"\r\n (paginationChange)=\"paginationChange($event)\"\r\n >\r\n</lib-generic-search-advanced>\r\n } @else {\r\n <div></div>\r\n }\r\n\r\n <!-- \u0623\u062F\u0648\u0627\u062A \u0625\u0636\u0627\u0641\u064A\u0629 -->\r\n <div class=\"flex items-center gap-3 rtl:space-x-reverse\">\r\n\r\n @if (showAdvancedFilter && searchTabs.length > 0) {\r\n <p-button\r\n [icon]=\"advancedFilterIcon\"\r\n [outlined]=\"!isAdvancedFilterVisible\"\r\n severity=\"secondary\"\r\n [pTooltip]=\"'ADVANCED_FILTER' | translate\"\r\n tooltipPosition=\"top\"\r\n (onClick)=\"toggleAdvancedFilter()\"\r\n class=\"hidden sm:inline-flex\"\r\n />\r\n}\r\n <!-- Refresh Button -->\r\n <p-button\r\n icon=\"pi pi-refresh\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (onClick)=\"reset()\"\r\n />\r\n\r\n <p-divider layout=\"vertical\" class=\"m-0 p-0 hidden xs:block\" />\r\n\r\n\r\n <!-- <p-button (click)=\"menu.toggle($event)\" class=\"xs:block\" severity=\"secondary\" outlined icon=\"pi pi-ellipsis-v\"/>\r\n <p-menu #menu [model]=\"actions\" [popup]=\"true\" /> -->\r\n\r\n\r\n <!-- Pagination Controls -->\r\n <div class=\"flex items-center gap-1 rtl:space-x-reverse\">\r\n\r\n @if ( showViewMode ) {\r\n<p-selectButton\r\n [options]=\"viewOptions\"\r\n [(ngModel)]=\"viewMode\"\r\n (onChange)=\"onViewChange($event)\"\r\n [unselectable]=\"false\"\r\n optionLabel=\"icon\"\r\n optionValue=\"value\"\r\n\r\n styleClass=\"inline-flex bg-slate-100 dark:bg-slate-800 p-1 rounded-xl border border-slate-200 dark:border-slate-700 shadow-inner\"\r\n>\r\n\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n class=\"flex items-center justify-center rounded-lg transition-all duration-200\"\r\n [ngClass]=\"{\r\n ' dark:bg-slate-600 shadow-sm': viewMode === item.value,\r\n 'text-slate-500 hover:bg-slate-200 dark:hover:bg-slate-700': viewMode !== item.value\r\n }\"\r\n [pTooltip]=\"item.title | translate\"\r\n tooltipPosition=\"top\"\r\n >\r\n <i [class]=\"item.icon\" class=\"text-base\"></i>\r\n </div>\r\n </ng-template>\r\n\r\n</p-selectButton>\r\n }\r\n <p-divider layout=\"vertical\" class=\"m-0 p-0 hidden xs:block\" />\r\n\r\n <!-- First Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-angle-double-right' : 'pi pi-angle-double-left'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (click)=\"goFirst()\"\r\n [disabled]=\"isFirstPage()\"\r\n ></p-button>\r\n\r\n <!-- Previous Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-chevron-right' : 'pi pi-chevron-left'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"xs:block\"\r\n (click)=\"goPrev()\"\r\n [disabled]=\"isFirstPage()\"\r\n ></p-button>\r\n\r\n\r\n <!-- Current Page Display with Dropdown -->\r\n <div class=\"relative\">\r\n\r\n <p-button\r\n [label]=\"currentPage + ' / ' + totalPages()\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (click)=\"showPageMenu = !showPageMenu\"\r\n pTooltip=\"{{totalRecords}}\"\r\n tooltipPosition=\"top\"\r\n />\r\n\r\n\r\n </div>\r\n <!-- Next Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-chevron-left' : 'pi pi-chevron-right'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"xs:block\"\r\n (click)=\"goNext()\"\r\n [disabled]=\"isLastPage()\"\r\n ></p-button>\r\n\r\n <!-- Last Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-angle-double-left' : 'pi pi-angle-double-right'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (click)=\"goLast()\"\r\n [disabled]=\"isLastPage()\"\r\n ></p-button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n @if (showSearch && showAdvancedFilter && searchTabs.length > 0) {\r\n <div\r\n [ngClass]=\"{\r\n 'block': true,\r\n 'sm:hidden': !isAdvancedFilterVisible,\r\n 'sm:block': isAdvancedFilterVisible\r\n }\"\r\n class=\"animate-fade-in\"\r\n >\r\n <app-tabbed-search\r\n [fields]=\"searchTabs\"\r\n [model]=\"filterModel\"\r\n (onSearch)=\"applySearch($event)\"\r\n (onReset)=\"reset()\"\r\n (paginationChange)=\"paginationChange($event)\">\r\n </app-tabbed-search>\r\n </div>\r\n}\r\n}\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "component", type: BreadcrumbComponent, selector: "app-breadcrumb", inputs: ["breadcrumb"] }, { kind: "ngmodule", type: ButtonModule }, { 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: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: DividerModule }, { kind: "component", type: i4.Divider, selector: "p-divider", inputs: ["styleClass", "layout", "type", "align"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip"] }, { kind: "component", type: GenericSearchAdvanced, selector: "lib-generic-search-advanced", inputs: ["model", "fields", "enableSelect", "enableGroup", "odataConfig"], outputs: ["search", "paginationChange", "odataSearch"] }, { kind: "ngmodule", type: SelectButtonModule }, { kind: "component", type: i7.SelectButton, selector: "p-selectButton, p-selectbutton, p-select-button", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "unselectable", "tabindex", "multiple", "allowEmpty", "styleClass", "ariaLabelledBy", "dataKey", "autofocus", "size", "fluid"], outputs: ["onOptionClick", "onChange"] }, { kind: "component", type: TabbedSearchComponent, selector: "app-tabbed-search", inputs: ["fields", "model", "form"], outputs: ["onSearch", "onReset", "paginationChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
246
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericCrudHeaderComponent, isStandalone: true, selector: "app-generic-crud-header", inputs: { mode: "mode", breadcrumb: "breadcrumb", isSingleItemSelected: "isSingleItemSelected", selectedItems: "selectedItems", singleActionButtons: "singleActionButtons", bulkActionButtons: "bulkActionButtons", addButtonConfigs: "addButtonConfigs", mergedButtonConfigs: "mergedButtonConfigs", filters: "filters", filterModel: "filterModel", showSearch: "showSearch", first: "first", rows: "rows", totalRecords: "totalRecords", moduleName: "moduleName", apiName: "apiName", actions: "actions", showAdvancedFilter: "showAdvancedFilter", advancedFilterIcon: "advancedFilterIcon", searchTabs: "searchTabs", showViewMode: "showViewMode", viewMode: "viewMode" }, outputs: { singleItemAction: "singleItemAction", bulkAction: "bulkAction", search: "search", resetSearch: "resetSearch", action: "action", paginateChange: "paginateChange", viewModeChange: "viewModeChange" }, providers: [DialogService], ngImport: i0, template: "@if (mode !== 'form-only' && mode !== 'detail') {\r\n<div class=\"flex items-start gap-2 justify-between\">\r\n <div>\r\n <app-breadcrumb\r\n class=\"xs:block hidden\"\r\n [breadcrumb]=\"breadcrumb\"\r\n ></app-breadcrumb>\r\n </div>\r\n\r\n <div class=\"flex items-center gap-2 justify-end flex-wrap\">\r\n @if (mode === 'full') {\r\n <!-- \u0623\u0632\u0631\u0627\u0631 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0645\u0641\u0631\u062F\u0629 -->\r\n @if (isSingleItemSelected) {\r\n @for (btn of singleActionButtons; track trackByIdx($index)) {\r\n @if (!btn.visible || (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 [severity]=\"btn.severity\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"onSingleItemAction(btn)\"\r\n ></lib-generic-button>\r\n }\r\n }\r\n }\r\n\r\n <!-- \u0623\u0632\u0631\u0627\u0631 \u0645\u062A\u0639\u062F\u062F\u0629 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 -->\r\n @if (selectedItems.length > 0) {\r\n @for (btn of bulkActionButtons; track trackByIdx($index)) {\r\n @if (!btn.visible || (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 [severity]=\"btn.severity\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"onInternalBulkAction(btn)\"\r\n ></lib-generic-button>\r\n }\r\n }\r\n }\r\n\r\n <!-- \u0623\u0632\u0631\u0627\u0631 \u0627\u0644\u0625\u0636\u0627\u0641\u0629 -->\r\n @for (btn of mergedButtonConfigs; track trackByIdx($index)) {\r\n @if (!btn.visible || (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 [severity]=\"btn.severity\"\r\n [model]=\"btn.splitActions\"\r\n [permission]=\"btn.permission\"\r\n (clicked)=\"handleButtonClick(btn)\"\r\n ></lib-generic-button>\r\n }\r\n }\r\n }\r\n </div>\r\n</div>\r\n}\r\n\r\n@if (mode !== 'form-only' && mode !== 'detail') {\r\n<div class=\"mt-2 mb-4 flex items-center justify-between\">\r\n <!-- \u0627\u0644\u0628\u062D\u062B -->\r\n @if (showSearch && filters) {\r\n <lib-generic-search-advanced\r\n [model]=\"filterModel\"\r\n [fields]=\"filters\"\r\n (search)=\"applySearch($event)\"\r\n (paginationChange)=\"paginationChange($event)\"\r\n >\r\n</lib-generic-search-advanced>\r\n } @else {\r\n <div></div>\r\n }\r\n\r\n <!-- \u0623\u062F\u0648\u0627\u062A \u0625\u0636\u0627\u0641\u064A\u0629 -->\r\n <div class=\"flex items-center gap-3 rtl:space-x-reverse\">\r\n\r\n @if (showAdvancedFilter && searchTabs.length > 0) {\r\n <p-button\r\n [icon]=\"advancedFilterIcon\"\r\n [outlined]=\"!isAdvancedFilterVisible\"\r\n severity=\"secondary\"\r\n [pTooltip]=\"'ADVANCED_FILTER' | translate\"\r\n tooltipPosition=\"top\"\r\n (onClick)=\"toggleAdvancedFilter()\"\r\n class=\"hidden sm:inline-flex\"\r\n />\r\n}\r\n <!-- Refresh Button -->\r\n <p-button\r\n icon=\"pi pi-refresh\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (onClick)=\"reset()\"\r\n />\r\n\r\n <p-divider layout=\"vertical\" class=\"m-0 p-0 hidden xs:block\" />\r\n\r\n\r\n <!-- <p-button (click)=\"menu.toggle($event)\" class=\"xs:block\" severity=\"secondary\" outlined icon=\"pi pi-ellipsis-v\"/>\r\n <p-menu #menu [model]=\"actions\" [popup]=\"true\" /> -->\r\n\r\n\r\n <!-- Pagination Controls -->\r\n <div class=\"flex items-center gap-1 rtl:space-x-reverse\">\r\n\r\n @if ( showViewMode ) {\r\n<p-selectButton\r\n [options]=\"viewOptions\"\r\n [(ngModel)]=\"viewMode\"\r\n (onChange)=\"onViewChange($event)\"\r\n [unselectable]=\"false\"\r\n optionLabel=\"icon\"\r\n optionValue=\"value\"\r\n\r\n styleClass=\"inline-flex bg-slate-100 dark:bg-slate-800 p-1 rounded-xl border border-slate-200 dark:border-slate-700 shadow-inner\"\r\n>\r\n\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n class=\"flex items-center justify-center rounded-lg transition-all duration-200\"\r\n [ngClass]=\"{\r\n ' dark:bg-slate-600 shadow-sm': viewMode === item.value,\r\n 'text-slate-500 hover:bg-slate-200 dark:hover:bg-slate-700': viewMode !== item.value\r\n }\"\r\n [pTooltip]=\"item.title | translate\"\r\n tooltipPosition=\"top\"\r\n >\r\n <i [class]=\"item.icon\" class=\"text-base\"></i>\r\n </div>\r\n </ng-template>\r\n\r\n</p-selectButton>\r\n }\r\n <p-divider layout=\"vertical\" class=\"m-0 p-0 hidden xs:block\" />\r\n\r\n <!-- First Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-angle-double-right' : 'pi pi-angle-double-left'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (click)=\"goFirst()\"\r\n [disabled]=\"isFirstPage()\"\r\n ></p-button>\r\n\r\n <!-- Previous Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-chevron-right' : 'pi pi-chevron-left'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"xs:block\"\r\n (click)=\"goPrev()\"\r\n [disabled]=\"isFirstPage()\"\r\n ></p-button>\r\n\r\n\r\n <!-- Current Page Display with Dropdown -->\r\n <div class=\"relative\">\r\n\r\n <p-button\r\n [label]=\"currentPage + ' / ' + totalPages()\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (click)=\"showPageMenu = !showPageMenu\"\r\n pTooltip=\"{{totalRecords}}\"\r\n tooltipPosition=\"top\"\r\n />\r\n\r\n\r\n </div>\r\n <!-- Next Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-chevron-left' : 'pi pi-chevron-right'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"xs:block\"\r\n (click)=\"goNext()\"\r\n [disabled]=\"isLastPage()\"\r\n ></p-button>\r\n\r\n <!-- Last Page Button -->\r\n <p-button\r\n [icon]=\"isRTL ? 'pi pi-angle-double-left' : 'pi pi-angle-double-right'\"\r\n outlined\r\n severity=\"secondary\"\r\n class=\"hidden xs:block\"\r\n (click)=\"goLast()\"\r\n [disabled]=\"isLastPage()\"\r\n ></p-button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n @if (showSearch && showAdvancedFilter && searchTabs.length > 0) {\r\n <div\r\n [ngClass]=\"{\r\n 'block': true,\r\n 'sm:hidden': !isAdvancedFilterVisible,\r\n 'sm:block': isAdvancedFilterVisible\r\n }\"\r\n class=\"animate-fade-in\"\r\n >\r\n <app-tabbed-search\r\n [fields]=\"searchTabs\"\r\n [model]=\"filterModel\"\r\n (onSearch)=\"applySearch($event)\"\r\n (onReset)=\"reset()\"\r\n (paginationChange)=\"paginationChange($event)\">\r\n </app-tabbed-search>\r\n </div>\r\n}\r\n}\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "component", type: BreadcrumbComponent, selector: "app-breadcrumb", inputs: ["breadcrumb"] }, { kind: "ngmodule", type: ButtonModule }, { 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: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: DividerModule }, { kind: "component", type: i4.Divider, selector: "p-divider", inputs: ["styleClass", "layout", "type", "align"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip"] }, { kind: "component", type: GenericSearchAdvanced, selector: "lib-generic-search-advanced", inputs: ["model", "fields", "enableSelect", "enableGroup", "odataConfig"], outputs: ["search", "paginationChange", "odataSearch"] }, { kind: "ngmodule", type: SelectButtonModule }, { kind: "component", type: i7.SelectButton, selector: "p-selectButton, p-selectbutton, p-select-button", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "unselectable", "tabindex", "multiple", "allowEmpty", "styleClass", "ariaLabelledBy", "dataKey", "autofocus", "size", "fluid"], outputs: ["onOptionClick", "onChange"] }, { kind: "component", type: TabbedSearchComponent, selector: "app-tabbed-search", inputs: ["fields", "model", "form"], outputs: ["onSearch", "onReset", "paginationChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
247
247
|
}
|
|
248
248
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCrudHeaderComponent, decorators: [{
|
|
249
249
|
type: Component,
|
|
@@ -775,8 +775,19 @@ class GenericCrudTableComponent {
|
|
|
775
775
|
// }
|
|
776
776
|
// etc.
|
|
777
777
|
}
|
|
778
|
+
onTableSelectionChange(selection) {
|
|
779
|
+
this._selectedRows = Array.isArray(selection)
|
|
780
|
+
? [...selection]
|
|
781
|
+
: selection
|
|
782
|
+
? [selection]
|
|
783
|
+
: [];
|
|
784
|
+
this.selectionChange.emit({
|
|
785
|
+
selected: [...this._selectedRows],
|
|
786
|
+
selectedCount: this._selectedRows.length,
|
|
787
|
+
});
|
|
788
|
+
}
|
|
778
789
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCrudTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
779
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericCrudTableComponent, isStandalone: true, selector: "app-generic-crud-table", inputs: { data: "data", formFields: "formFields", columnFormFields: "columnFormFields", columns: "columns", dialogMaxWidth: "dialogMaxWidth", isViewMode: "isViewMode", displayMode: "displayMode", useConfirmOnSave: "useConfirmOnSave", isEditMode: "isEditMode", drawerVisible: "drawerVisible", dialogVisible: "dialogVisible", model: "model", loading: "loading", errorMsg: "errorMsg", errorMessage: "errorMessage", actions: "actions", actionsMode: "actionsMode", beforeSaveTransform: "beforeSaveTransform", filters: "filters", filterModel: "filterModel", showSearch: "showSearch", first: "first", rows: "rows", totalRecords: "totalRecords", rowEditable: "rowEditable", rowSelectable: "rowSelectable", scrollHeight: "scrollHeight", paginator: "paginator", service: "service", apiName: "apiName", moduleName: "moduleName", idField: "idField", showRowSelectionCheckbox: "showRowSelectionCheckbox", showAddButton: "showAddButton", showPrintButton: "showPrintButton", PermissionName: "PermissionName", addButtonConfigs: "addButtonConfigs", createEditActions: "createEditActions", supportSubPage: "supportSubPage", tabs: "tabs", bulkActionButtons: "bulkActionButtons", singleActionButtons: "singleActionButtons", breadcrumb: "breadcrumb", mode: "mode", forceState: "forceState", hideTable: "hideTable", autoShowForm: "autoShowForm", rowStyleFn: "rowStyleFn", rowClassFn: "rowClassFn", disableRowCheckboxFn: "disableRowCheckboxFn", showAdvancedFilter: "showAdvancedFilter", advancedFilterIcon: "advancedFilterIcon", searchTabs: "searchTabs", showViewMode: "showViewMode", viewMode: "viewMode", templateDrawerVisible: "templateDrawerVisible", category: "category", feature: "feature" }, outputs: { action: "action", bulkAction: "bulkAction", singleAction: "singleAction", afterSave: "afterSave", afterDelete: "afterDelete", beforeSave: "beforeSave", beforeDelete: "beforeDelete", formCancel: "formCancel", formInit: "formInit", dataLoaded: "dataLoaded", selectionChange: "selectionChange", error: "error", search: "search", pageChange: "pageChange", onSearch: "onSearch", visibleChange: "visibleChange", rowSelect: "rowSelect", viewModeChange: "viewModeChange", templateSelected: "templateSelected", templateDrawerVisibleChange: "templateDrawerVisibleChange" }, viewQueries: [{ propertyName: "genericTable", first: true, predicate: ["genericTable"], descendants: true }, { propertyName: "dialog", first: true, predicate: ["dialog"], descendants: true }], ngImport: i0, template: "<div\r\n [class]=\"mode !== 'form-only' && mode !== 'detail' ? tableClass : ''\"\r\n>\r\n <app-generic-crud-header\r\n [mode]=\"mode\"\r\n [breadcrumb]=\"breadcrumb_\"\r\n [isSingleItemSelected]=\"isSingleItemSelected\"\r\n [selectedItems]=\"_selectedRows\"\r\n [singleActionButtons]=\"singleActionButtons\"\r\n [bulkActionButtons]=\"bulkActionButtons\"\r\n [addButtonConfigs]=\"addButtonConfigs\"\r\n [mergedButtonConfigs]=\"mergedButtonConfigs\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [filters]=\"filters\"\r\n [filterModel]=\"filterModel\"\r\n [showSearch]=\"showSearch\"\r\n (singleItemAction)=\"onSingleItemAction($event)\"\r\n (bulkAction)=\"onInternalBulkAction($event)\"\r\n (action)=\"action.emit($event)\"\r\n (search)=\"resetPage($event);applySearch($event);\"\r\n (resetSearch)=\"resetPage($event);applySearch('');\"\r\n (paginateChange)=\"onHeaderPaginateChange($event)\"\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [searchTabs]=\"searchTabs\"\r\n [showAdvancedFilter]=\"showAdvancedFilter\"\r\n [advancedFilterIcon]=\"advancedFilterIcon\"\r\n [showViewMode]=\"showViewMode\"\r\n [viewMode]=\"viewMode\"\r\n (viewModeChange)=\"onViewModeChange($event)\"\r\n/>\r\n\r\n @if (!hideTable) {\r\n <lib-generic-table\r\n [data]=\"data\"\r\n [columns]=\"columns\"\r\n
|
|
790
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericCrudTableComponent, isStandalone: true, selector: "app-generic-crud-table", inputs: { data: "data", formFields: "formFields", columnFormFields: "columnFormFields", columns: "columns", dialogMaxWidth: "dialogMaxWidth", isViewMode: "isViewMode", displayMode: "displayMode", useConfirmOnSave: "useConfirmOnSave", isEditMode: "isEditMode", drawerVisible: "drawerVisible", dialogVisible: "dialogVisible", model: "model", loading: "loading", errorMsg: "errorMsg", errorMessage: "errorMessage", actions: "actions", actionsMode: "actionsMode", beforeSaveTransform: "beforeSaveTransform", filters: "filters", filterModel: "filterModel", showSearch: "showSearch", first: "first", rows: "rows", totalRecords: "totalRecords", rowEditable: "rowEditable", rowSelectable: "rowSelectable", scrollHeight: "scrollHeight", paginator: "paginator", service: "service", apiName: "apiName", moduleName: "moduleName", idField: "idField", showRowSelectionCheckbox: "showRowSelectionCheckbox", showAddButton: "showAddButton", showPrintButton: "showPrintButton", PermissionName: "PermissionName", addButtonConfigs: "addButtonConfigs", createEditActions: "createEditActions", supportSubPage: "supportSubPage", tabs: "tabs", bulkActionButtons: "bulkActionButtons", singleActionButtons: "singleActionButtons", breadcrumb: "breadcrumb", mode: "mode", forceState: "forceState", hideTable: "hideTable", autoShowForm: "autoShowForm", rowStyleFn: "rowStyleFn", rowClassFn: "rowClassFn", disableRowCheckboxFn: "disableRowCheckboxFn", showAdvancedFilter: "showAdvancedFilter", advancedFilterIcon: "advancedFilterIcon", searchTabs: "searchTabs", showViewMode: "showViewMode", viewMode: "viewMode", templateDrawerVisible: "templateDrawerVisible", category: "category", feature: "feature" }, outputs: { action: "action", bulkAction: "bulkAction", singleAction: "singleAction", afterSave: "afterSave", afterDelete: "afterDelete", beforeSave: "beforeSave", beforeDelete: "beforeDelete", formCancel: "formCancel", formInit: "formInit", dataLoaded: "dataLoaded", selectionChange: "selectionChange", error: "error", search: "search", pageChange: "pageChange", onSearch: "onSearch", visibleChange: "visibleChange", rowSelect: "rowSelect", viewModeChange: "viewModeChange", templateSelected: "templateSelected", templateDrawerVisibleChange: "templateDrawerVisibleChange" }, viewQueries: [{ propertyName: "genericTable", first: true, predicate: ["genericTable"], descendants: true }, { propertyName: "dialog", first: true, predicate: ["dialog"], descendants: true }], ngImport: i0, template: "<div\r\n [class]=\"mode !== 'form-only' && mode !== 'detail' ? tableClass : ''\"\r\n>\r\n <app-generic-crud-header\r\n [mode]=\"mode\"\r\n [breadcrumb]=\"breadcrumb_\"\r\n [isSingleItemSelected]=\"isSingleItemSelected\"\r\n [selectedItems]=\"_selectedRows\"\r\n [singleActionButtons]=\"singleActionButtons\"\r\n [bulkActionButtons]=\"bulkActionButtons\"\r\n [addButtonConfigs]=\"addButtonConfigs\"\r\n [mergedButtonConfigs]=\"mergedButtonConfigs\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [filters]=\"filters\"\r\n [filterModel]=\"filterModel\"\r\n [showSearch]=\"showSearch\"\r\n (singleItemAction)=\"onSingleItemAction($event)\"\r\n (bulkAction)=\"onInternalBulkAction($event)\"\r\n (action)=\"action.emit($event)\"\r\n (search)=\"resetPage($event);applySearch($event);\"\r\n (resetSearch)=\"resetPage($event);applySearch('');\"\r\n (paginateChange)=\"onHeaderPaginateChange($event)\"\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [searchTabs]=\"searchTabs\"\r\n [showAdvancedFilter]=\"showAdvancedFilter\"\r\n [advancedFilterIcon]=\"advancedFilterIcon\"\r\n [showViewMode]=\"showViewMode\"\r\n [viewMode]=\"viewMode\"\r\n (viewModeChange)=\"onViewModeChange($event)\"\r\n/>\r\n\r\n @if (!hideTable) {\r\n <lib-generic-table\r\n [data]=\"data\"\r\n [columns]=\"columns\"\r\n [columnFormFields]=\"columnFormFields\"\r\n [paginator]=\"paginator\"\r\n [loading]=\"loading\"\r\n [actions]=\"actions\"\r\n [actionsMode]=\"actionsMode\"\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\"\r\n [addButtonConfigs]=\"addButtonConfigs\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [showRowSelectionCheckbox]=\"showRowSelectionCheckbox\"\r\n (action)=\"action.emit($event)\"\r\n (onAddNew)=\"action.emit($event)\"\r\n (pageChange)=\"onLazyLoad($event)\"\r\n [rowSelectable]=\"rowSelectable\"\r\n [rowEditable]=\"rowEditable\"\r\n (rowSelect)=\"onRowClick($event)\"\r\n [(selection)]=\"_selectedRows\"\r\n (selectionChange)=\"onTableSelectionChange($event)\"\r\n #genericTable\r\n ></lib-generic-table>\r\n }\r\n\r\n <app-generic-dialog\r\n #dialog\r\n [service]=\"service\"\r\n [formFields]=\"formFields\"\r\n [model]=\"model\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [idField]=\"idField\"\r\n [dialogMaxWidth]=\"dialogMaxWidth\"\r\n [displayMode]=\"displayMode\"\r\n [mode]=\"mode\"\r\n [forceState]=\"forceState\"\r\n [drawerVisible]=\"drawerVisible\"\r\n [dialogVisible]=\"dialogVisible\"\r\n [isViewMode]=\"isViewMode\"\r\n [isEditMode]=\"isEditMode\"\r\n [useConfirmOnSave]=\"useConfirmOnSave\"\r\n [loading]=\"loading\"\r\n [errorMsg]=\"errorMsg\"\r\n [errorMessage]=\"errorMessage\"\r\n [beforeSaveTransform]=\"beforeSaveTransform\"\r\n (action)=\"action.emit($event)\"\r\n (afterSave)=\"afterSave.emit($event);onSubmit();\"\r\n (afterDelete)=\"afterDelete.emit($event)\"\r\n (beforeSave)=\"beforeSave.emit($event)\"\r\n (beforeDelete)=\"beforeDelete.emit($event)\"\r\n (formCancel)=\"formCancel.emit()\"\r\n (formInit)=\"formInit.emit($event)\"\r\n (dataLoaded)=\"dataLoaded.emit($event)\"\r\n (selectionChange)=\"selectionChange.emit($event)\"\r\n (error)=\"error.emit($event)\"\r\n (visibleChange)=\"visibleChange.emit($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n <app-detail-view\r\n [displayMode]=\"displayMode\"\r\n [mode]=\"mode\"\r\n [title]=\"breadcrumb_?.[0]?.label || 'Detail'\"\r\n [service]=\"service\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [idField]=\"idField\"\r\n [actions]=\"actions\"\r\n [formFields]=\"formFields\"\r\n [model]=\"model\"\r\n [tabs]=\"tabs\"\r\n [loading]=\"loading\"\r\n [breadcrumb]=\"breadcrumb_\"\r\n [createEditActions]=\"createEditActions\"\r\n (action)=\"action.emit($event)\"\r\n >\r\n </app-detail-view>\r\n\r\n <!-- \uD83D\uDFE2 \u0645\u0643\u0648\u0646 \u062F\u0631\u062C \u0627\u0644\u0642\u0648\u0627\u0644\u0628 \u0627\u0644\u0645\u062D\u0641\u0648\u0638\u0629 -->\r\n<!-- <saved-report-templates-drawer\r\n [(visible)]=\"templateDrawerVisible\"\r\n (visibleChange)=\"templateDrawerVisibleChange.emit($event)\"\r\n [filterFields]=\"filters\"\r\n [service]=\"service.moduleName\"\r\n [category]=\"category\"\r\n [feature]=\"feature\"\r\n (templateSelected)=\"templateSelected.emit($event)\">\r\n</saved-report-templates-drawer> -->\r\n\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: GenericTable, selector: "lib-generic-table", inputs: ["data", "columns", "columnFormFields", "loading", "actions", "actionsPosition", "actionsMode", "first", "rows", "totalRecords", "sortField", "sortOrder", "globalFilterFields", "addButtonConfigs", "scrollHeight", "rowEditable", "rowSelectable", "selection", "dataKey", "paginator", "showRowSelectionCheckbox"], outputs: ["action", "pageChange", "onAddNew", "rowSelect", "selectionChange"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "ngmodule", type: DividerModule }, { kind: "ngmodule", type: IconFieldModule }, { kind: "ngmodule", type: DrawerModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MessageModule }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: GenericDialogComponent, selector: "app-generic-dialog", inputs: ["form", "service", "formFields", "model", "apiName", "moduleName", "idField", "dialogMaxWidth", "displayMode", "mode", "forceState", "drawerVisible", "dialogVisible", "isViewMode", "isEditMode", "useConfirmOnSave", "loading", "errorMsg", "errorMessage", "beforeSaveTransform", "hideTable", "autoShowForm"], outputs: ["action", "afterSave", "afterDelete", "beforeSave", "beforeDelete", "formCancel", "formInit", "dataLoaded", "selectionChange", "error", "visibleChange"] }, { kind: "component", type: GenericCrudHeaderComponent, selector: "app-generic-crud-header", inputs: ["mode", "breadcrumb", "isSingleItemSelected", "selectedItems", "singleActionButtons", "bulkActionButtons", "addButtonConfigs", "mergedButtonConfigs", "filters", "filterModel", "showSearch", "first", "rows", "totalRecords", "moduleName", "apiName", "actions", "showAdvancedFilter", "advancedFilterIcon", "searchTabs", "showViewMode", "viewMode"], outputs: ["singleItemAction", "bulkAction", "search", "resetSearch", "action", "paginateChange", "viewModeChange"] }, { kind: "component", type: GenericViewComponent, selector: "app-detail-view", inputs: ["title", "actions", "createEditActions", "tabs", "viewMode", "breadcrumb", "service", "formFields", "apiName", "moduleName", "idField", "standaloneMode", "useRouteParams", "query", "currentId", "useTabs", "isViewMode", "isCreateMode", "isEditMode", "model", "displayMode", "mode", "loading", "showToolbar"], outputs: ["action", "afterDelete"] }] });
|
|
780
791
|
}
|
|
781
792
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCrudTableComponent, decorators: [{
|
|
782
793
|
type: Component,
|
|
@@ -799,7 +810,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
799
810
|
// SavedReportTemplatesDrawerComponent
|
|
800
811
|
], host: {
|
|
801
812
|
class: ''
|
|
802
|
-
}, template: "<div\r\n [class]=\"mode !== 'form-only' && mode !== 'detail' ? tableClass : ''\"\r\n>\r\n <app-generic-crud-header\r\n [mode]=\"mode\"\r\n [breadcrumb]=\"breadcrumb_\"\r\n [isSingleItemSelected]=\"isSingleItemSelected\"\r\n [selectedItems]=\"_selectedRows\"\r\n [singleActionButtons]=\"singleActionButtons\"\r\n [bulkActionButtons]=\"bulkActionButtons\"\r\n [addButtonConfigs]=\"addButtonConfigs\"\r\n [mergedButtonConfigs]=\"mergedButtonConfigs\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [filters]=\"filters\"\r\n [filterModel]=\"filterModel\"\r\n [showSearch]=\"showSearch\"\r\n (singleItemAction)=\"onSingleItemAction($event)\"\r\n (bulkAction)=\"onInternalBulkAction($event)\"\r\n (action)=\"action.emit($event)\"\r\n (search)=\"resetPage($event);applySearch($event);\"\r\n (resetSearch)=\"resetPage($event);applySearch('');\"\r\n (paginateChange)=\"onHeaderPaginateChange($event)\"\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [searchTabs]=\"searchTabs\"\r\n [showAdvancedFilter]=\"showAdvancedFilter\"\r\n [advancedFilterIcon]=\"advancedFilterIcon\"\r\n [showViewMode]=\"showViewMode\"\r\n [viewMode]=\"viewMode\"\r\n (viewModeChange)=\"onViewModeChange($event)\"\r\n/>\r\n\r\n @if (!hideTable) {\r\n <lib-generic-table\r\n [data]=\"data\"\r\n [columns]=\"columns\"\r\n
|
|
813
|
+
}, template: "<div\r\n [class]=\"mode !== 'form-only' && mode !== 'detail' ? tableClass : ''\"\r\n>\r\n <app-generic-crud-header\r\n [mode]=\"mode\"\r\n [breadcrumb]=\"breadcrumb_\"\r\n [isSingleItemSelected]=\"isSingleItemSelected\"\r\n [selectedItems]=\"_selectedRows\"\r\n [singleActionButtons]=\"singleActionButtons\"\r\n [bulkActionButtons]=\"bulkActionButtons\"\r\n [addButtonConfigs]=\"addButtonConfigs\"\r\n [mergedButtonConfigs]=\"mergedButtonConfigs\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [filters]=\"filters\"\r\n [filterModel]=\"filterModel\"\r\n [showSearch]=\"showSearch\"\r\n (singleItemAction)=\"onSingleItemAction($event)\"\r\n (bulkAction)=\"onInternalBulkAction($event)\"\r\n (action)=\"action.emit($event)\"\r\n (search)=\"resetPage($event);applySearch($event);\"\r\n (resetSearch)=\"resetPage($event);applySearch('');\"\r\n (paginateChange)=\"onHeaderPaginateChange($event)\"\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [searchTabs]=\"searchTabs\"\r\n [showAdvancedFilter]=\"showAdvancedFilter\"\r\n [advancedFilterIcon]=\"advancedFilterIcon\"\r\n [showViewMode]=\"showViewMode\"\r\n [viewMode]=\"viewMode\"\r\n (viewModeChange)=\"onViewModeChange($event)\"\r\n/>\r\n\r\n @if (!hideTable) {\r\n <lib-generic-table\r\n [data]=\"data\"\r\n [columns]=\"columns\"\r\n [columnFormFields]=\"columnFormFields\"\r\n [paginator]=\"paginator\"\r\n [loading]=\"loading\"\r\n [actions]=\"actions\"\r\n [actionsMode]=\"actionsMode\"\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalRecords\"\r\n [sortField]=\"sortField\"\r\n [sortOrder]=\"sortOrder\"\r\n [addButtonConfigs]=\"addButtonConfigs\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [showRowSelectionCheckbox]=\"showRowSelectionCheckbox\"\r\n (action)=\"action.emit($event)\"\r\n (onAddNew)=\"action.emit($event)\"\r\n (pageChange)=\"onLazyLoad($event)\"\r\n [rowSelectable]=\"rowSelectable\"\r\n [rowEditable]=\"rowEditable\"\r\n (rowSelect)=\"onRowClick($event)\"\r\n [(selection)]=\"_selectedRows\"\r\n (selectionChange)=\"onTableSelectionChange($event)\"\r\n #genericTable\r\n ></lib-generic-table>\r\n }\r\n\r\n <app-generic-dialog\r\n #dialog\r\n [service]=\"service\"\r\n [formFields]=\"formFields\"\r\n [model]=\"model\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [idField]=\"idField\"\r\n [dialogMaxWidth]=\"dialogMaxWidth\"\r\n [displayMode]=\"displayMode\"\r\n [mode]=\"mode\"\r\n [forceState]=\"forceState\"\r\n [drawerVisible]=\"drawerVisible\"\r\n [dialogVisible]=\"dialogVisible\"\r\n [isViewMode]=\"isViewMode\"\r\n [isEditMode]=\"isEditMode\"\r\n [useConfirmOnSave]=\"useConfirmOnSave\"\r\n [loading]=\"loading\"\r\n [errorMsg]=\"errorMsg\"\r\n [errorMessage]=\"errorMessage\"\r\n [beforeSaveTransform]=\"beforeSaveTransform\"\r\n (action)=\"action.emit($event)\"\r\n (afterSave)=\"afterSave.emit($event);onSubmit();\"\r\n (afterDelete)=\"afterDelete.emit($event)\"\r\n (beforeSave)=\"beforeSave.emit($event)\"\r\n (beforeDelete)=\"beforeDelete.emit($event)\"\r\n (formCancel)=\"formCancel.emit()\"\r\n (formInit)=\"formInit.emit($event)\"\r\n (dataLoaded)=\"dataLoaded.emit($event)\"\r\n (selectionChange)=\"selectionChange.emit($event)\"\r\n (error)=\"error.emit($event)\"\r\n (visibleChange)=\"visibleChange.emit($event)\"\r\n >\r\n </app-generic-dialog>\r\n\r\n <app-detail-view\r\n [displayMode]=\"displayMode\"\r\n [mode]=\"mode\"\r\n [title]=\"breadcrumb_?.[0]?.label || 'Detail'\"\r\n [service]=\"service\"\r\n [apiName]=\"service.apiName\"\r\n [moduleName]=\"service.moduleName\"\r\n [idField]=\"idField\"\r\n [actions]=\"actions\"\r\n [formFields]=\"formFields\"\r\n [model]=\"model\"\r\n [tabs]=\"tabs\"\r\n [loading]=\"loading\"\r\n [breadcrumb]=\"breadcrumb_\"\r\n [createEditActions]=\"createEditActions\"\r\n (action)=\"action.emit($event)\"\r\n >\r\n </app-detail-view>\r\n\r\n <!-- \uD83D\uDFE2 \u0645\u0643\u0648\u0646 \u062F\u0631\u062C \u0627\u0644\u0642\u0648\u0627\u0644\u0628 \u0627\u0644\u0645\u062D\u0641\u0648\u0638\u0629 -->\r\n<!-- <saved-report-templates-drawer\r\n [(visible)]=\"templateDrawerVisible\"\r\n (visibleChange)=\"templateDrawerVisibleChange.emit($event)\"\r\n [filterFields]=\"filters\"\r\n [service]=\"service.moduleName\"\r\n [category]=\"category\"\r\n [feature]=\"feature\"\r\n (templateSelected)=\"templateSelected.emit($event)\">\r\n</saved-report-templates-drawer> -->\r\n\r\n</div>\r\n" }]
|
|
803
814
|
}], propDecorators: { genericTable: [{
|
|
804
815
|
type: ViewChild,
|
|
805
816
|
args: ['genericTable']
|