@es.framework/ng.ui.core 2.0.66 → 2.0.67
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 +110 -109
- 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 +2 -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 +12 -5
- 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 +4 -2
- package/fesm2022/es.framework-ng.ui.core-generic-report.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs +518 -495
- 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 +4 -4
- package/fesm2022/es.framework-ng.ui.core-generic-table.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-view.mjs +2 -2
- 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-crud-table.d.ts +1 -0
- package/types/es.framework-ng.ui.core-generic-search-advanced.d.ts +5 -2
- package/wrappers/README.md +3 -3
|
@@ -107,11 +107,11 @@ class GenericButton {
|
|
|
107
107
|
this.itemClick.emit(evt);
|
|
108
108
|
}
|
|
109
109
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
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: "\
|
|
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: "\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 [pTooltip]=\"(tooltip || label) | translate\"\n [tooltipPosition]=\"tooltipPosition\"\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]=\"(tooltip || label) | translate\"\n [tooltipPosition]=\"tooltipPosition\"\n [severity]=\"severity || 'primary'\"\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\n [disabled]=\"disabled || loading\"\n (click)=\"onClick()\"\n >\n <!-- \u0645\u062D\u062A\u0648\u0649 \u0645\u062E\u0635\u0651\u0635 -->\n @if (!label && !icon && !loading) {\n <ng-content></ng-content>\n }\n </button>\n }\n\n</ng-container>\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 });
|
|
111
111
|
}
|
|
112
112
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericButton, decorators: [{
|
|
113
113
|
type: Component,
|
|
114
|
-
args: [{ selector: 'lib-generic-button', standalone: true, imports: [ButtonModule, SplitButtonModule, HasPermissionDirective, TranslatePipe, TooltipModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "\
|
|
114
|
+
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 [pTooltip]=\"(tooltip || label) | translate\"\n [tooltipPosition]=\"tooltipPosition\"\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]=\"(tooltip || label) | translate\"\n [tooltipPosition]=\"tooltipPosition\"\n [severity]=\"severity || 'primary'\"\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\n [disabled]=\"disabled || loading\"\n (click)=\"onClick()\"\n >\n <!-- \u0645\u062D\u062A\u0648\u0649 \u0645\u062E\u0635\u0651\u0635 -->\n @if (!label && !icon && !loading) {\n <ng-content></ng-content>\n }\n </button>\n }\n\n</ng-container>\n", styles: [":host ::ng-deep .p-button-label{display:none}@media(min-width:768px){:host ::ng-deep .p-button-label{display:inline-block}}\n"] }]
|
|
115
115
|
}], propDecorators: { model: [{
|
|
116
116
|
type: Input
|
|
117
117
|
}], type: [{
|
|
@@ -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';\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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"}
|
|
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() tooltip?: string;\n @Input() tooltipPosition: 'top' | 'bottom' | 'left' | 'right' = 'top';\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 [pTooltip]=\"(tooltip || label) | translate\"\n [tooltipPosition]=\"tooltipPosition\"\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]=\"(tooltip || label) | translate\"\n [tooltipPosition]=\"tooltipPosition\"\n [severity]=\"severity || 'primary'\"\n [attr.aria-label]=\"(ariaLabel || label) | translate\"\n [disabled]=\"disabled || loading\"\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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"}
|
|
@@ -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: "\
|
|
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" }] });
|
|
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: "\
|
|
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"] }]
|
|
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';\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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"}
|
|
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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"}
|
|
@@ -27,12 +27,12 @@ import { GenericReportComponent } from '@es.framework/ng.ui.core/generic-report'
|
|
|
27
27
|
import * as i7 from 'primeng/selectbutton';
|
|
28
28
|
import { SelectButtonModule } from 'primeng/selectbutton';
|
|
29
29
|
import { TabbedSearchComponent } from '@es.framework/ng.ui.core/generic-report-tabs';
|
|
30
|
+
import { cloneDeep } from 'lodash';
|
|
30
31
|
import * as i3 from 'primeng/api';
|
|
31
32
|
import { ActivatedRoute, Router } from '@angular/router';
|
|
32
33
|
import { GenericTable } from '@es.framework/ng.ui.core/generic-table';
|
|
33
34
|
import { GenericDialogComponent } from '@es.framework/ng.ui.core/generic-dialog';
|
|
34
35
|
import { GenericViewComponent } from '@es.framework/ng.ui.core/generic-view';
|
|
35
|
-
import { cloneDeep } from 'lodash';
|
|
36
36
|
|
|
37
37
|
class GenericCrudTableModule {
|
|
38
38
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCrudTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
@@ -221,7 +221,8 @@ class GenericCrudHeaderComponent {
|
|
|
221
221
|
apiName: this.apiName,
|
|
222
222
|
moduleName: this.moduleName,
|
|
223
223
|
filterFields: this.filters,
|
|
224
|
-
|
|
224
|
+
model: cloneDeep(this.filterModel ?? {}),
|
|
225
|
+
filterModel: cloneDeep(this.filterModel ?? {}),
|
|
225
226
|
defaultFileName: this.translate.instant('REPORT') + ' ' + this.translate.instant(this.breadcrumb?.length ? this.breadcrumb[this.breadcrumb.length - 1].label ?? '' : '')
|
|
226
227
|
}
|
|
227
228
|
});
|
|
@@ -706,6 +707,11 @@ class GenericCrudTableComponent {
|
|
|
706
707
|
this.first = 0;
|
|
707
708
|
this.rows = 10;
|
|
708
709
|
}
|
|
710
|
+
resetSearchFilters() {
|
|
711
|
+
this.filterModel = {};
|
|
712
|
+
this.resetPage('');
|
|
713
|
+
this.applySearch('');
|
|
714
|
+
}
|
|
709
715
|
/** بدّل applySearch لتبث pageChange مباشرةً */
|
|
710
716
|
applySearch(filters) {
|
|
711
717
|
// this.genericTable.applyFilter(global);
|
|
@@ -754,7 +760,8 @@ class GenericCrudTableComponent {
|
|
|
754
760
|
apiName: this.apiName,
|
|
755
761
|
moduleName: this.moduleName,
|
|
756
762
|
filterFields: this.filters,
|
|
757
|
-
|
|
763
|
+
model: cloneDeep(this.filterModel ?? {}),
|
|
764
|
+
filterModel: cloneDeep(this.filterModel ?? {}),
|
|
758
765
|
defaultFileName: this.translate.instant('REPORT') + ' ' + this.translate.instant(this.breadcrumb?.length ? this.breadcrumb[this.breadcrumb.length - 1].label ?? '' : '')
|
|
759
766
|
}
|
|
760
767
|
});
|
|
@@ -787,7 +794,7 @@ class GenericCrudTableComponent {
|
|
|
787
794
|
});
|
|
788
795
|
}
|
|
789
796
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCrudTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
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)\"\
|
|
797
|
+
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)\"\n (search)=\"resetPage($event);applySearch($event);\"\n (resetSearch)=\"resetSearchFilters();\"\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"] }] });
|
|
791
798
|
}
|
|
792
799
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericCrudTableComponent, decorators: [{
|
|
793
800
|
type: Component,
|
|
@@ -810,7 +817,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
810
817
|
// SavedReportTemplatesDrawerComponent
|
|
811
818
|
], host: {
|
|
812
819
|
class: ''
|
|
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)\"\
|
|
820
|
+
}, 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)\"\n (search)=\"resetPage($event);applySearch($event);\"\n (resetSearch)=\"resetSearchFilters();\"\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" }]
|
|
814
821
|
}], propDecorators: { genericTable: [{
|
|
815
822
|
type: ViewChild,
|
|
816
823
|
args: ['genericTable']
|