@es.framework/ng.ui.core 2.0.58
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 -0
- package/attachments/README.md +3 -0
- package/base-crud/README.md +3 -0
- package/breadcrumb/README.md +3 -0
- package/checkbox/README.md +3 -0
- package/collapsible/README.md +3 -0
- package/color-picker/README.md +3 -0
- package/column-settings-popover/README.md +3 -0
- package/custom-switch/README.md +3 -0
- package/datepicker/README.md +3 -0
- package/deactivation-reason/README.md +3 -0
- package/excel-import/README.md +3 -0
- package/fesm2022/es.framework-ng.ui.core-attachments.mjs +217 -0
- package/fesm2022/es.framework-ng.ui.core-attachments.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-base-crud.mjs +370 -0
- package/fesm2022/es.framework-ng.ui.core-base-crud.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-breadcrumb.mjs +145 -0
- package/fesm2022/es.framework-ng.ui.core-breadcrumb.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-checkbox.mjs +131 -0
- package/fesm2022/es.framework-ng.ui.core-checkbox.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-collapsible.mjs +90 -0
- package/fesm2022/es.framework-ng.ui.core-collapsible.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-color-picker.mjs +87 -0
- package/fesm2022/es.framework-ng.ui.core-color-picker.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-column-settings-popover.mjs +183 -0
- package/fesm2022/es.framework-ng.ui.core-column-settings-popover.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-custom-switch.mjs +119 -0
- package/fesm2022/es.framework-ng.ui.core-custom-switch.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-datepicker.mjs +519 -0
- package/fesm2022/es.framework-ng.ui.core-datepicker.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-deactivation-reason.mjs +144 -0
- package/fesm2022/es.framework-ng.ui.core-deactivation-reason.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-excel-import.mjs +566 -0
- package/fesm2022/es.framework-ng.ui.core-excel-import.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-filter-templates.mjs +386 -0
- package/fesm2022/es.framework-ng.ui.core-filter-templates.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-form-button.mjs +62 -0
- package/fesm2022/es.framework-ng.ui.core-form-button.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-form-field.mjs +155 -0
- package/fesm2022/es.framework-ng.ui.core-form-field.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-form-template.mjs +37 -0
- package/fesm2022/es.framework-ng.ui.core-form-template.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-avatar-image.mjs +132 -0
- package/fesm2022/es.framework-ng.ui.core-formly-avatar-image.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-avatar-label.mjs +89 -0
- package/fesm2022/es.framework-ng.ui.core-formly-avatar-label.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-button-selector.mjs +195 -0
- package/fesm2022/es.framework-ng.ui.core-formly-button-selector.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-button.mjs +73 -0
- package/fesm2022/es.framework-ng.ui.core-formly-button.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-presets.mjs +201 -0
- package/fesm2022/es.framework-ng.ui.core-formly-presets.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-prime-icon-picker.mjs +542 -0
- package/fesm2022/es.framework-ng.ui.core-formly-prime-icon-picker.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-split-button.mjs +62 -0
- package/fesm2022/es.framework-ng.ui.core-formly-split-button.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-ui-all.mjs +422 -0
- package/fesm2022/es.framework-ng.ui.core-formly-ui-all.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-ui.mjs +48 -0
- package/fesm2022/es.framework-ng.ui.core-formly-ui.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-formly-username-with-domain.mjs +85 -0
- package/fesm2022/es.framework-ng.ui.core-formly-username-with-domain.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-assets.mjs +22 -0
- package/fesm2022/es.framework-ng.ui.core-generic-assets.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-autocomplete.mjs +173 -0
- package/fesm2022/es.framework-ng.ui.core-generic-autocomplete.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-button.mjs +150 -0
- package/fesm2022/es.framework-ng.ui.core-generic-button.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-card.mjs +218 -0
- package/fesm2022/es.framework-ng.ui.core-generic-card.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-crud-table.mjs +929 -0
- package/fesm2022/es.framework-ng.ui.core-generic-crud-table.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-dialog.mjs +321 -0
- package/fesm2022/es.framework-ng.ui.core-generic-dialog.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-errormessage.mjs +35 -0
- package/fesm2022/es.framework-ng.ui.core-generic-errormessage.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-formly-fields.mjs +63 -0
- package/fesm2022/es.framework-ng.ui.core-generic-formly-fields.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-loadingspinner.mjs +34 -0
- package/fesm2022/es.framework-ng.ui.core-generic-loadingspinner.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-report-tabs.mjs +196 -0
- package/fesm2022/es.framework-ng.ui.core-generic-report-tabs.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-report.mjs +556 -0
- package/fesm2022/es.framework-ng.ui.core-generic-report.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs +2995 -0
- package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-search.mjs +103 -0
- package/fesm2022/es.framework-ng.ui.core-generic-search.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-selector.mjs +684 -0
- package/fesm2022/es.framework-ng.ui.core-generic-selector.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-table.mjs +388 -0
- package/fesm2022/es.framework-ng.ui.core-generic-table.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-generic-view.mjs +465 -0
- package/fesm2022/es.framework-ng.ui.core-generic-view.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-header-wrapper.mjs +31 -0
- package/fesm2022/es.framework-ng.ui.core-header-wrapper.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-icon-picker.mjs +205 -0
- package/fesm2022/es.framework-ng.ui.core-icon-picker.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-input-switch.mjs +102 -0
- package/fesm2022/es.framework-ng.ui.core-input-switch.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-input-with-icon.mjs +67 -0
- package/fesm2022/es.framework-ng.ui.core-input-with-icon.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-input.mjs +250 -0
- package/fesm2022/es.framework-ng.ui.core-input.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-label-type.mjs +184 -0
- package/fesm2022/es.framework-ng.ui.core-label-type.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-loading-skeletons.mjs +66 -0
- package/fesm2022/es.framework-ng.ui.core-loading-skeletons.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-odata-query-builder.mjs +307 -0
- package/fesm2022/es.framework-ng.ui.core-odata-query-builder.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-query-type.mjs +162 -0
- package/fesm2022/es.framework-ng.ui.core-query-type.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-radio.mjs +120 -0
- package/fesm2022/es.framework-ng.ui.core-radio.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-repeat.mjs +290 -0
- package/fesm2022/es.framework-ng.ui.core-repeat.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-select.mjs +179 -0
- package/fesm2022/es.framework-ng.ui.core-select.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-sidebar-cards.mjs +52 -0
- package/fesm2022/es.framework-ng.ui.core-sidebar-cards.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-sidebar-toggles.mjs +53 -0
- package/fesm2022/es.framework-ng.ui.core-sidebar-toggles.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-tabs.mjs +57 -0
- package/fesm2022/es.framework-ng.ui.core-tabs.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-tag-type.mjs +209 -0
- package/fesm2022/es.framework-ng.ui.core-tag-type.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-text-editor.mjs +58 -0
- package/fesm2022/es.framework-ng.ui.core-text-editor.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-textarea.mjs +93 -0
- package/fesm2022/es.framework-ng.ui.core-textarea.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core-wrappers.mjs +245 -0
- package/fesm2022/es.framework-ng.ui.core-wrappers.mjs.map +1 -0
- package/fesm2022/es.framework-ng.ui.core.mjs +20 -0
- package/fesm2022/es.framework-ng.ui.core.mjs.map +1 -0
- package/filter-templates/README.md +3 -0
- package/form-button/README.md +3 -0
- package/form-field/README.md +3 -0
- package/form-template/README.md +3 -0
- package/formly-avatar-image/README.md +3 -0
- package/formly-avatar-label/README.md +3 -0
- package/formly-button/README.md +3 -0
- package/formly-button-selector/README.md +3 -0
- package/formly-presets/README.md +3 -0
- package/formly-prime-icon-picker/README.md +3 -0
- package/formly-split-button/README.md +3 -0
- package/formly-ui/README.md +3 -0
- package/formly-ui-all/README.md +3 -0
- package/formly-username-with-domain/README.md +3 -0
- package/generic-assets/README.md +3 -0
- package/generic-autocomplete/README.md +3 -0
- package/generic-button/README.md +3 -0
- package/generic-card/README.md +3 -0
- package/generic-crud-table/README.md +3 -0
- package/generic-dialog/README.md +3 -0
- package/generic-errormessage/README.md +3 -0
- package/generic-formly-fields/README.md +3 -0
- package/generic-loadingspinner/README.md +3 -0
- package/generic-report/README.md +3 -0
- package/generic-report-tabs/README.md +0 -0
- package/generic-search/README.md +3 -0
- package/generic-search-advanced/README.md +3 -0
- package/generic-selector/README.md +3 -0
- package/generic-table/README.md +3 -0
- package/generic-view/README.md +3 -0
- package/header-wrapper/README.md +3 -0
- package/icon-picker/README.md +3 -0
- package/input/README.md +3 -0
- package/input-switch/README.md +3 -0
- package/input-with-icon/README.md +3 -0
- package/label-type/README.md +3 -0
- package/loading-skeletons/README.md +3 -0
- package/odata-query-builder/README.md +3 -0
- package/package.json +264 -0
- package/query-type/README.md +3 -0
- package/radio/README.md +3 -0
- package/repeat/README.md +3 -0
- package/select/README.md +3 -0
- package/sidebar-cards/README.md +3 -0
- package/sidebar-toggles/README.md +3 -0
- package/styles.css +2 -0
- package/tabs/README.md +3 -0
- package/tag-type/README.md +3 -0
- package/text-editor/README.md +3 -0
- package/textarea/README.md +3 -0
- package/types/es.framework-ng.ui.core-attachments.d.ts +38 -0
- package/types/es.framework-ng.ui.core-base-crud.d.ts +74 -0
- package/types/es.framework-ng.ui.core-breadcrumb.d.ts +17 -0
- package/types/es.framework-ng.ui.core-checkbox.d.ts +33 -0
- package/types/es.framework-ng.ui.core-collapsible.d.ts +18 -0
- package/types/es.framework-ng.ui.core-color-picker.d.ts +16 -0
- package/types/es.framework-ng.ui.core-column-settings-popover.d.ts +46 -0
- package/types/es.framework-ng.ui.core-custom-switch.d.ts +19 -0
- package/types/es.framework-ng.ui.core-datepicker.d.ts +23 -0
- package/types/es.framework-ng.ui.core-deactivation-reason.d.ts +32 -0
- package/types/es.framework-ng.ui.core-excel-import.d.ts +69 -0
- package/types/es.framework-ng.ui.core-filter-templates.d.ts +57 -0
- package/types/es.framework-ng.ui.core-form-button.d.ts +17 -0
- package/types/es.framework-ng.ui.core-form-field.d.ts +30 -0
- package/types/es.framework-ng.ui.core-form-template.d.ts +16 -0
- package/types/es.framework-ng.ui.core-formly-avatar-image.d.ts +18 -0
- package/types/es.framework-ng.ui.core-formly-avatar-label.d.ts +36 -0
- package/types/es.framework-ng.ui.core-formly-button-selector.d.ts +35 -0
- package/types/es.framework-ng.ui.core-formly-button.d.ts +20 -0
- package/types/es.framework-ng.ui.core-formly-presets.d.ts +37 -0
- package/types/es.framework-ng.ui.core-formly-prime-icon-picker.d.ts +45 -0
- package/types/es.framework-ng.ui.core-formly-split-button.d.ts +23 -0
- package/types/es.framework-ng.ui.core-formly-ui-all.d.ts +40 -0
- package/types/es.framework-ng.ui.core-formly-ui.d.ts +13 -0
- package/types/es.framework-ng.ui.core-formly-username-with-domain.d.ts +19 -0
- package/types/es.framework-ng.ui.core-generic-assets.d.ts +10 -0
- package/types/es.framework-ng.ui.core-generic-autocomplete.d.ts +41 -0
- package/types/es.framework-ng.ui.core-generic-button.d.ts +39 -0
- package/types/es.framework-ng.ui.core-generic-card.d.ts +93 -0
- package/types/es.framework-ng.ui.core-generic-crud-table.d.ts +293 -0
- package/types/es.framework-ng.ui.core-generic-dialog.d.ts +93 -0
- package/types/es.framework-ng.ui.core-generic-errormessage.d.ts +17 -0
- package/types/es.framework-ng.ui.core-generic-formly-fields.d.ts +26 -0
- package/types/es.framework-ng.ui.core-generic-loadingspinner.d.ts +16 -0
- package/types/es.framework-ng.ui.core-generic-report-tabs.d.ts +21 -0
- package/types/es.framework-ng.ui.core-generic-report.d.ts +121 -0
- package/types/es.framework-ng.ui.core-generic-search-advanced.d.ts +305 -0
- package/types/es.framework-ng.ui.core-generic-search.d.ts +36 -0
- package/types/es.framework-ng.ui.core-generic-selector.d.ts +99 -0
- package/types/es.framework-ng.ui.core-generic-table.d.ts +84 -0
- package/types/es.framework-ng.ui.core-generic-view.d.ts +97 -0
- package/types/es.framework-ng.ui.core-header-wrapper.d.ts +15 -0
- package/types/es.framework-ng.ui.core-icon-picker.d.ts +30 -0
- package/types/es.framework-ng.ui.core-input-switch.d.ts +16 -0
- package/types/es.framework-ng.ui.core-input-with-icon.d.ts +17 -0
- package/types/es.framework-ng.ui.core-input.d.ts +47 -0
- package/types/es.framework-ng.ui.core-label-type.d.ts +38 -0
- package/types/es.framework-ng.ui.core-loading-skeletons.d.ts +17 -0
- package/types/es.framework-ng.ui.core-odata-query-builder.d.ts +87 -0
- package/types/es.framework-ng.ui.core-query-type.d.ts +37 -0
- package/types/es.framework-ng.ui.core-radio.d.ts +38 -0
- package/types/es.framework-ng.ui.core-repeat.d.ts +31 -0
- package/types/es.framework-ng.ui.core-select.d.ts +42 -0
- package/types/es.framework-ng.ui.core-sidebar-cards.d.ts +25 -0
- package/types/es.framework-ng.ui.core-sidebar-toggles.d.ts +25 -0
- package/types/es.framework-ng.ui.core-tabs.d.ts +17 -0
- package/types/es.framework-ng.ui.core-tag-type.d.ts +34 -0
- package/types/es.framework-ng.ui.core-text-editor.d.ts +16 -0
- package/types/es.framework-ng.ui.core-textarea.d.ts +36 -0
- package/types/es.framework-ng.ui.core-wrappers.d.ts +36 -0
- package/types/es.framework-ng.ui.core.d.ts +8 -0
- package/wrappers/README.md +3 -0
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { NgModule, inject, Directive } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
5
|
+
import { SwalService, IdParserService } from '@es.framework/ng.core/services';
|
|
6
|
+
import { DeactivationReasonFormComponent } from '@es.framework/ng.ui.core/deactivation-reason';
|
|
7
|
+
import { firstValueFrom } from 'rxjs';
|
|
8
|
+
|
|
9
|
+
class BaseCrudModule {
|
|
10
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BaseCrudModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
11
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: BaseCrudModule, imports: [CommonModule] });
|
|
12
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BaseCrudModule, imports: [CommonModule] });
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BaseCrudModule, decorators: [{
|
|
15
|
+
type: NgModule,
|
|
16
|
+
args: [{
|
|
17
|
+
imports: [CommonModule],
|
|
18
|
+
}]
|
|
19
|
+
}] });
|
|
20
|
+
|
|
21
|
+
class BaseCrud {
|
|
22
|
+
list = [];
|
|
23
|
+
paginator = true;
|
|
24
|
+
canLoad = true;
|
|
25
|
+
loading = false;
|
|
26
|
+
errorMsg = '';
|
|
27
|
+
first = 0;
|
|
28
|
+
rows = 10;
|
|
29
|
+
totalRecords = 0;
|
|
30
|
+
searchGlobal = '';
|
|
31
|
+
sort;
|
|
32
|
+
pageFilters = {};
|
|
33
|
+
currentFilters = {};
|
|
34
|
+
mode = '';
|
|
35
|
+
scrollHeight = '400px';
|
|
36
|
+
swalService = inject(SwalService);
|
|
37
|
+
dialogRef;
|
|
38
|
+
// abstract idField: keyof T;
|
|
39
|
+
dialogVisible = false;
|
|
40
|
+
drawerVisible = false;
|
|
41
|
+
selectedItem = null;
|
|
42
|
+
defaultModel = null;
|
|
43
|
+
// selectedItem: T | any = {};
|
|
44
|
+
isViewMode = false;
|
|
45
|
+
isEditMode = false;
|
|
46
|
+
// حالة ظهور درج القوالب
|
|
47
|
+
templateDrawerVisible = false;
|
|
48
|
+
displayMode = 'drawer';
|
|
49
|
+
idParser = inject(IdParserService);
|
|
50
|
+
router = inject(Router);
|
|
51
|
+
route = inject(ActivatedRoute);
|
|
52
|
+
loadPage(pageIndex, pageSize) {
|
|
53
|
+
if (this.canLoad) {
|
|
54
|
+
this.loading = true;
|
|
55
|
+
const filters = {
|
|
56
|
+
maxResultCount: pageSize,
|
|
57
|
+
skipCount: pageIndex,
|
|
58
|
+
sorting: this.sort,
|
|
59
|
+
...this.currentFilters,
|
|
60
|
+
...this.pageFilters,
|
|
61
|
+
...(this.searchGlobal ? { filter: this.searchGlobal } : {}),
|
|
62
|
+
};
|
|
63
|
+
//
|
|
64
|
+
//
|
|
65
|
+
this.service.getList(filters)
|
|
66
|
+
.subscribe({
|
|
67
|
+
next: (res) => {
|
|
68
|
+
//
|
|
69
|
+
this.list = res.items;
|
|
70
|
+
this.totalRecords = res.totalCount;
|
|
71
|
+
this.loading = false;
|
|
72
|
+
},
|
|
73
|
+
error: (err) => {
|
|
74
|
+
this.errorMsg = err.error?.message || err.message || 'خطأ في التحميل';
|
|
75
|
+
this.loading = false;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
onSearch(filters) {
|
|
81
|
+
//
|
|
82
|
+
if (filters && typeof filters === 'object' && !Array.isArray(filters)) {
|
|
83
|
+
this.pageFilters = filters;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
this.searchGlobal = filters;
|
|
87
|
+
}
|
|
88
|
+
this.loadPage(0, 10);
|
|
89
|
+
}
|
|
90
|
+
onPageChange(event) {
|
|
91
|
+
// فك المتغيّرات مع قيمة افتراضية لفلاتر
|
|
92
|
+
const { first = this.first, rows = this.rows, sort = this.sort, filters = {} } = event;
|
|
93
|
+
this.first = first;
|
|
94
|
+
this.rows = rows;
|
|
95
|
+
this.sort = sort;
|
|
96
|
+
// const pageIndex = Math.floor(first / rows);
|
|
97
|
+
const skipCount = first;
|
|
98
|
+
const pageIndex = skipCount;
|
|
99
|
+
// الوصول للفلتر العام عبر الصيغة المربعة
|
|
100
|
+
const globalValue = filters['global'];
|
|
101
|
+
this.searchGlobal = typeof globalValue === 'string' ? globalValue : '';
|
|
102
|
+
this.loadPage(pageIndex, rows);
|
|
103
|
+
}
|
|
104
|
+
openEditor(item, mode) {
|
|
105
|
+
this.mode = mode;
|
|
106
|
+
this.selectedItem = item ?? this.defaultModel ?? {};
|
|
107
|
+
this.isEditMode = mode === 'edit';
|
|
108
|
+
this.isViewMode = mode === 'view';
|
|
109
|
+
// Auto-load details if edit or view and have ID
|
|
110
|
+
const id = item?.[this.idField];
|
|
111
|
+
if ((this.isEditMode || this.isViewMode) && id) {
|
|
112
|
+
// this.loadDetail(id);
|
|
113
|
+
// (async () => {
|
|
114
|
+
// await this.loadDetail(id);
|
|
115
|
+
// })();
|
|
116
|
+
}
|
|
117
|
+
// resolve displayMode (string or map)
|
|
118
|
+
const modeConfig = typeof this.displayMode === 'string'
|
|
119
|
+
? this.displayMode
|
|
120
|
+
: this.displayMode[mode] ?? 'drawer';
|
|
121
|
+
switch (modeConfig) {
|
|
122
|
+
case 'drawer':
|
|
123
|
+
this.drawerVisible = true;
|
|
124
|
+
break;
|
|
125
|
+
case 'dialog':
|
|
126
|
+
this.dialogVisible = true;
|
|
127
|
+
break;
|
|
128
|
+
case 'route':
|
|
129
|
+
{
|
|
130
|
+
const id = item ? item[this.idField] : 'new';
|
|
131
|
+
if (mode === 'add') {
|
|
132
|
+
this.router.navigate([mode], { relativeTo: this.route });
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
const commands = [id, mode];
|
|
136
|
+
console.log('Commands:', commands);
|
|
137
|
+
console.log('Current route:', this.route.snapshot.pathFromRoot.map(r => r.routeConfig?.path));
|
|
138
|
+
const tree = this.router.createUrlTree(commands, { relativeTo: this.route });
|
|
139
|
+
console.log('URL Tree:', tree.toString());
|
|
140
|
+
this.router.navigate([id, mode], { relativeTo: this.route });
|
|
141
|
+
}
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
loadDetail(id) {
|
|
147
|
+
return firstValueFrom(this.service.get(id)).then(res => {
|
|
148
|
+
this.selectedItem = res;
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
visibleChange(value) {
|
|
152
|
+
const modeConfig = typeof this.displayMode === 'string'
|
|
153
|
+
? this.displayMode
|
|
154
|
+
: this.displayMode[this.mode] ?? 'drawer';
|
|
155
|
+
if (modeConfig === 'dialog') {
|
|
156
|
+
this.dialogVisible = value;
|
|
157
|
+
}
|
|
158
|
+
else if (modeConfig === 'drawer') {
|
|
159
|
+
this.drawerVisible = value;
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
// route mode does not use drawer/dialog
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
onTableAction(event) {
|
|
166
|
+
switch (event.name) {
|
|
167
|
+
case 'add':
|
|
168
|
+
case 'edit':
|
|
169
|
+
case 'view':
|
|
170
|
+
this.openEditor(event.row, event.name);
|
|
171
|
+
break;
|
|
172
|
+
case 'delete':
|
|
173
|
+
this.onDelete(event.row);
|
|
174
|
+
break;
|
|
175
|
+
case 'state':
|
|
176
|
+
this.openDeactivationReason(event.row);
|
|
177
|
+
break;
|
|
178
|
+
// 🟢 الحالة الجديدة للقوالب
|
|
179
|
+
case 'openTemplates':
|
|
180
|
+
this.templateDrawerVisible = true; // نفتح الدرج
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
openDrawer(item, mode) {
|
|
185
|
+
this.mode = mode;
|
|
186
|
+
// this.drawerVisible = !this.drawerVisible;
|
|
187
|
+
if (item == null) {
|
|
188
|
+
this.selectedItem = this.defaultModel || {};
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
this.selectedItem = item;
|
|
192
|
+
}
|
|
193
|
+
if (mode == 'edit') {
|
|
194
|
+
this.drawerVisible = true;
|
|
195
|
+
this.isEditMode = true;
|
|
196
|
+
this.isViewMode = false;
|
|
197
|
+
// this.isEditMode = item !=null ;
|
|
198
|
+
}
|
|
199
|
+
if (mode == 'add') {
|
|
200
|
+
this.drawerVisible = true;
|
|
201
|
+
this.isViewMode = false;
|
|
202
|
+
this.isEditMode = false;
|
|
203
|
+
}
|
|
204
|
+
if (mode == 'view') {
|
|
205
|
+
// this.drawerVisible = true;
|
|
206
|
+
this.dialogVisible = true;
|
|
207
|
+
this.isViewMode = true;
|
|
208
|
+
this.isEditMode = false;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
openDeactivationReason(model) {
|
|
212
|
+
this.selectedItem = model;
|
|
213
|
+
if (this.selectedItem.isActive == true) {
|
|
214
|
+
const ref = this.dialogService.open(DeactivationReasonFormComponent, {
|
|
215
|
+
header: 'السبب (في حال تم إيقافه)',
|
|
216
|
+
width: '30vw',
|
|
217
|
+
data: { model: { ...model },
|
|
218
|
+
fields: this.formFields,
|
|
219
|
+
service: this.service,
|
|
220
|
+
idField: this.idField },
|
|
221
|
+
});
|
|
222
|
+
ref?.onClose.subscribe((result) => {
|
|
223
|
+
if (result) {
|
|
224
|
+
this.selectedItem.isActive = false;
|
|
225
|
+
this.selectedItem.deactivationReason = result.deactivationReason;
|
|
226
|
+
// Optionally: save model via API
|
|
227
|
+
this.loadPage(this.first, this.rows);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
this.selectedItem.isActive = true;
|
|
233
|
+
this.selectedItem.deactivationReason = "";
|
|
234
|
+
const id = this.idParser.parseIds(this.selectedItem, this.idField);
|
|
235
|
+
// const id = (this.selectedItem as any)[this.idField] ;
|
|
236
|
+
this.service.update(id, this.selectedItem).subscribe({
|
|
237
|
+
next: () => {
|
|
238
|
+
this.loadPage(this.first, this.rows);
|
|
239
|
+
// this.loadPage(0, 10);
|
|
240
|
+
},
|
|
241
|
+
error: (err) => {
|
|
242
|
+
this.loading = false;
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
onDelete(item) {
|
|
248
|
+
// const id = item[this.idField];
|
|
249
|
+
const id = this.idParser.parseIds(item, this.idField);
|
|
250
|
+
this.swalService.confirm('تأكيد الحذف', 'هل تريد حذف هذا السجل فعلاً؟', 'نعم، احذف', 'إلغاء').then((result) => {
|
|
251
|
+
if (result.isConfirmed) {
|
|
252
|
+
this.service.delete(id).subscribe({
|
|
253
|
+
next: () => {
|
|
254
|
+
this.loadPage(this.first, this.rows);
|
|
255
|
+
this.swalService.success('تم الحذف بنجاح');
|
|
256
|
+
},
|
|
257
|
+
error: (err) => {
|
|
258
|
+
this.loading = false;
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
get columnFormFields() {
|
|
265
|
+
const flattenFields = (fields) => {
|
|
266
|
+
return fields.flatMap(field => {
|
|
267
|
+
if (field.fieldGroup?.length)
|
|
268
|
+
return flattenFields(field.fieldGroup);
|
|
269
|
+
if (!field.props)
|
|
270
|
+
return [];
|
|
271
|
+
const tableConfig = field.props['table'] ?? {};
|
|
272
|
+
const hideExpr = tableConfig.expressions?.hide;
|
|
273
|
+
// if (tableConfig.hidden === false || (typeof hideExpr === 'function' && hideExpr() == false) || field.props.readonly ) return [];
|
|
274
|
+
if (field.props.readonly || field.hide)
|
|
275
|
+
return [];
|
|
276
|
+
const mergedProps = { ...field.props, ...(tableConfig.props ?? {}) };
|
|
277
|
+
const order = tableConfig.order ??
|
|
278
|
+
tableConfig.props?.order ??
|
|
279
|
+
mergedProps['order'];
|
|
280
|
+
return [{
|
|
281
|
+
type: field.type,
|
|
282
|
+
key: field.key,
|
|
283
|
+
props: field.props,
|
|
284
|
+
wrappers: ['td'],
|
|
285
|
+
expressions: field.expressions,
|
|
286
|
+
order
|
|
287
|
+
}];
|
|
288
|
+
});
|
|
289
|
+
};
|
|
290
|
+
return flattenFields(this.formFields)
|
|
291
|
+
.sort((a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER))
|
|
292
|
+
.map(({ order, ...rest }) => rest);
|
|
293
|
+
}
|
|
294
|
+
get columns() {
|
|
295
|
+
const flattenFields = (fields) => {
|
|
296
|
+
return fields.flatMap(field => {
|
|
297
|
+
if (field.fieldGroup?.length)
|
|
298
|
+
return flattenFields(field.fieldGroup);
|
|
299
|
+
if (!field.props)
|
|
300
|
+
return [];
|
|
301
|
+
const tableConfig = field.props['table'] ?? {};
|
|
302
|
+
const hideExpr = tableConfig.expressions?.hide;
|
|
303
|
+
if (tableConfig.hidden === true || (typeof hideExpr === 'function' && hideExpr()))
|
|
304
|
+
return [];
|
|
305
|
+
const tableType = tableConfig.type ?? 'label-type';
|
|
306
|
+
const mergedProps = { ...field.props, ...(tableConfig.props ?? {}) };
|
|
307
|
+
const order = tableConfig.order ??
|
|
308
|
+
tableConfig.props?.order ??
|
|
309
|
+
mergedProps['order'];
|
|
310
|
+
return [{
|
|
311
|
+
type: tableType,
|
|
312
|
+
key: field.key,
|
|
313
|
+
props: mergedProps,
|
|
314
|
+
expressions: tableConfig.expressions,
|
|
315
|
+
order
|
|
316
|
+
}];
|
|
317
|
+
});
|
|
318
|
+
};
|
|
319
|
+
return flattenFields(this.formFields)
|
|
320
|
+
.sort((a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER))
|
|
321
|
+
.map(({ order, ...rest }) => rest);
|
|
322
|
+
}
|
|
323
|
+
get filters() {
|
|
324
|
+
const flattenForFilter = (fields) => {
|
|
325
|
+
return fields.flatMap(field => {
|
|
326
|
+
if (field.fieldGroup?.length) {
|
|
327
|
+
// Recursively handle nested panels/groups
|
|
328
|
+
return flattenForFilter(field.fieldGroup);
|
|
329
|
+
}
|
|
330
|
+
// Skip fields with no props or filter.hidden === true
|
|
331
|
+
if (!field.props /* || field.props['filter']?.hidden === true */) {
|
|
332
|
+
return [];
|
|
333
|
+
}
|
|
334
|
+
// Merge base props with filter overrides
|
|
335
|
+
const mergedProps = {
|
|
336
|
+
...field.props,
|
|
337
|
+
...field.props['filter']?.props,
|
|
338
|
+
};
|
|
339
|
+
// Remove disabled and required props
|
|
340
|
+
delete mergedProps['disabled'];
|
|
341
|
+
delete mergedProps['required'];
|
|
342
|
+
delete mergedProps['loadDefault'];
|
|
343
|
+
delete mergedProps['canAdd'];
|
|
344
|
+
return [{
|
|
345
|
+
type: field.type,
|
|
346
|
+
key: field.key, // always set key for table rendering
|
|
347
|
+
props: mergedProps,
|
|
348
|
+
// expressions: field.props['filter']?.expressions // uncomment if needed
|
|
349
|
+
}];
|
|
350
|
+
});
|
|
351
|
+
};
|
|
352
|
+
return flattenForFilter(this.formFields);
|
|
353
|
+
}
|
|
354
|
+
// 3. دالة فتح الدرج (Action)
|
|
355
|
+
openTemplatesAction() {
|
|
356
|
+
this.templateDrawerVisible = true;
|
|
357
|
+
}
|
|
358
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BaseCrud, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
359
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.3", type: BaseCrud, isStandalone: true, ngImport: i0 });
|
|
360
|
+
}
|
|
361
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BaseCrud, decorators: [{
|
|
362
|
+
type: Directive
|
|
363
|
+
}] });
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Generated bundle index. Do not edit.
|
|
367
|
+
*/
|
|
368
|
+
|
|
369
|
+
export { BaseCrud, BaseCrudModule };
|
|
370
|
+
//# sourceMappingURL=es.framework-ng.ui.core-base-crud.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es.framework-ng.ui.core-base-crud.mjs","sources":["../../../../libs/ng.ui.core/base-crud/src/lib/base-crud-module.ts","../../../../libs/ng.ui.core/base-crud/src/lib/base-crud.ts","../../../../libs/ng.ui.core/base-crud/src/es.framework-ng.ui.core-base-crud.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class BaseCrudModule {}\n","\r\n\r\nimport { Directive, inject } from '@angular/core';\r\nimport { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { BaseService, IdParserService, SwalService } from '@es.framework/ng.core/services';\r\nimport { ActionDef, PaginatedResult } from '@es.framework/ng.core/models';\r\nimport { DeactivationReasonFormComponent } from '@es.framework/ng.ui.core/deactivation-reason';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Directive()\r\nexport abstract class BaseCrud<T, F = any> {\r\n list: T[] = [];\r\n paginator = true;\r\n canLoad = true;\r\n loading = false;\r\n errorMsg = '';\r\n first = 0;\r\n rows = 10;\r\n totalRecords = 0;\r\n searchGlobal = '';\r\n sort?: string;\r\n pageFilters: Partial<F> = {};\r\n currentFilters: Partial<F> = {};\r\n mode ='';\r\n scrollHeight ='400px';\r\n private swalService = inject(SwalService);\r\n\r\n protected dialogRef!: DynamicDialogRef;\r\n\r\n\r\n // abstract service: CrudService<T, F>;\r\n abstract service: BaseService;\r\n abstract dialogService: DialogService;\r\n // abstract dialogComponent: any;\r\n // abstract columns: ColumnDef<T>[];\r\n abstract actions: ActionDef<T>[];\r\n\r\n // for generic dialog:\r\n abstract formFields: FormlyFieldConfig[];\r\n abstract idField: string |any;\r\n // abstract idField: keyof T;\r\n dialogVisible = false;\r\n drawerVisible = false;\r\n selectedItem: T | any = null;\r\n defaultModel: T | any = null;\r\n // selectedItem: T | any = {};\r\n isViewMode = false;\r\n isEditMode = false;\r\n // حالة ظهور درج القوالب\r\n templateDrawerVisible = false;\r\n\r\n\r\n\r\n displayMode:\r\n | 'drawer' | 'dialog' | 'route'\r\n | Partial<Record<'add' | 'edit' | 'view', 'drawer' | 'dialog' | 'route'>>\r\n = 'drawer';\r\nprivate idParser= inject(IdParserService);\r\n public router= inject(Router);\r\n public route = inject(ActivatedRoute);\r\n\r\nloadPage(pageIndex: number, pageSize: number): void {\r\n if(this.canLoad){\r\n\r\n\r\n this.loading = true;\r\n const filters: Partial<F> = {\r\n maxResultCount:pageSize,\r\n skipCount:pageIndex,\r\n sorting:this.sort,\r\n ...this.currentFilters,\r\n ...this.pageFilters,\r\n ...(this.searchGlobal ? { filter: this.searchGlobal } : {}),\r\n };\r\n //\r\n //\r\n this.service.getList(filters)\r\n .subscribe({\r\n next: (res: PaginatedResult<T>) => {\r\n //\r\n this.list = res.items;\r\n this.totalRecords = res.totalCount;\r\n this.loading = false;\r\n },\r\n error: (err:any) => {\r\n this.errorMsg = err.error?.message || err.message || 'خطأ في التحميل';\r\n this.loading = false;\r\n }\r\n });\r\n }\r\n}\r\n\r\nonSearch(filters?: any): void {\r\n //\r\n if (filters && typeof filters === 'object' && !Array.isArray(filters)) {\r\n this.pageFilters = filters;\r\n } else {\r\n this.searchGlobal = filters;\r\n }\r\n\r\n this.loadPage(0, 10);\r\n}\r\n\r\n\r\nonPageChange(event: { first?: number; rows?: number; sort?: string; filters?: Record<string, any> }): void {\r\n // فك المتغيّرات مع قيمة افتراضية لفلاتر\r\n const {\r\n first = this.first,\r\n rows = this.rows,\r\n sort = this.sort,\r\n filters = {}\r\n } = event;\r\n\r\n this.first = first;\r\n this.rows = rows;\r\n this.sort = sort;\r\n\r\n // const pageIndex = Math.floor(first / rows);\r\n const skipCount = first;\r\n const pageIndex = skipCount;\r\n\r\n // الوصول للفلتر العام عبر الصيغة المربعة\r\n const globalValue = filters['global'];\r\n this.searchGlobal = typeof globalValue === 'string' ? globalValue : '';\r\n\r\n\r\n this.loadPage(pageIndex, rows);\r\n}\r\n\r\n\r\nprotected openEditor(item: T | null, mode: 'add' | 'edit' | 'view'): void {\r\n this.mode = mode;\r\n this.selectedItem = item ?? this.defaultModel ?? {};\r\n this.isEditMode = mode === 'edit';\r\n this.isViewMode = mode === 'view';\r\n // Auto-load details if edit or view and have ID\r\n const id = (item as any)?.[this.idField];\r\n if ((this.isEditMode || this.isViewMode) && id) {\r\n // this.loadDetail(id);\r\n // (async () => {\r\n // await this.loadDetail(id);\r\n // })();\r\n }\r\n // resolve displayMode (string or map)\r\n const modeConfig = typeof this.displayMode === 'string'\r\n ? this.displayMode\r\n : this.displayMode[mode] ?? 'drawer';\r\n\r\n switch (modeConfig) {\r\n case 'drawer':\r\n this.drawerVisible = true;\r\n break;\r\n\r\n case 'dialog':\r\n this.dialogVisible = true;\r\n break;\r\n\r\n case 'route':\r\n {\r\n\r\n\r\n const id = item ? (item as any)[this.idField] : 'new';\r\n\r\n if(mode === 'add'){\r\n this.router.navigate([mode], { relativeTo: this.route });\r\n }\r\n else{\r\n const commands = [id, mode];\r\n console.log('Commands:', commands);\r\n console.log('Current route:', this.route.snapshot.pathFromRoot.map(r => r.routeConfig?.path));\r\n\r\n const tree = this.router.createUrlTree(commands, { relativeTo: this.route });\r\n console.log('URL Tree:', tree.toString());\r\n\r\n this.router.navigate([id, mode], { relativeTo: this.route });\r\n }\r\n break;\r\n }\r\n }\r\n}\r\nprotected loadDetail(id: string | number) {\r\n\r\n return firstValueFrom(this.service.get(id as any)).then(res => {\r\n this.selectedItem = res;\r\n });\r\n}\r\nvisibleChange(value: boolean) {\r\n const modeConfig = typeof this.displayMode === 'string'\r\n ? this.displayMode\r\n : this.displayMode[this.mode as 'add' | 'edit' | 'view'] ?? 'drawer';\r\n\r\n if (modeConfig === 'dialog') {\r\n this.dialogVisible = value;\r\n } else if (modeConfig === 'drawer') {\r\n this.drawerVisible = value;\r\n } else {\r\n // route mode does not use drawer/dialog\r\n }\r\n}\r\n\r\n\r\n\r\nonTableAction(event: { name: string; row: T | null }): void {\r\n switch (event.name) {\r\n case 'add':\r\n case 'edit':\r\n case 'view':\r\n this.openEditor(event.row, event.name);\r\n break;\r\n case 'delete':\r\n this.onDelete(event.row!);\r\n break;\r\n case 'state':\r\n this.openDeactivationReason(event.row!);\r\n break;\r\n // 🟢 الحالة الجديدة للقوالب\r\n case 'openTemplates':\r\n this.templateDrawerVisible = true; // نفتح الدرج\r\n break;\r\n }\r\n}\r\n\r\n\r\nprotected openDrawer(item: T | null,mode:string): void {\r\n\r\n this.mode = mode;\r\n\r\n // this.drawerVisible = !this.drawerVisible;\r\n\r\n\r\n if (item == null) {\r\n\r\n this.selectedItem = this.defaultModel || {};\r\n }\r\n else{\r\n this.selectedItem = item;\r\n }\r\n\r\n if(mode == 'edit'){\r\n this.drawerVisible = true;\r\n this.isEditMode = true ;\r\n this.isViewMode = false ;\r\n // this.isEditMode = item !=null ;\r\n }\r\n if(mode == 'add'){\r\n this.drawerVisible = true;\r\n this.isViewMode = false ;\r\n this.isEditMode = false ;\r\n }\r\n if(mode == 'view'){\r\n // this.drawerVisible = true;\r\n this.dialogVisible = true;\r\n\r\n this.isViewMode = true ;\r\n this.isEditMode = false ;\r\n }\r\n}\r\n\r\n\r\nopenDeactivationReason(model: any) {\r\n\r\n this.selectedItem = model;\r\n if(this.selectedItem.isActive == true){\r\n\r\n\r\n const ref = this.dialogService.open(DeactivationReasonFormComponent, {\r\n header: 'السبب (في حال تم إيقافه)',\r\n width: '30vw',\r\n data: { model: { ...model },\r\n fields: this.formFields,\r\n service: this.service,\r\n idField: this.idField },\r\n });\r\n\r\n ref?.onClose.subscribe((result) => {\r\n if (result) {\r\n this.selectedItem.isActive = false;\r\n this.selectedItem.deactivationReason = result.deactivationReason;\r\n // Optionally: save model via API\r\n this.loadPage(this.first, this.rows);\r\n }\r\n });\r\n}\r\nelse{\r\n this.selectedItem.isActive = true;\r\n this.selectedItem.deactivationReason = \"\";\r\n const id = this.idParser.parseIds(this.selectedItem, this.idField);\r\n // const id = (this.selectedItem as any)[this.idField] ;\r\n this.service.update(id, this.selectedItem).subscribe({\r\n next: () => {\r\n this.loadPage(this.first, this.rows);\r\n // this.loadPage(0, 10);\r\n },\r\n error: (err:any) => {\r\n this.loading = false;\r\n\r\n }\r\n });\r\n}\r\n}\r\n\r\n\r\nonDelete(item: any): void {\r\n // const id = item[this.idField];\r\n const id = this.idParser.parseIds(item, this.idField);\r\n\r\n this.swalService.confirm(\r\n 'تأكيد الحذف',\r\n 'هل تريد حذف هذا السجل فعلاً؟',\r\n 'نعم، احذف',\r\n 'إلغاء'\r\n ).then((result) => {\r\n if (result.isConfirmed) {\r\n this.service.delete(id).subscribe({\r\n next: () => {\r\n this.loadPage(this.first, this.rows);\r\n this.swalService.success('تم الحذف بنجاح');\r\n },\r\n error: (err: any) => {\r\n this.loading = false;\r\n\r\n }\r\n });\r\n }\r\n });\r\n}\r\n\r\nget columnFormFields(): FormlyFieldConfig[] {\r\n type Col = FormlyFieldConfig & { order?: number };\r\n\r\n const flattenFields = (fields: FormlyFieldConfig[]): Col[] => {\r\n return fields.flatMap(field => {\r\n if (field.fieldGroup?.length) return flattenFields(field.fieldGroup);\r\n if (!field.props) return [];\r\n\r\n const tableConfig = field.props['table'] ?? {};\r\n const hideExpr = tableConfig.expressions?.hide;\r\n // if (tableConfig.hidden === false || (typeof hideExpr === 'function' && hideExpr() == false) || field.props.readonly ) return [];\r\n if (field.props.readonly || field.hide ) return [];\r\n\r\n const mergedProps = { ...field.props, ...(tableConfig.props ?? {}) };\r\n\r\n const order: number | undefined =\r\n (tableConfig.order as number | undefined) ??\r\n (tableConfig.props?.order as number | undefined) ??\r\n (mergedProps['order'] as number | undefined);\r\n\r\n return [{\r\n type: field.type,\r\n key: field.key,\r\n props: field.props,\r\n wrappers:['td'],\r\n expressions: field.expressions,\r\n order\r\n }];\r\n });\r\n };\r\n\r\n return flattenFields(this.formFields)\r\n .sort((a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER))\r\n .map(({ order, ...rest }) => rest as FormlyFieldConfig);\r\n}\r\n\r\nget columns(): FormlyFieldConfig[] {\r\n type Col = FormlyFieldConfig & { order?: number };\r\n\r\n const flattenFields = (fields: FormlyFieldConfig[]): Col[] => {\r\n return fields.flatMap(field => {\r\n if (field.fieldGroup?.length) return flattenFields(field.fieldGroup);\r\n if (!field.props) return [];\r\n\r\n const tableConfig = field.props['table'] ?? {};\r\n const hideExpr = tableConfig.expressions?.hide;\r\n if (tableConfig.hidden === true || (typeof hideExpr === 'function' && hideExpr())) return [];\r\n\r\n const tableType = tableConfig.type ?? 'label-type';\r\n const mergedProps = { ...field.props, ...(tableConfig.props ?? {}) };\r\n\r\n const order: number | undefined =\r\n (tableConfig.order as number | undefined) ??\r\n (tableConfig.props?.order as number | undefined) ??\r\n (mergedProps['order'] as number | undefined);\r\n\r\n return [{\r\n type: tableType,\r\n key: field.key,\r\n props: mergedProps,\r\n expressions: tableConfig.expressions,\r\n order\r\n }];\r\n });\r\n };\r\n\r\n return flattenFields(this.formFields)\r\n .sort((a, b) => (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER))\r\n .map(({ order, ...rest }) => rest as FormlyFieldConfig);\r\n}\r\n\r\n\r\n\r\n\r\nget filters(): FormlyFieldConfig[] {\r\n const flattenForFilter = (fields: FormlyFieldConfig[]): FormlyFieldConfig[] => {\r\n return fields.flatMap(field => {\r\n if (field.fieldGroup?.length) {\r\n // Recursively handle nested panels/groups\r\n return flattenForFilter(field.fieldGroup);\r\n }\r\n\r\n // Skip fields with no props or filter.hidden === true\r\n if (!field.props /* || field.props['filter']?.hidden === true */) {\r\n return [];\r\n }\r\n\r\n // Merge base props with filter overrides\r\n const mergedProps = {\r\n ...field.props,\r\n ...field.props['filter']?.props,\r\n };\r\n\r\n // Remove disabled and required props\r\n delete mergedProps['disabled'];\r\n delete mergedProps['required'];\r\n delete mergedProps['loadDefault'];\r\n delete mergedProps['canAdd'];\r\n\r\n\r\n return [{\r\n type: field.type,\r\n key: field.key, // always set key for table rendering\r\n props: mergedProps,\r\n // expressions: field.props['filter']?.expressions // uncomment if needed\r\n }];\r\n });\r\n };\r\n\r\n return flattenForFilter(this.formFields);\r\n}\r\n\r\n\r\n// 3. دالة فتح الدرج (Action)\r\nopenTemplatesAction() {\r\n this.templateDrawerVisible = true;\r\n}\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { NgModule, Input, Component } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/common';
|
|
4
|
+
import { CommonModule } from '@angular/common';
|
|
5
|
+
import * as i2 from '@angular/router';
|
|
6
|
+
import { RouterModule } from '@angular/router';
|
|
7
|
+
|
|
8
|
+
class BreadcrumbModule {
|
|
9
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BreadcrumbModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
10
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: BreadcrumbModule, imports: [CommonModule] });
|
|
11
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BreadcrumbModule, imports: [CommonModule] });
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BreadcrumbModule, decorators: [{
|
|
14
|
+
type: NgModule,
|
|
15
|
+
args: [{
|
|
16
|
+
imports: [CommonModule],
|
|
17
|
+
}]
|
|
18
|
+
}] });
|
|
19
|
+
|
|
20
|
+
class BreadcrumbComponent {
|
|
21
|
+
breadcrumb = [];
|
|
22
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
23
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: BreadcrumbComponent, isStandalone: true, selector: "app-breadcrumb", inputs: { breadcrumb: "breadcrumb" }, ngImport: i0, template: `
|
|
24
|
+
<nav class="overflow-x-auto">
|
|
25
|
+
<ul class="flex items-center text-white text-sm font-medium" role="list">
|
|
26
|
+
|
|
27
|
+
@for (item of breadcrumb; track item; let i = $index; let first = $first; let last = $last) {
|
|
28
|
+
<li
|
|
29
|
+
class="relative z-10"
|
|
30
|
+
>
|
|
31
|
+
@if (item.routerLink && !last) {
|
|
32
|
+
@if(i === 0){
|
|
33
|
+
<a
|
|
34
|
+
[routerLink]="item.routerLink"
|
|
35
|
+
class="breadcrumb-link flex items-center h-10 px-4 pr-6 text-white bg-primary-500 hover:bg-teal-500 active:bg-teal-600 transition-all duration-150 rounded-r-md"
|
|
36
|
+
>
|
|
37
|
+
<i class="pi pi-home mr-2 rtl:ml-2 rtl:mr-0 text-base"></i>
|
|
38
|
+
</a>
|
|
39
|
+
}
|
|
40
|
+
@else {
|
|
41
|
+
<a
|
|
42
|
+
[routerLink]="item.routerLink"
|
|
43
|
+
class="breadcrumb-item flex items-center h-10 px-4 pr-6 text-white bg-primary-500 hover:bg-teal-500 active:bg-teal-600 transition-all duration-150"
|
|
44
|
+
[ngClass]="{
|
|
45
|
+
'bg-primary-500': i % 2 === 0,
|
|
46
|
+
'bg-primary-600': i % 2 === 1,
|
|
47
|
+
'rounded-l-md pl-5': first,
|
|
48
|
+
'rounded-r-md pr-5': last
|
|
49
|
+
}"
|
|
50
|
+
>
|
|
51
|
+
@if (item.icon) {
|
|
52
|
+
<i [class]="item.icon + ' mr-2 text-base rtl:ml-2 rtl:mr-0'"></i>
|
|
53
|
+
}
|
|
54
|
+
{{ item.label }}
|
|
55
|
+
</a>
|
|
56
|
+
}
|
|
57
|
+
} @else {
|
|
58
|
+
<span
|
|
59
|
+
class="breadcrumb-text flex items-center h-10 px-4 pr-6 text-white"
|
|
60
|
+
[ngClass]="{
|
|
61
|
+
'bg-primary-500': i % 2 === 0,
|
|
62
|
+
'bg-primary-600': i % 2 === 1,
|
|
63
|
+
'rounded-l-md pl-5': first,
|
|
64
|
+
'rounded-r-md pr-5': last
|
|
65
|
+
}"
|
|
66
|
+
>
|
|
67
|
+
@if (item.icon) {
|
|
68
|
+
<i [class]="item.icon + ' mr-2 text-base rtl:ml-2 rtl:mr-0'"></i>
|
|
69
|
+
}
|
|
70
|
+
{{ item.label }}
|
|
71
|
+
</span>
|
|
72
|
+
}
|
|
73
|
+
</li>
|
|
74
|
+
}
|
|
75
|
+
</ul>
|
|
76
|
+
</nav>
|
|
77
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
|
|
78
|
+
}
|
|
79
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: BreadcrumbComponent, decorators: [{
|
|
80
|
+
type: Component,
|
|
81
|
+
args: [{ selector: 'app-breadcrumb', standalone: true, imports: [CommonModule, RouterModule], template: `
|
|
82
|
+
<nav class="overflow-x-auto">
|
|
83
|
+
<ul class="flex items-center text-white text-sm font-medium" role="list">
|
|
84
|
+
|
|
85
|
+
@for (item of breadcrumb; track item; let i = $index; let first = $first; let last = $last) {
|
|
86
|
+
<li
|
|
87
|
+
class="relative z-10"
|
|
88
|
+
>
|
|
89
|
+
@if (item.routerLink && !last) {
|
|
90
|
+
@if(i === 0){
|
|
91
|
+
<a
|
|
92
|
+
[routerLink]="item.routerLink"
|
|
93
|
+
class="breadcrumb-link flex items-center h-10 px-4 pr-6 text-white bg-primary-500 hover:bg-teal-500 active:bg-teal-600 transition-all duration-150 rounded-r-md"
|
|
94
|
+
>
|
|
95
|
+
<i class="pi pi-home mr-2 rtl:ml-2 rtl:mr-0 text-base"></i>
|
|
96
|
+
</a>
|
|
97
|
+
}
|
|
98
|
+
@else {
|
|
99
|
+
<a
|
|
100
|
+
[routerLink]="item.routerLink"
|
|
101
|
+
class="breadcrumb-item flex items-center h-10 px-4 pr-6 text-white bg-primary-500 hover:bg-teal-500 active:bg-teal-600 transition-all duration-150"
|
|
102
|
+
[ngClass]="{
|
|
103
|
+
'bg-primary-500': i % 2 === 0,
|
|
104
|
+
'bg-primary-600': i % 2 === 1,
|
|
105
|
+
'rounded-l-md pl-5': first,
|
|
106
|
+
'rounded-r-md pr-5': last
|
|
107
|
+
}"
|
|
108
|
+
>
|
|
109
|
+
@if (item.icon) {
|
|
110
|
+
<i [class]="item.icon + ' mr-2 text-base rtl:ml-2 rtl:mr-0'"></i>
|
|
111
|
+
}
|
|
112
|
+
{{ item.label }}
|
|
113
|
+
</a>
|
|
114
|
+
}
|
|
115
|
+
} @else {
|
|
116
|
+
<span
|
|
117
|
+
class="breadcrumb-text flex items-center h-10 px-4 pr-6 text-white"
|
|
118
|
+
[ngClass]="{
|
|
119
|
+
'bg-primary-500': i % 2 === 0,
|
|
120
|
+
'bg-primary-600': i % 2 === 1,
|
|
121
|
+
'rounded-l-md pl-5': first,
|
|
122
|
+
'rounded-r-md pr-5': last
|
|
123
|
+
}"
|
|
124
|
+
>
|
|
125
|
+
@if (item.icon) {
|
|
126
|
+
<i [class]="item.icon + ' mr-2 text-base rtl:ml-2 rtl:mr-0'"></i>
|
|
127
|
+
}
|
|
128
|
+
{{ item.label }}
|
|
129
|
+
</span>
|
|
130
|
+
}
|
|
131
|
+
</li>
|
|
132
|
+
}
|
|
133
|
+
</ul>
|
|
134
|
+
</nav>
|
|
135
|
+
` }]
|
|
136
|
+
}], propDecorators: { breadcrumb: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}] } });
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Generated bundle index. Do not edit.
|
|
142
|
+
*/
|
|
143
|
+
|
|
144
|
+
export { BreadcrumbComponent, BreadcrumbModule };
|
|
145
|
+
//# sourceMappingURL=es.framework-ng.ui.core-breadcrumb.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es.framework-ng.ui.core-breadcrumb.mjs","sources":["../../../../libs/ng.ui.core/breadcrumb/src/lib/breadcrumb-module.ts","../../../../libs/ng.ui.core/breadcrumb/src/lib/breadcrumb.ts","../../../../libs/ng.ui.core/breadcrumb/src/es.framework-ng.ui.core-breadcrumb.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class BreadcrumbModule {}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MenuItem } from 'primeng/api';\nimport { RouterModule } from '@angular/router'; // <--- أضف هذا الاستيراد\n\n@Component({\n selector: 'app-breadcrumb',\n standalone: true,\n imports: [CommonModule, RouterModule], // <--- أضف RouterModule هنا\n template: `\n <nav class=\"overflow-x-auto\">\n <ul class=\"flex items-center text-white text-sm font-medium\" role=\"list\">\n \n @for (item of breadcrumb; track item; let i = $index; let first = $first; let last = $last) {\n <li\n class=\"relative z-10\"\n >\n @if (item.routerLink && !last) {\n @if(i === 0){\n <a\n [routerLink]=\"item.routerLink\"\n class=\"breadcrumb-link flex items-center h-10 px-4 pr-6 text-white bg-primary-500 hover:bg-teal-500 active:bg-teal-600 transition-all duration-150 rounded-r-md\"\n >\n <i class=\"pi pi-home mr-2 rtl:ml-2 rtl:mr-0 text-base\"></i>\n </a>\n }\n @else {\n <a\n [routerLink]=\"item.routerLink\"\n class=\"breadcrumb-item flex items-center h-10 px-4 pr-6 text-white bg-primary-500 hover:bg-teal-500 active:bg-teal-600 transition-all duration-150\"\n [ngClass]=\"{\n 'bg-primary-500': i % 2 === 0,\n 'bg-primary-600': i % 2 === 1,\n 'rounded-l-md pl-5': first,\n 'rounded-r-md pr-5': last\n }\"\n >\n @if (item.icon) {\n <i [class]=\"item.icon + ' mr-2 text-base rtl:ml-2 rtl:mr-0'\"></i>\n }\n {{ item.label }}\n </a>\n }\n } @else {\n <span\n class=\"breadcrumb-text flex items-center h-10 px-4 pr-6 text-white\"\n [ngClass]=\"{\n 'bg-primary-500': i % 2 === 0,\n 'bg-primary-600': i % 2 === 1,\n 'rounded-l-md pl-5': first,\n 'rounded-r-md pr-5': last\n }\"\n >\n @if (item.icon) {\n <i [class]=\"item.icon + ' mr-2 text-base rtl:ml-2 rtl:mr-0'\"></i>\n }\n {{ item.label }}\n </span>\n }\n </li>\n }\n </ul>\n </nav>\n `,\n styles:[\n ``\n ]\n})\nexport class BreadcrumbComponent {\n @Input() breadcrumb: MenuItem[] | any = [];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAMa,gBAAgB,CAAA;uGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAFjB,YAAY,CAAA,EAAA,CAAA;AAEX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAFjB,YAAY,CAAA,EAAA,CAAA;;2FAEX,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACxB,iBAAA;;;MC+DY,mBAAmB,CAAA;IACrB,UAAU,GAAqB,EAAE;uGAD/B,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3DpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsDP,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAvDO,YAAY,4HAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA4DzB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA/D/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,YAAY,CAAC,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDP,IAAA,CAAA,EAAA;;sBAMF;;;ACrEH;;AAEG;;;;"}
|