@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,63 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { NgModule, Input, Component } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
|
|
5
|
+
import { FormlyForm } from '@ngx-formly/core';
|
|
6
|
+
|
|
7
|
+
class GenericFormlyFieldsModule {
|
|
8
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericFormlyFieldsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: GenericFormlyFieldsModule, imports: [CommonModule] });
|
|
10
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericFormlyFieldsModule, imports: [CommonModule] });
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericFormlyFieldsModule, decorators: [{
|
|
13
|
+
type: NgModule,
|
|
14
|
+
args: [{
|
|
15
|
+
imports: [CommonModule],
|
|
16
|
+
}]
|
|
17
|
+
}] });
|
|
18
|
+
|
|
19
|
+
class GenericFormlyFields {
|
|
20
|
+
/** الـ FormGroup الذي يُدار خارجيًا */
|
|
21
|
+
form;
|
|
22
|
+
/** حقول Formly */
|
|
23
|
+
fields = [];
|
|
24
|
+
/** النموذج (object) الذي سيُربط بالحقول */
|
|
25
|
+
model = {};
|
|
26
|
+
/** خيارات Formly (validation, hideExpression, ...) */
|
|
27
|
+
options = {};
|
|
28
|
+
// ngOnInit() {
|
|
29
|
+
// // ما من حاجة هنا: يفترض أن form مُهيّأ في الخارج
|
|
30
|
+
// }
|
|
31
|
+
// ngOnChanges(changes: SimpleChanges) {
|
|
32
|
+
// // لو احتجت تتعامل مع تغيّر الحقول أو الموديل، هنا المكان
|
|
33
|
+
// }
|
|
34
|
+
// دالة مساعدة للوصول الآمن لخصائص الحقل
|
|
35
|
+
getFieldIcon(field) {
|
|
36
|
+
return field.templateOptions?.['icon'] || null;
|
|
37
|
+
}
|
|
38
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericFormlyFields, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
39
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: GenericFormlyFields, isStandalone: true, selector: "lib-generic-formly-fields", inputs: { form: "form", fields: "fields", model: "model", options: "options" }, ngImport: i0, template: "<!-- \u064A\u0631\u0633\u0645 \u062D\u0642\u0648\u0644 Formly \u062F\u0627\u062E\u0644 \u0627\u0644\u0640 form \u0627\u0644\u0645\u0648\u062C\u0648\u062F -->\n<formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\">\n</formly-form>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }] });
|
|
40
|
+
}
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericFormlyFields, decorators: [{
|
|
42
|
+
type: Component,
|
|
43
|
+
args: [{ selector: 'lib-generic-formly-fields', standalone: true, imports: [
|
|
44
|
+
ReactiveFormsModule,
|
|
45
|
+
FormsModule,
|
|
46
|
+
FormlyForm
|
|
47
|
+
], template: "<!-- \u064A\u0631\u0633\u0645 \u062D\u0642\u0648\u0644 Formly \u062F\u0627\u062E\u0644 \u0627\u0644\u0640 form \u0627\u0644\u0645\u0648\u062C\u0648\u062F -->\n<formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\">\n</formly-form>\n" }]
|
|
48
|
+
}], propDecorators: { form: [{
|
|
49
|
+
type: Input
|
|
50
|
+
}], fields: [{
|
|
51
|
+
type: Input
|
|
52
|
+
}], model: [{
|
|
53
|
+
type: Input
|
|
54
|
+
}], options: [{
|
|
55
|
+
type: Input
|
|
56
|
+
}] } });
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Generated bundle index. Do not edit.
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
export { GenericFormlyFields, GenericFormlyFieldsModule };
|
|
63
|
+
//# sourceMappingURL=es.framework-ng.ui.core-generic-formly-fields.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es.framework-ng.ui.core-generic-formly-fields.mjs","sources":["../../../../libs/ng.ui.core/generic-formly-fields/src/lib/generic-formly-fields-module.ts","../../../../libs/ng.ui.core/generic-formly-fields/src/lib/generic-formly-fields.ts","../../../../libs/ng.ui.core/generic-formly-fields/src/lib/generic-formly-fields.html","../../../../libs/ng.ui.core/generic-formly-fields/src/es.framework-ng.ui.core-generic-formly-fields.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class GenericFormlyFieldsModule {}\n","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\n\nimport { ReactiveFormsModule, FormGroup, FormsModule } from '@angular/forms';\nimport { FormlyFormOptions, FormlyFieldConfig, FormlyForm } from '@ngx-formly/core';\n\n@Component({\n selector: 'lib-generic-formly-fields',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n FormsModule,\n FormlyForm\n],\n templateUrl: './generic-formly-fields.html',\n})\nexport class GenericFormlyFields {\n /** الـ FormGroup الذي يُدار خارجيًا */\n @Input() form!: FormGroup;\n\n /** حقول Formly */\n @Input() fields: FormlyFieldConfig[] = [];\n\n /** النموذج (object) الذي سيُربط بالحقول */\n @Input() model: any = {};\n\n /** خيارات Formly (validation, hideExpression, ...) */\n @Input() options: FormlyFormOptions = {};\n\n // ngOnInit() {\n // // ما من حاجة هنا: يفترض أن form مُهيّأ في الخارج\n // }\n\n // ngOnChanges(changes: SimpleChanges) {\n // // لو احتجت تتعامل مع تغيّر الحقول أو الموديل، هنا المكان\n // }\n\n // دالة مساعدة للوصول الآمن لخصائص الحقل\n getFieldIcon(field: FormlyFieldConfig): string | null {\n return field.templateOptions?.['icon'] || null;\n }\n}\n","<!-- يرسم حقول Formly داخل الـ form الموجود -->\n<formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\">\n</formly-form>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MAMa,yBAAyB,CAAA;uGAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,YAF1B,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,yBAAyB,YAF1B,YAAY,CAAA,EAAA,CAAA;;2FAEX,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACxB,iBAAA;;;MCUY,mBAAmB,CAAA;;AAErB,IAAA,IAAI;;IAGJ,MAAM,GAAwB,EAAE;;IAGhC,KAAK,GAAQ,EAAE;;IAGf,OAAO,GAAsB,EAAE;;;;;;;;AAWxC,IAAA,YAAY,CAAC,KAAwB,EAAA;QACnC,OAAO,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,IAAI;IAChD;uGAxBW,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,qKCfhC,wRAOA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDEI,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,+BACX,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAID,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAV/B,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EAAA,OAAA,EACP;wBACP,mBAAmB;wBACnB,WAAW;wBACX;AACH,qBAAA,EAAA,QAAA,EAAA,wRAAA,EAAA;;sBAKE;;sBAGA;;sBAGA;;sBAGA;;;AE1BH;;AAEG;;;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { NgModule, Input, Component } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
|
|
5
|
+
class GenericLoadingspinnerModule {
|
|
6
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericLoadingspinnerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
7
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: GenericLoadingspinnerModule, imports: [CommonModule] });
|
|
8
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericLoadingspinnerModule, imports: [CommonModule] });
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericLoadingspinnerModule, decorators: [{
|
|
11
|
+
type: NgModule,
|
|
12
|
+
args: [{
|
|
13
|
+
imports: [CommonModule],
|
|
14
|
+
}]
|
|
15
|
+
}] });
|
|
16
|
+
|
|
17
|
+
class GenericLoadingspinner {
|
|
18
|
+
loading = false;
|
|
19
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericLoadingspinner, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
20
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericLoadingspinner, isStandalone: true, selector: "lib-generic-loadingspinner", inputs: { loading: "loading" }, ngImport: i0, template: "@if (loading) {\n <div class=\"flex justify-center items-center my-6\">\n <svg class=\"w-8 h-8 animate-spin text-blue-500\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v8H4z\"></path>\n </svg>\n <span class=\"ml-2 text-gray-700\">\u062C\u0627\u0631\u064A \u0627\u0644\u062A\u062D\u0645\u064A\u0644...</span>\n </div>\n}\n", styles: [""] });
|
|
21
|
+
}
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericLoadingspinner, decorators: [{
|
|
23
|
+
type: Component,
|
|
24
|
+
args: [{ selector: 'lib-generic-loadingspinner', imports: [], template: "@if (loading) {\n <div class=\"flex justify-center items-center my-6\">\n <svg class=\"w-8 h-8 animate-spin text-blue-500\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v8H4z\"></path>\n </svg>\n <span class=\"ml-2 text-gray-700\">\u062C\u0627\u0631\u064A \u0627\u0644\u062A\u062D\u0645\u064A\u0644...</span>\n </div>\n}\n" }]
|
|
25
|
+
}], propDecorators: { loading: [{
|
|
26
|
+
type: Input
|
|
27
|
+
}] } });
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Generated bundle index. Do not edit.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
export { GenericLoadingspinner, GenericLoadingspinnerModule };
|
|
34
|
+
//# sourceMappingURL=es.framework-ng.ui.core-generic-loadingspinner.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es.framework-ng.ui.core-generic-loadingspinner.mjs","sources":["../../../../libs/ng.ui.core/generic-loadingspinner/src/lib/generic-loadingspinner-module.ts","../../../../libs/ng.ui.core/generic-loadingspinner/src/lib/generic-loadingspinner.ts","../../../../libs/ng.ui.core/generic-loadingspinner/src/lib/generic-loadingspinner.html","../../../../libs/ng.ui.core/generic-loadingspinner/src/es.framework-ng.ui.core-generic-loadingspinner.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class GenericLoadingspinnerModule {}\n","import { Component, Input } from '@angular/core';\n\n\n@Component({\n selector: 'lib-generic-loadingspinner',\n imports: [],\n templateUrl: './generic-loadingspinner.html',\n styleUrl: './generic-loadingspinner.css'\n})\nexport class GenericLoadingspinner {\n@Input() loading = false;\n}\n\n\n\n\n","@if (loading) {\n <div class=\"flex justify-center items-center my-6\">\n <svg class=\"w-8 h-8 animate-spin text-blue-500\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v8H4z\"></path>\n </svg>\n <span class=\"ml-2 text-gray-700\">جاري التحميل...</span>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAMa,2BAA2B,CAAA;uGAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YAF5B,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,2BAA2B,YAF5B,YAAY,CAAA,EAAA,CAAA;;2FAEX,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACxB,iBAAA;;;MCIY,qBAAqB,CAAA;IACzB,OAAO,GAAG,KAAK;uGADX,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,sHCTlC,0gBASA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDAa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,WAC7B,EAAE,EAAA,QAAA,EAAA,0gBAAA,EAAA;;sBAKZ;;;AEVD;;AAEG;;;;"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { EventEmitter, inject, Output, Input, Component } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import * as i1 from '@angular/forms';
|
|
5
|
+
import { FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
6
|
+
import * as i2 from '@ngx-formly/core';
|
|
7
|
+
import { FormlyModule } from '@ngx-formly/core';
|
|
8
|
+
import * as i3 from 'primeng/button';
|
|
9
|
+
import { ButtonModule } from 'primeng/button';
|
|
10
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
11
|
+
import { QueryBuilderService } from '@es.framework/ng.ui.core/generic-search-advanced';
|
|
12
|
+
|
|
13
|
+
class TabbedSearchComponent {
|
|
14
|
+
fields = [];
|
|
15
|
+
model = {};
|
|
16
|
+
form = new FormGroup({});
|
|
17
|
+
onSearch = new EventEmitter();
|
|
18
|
+
onReset = new EventEmitter();
|
|
19
|
+
paginationChange = new EventEmitter();
|
|
20
|
+
queryBuilder = inject(QueryBuilderService);
|
|
21
|
+
onSubmit() {
|
|
22
|
+
this.model.advancedFilters = this.generateAdvancedFilters(this.fields, this.model);
|
|
23
|
+
const odataParams = this.queryBuilder.buildODataFromQueryModel(this.model, this.fields);
|
|
24
|
+
// Generate query string using the unified method
|
|
25
|
+
const queryString = this.queryBuilder.toODataQueryString(odataParams);
|
|
26
|
+
if (this.model?.pagination && this.model?.pagination?.top) {
|
|
27
|
+
this.paginationChange.emit({
|
|
28
|
+
top: this.model?.pagination?.top,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
this.onSearch.emit({
|
|
32
|
+
query: queryString,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
Reset() {
|
|
36
|
+
this.form.reset();
|
|
37
|
+
this.model = {};
|
|
38
|
+
}
|
|
39
|
+
generateAdvancedFilters(fields, model) {
|
|
40
|
+
const groups = [];
|
|
41
|
+
// نتأكد أن المعالجة فقط داخل الـ tab-type
|
|
42
|
+
fields
|
|
43
|
+
.filter(f => f.type === 'tab-type')
|
|
44
|
+
.forEach(tabField => {
|
|
45
|
+
// tabField.fieldGroup هو مجموعة التبويبات
|
|
46
|
+
tabField.fieldGroup?.forEach(tab => {
|
|
47
|
+
// tab.fieldGroup هو مجموعة الحقول داخل كل تبويب
|
|
48
|
+
function traverse(fields) {
|
|
49
|
+
fields.forEach(field => {
|
|
50
|
+
if (field.fieldGroup) {
|
|
51
|
+
traverse(field.fieldGroup);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const key = field.key;
|
|
55
|
+
const value = model[key];
|
|
56
|
+
const keydb = field.props?.['keydb'];
|
|
57
|
+
// console.log('Processing field in tab-type:', key, 'value:', value, 'keydb:', keydb);
|
|
58
|
+
if (keydb && value !== undefined && value !== null && value !== '') {
|
|
59
|
+
groups.push({
|
|
60
|
+
logicalOperator: 'and',
|
|
61
|
+
groupLogicalOperator: 'and',
|
|
62
|
+
conditions: [
|
|
63
|
+
{
|
|
64
|
+
field: keydb,
|
|
65
|
+
operator: field.props?.['operator'] || 'eq',
|
|
66
|
+
value: value instanceof Date ? value.toISOString().split('T')[0] : value
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
});
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (value === undefined || value === null || value === '')
|
|
73
|
+
return;
|
|
74
|
+
groups.push({
|
|
75
|
+
logicalOperator: 'and',
|
|
76
|
+
groupLogicalOperator: 'and',
|
|
77
|
+
conditions: [
|
|
78
|
+
{
|
|
79
|
+
field: key,
|
|
80
|
+
operator: field.props?.['operator'] || 'eq',
|
|
81
|
+
value
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
traverse(tab.fieldGroup || []);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
return groups;
|
|
91
|
+
}
|
|
92
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TabbedSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
93
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: TabbedSearchComponent, isStandalone: true, selector: "app-tabbed-search", inputs: { fields: "fields", model: "model", form: "form" }, outputs: { onSearch: "onSearch", onReset: "onReset", paginationChange: "paginationChange" }, ngImport: i0, template: `
|
|
94
|
+
<div class="bg-white dark:bg-slate-900 p-3 rounded-xl border border-slate-200 dark:border-slate-800 shadow-sm mb-4">
|
|
95
|
+
<div class="max-h-[220px] overflow-y-auto overflow-x-hidden pr-2
|
|
96
|
+
touch-pan-y overscroll-contain
|
|
97
|
+
scrollbar-thin scrollbar-thumb-slate-300">
|
|
98
|
+
<form [formGroup]="form">
|
|
99
|
+
<formly-form
|
|
100
|
+
[form]="form"
|
|
101
|
+
[fields]="fields"
|
|
102
|
+
[model]="model">
|
|
103
|
+
</formly-form>
|
|
104
|
+
</form>
|
|
105
|
+
</div>
|
|
106
|
+
|
|
107
|
+
<div class="flex items-center justify-between mt-2 pt-2 border-t border-slate-100 dark:border-slate-800 gap-2">
|
|
108
|
+
<div class="flex items-center gap-1.5">
|
|
109
|
+
<p-button
|
|
110
|
+
icon="pi pi-search"
|
|
111
|
+
[outlined]="true"
|
|
112
|
+
severity="secondary"
|
|
113
|
+
styleClass="!rounded-lg !py-1.5"
|
|
114
|
+
(onClick)="onSubmit()">
|
|
115
|
+
</p-button>
|
|
116
|
+
|
|
117
|
+
<p-button
|
|
118
|
+
icon="pi pi-refresh"
|
|
119
|
+
[outlined]="true"
|
|
120
|
+
severity="secondary"
|
|
121
|
+
styleClass="!rounded-lg !py-1.5"
|
|
122
|
+
(onClick)="Reset()">
|
|
123
|
+
</p-button>
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2.LegacyFormlyForm, selector: "formly-form" }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TranslateModule }] });
|
|
128
|
+
}
|
|
129
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TabbedSearchComponent, decorators: [{
|
|
130
|
+
type: Component,
|
|
131
|
+
args: [{
|
|
132
|
+
selector: 'app-tabbed-search',
|
|
133
|
+
standalone: true,
|
|
134
|
+
imports: [
|
|
135
|
+
CommonModule,
|
|
136
|
+
ReactiveFormsModule,
|
|
137
|
+
FormlyModule,
|
|
138
|
+
ButtonModule,
|
|
139
|
+
TranslateModule
|
|
140
|
+
],
|
|
141
|
+
template: `
|
|
142
|
+
<div class="bg-white dark:bg-slate-900 p-3 rounded-xl border border-slate-200 dark:border-slate-800 shadow-sm mb-4">
|
|
143
|
+
<div class="max-h-[220px] overflow-y-auto overflow-x-hidden pr-2
|
|
144
|
+
touch-pan-y overscroll-contain
|
|
145
|
+
scrollbar-thin scrollbar-thumb-slate-300">
|
|
146
|
+
<form [formGroup]="form">
|
|
147
|
+
<formly-form
|
|
148
|
+
[form]="form"
|
|
149
|
+
[fields]="fields"
|
|
150
|
+
[model]="model">
|
|
151
|
+
</formly-form>
|
|
152
|
+
</form>
|
|
153
|
+
</div>
|
|
154
|
+
|
|
155
|
+
<div class="flex items-center justify-between mt-2 pt-2 border-t border-slate-100 dark:border-slate-800 gap-2">
|
|
156
|
+
<div class="flex items-center gap-1.5">
|
|
157
|
+
<p-button
|
|
158
|
+
icon="pi pi-search"
|
|
159
|
+
[outlined]="true"
|
|
160
|
+
severity="secondary"
|
|
161
|
+
styleClass="!rounded-lg !py-1.5"
|
|
162
|
+
(onClick)="onSubmit()">
|
|
163
|
+
</p-button>
|
|
164
|
+
|
|
165
|
+
<p-button
|
|
166
|
+
icon="pi pi-refresh"
|
|
167
|
+
[outlined]="true"
|
|
168
|
+
severity="secondary"
|
|
169
|
+
styleClass="!rounded-lg !py-1.5"
|
|
170
|
+
(onClick)="Reset()">
|
|
171
|
+
</p-button>
|
|
172
|
+
</div>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
175
|
+
`
|
|
176
|
+
}]
|
|
177
|
+
}], propDecorators: { fields: [{
|
|
178
|
+
type: Input
|
|
179
|
+
}], model: [{
|
|
180
|
+
type: Input
|
|
181
|
+
}], form: [{
|
|
182
|
+
type: Input
|
|
183
|
+
}], onSearch: [{
|
|
184
|
+
type: Output
|
|
185
|
+
}], onReset: [{
|
|
186
|
+
type: Output
|
|
187
|
+
}], paginationChange: [{
|
|
188
|
+
type: Output
|
|
189
|
+
}] } });
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Generated bundle index. Do not edit.
|
|
193
|
+
*/
|
|
194
|
+
|
|
195
|
+
export { TabbedSearchComponent };
|
|
196
|
+
//# sourceMappingURL=es.framework-ng.ui.core-generic-report-tabs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es.framework-ng.ui.core-generic-report-tabs.mjs","sources":["../../../../libs/ng.ui.core/generic-report-tabs/src/lib/generic-report-tabs.component.ts","../../../../libs/ng.ui.core/generic-report-tabs/src/es.framework-ng.ui.core-generic-report-tabs.ts"],"sourcesContent":["import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { FormlyModule, FormlyFieldConfig } from '@ngx-formly/core';\nimport { ButtonModule } from 'primeng/button';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { QueryBuilderService } from '@es.framework/ng.ui.core/generic-search-advanced';\n\n@Component({\n selector: 'app-tabbed-search',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormlyModule,\n ButtonModule,\n TranslateModule\n ],\n template: `\n <div class=\"bg-white dark:bg-slate-900 p-3 rounded-xl border border-slate-200 dark:border-slate-800 shadow-sm mb-4\">\n <div class=\"max-h-[220px] overflow-y-auto overflow-x-hidden pr-2\n touch-pan-y overscroll-contain\n scrollbar-thin scrollbar-thumb-slate-300\">\n <form [formGroup]=\"form\">\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\">\n </formly-form>\n </form>\n </div>\n\n <div class=\"flex items-center justify-between mt-2 pt-2 border-t border-slate-100 dark:border-slate-800 gap-2\">\n <div class=\"flex items-center gap-1.5\">\n <p-button\n icon=\"pi pi-search\"\n [outlined]=\"true\"\n severity=\"secondary\"\n styleClass=\"!rounded-lg !py-1.5\"\n (onClick)=\"onSubmit()\">\n </p-button>\n\n <p-button\n icon=\"pi pi-refresh\"\n [outlined]=\"true\"\n severity=\"secondary\"\n styleClass=\"!rounded-lg !py-1.5\"\n (onClick)=\"Reset()\">\n </p-button>\n </div>\n </div>\n </div>\n `\n})\nexport class TabbedSearchComponent {\n @Input() fields: FormlyFieldConfig[] = [];\n @Input() model: any = {};\n @Input() form = new FormGroup({});\n @Output() onSearch = new EventEmitter<any>();\n @Output() onReset = new EventEmitter<void>();\n @Output() paginationChange = new EventEmitter<any>();\n private queryBuilder = inject(QueryBuilderService);\n\n\n\n onSubmit() {\n\n\n this.model.advancedFilters = this.generateAdvancedFilters(this.fields, this.model);\n const odataParams = this.queryBuilder.buildODataFromQueryModel(this.model, this.fields);\n // Generate query string using the unified method\n\n const queryString = this.queryBuilder.toODataQueryString(odataParams);\n if(this.model?.pagination && this.model?.pagination?.top){\n this.paginationChange.emit({\n top:this.model?.pagination?.top,\n });\n }\n this.onSearch.emit(\n {\n query:queryString,\n }\n );\n\n }\n\n Reset() {\n this.form.reset();\n this.model = {};\n }\n\nprivate generateAdvancedFilters(fields: FormlyFieldConfig[], model: any) {\n const groups: any[] = [];\n\n // نتأكد أن المعالجة فقط داخل الـ tab-type\n fields\n .filter(f => f.type === 'tab-type')\n .forEach(tabField => {\n // tabField.fieldGroup هو مجموعة التبويبات\n tabField.fieldGroup?.forEach(tab => {\n // tab.fieldGroup هو مجموعة الحقول داخل كل تبويب\n function traverse(fields: FormlyFieldConfig[]) {\n fields.forEach(field => {\n if (field.fieldGroup) {\n traverse(field.fieldGroup);\n return;\n }\n\n const key = field.key as string;\n const value = model[key];\n const keydb = field.props?.['keydb'];\n\n // console.log('Processing field in tab-type:', key, 'value:', value, 'keydb:', keydb);\n\n if (keydb && value !== undefined && value !== null && value !== '') {\n groups.push({\n logicalOperator: 'and',\n groupLogicalOperator: 'and',\n conditions: [\n {\n field: keydb,\n operator: field.props?.['operator'] || 'eq',\n value: value instanceof Date ? value.toISOString().split('T')[0] : value\n }\n ]\n });\n return;\n }\n\n if (value === undefined || value === null || value === '') return;\n\n groups.push({\n logicalOperator: 'and',\n groupLogicalOperator: 'and',\n conditions: [\n {\n field: key,\n operator: field.props?.['operator'] || 'eq',\n value\n }\n ]\n });\n });\n }\n\n traverse(tab.fieldGroup || []);\n });\n });\n\n return groups;\n}\n\n\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|