@elite.framework/ng.core 1.0.63 → 1.0.65
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/fesm2022/elite.framework-ng.core-src-lib-components-attachments.mjs +204 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-attachments.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-breadcrumb.mjs +132 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-breadcrumb.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-color-picker.mjs +76 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-color-picker.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-column-settings-popover.mjs +172 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-column-settings-popover.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-condition-editor.mjs +794 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-condition-editor.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-custom-switch.mjs +110 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-custom-switch.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-deactivation-reason.mjs +130 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-deactivation-reason.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-form-button.mjs +50 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-form-button.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-form-field.mjs +154 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-form-field.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-form-template.mjs +24 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-form-template.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-image.mjs +100 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-image.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-label.mjs +78 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-avatar-label.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button-selector.mjs +167 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button-selector.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button.mjs +62 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-button.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-split-button.mjs +50 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-split-button.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-username-with-domain.mjs +76 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-formly-username-with-domain.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-autocomplete.mjs +163 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-autocomplete.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-button.mjs +133 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-button.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-card.mjs +214 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-card.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-crud-table.mjs +385 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-crud-table.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-errormessage.mjs +23 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-errormessage.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-formly-fields.mjs +53 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-formly-fields.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-loadingspinner.mjs +23 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-loadingspinner.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-search.mjs +85 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-search.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-selector.mjs +430 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-selector.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-table.mjs +216 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-generic-table.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-header-wrapper.mjs +18 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-header-wrapper.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-icon-picker.mjs +195 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-icon-picker.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-input-switch.mjs +94 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-input-switch.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-input-with-icon.mjs +55 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-input-with-icon.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-label-type.mjs +112 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-label-type.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-odata-query-builder.mjs +297 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-odata-query-builder.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-repeat.mjs +135 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-repeat.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-cards.mjs +40 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-cards.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-toggles.mjs +41 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-sidebar-toggles.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-tabs.mjs +45 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-tabs.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-tag-type.mjs +192 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-tag-type.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-text-editor.mjs +44 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-text-editor.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-wrappers.mjs +174 -0
- package/fesm2022/elite.framework-ng.core-src-lib-components-wrappers.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-directives.mjs +59 -0
- package/fesm2022/elite.framework-ng.core-src-lib-directives.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core-src-lib-pipes.mjs +135 -0
- package/fesm2022/elite.framework-ng.core-src-lib-pipes.mjs.map +1 -0
- package/fesm2022/elite.framework-ng.core.mjs +1643 -384
- package/fesm2022/elite.framework-ng.core.mjs.map +1 -1
- package/index.d.ts +493 -24
- package/package.json +14 -62
- package/src/lib/components/attachments/index.d.ts +31 -0
- package/src/lib/components/breadcrumb/index.d.ts +10 -0
- package/src/lib/components/color-picker/index.d.ts +9 -0
- package/src/lib/components/column-settings-popover/index.d.ts +39 -0
- package/src/lib/components/condition-editor/index.d.ts +73 -0
- package/src/lib/components/custom-switch/index.d.ts +12 -0
- package/src/lib/components/deactivation-reason/index.d.ts +24 -0
- package/src/lib/components/form-button/index.d.ts +10 -0
- package/src/lib/components/form-field/index.d.ts +30 -0
- package/src/lib/components/form-template/index.d.ts +9 -0
- package/src/lib/components/formly-avatar-image/index.d.ts +11 -0
- package/src/lib/components/formly-avatar-label/index.d.ts +29 -0
- package/src/lib/components/formly-button/index.d.ts +13 -0
- package/src/lib/components/formly-button-selector/index.d.ts +28 -0
- package/src/lib/components/formly-split-button/index.d.ts +16 -0
- package/src/lib/components/formly-username-with-domain/index.d.ts +12 -0
- package/src/lib/components/generic-autocomplete/index.d.ts +34 -0
- package/src/lib/components/generic-button/index.d.ts +35 -0
- package/src/lib/components/generic-card/index.d.ts +90 -0
- package/src/lib/components/generic-crud-table/index.d.ts +120 -0
- package/src/lib/components/generic-errormessage/index.d.ts +10 -0
- package/src/lib/components/generic-formly-fields/index.d.ts +22 -0
- package/src/lib/components/generic-loadingspinner/index.d.ts +9 -0
- package/src/lib/components/generic-search/index.d.ts +29 -0
- package/src/lib/components/generic-selector/index.d.ts +66 -0
- package/src/lib/components/generic-table/index.d.ts +60 -0
- package/src/lib/components/header-wrapper/index.d.ts +8 -0
- package/src/lib/components/icon-picker/index.d.ts +23 -0
- package/src/lib/components/input-switch/index.d.ts +9 -0
- package/src/lib/components/input-with-icon/index.d.ts +10 -0
- package/src/lib/components/label-type/index.d.ts +19 -0
- package/src/lib/components/odata-query-builder/index.d.ts +81 -0
- package/src/lib/components/repeat/index.d.ts +17 -0
- package/src/lib/components/sidebar-cards/index.d.ts +18 -0
- package/src/lib/components/sidebar-toggles/index.d.ts +18 -0
- package/src/lib/components/tabs/index.d.ts +10 -0
- package/src/lib/components/tag-type/index.d.ts +27 -0
- package/src/lib/components/text-editor/index.d.ts +9 -0
- package/src/lib/components/wrappers/index.d.ts +24 -0
- package/src/lib/directives/index.d.ts +23 -0
- package/src/lib/pipes/index.d.ts +20 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elite.framework-ng.core-src-lib-components-icon-picker.mjs","sources":["../../../projects/core/src/lib/components/icon-picker/icon-picker.type.ts","../../../projects/core/src/lib/components/icon-picker/elite.framework-ng.core-src-lib-components-icon-picker.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType } from '@ngx-formly/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\n\n@Component({\n selector: 'formly-field-icon-picker',\n imports:[FormsModule,CommonModule,DialogModule,ReactiveFormsModule,ButtonModule],\n template: `\n <div class=\"relative inline-block\">\n <!-- Toggle Button -->\n <button type=\"button\" class=\"px-2 py-1 border rounded shadow-sm bg-white dark:bg-gray-800 dark:border-gray-600\"\n (click)=\"dropdownOpen = !dropdownOpen\">\n <i [class]=\"formControl.value || 'fa-solid fa-circle-half-stroke'\" class=\"text-lg\"></i>\n <i class=\"fas fa-caret-down ml-1 text-xs\"></i>\n </button>\n\n <!-- Dropdown -->\n <div *ngIf=\"dropdownOpen\"\n class=\"absolute z-50 mt-2 w-72 rounded-md border border-gray-300 shadow-lg bg-white dark:bg-gray-800 dark:border-gray-600\">\n\n <!-- Header -->\n <div class=\"flex items-center justify-between px-2 py-1 border-b dark:border-gray-600\">\n <button (click)=\"prevPage()\" class=\"p-1 hover:text-blue-600\" [disabled]=\"page === 1\">\n <i class=\"fas fa-arrow-left\"></i>\n </button>\n <span class=\"text-xs text-gray-600 dark:text-gray-300\">Page {{ page }} / {{ totalPages }}</span>\n <button (click)=\"nextPage()\" class=\"p-1 hover:text-blue-600\" [disabled]=\"page === totalPages\">\n <i class=\"fas fa-arrow-right\"></i>\n </button>\n </div>\n\n <!-- Search -->\n <div class=\"p-2\">\n <input\n type=\"text\"\n placeholder=\"Search icon\"\n [(ngModel)]=\"searchQuery\"\n (ngModelChange)=\"onSearch()\"\n class=\"w-full px-2 py-1 text-sm border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white\"\n />\n </div>\n\n <!-- Icon Grid -->\n <div class=\"grid grid-cols-4 gap-2 p-2 max-h-56 overflow-y-auto\">\n <button\n *ngFor=\"let icon of pagedIcons\"\n (click)=\"selectIcon(icon)\"\n class=\"flex items-center justify-center h-10 w-10 border rounded hover:bg-gray-100 dark:hover:bg-gray-700\"\n [ngClass]=\"{ 'ring-2 ring-blue-500': formControl.value === icon }\"\n >\n <i [class]=\"icon\" class=\"text-lg\"></i>\n </button>\n </div>\n\n <!-- Footer -->\n <div class=\"px-2 py-1 text-xs text-gray-500 dark:text-gray-400 border-t dark:border-gray-600\">\n {{ start + 1 }} - {{ end }} of {{ filteredIcons.length }}\n </div>\n </div>\n </div>\n\n `\n})\n\nexport class IconPickerComponent extends FieldType{\n dropdownOpen = false;\n searchQuery = '';\n page = 1;\n pageSize = 16;\n\n icons: string[] = [\n 'fa-solid fa-box',\n 'fa-solid fa-layer-group',\n 'fa-solid fa-table-columns',\n 'fa-solid fa-database',\n 'fa-solid fa-arrow-left',\n 'fa-solid fa-arrow-right',\n 'fa-solid fa-arrow-down',\n 'fa-solid fa-arrow-up',\n 'fa-solid fa-trash',\n 'fa-solid fa-gear',\n 'fa-solid fa-circle-check',\n 'fa-solid fa-circle-xmark',\n 'fa-solid fa-pen',\n 'fa-solid fa-copy',\n 'fa-solid fa-share',\n 'fa-solid fa-upload',\n 'fa-solid fa-download',\n 'fa-solid fa-image',\n 'fa-solid fa-chart-pie',\n // Add more FontAwesome Pro icons\n ];\n\n get filteredIcons() {\n if (!this.searchQuery) return this.icons;\n return this.icons.filter(icon =>\n icon.toLowerCase().includes(this.searchQuery.toLowerCase())\n );\n }\n\n get totalPages() {\n return Math.ceil(this.filteredIcons.length / this.pageSize);\n }\n\n get start() {\n return (this.page - 1) * this.pageSize;\n }\n\n get end() {\n return Math.min(this.start + this.pageSize, this.filteredIcons.length);\n }\n\n get pagedIcons() {\n return this.filteredIcons.slice(this.start, this.end);\n }\n\n onSearch() {\n this.page = 1;\n }\n\n selectIcon(icon: string) {\n this.formControl.setValue(icon);\n this.dropdownOpen = false;\n }\n\n nextPage() {\n if (this.page < this.totalPages) this.page++;\n }\n\n prevPage() {\n if (this.page > 1) this.page--;\n }\n}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { FieldType, FormlyAttributes } from '@ngx-formly/core';
|
|
4
|
+
import * as i1 from '@angular/common';
|
|
5
|
+
import { CommonModule } from '@angular/common';
|
|
6
|
+
import { ToggleSwitch } from 'primeng/toggleswitch';
|
|
7
|
+
import * as i2 from '@angular/forms';
|
|
8
|
+
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
|
|
9
|
+
import * as i4 from '@ngx-translate/core';
|
|
10
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
11
|
+
import * as i3 from 'primeng/tooltip';
|
|
12
|
+
import { TooltipModule } from 'primeng/tooltip';
|
|
13
|
+
|
|
14
|
+
class InputSwitchTypeComponent extends FieldType {
|
|
15
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: InputSwitchTypeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
16
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: InputSwitchTypeComponent, isStandalone: true, selector: "formly-field-primeng-input-switch", usesInheritance: true, ngImport: i0, template: `
|
|
17
|
+
<!-- border border-gray-300 -->
|
|
18
|
+
<div class="flex items-center justify-between rtl:flex-row-reverse w-full px-2 py-1"
|
|
19
|
+
style=" border-radius: var(--p-inputtext-border-radius);">
|
|
20
|
+
|
|
21
|
+
<label [for]="id" class="font-bold text-lg text-gray-800">
|
|
22
|
+
{{ (to.label ?? '') | translate }}
|
|
23
|
+
|
|
24
|
+
<span *ngIf="to.required" class="text-red-500">*</span>
|
|
25
|
+
</label>
|
|
26
|
+
|
|
27
|
+
<p-toggleSwitch
|
|
28
|
+
[formControl]="formControl"
|
|
29
|
+
[formlyAttributes]="field"
|
|
30
|
+
[pTooltip]="field.props['tooltip']"
|
|
31
|
+
[styleClass]="''"
|
|
32
|
+
[inputId]="id"
|
|
33
|
+
|
|
34
|
+
></p-toggleSwitch>
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
<!-- <label [for]="id" class="font-bold text-lg text-gray-800 mr-2 whitespace-nowrap">
|
|
38
|
+
{{ (to.label ?? '') | translate}}
|
|
39
|
+
</label> -->
|
|
40
|
+
</div>
|
|
41
|
+
<!-- [style]="to.['style']" -->
|
|
42
|
+
<!-- [disabled]="to.disabled ?? false" -->
|
|
43
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: ToggleSwitch, selector: "p-toggleswitch, p-toggleSwitch, p-toggle-switch", inputs: ["styleClass", "tabindex", "inputId", "readonly", "trueValue", "falseValue", "ariaLabel", "size", "ariaLabelledBy", "autofocus"], outputs: ["onChange"] }, { kind: "directive", type: FormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
44
|
+
}
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: InputSwitchTypeComponent, decorators: [{
|
|
46
|
+
type: Component,
|
|
47
|
+
args: [{
|
|
48
|
+
selector: 'formly-field-primeng-input-switch',
|
|
49
|
+
standalone: true,
|
|
50
|
+
imports: [CommonModule,
|
|
51
|
+
ReactiveFormsModule,
|
|
52
|
+
FormsModule,
|
|
53
|
+
ToggleSwitch,
|
|
54
|
+
FormlyAttributes,
|
|
55
|
+
TranslateModule,
|
|
56
|
+
TooltipModule],
|
|
57
|
+
template: `
|
|
58
|
+
<!-- border border-gray-300 -->
|
|
59
|
+
<div class="flex items-center justify-between rtl:flex-row-reverse w-full px-2 py-1"
|
|
60
|
+
style=" border-radius: var(--p-inputtext-border-radius);">
|
|
61
|
+
|
|
62
|
+
<label [for]="id" class="font-bold text-lg text-gray-800">
|
|
63
|
+
{{ (to.label ?? '') | translate }}
|
|
64
|
+
|
|
65
|
+
<span *ngIf="to.required" class="text-red-500">*</span>
|
|
66
|
+
</label>
|
|
67
|
+
|
|
68
|
+
<p-toggleSwitch
|
|
69
|
+
[formControl]="formControl"
|
|
70
|
+
[formlyAttributes]="field"
|
|
71
|
+
[pTooltip]="field.props['tooltip']"
|
|
72
|
+
[styleClass]="''"
|
|
73
|
+
[inputId]="id"
|
|
74
|
+
|
|
75
|
+
></p-toggleSwitch>
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
<!-- <label [for]="id" class="font-bold text-lg text-gray-800 mr-2 whitespace-nowrap">
|
|
79
|
+
{{ (to.label ?? '') | translate}}
|
|
80
|
+
</label> -->
|
|
81
|
+
</div>
|
|
82
|
+
<!-- [style]="to.['style']" -->
|
|
83
|
+
<!-- [disabled]="to.disabled ?? false" -->
|
|
84
|
+
`,
|
|
85
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
86
|
+
}]
|
|
87
|
+
}] });
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Generated bundle index. Do not edit.
|
|
91
|
+
*/
|
|
92
|
+
|
|
93
|
+
export { InputSwitchTypeComponent };
|
|
94
|
+
//# sourceMappingURL=elite.framework-ng.core-src-lib-components-input-switch.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elite.framework-ng.core-src-lib-components-input-switch.mjs","sources":["../../../projects/core/src/lib/components/input-switch/input-switch.type.ts","../../../projects/core/src/lib/components/input-switch/elite.framework-ng.core-src-lib-components-input-switch.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FieldType, FieldTypeConfig, FormlyAttributes } from '@ngx-formly/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ToggleSwitch } from 'primeng/toggleswitch';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\n\r\n@Component({\r\n selector: 'formly-field-primeng-input-switch',\r\n standalone: true,\r\n imports: [CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n ToggleSwitch,\r\n FormlyAttributes,\r\n TranslateModule,\r\n TooltipModule],\r\n template: `\r\n <!-- border border-gray-300 -->\r\n <div class=\"flex items-center justify-between rtl:flex-row-reverse w-full px-2 py-1\"\r\n style=\" border-radius: var(--p-inputtext-border-radius);\">\r\n\r\n <label [for]=\"id\" class=\"font-bold text-lg text-gray-800\">\r\n {{ (to.label ?? '') | translate }}\r\n\r\n <span *ngIf=\"to.required\" class=\"text-red-500\">*</span>\r\n </label>\r\n\r\n <p-toggleSwitch\r\n [formControl]=\"formControl\"\r\n [formlyAttributes]=\"field\"\r\n [pTooltip]=\"field.props['tooltip']\"\r\n [styleClass]=\"''\"\r\n [inputId]=\"id\"\r\n\r\n ></p-toggleSwitch>\r\n\r\n\r\n <!-- <label [for]=\"id\" class=\"font-bold text-lg text-gray-800 mr-2 whitespace-nowrap\">\r\n {{ (to.label ?? '') | translate}}\r\n </label> -->\r\n</div>\r\n <!-- [style]=\"to.['style']\" -->\r\n <!-- [disabled]=\"to.disabled ?? false\" -->\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class InputSwitchTypeComponent extends FieldType<FieldTypeConfig> {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { Component } from '@angular/core';
|
|
4
|
+
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
|
|
5
|
+
import * as i1 from '@ngx-formly/core';
|
|
6
|
+
import { FieldType, FormlyModule } from '@ngx-formly/core';
|
|
7
|
+
|
|
8
|
+
class InputWithIconType extends FieldType {
|
|
9
|
+
get type() {
|
|
10
|
+
return this.to.type || 'text';
|
|
11
|
+
}
|
|
12
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: InputWithIconType, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
13
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: InputWithIconType, isStandalone: true, selector: "formly-field-input-with-icon", usesInheritance: true, ngImport: i0, template: `
|
|
14
|
+
<div class="relative">
|
|
15
|
+
<!-- [formControl]="formControl" -->
|
|
16
|
+
<input
|
|
17
|
+
[type]="type"
|
|
18
|
+
|
|
19
|
+
[formlyAttributes]="field"
|
|
20
|
+
class="w-full rounded-xl border border-gray-200 bg-gray-50 pl-12 pr-4 py-3 text-sm focus:border-primary focus:ring-2 focus:ring-blue-100 transition-all"
|
|
21
|
+
[placeholder]="to.placeholder"
|
|
22
|
+
[disabled]="to.disabled ? true : false"
|
|
23
|
+
/>
|
|
24
|
+
<i class="{{ to['icon'] }} absolute left-4 top-1/2 -translate-y-1/2 text-gray-400 text-base"></i>
|
|
25
|
+
</div>
|
|
26
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i1.LegacyFormlyAttributes, selector: "[formlyAttributes]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }] });
|
|
27
|
+
}
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: InputWithIconType, decorators: [{
|
|
29
|
+
type: Component,
|
|
30
|
+
args: [{
|
|
31
|
+
selector: 'formly-field-input-with-icon',
|
|
32
|
+
imports: [FormlyModule, ReactiveFormsModule, CommonModule, FormsModule],
|
|
33
|
+
template: `
|
|
34
|
+
<div class="relative">
|
|
35
|
+
<!-- [formControl]="formControl" -->
|
|
36
|
+
<input
|
|
37
|
+
[type]="type"
|
|
38
|
+
|
|
39
|
+
[formlyAttributes]="field"
|
|
40
|
+
class="w-full rounded-xl border border-gray-200 bg-gray-50 pl-12 pr-4 py-3 text-sm focus:border-primary focus:ring-2 focus:ring-blue-100 transition-all"
|
|
41
|
+
[placeholder]="to.placeholder"
|
|
42
|
+
[disabled]="to.disabled ? true : false"
|
|
43
|
+
/>
|
|
44
|
+
<i class="{{ to['icon'] }} absolute left-4 top-1/2 -translate-y-1/2 text-gray-400 text-base"></i>
|
|
45
|
+
</div>
|
|
46
|
+
`,
|
|
47
|
+
}]
|
|
48
|
+
}] });
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Generated bundle index. Do not edit.
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
export { InputWithIconType };
|
|
55
|
+
//# sourceMappingURL=elite.framework-ng.core-src-lib-components-input-with-icon.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elite.framework-ng.core-src-lib-components-input-with-icon.mjs","sources":["../../../projects/core/src/lib/components/input-with-icon/input-with-icon.type.ts","../../../projects/core/src/lib/components/input-with-icon/elite.framework-ng.core-src-lib-components-input-with-icon.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\n\n@Component({\n selector: 'formly-field-input-with-icon',\n imports:[FormlyModule,ReactiveFormsModule,CommonModule,FormsModule],\n template: `\n <div class=\"relative\">\n <!-- [formControl]=\"formControl\" -->\n <input\n [type]=\"type\"\n\n [formlyAttributes]=\"field\"\n class=\"w-full rounded-xl border border-gray-200 bg-gray-50 pl-12 pr-4 py-3 text-sm focus:border-primary focus:ring-2 focus:ring-blue-100 transition-all\"\n [placeholder]=\"to.placeholder\"\n [disabled]=\"to.disabled ? true : false\"\n />\n <i class=\"{{ to['icon'] }} absolute left-4 top-1/2 -translate-y-1/2 text-gray-400 text-base\"></i>\n </div>\n `,\n})\nexport class InputWithIconType extends FieldType {\n get type() {\n return this.to.type || 'text';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;AAuBM,MAAO,iBAAkB,SAAQ,SAAS,CAAA;AAC9C,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,MAAM;;uGAFpB,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAflB;;;;;;;;;;;;;AAaT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAdQ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAC,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAC,YAAY,8BAAC,WAAW,EAAA,CAAA,EAAA,CAAA;;2FAgBvD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAlB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,8BAA8B;oBACxC,OAAO,EAAC,CAAC,YAAY,EAAC,mBAAmB,EAAC,YAAY,EAAC,WAAW,CAAC;AACnE,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;AAaT,EAAA,CAAA;AACF,iBAAA;;;ACtBD;;AAEG;;;;"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import { FieldType } from '@ngx-formly/core';
|
|
4
|
+
|
|
5
|
+
class LabelTypeComponent extends FieldType {
|
|
6
|
+
get displayValue() {
|
|
7
|
+
const key = this.key;
|
|
8
|
+
const val = this.model?.[key];
|
|
9
|
+
const row = this.model ?? {};
|
|
10
|
+
// تحقق من أن formatter دالة قبل الاستدعاء
|
|
11
|
+
const formatter = this.props['formatter'];
|
|
12
|
+
if (formatter && typeof formatter === 'function') {
|
|
13
|
+
try {
|
|
14
|
+
return formatter(row, val);
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
console.warn('Formatter error:', e);
|
|
18
|
+
return val ?? '--';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return val ?? '--';
|
|
22
|
+
}
|
|
23
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LabelTypeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
24
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: LabelTypeComponent, isStandalone: true, selector: "formly-label-type", usesInheritance: true, ngImport: i0, template: `
|
|
25
|
+
<div [class]="to['className'] || 'text-gray-700 font-bold'">
|
|
26
|
+
<span [innerHTML]="displayValue" ></span>
|
|
27
|
+
<!-- <span {}></span> -->
|
|
28
|
+
</div>
|
|
29
|
+
`, isInline: true });
|
|
30
|
+
}
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: LabelTypeComponent, decorators: [{
|
|
32
|
+
type: Component,
|
|
33
|
+
args: [{
|
|
34
|
+
selector: 'formly-label-type',
|
|
35
|
+
standalone: true,
|
|
36
|
+
template: `
|
|
37
|
+
<div [class]="to['className'] || 'text-gray-700 font-bold'">
|
|
38
|
+
<span [innerHTML]="displayValue" ></span>
|
|
39
|
+
<!-- <span {}></span> -->
|
|
40
|
+
</div>
|
|
41
|
+
`,
|
|
42
|
+
}]
|
|
43
|
+
}] });
|
|
44
|
+
|
|
45
|
+
class ClickableLabelTypeComponent extends FieldType {
|
|
46
|
+
onCellLeave(col, row, event) {
|
|
47
|
+
event.stopPropagation(); // يمنع اختيار الصف
|
|
48
|
+
col.onCellMouseLeave?.(row, event); // <--- استدعاء الدالة المخصصة للمغادرة
|
|
49
|
+
}
|
|
50
|
+
onCellHover(col, row, event) {
|
|
51
|
+
event.stopPropagation(); // يمنع اختيار الصف
|
|
52
|
+
col.onCellMouseEnter?.(row, event); // <--- استدعاء الدالة المخصصة للتحويم
|
|
53
|
+
}
|
|
54
|
+
handleCellClick(col, model, event) {
|
|
55
|
+
event.stopPropagation();
|
|
56
|
+
col?.clickAction?.(model, event);
|
|
57
|
+
}
|
|
58
|
+
getCellValue(col, model) {
|
|
59
|
+
const field = this.key;
|
|
60
|
+
const pipeFn = this.props['pipe'];
|
|
61
|
+
return pipeFn ? pipeFn(model[col.key]) : model[field];
|
|
62
|
+
}
|
|
63
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ClickableLabelTypeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
64
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.4", type: ClickableLabelTypeComponent, isStandalone: true, selector: "formly-clickable-label-type", usesInheritance: true, ngImport: i0, template: `
|
|
65
|
+
|
|
66
|
+
<a class="cursor-pointer hover:underline hover:text-blue-600 font-bold"
|
|
67
|
+
(click)="handleCellClick(props,model, $event)"
|
|
68
|
+
(mouseenter)="props['hoverable'] && onCellHover(props, model, $event)"
|
|
69
|
+
(mouseleave)="props['hoverable'] && onCellLeave(props, model, $event)"
|
|
70
|
+
>
|
|
71
|
+
@if(props['formatter']){
|
|
72
|
+
<span [innerHTML]="props['formatter'](model)"></span>
|
|
73
|
+
}
|
|
74
|
+
@else{
|
|
75
|
+
{{ getCellValue(props, model) }}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
</a>
|
|
80
|
+
`, isInline: true });
|
|
81
|
+
}
|
|
82
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ClickableLabelTypeComponent, decorators: [{
|
|
83
|
+
type: Component,
|
|
84
|
+
args: [{
|
|
85
|
+
selector: 'formly-clickable-label-type',
|
|
86
|
+
standalone: true,
|
|
87
|
+
template: `
|
|
88
|
+
|
|
89
|
+
<a class="cursor-pointer hover:underline hover:text-blue-600 font-bold"
|
|
90
|
+
(click)="handleCellClick(props,model, $event)"
|
|
91
|
+
(mouseenter)="props['hoverable'] && onCellHover(props, model, $event)"
|
|
92
|
+
(mouseleave)="props['hoverable'] && onCellLeave(props, model, $event)"
|
|
93
|
+
>
|
|
94
|
+
@if(props['formatter']){
|
|
95
|
+
<span [innerHTML]="props['formatter'](model)"></span>
|
|
96
|
+
}
|
|
97
|
+
@else{
|
|
98
|
+
{{ getCellValue(props, model) }}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
</a>
|
|
103
|
+
`,
|
|
104
|
+
}]
|
|
105
|
+
}] });
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Generated bundle index. Do not edit.
|
|
109
|
+
*/
|
|
110
|
+
|
|
111
|
+
export { ClickableLabelTypeComponent, LabelTypeComponent };
|
|
112
|
+
//# sourceMappingURL=elite.framework-ng.core-src-lib-components-label-type.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elite.framework-ng.core-src-lib-components-label-type.mjs","sources":["../../../projects/core/src/lib/components/label-type/label-type.ts","../../../projects/core/src/lib/components/label-type/clickable-label-type.ts","../../../projects/core/src/lib/components/label-type/elite.framework-ng.core-src-lib-components-label-type.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { FieldType } from '@ngx-formly/core';\n\n@Component({\n selector: 'formly-label-type',\n standalone: true,\n template: `\n <div [class]=\"to['className'] || 'text-gray-700 font-bold'\">\n <span [innerHTML]=\"displayValue\" ></span>\n <!-- <span {}></span> -->\n </div>\n `,\n})\nexport class LabelTypeComponent extends FieldType {\nget displayValue(): any {\n const key = this.key as string;\n const val = this.model?.[key] ;\n const row = this.model ?? {};\n\n // تحقق من أن formatter دالة قبل الاستدعاء\n const formatter = this.props['formatter'];\n if (formatter && typeof formatter === 'function') {\n\n try {\n return formatter(row, val);\n } catch (e) {\n console.warn('Formatter error:', e);\n return val ?? '--';\n }\n }\n\n\n\n return val ?? '--';\n}\n\n\n\n}\n","\r\nimport { Component } from '@angular/core';\r\nimport { FieldType } from '@ngx-formly/core';\r\n\r\n@Component({\r\n selector: 'formly-clickable-label-type',\r\n standalone: true,\r\n template: `\r\n\r\n<a class=\"cursor-pointer hover:underline hover:text-blue-600 font-bold\"\r\n (click)=\"handleCellClick(props,model, $event)\"\r\n (mouseenter)=\"props['hoverable'] && onCellHover(props, model, $event)\"\r\n (mouseleave)=\"props['hoverable'] && onCellLeave(props, model, $event)\"\r\n >\r\n @if(props['formatter']){\r\n <span [innerHTML]=\"props['formatter'](model)\"></span>\r\n }\r\n @else{\r\n {{ getCellValue(props, model) }}\r\n }\r\n\r\n\r\n </a>\r\n `,\r\n})\r\nexport class ClickableLabelTypeComponent extends FieldType {\r\n onCellLeave(col: any, row: any, event: MouseEvent) { // <--- تعديل هنا\r\n event.stopPropagation(); // يمنع اختيار الصف\r\n col.onCellMouseLeave?.(row, event); // <--- استدعاء الدالة المخصصة للمغادرة\r\n }\r\n onCellHover(col: any, row: any, event: MouseEvent) { // <--- تعديل هنا\r\n event.stopPropagation(); // يمنع اختيار الصف\r\n col.onCellMouseEnter?.(row, event); // <--- استدعاء الدالة المخصصة للتحويم\r\n }\r\n\r\n handleCellClick(col: any, model: any, event: MouseEvent) {\r\n event.stopPropagation();\r\n col?.clickAction?.(model, event);\r\n }\r\n\r\ngetCellValue(col: any, model: any) {\r\n const field = this.key as string;\r\n const pipeFn = this.props['pipe'] as ((v: any) => any) | undefined;\r\n return pipeFn ? pipeFn(model[col.key as string]) : model[field];\r\n}\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { EventEmitter, Output, Input, Component } from '@angular/core';
|
|
3
|
+
import { FormGroup } from '@angular/forms';
|
|
4
|
+
import { FormlyForm } from '@ngx-formly/core';
|
|
5
|
+
import * as i1 from '@angular/common';
|
|
6
|
+
import { CommonModule } from '@angular/common';
|
|
7
|
+
|
|
8
|
+
class ODataQueryBuilderComponent {
|
|
9
|
+
set entityFields(fields) {
|
|
10
|
+
this._entityFields = fields || [];
|
|
11
|
+
this.updateFieldOptions();
|
|
12
|
+
}
|
|
13
|
+
get entityFields() {
|
|
14
|
+
return this._entityFields;
|
|
15
|
+
}
|
|
16
|
+
_entityFields = [];
|
|
17
|
+
queryChange = new EventEmitter();
|
|
18
|
+
form = new FormGroup({});
|
|
19
|
+
model = {
|
|
20
|
+
conditionGroups: [
|
|
21
|
+
{
|
|
22
|
+
operator: 'and',
|
|
23
|
+
conditions: []
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
orderBy: [],
|
|
27
|
+
groupBy: [],
|
|
28
|
+
top: null,
|
|
29
|
+
skip: null
|
|
30
|
+
};
|
|
31
|
+
fields = [
|
|
32
|
+
{
|
|
33
|
+
key: 'conditionGroups',
|
|
34
|
+
type: 'repeat',
|
|
35
|
+
props: {
|
|
36
|
+
addText: 'Add Condition Group',
|
|
37
|
+
required: true
|
|
38
|
+
},
|
|
39
|
+
fieldArray: {
|
|
40
|
+
fieldGroup: [
|
|
41
|
+
{
|
|
42
|
+
key: 'operator',
|
|
43
|
+
type: 'select',
|
|
44
|
+
props: {
|
|
45
|
+
label: 'Group Operator',
|
|
46
|
+
required: true,
|
|
47
|
+
options: [
|
|
48
|
+
{ value: 'and', label: 'AND' },
|
|
49
|
+
{ value: 'or', label: 'OR' }
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
key: 'conditions',
|
|
55
|
+
type: 'repeat',
|
|
56
|
+
props: {
|
|
57
|
+
addText: 'Add Condition',
|
|
58
|
+
required: true
|
|
59
|
+
},
|
|
60
|
+
fieldArray: {
|
|
61
|
+
fieldGroup: [
|
|
62
|
+
{
|
|
63
|
+
key: 'field',
|
|
64
|
+
type: 'select',
|
|
65
|
+
props: {
|
|
66
|
+
label: 'Field',
|
|
67
|
+
required: true,
|
|
68
|
+
options: []
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
key: 'operator',
|
|
73
|
+
type: 'select',
|
|
74
|
+
props: {
|
|
75
|
+
label: 'Operator',
|
|
76
|
+
required: true,
|
|
77
|
+
options: [
|
|
78
|
+
{ value: 'eq', label: 'Equals' },
|
|
79
|
+
{ value: 'ne', label: 'Not Equals' },
|
|
80
|
+
{ value: 'gt', label: 'Greater Than' },
|
|
81
|
+
{ value: 'ge', label: 'Greater or Equal' },
|
|
82
|
+
{ value: 'lt', label: 'Less Than' },
|
|
83
|
+
{ value: 'le', label: 'Less or Equal' },
|
|
84
|
+
{ value: 'contains', label: 'Contains' },
|
|
85
|
+
{ value: 'startswith', label: 'Starts With' },
|
|
86
|
+
{ value: 'endswith', label: 'Ends With' }
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
key: 'value',
|
|
92
|
+
type: 'input',
|
|
93
|
+
props: {
|
|
94
|
+
label: 'Value',
|
|
95
|
+
required: true
|
|
96
|
+
},
|
|
97
|
+
expressions: {
|
|
98
|
+
'props.type': (field) => {
|
|
99
|
+
const model = field.model;
|
|
100
|
+
if (!model?.field)
|
|
101
|
+
return 'string';
|
|
102
|
+
const selectedField = this.entityFields.find(f => f.value === model.field);
|
|
103
|
+
return selectedField?.type || 'string';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
key: 'orderBy',
|
|
115
|
+
type: 'repeat',
|
|
116
|
+
props: {
|
|
117
|
+
addText: 'Add Order By'
|
|
118
|
+
},
|
|
119
|
+
fieldArray: {
|
|
120
|
+
fieldGroup: [
|
|
121
|
+
{
|
|
122
|
+
key: 'field',
|
|
123
|
+
type: 'select',
|
|
124
|
+
props: {
|
|
125
|
+
label: 'Field',
|
|
126
|
+
required: true,
|
|
127
|
+
options: []
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
key: 'direction',
|
|
132
|
+
type: 'select',
|
|
133
|
+
props: {
|
|
134
|
+
label: 'Direction',
|
|
135
|
+
required: true,
|
|
136
|
+
options: [
|
|
137
|
+
{ value: 'asc', label: 'Ascending' },
|
|
138
|
+
{ value: 'desc', label: 'Descending' }
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
key: 'groupBy',
|
|
147
|
+
type: 'repeat',
|
|
148
|
+
props: {
|
|
149
|
+
addText: 'Add Group By'
|
|
150
|
+
},
|
|
151
|
+
fieldArray: {
|
|
152
|
+
fieldGroup: [
|
|
153
|
+
{
|
|
154
|
+
key: 'field',
|
|
155
|
+
type: 'select',
|
|
156
|
+
props: {
|
|
157
|
+
label: 'Field',
|
|
158
|
+
required: true,
|
|
159
|
+
options: []
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
key: 'top',
|
|
167
|
+
type: 'input',
|
|
168
|
+
props: {
|
|
169
|
+
label: 'Top',
|
|
170
|
+
type: 'number',
|
|
171
|
+
min: 1
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
key: 'skip',
|
|
176
|
+
type: 'input',
|
|
177
|
+
props: {
|
|
178
|
+
label: 'Skip',
|
|
179
|
+
type: 'number',
|
|
180
|
+
min: 0
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
];
|
|
184
|
+
constructor() { }
|
|
185
|
+
updateFieldOptions() {
|
|
186
|
+
const fieldOptions = this.entityFields.map(f => ({ value: f.value, label: f.label }));
|
|
187
|
+
// Update conditions field options in all groups
|
|
188
|
+
const conditionGroupsField = this.fields.find(f => f.key === 'conditionGroups');
|
|
189
|
+
if (conditionGroupsField && conditionGroupsField.fieldArray?.fieldGroup) {
|
|
190
|
+
const conditionsField = conditionGroupsField.fieldArray.fieldGroup.find(f => f.key === 'conditions');
|
|
191
|
+
if (conditionsField && conditionsField.fieldArray?.fieldGroup) {
|
|
192
|
+
const fieldSelect = conditionsField.fieldArray.fieldGroup.find(f => f.key === 'field');
|
|
193
|
+
if (fieldSelect) {
|
|
194
|
+
fieldSelect.props.options = fieldOptions;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Update orderBy field options
|
|
199
|
+
const orderByField = this.fields.find(f => f.key === 'orderBy');
|
|
200
|
+
if (orderByField && orderByField.fieldArray?.fieldGroup) {
|
|
201
|
+
const fieldSelect = orderByField.fieldArray.fieldGroup.find(f => f.key === 'field');
|
|
202
|
+
if (fieldSelect) {
|
|
203
|
+
fieldSelect.props.options = fieldOptions;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Update groupBy field options
|
|
207
|
+
const groupByField = this.fields.find(f => f.key === 'groupBy');
|
|
208
|
+
if (groupByField && groupByField.fieldArray?.fieldGroup) {
|
|
209
|
+
const fieldSelect = groupByField.fieldArray.fieldGroup.find(f => f.key === 'field');
|
|
210
|
+
if (fieldSelect) {
|
|
211
|
+
fieldSelect.props.options = fieldOptions;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
buildQuery() {
|
|
216
|
+
let queryParts = [];
|
|
217
|
+
// Handle condition groups
|
|
218
|
+
if (this.model.conditionGroups?.length > 0) {
|
|
219
|
+
const groupFilters = this.model.conditionGroups
|
|
220
|
+
.filter((group) => group.conditions?.length > 0)
|
|
221
|
+
.map((group) => {
|
|
222
|
+
const conditionParts = group.conditions
|
|
223
|
+
.filter((cond) => cond.field && cond.operator && cond.value !== undefined && cond.value !== null)
|
|
224
|
+
.map((cond) => {
|
|
225
|
+
const field = this.entityFields.find(f => f.value === cond.field);
|
|
226
|
+
let value = cond.value;
|
|
227
|
+
if (field?.type === 'string') {
|
|
228
|
+
value = `'${String(value).replace(/'/g, "''")}'`; // Escape single quotes
|
|
229
|
+
}
|
|
230
|
+
else if (field?.type === 'date' && value) {
|
|
231
|
+
value = new Date(value).toISOString();
|
|
232
|
+
}
|
|
233
|
+
else if (field?.type === 'boolean') {
|
|
234
|
+
value = value ? 'true' : 'false';
|
|
235
|
+
}
|
|
236
|
+
return `${cond.field} ${cond.operator} ${value}`;
|
|
237
|
+
});
|
|
238
|
+
if (conditionParts.length > 0) {
|
|
239
|
+
return conditionParts.length > 1
|
|
240
|
+
? `(${conditionParts.join(` ${group.operator} `)})`
|
|
241
|
+
: conditionParts[0];
|
|
242
|
+
}
|
|
243
|
+
return null;
|
|
244
|
+
})
|
|
245
|
+
.filter(Boolean);
|
|
246
|
+
if (groupFilters.length > 0) {
|
|
247
|
+
queryParts.push(`$filter=${groupFilters.join(' and ')}`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Handle order by
|
|
251
|
+
if (this.model.orderBy?.length > 0) {
|
|
252
|
+
const orderParts = this.model.orderBy
|
|
253
|
+
.filter((order) => order.field && order.direction)
|
|
254
|
+
.map((order) => `${order.field} ${order.direction}`);
|
|
255
|
+
if (orderParts.length > 0) {
|
|
256
|
+
queryParts.push(`$orderby=${orderParts.join(', ')}`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// Handle group by
|
|
260
|
+
if (this.model.groupBy?.length > 0) {
|
|
261
|
+
const groupParts = this.model.groupBy
|
|
262
|
+
.filter((group) => group.field)
|
|
263
|
+
.map((group) => group.field);
|
|
264
|
+
if (groupParts.length > 0) {
|
|
265
|
+
queryParts.push(`$groupby=${groupParts.join(',')}`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// Handle top
|
|
269
|
+
if (this.model.top) {
|
|
270
|
+
queryParts.push(`$top=${this.model.top}`);
|
|
271
|
+
}
|
|
272
|
+
// Handle skip
|
|
273
|
+
if (this.model.skip) {
|
|
274
|
+
queryParts.push(`$skip=${this.model.skip}`);
|
|
275
|
+
}
|
|
276
|
+
const query = queryParts.join('&');
|
|
277
|
+
this.queryChange.emit(query);
|
|
278
|
+
return query;
|
|
279
|
+
}
|
|
280
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ODataQueryBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
281
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.4", type: ODataQueryBuilderComponent, isStandalone: true, selector: "app-odata-query-builder", inputs: { entityFields: "entityFields" }, outputs: { queryChange: "queryChange" }, ngImport: i0, template: "<div class=\"p-4 bg-white rounded-lg shadow-md\">\r\n <h2 class=\"text-xl font-semibold mb-4 text-gray-800\">OData Query Builder</h2>\r\n\r\n <formly-form\r\n [form]=\"form\"\r\n [model]=\"model\"\r\n [fields]=\"fields\"\r\n class=\"space-y-4\"\r\n ></formly-form>\r\n\r\n <div class=\"mt-6 flex justify-end space-x-3\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Reset\"\r\n icon=\"pi pi-refresh\"\r\n class=\"p-button-outlined\"\r\n (click)=\"form.reset()\"\r\n ></button>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Build Query\"\r\n icon=\"pi pi-cog\"\r\n (click)=\"buildQuery()\"\r\n ></button>\r\n </div>\r\n\r\n <div *ngIf=\"form.valid && form.dirty\" class=\"mt-6 p-4 bg-gray-50 rounded\">\r\n <h3 class=\"font-medium text-gray-700 mb-2\">Generated OData Query:</h3>\r\n <pre class=\"p-3 bg-gray-100 rounded text-sm overflow-x-auto\">{{ buildQuery() }}</pre>\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }] });
|
|
282
|
+
}
|
|
283
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: ODataQueryBuilderComponent, decorators: [{
|
|
284
|
+
type: Component,
|
|
285
|
+
args: [{ selector: 'app-odata-query-builder', imports: [CommonModule, FormlyForm], template: "<div class=\"p-4 bg-white rounded-lg shadow-md\">\r\n <h2 class=\"text-xl font-semibold mb-4 text-gray-800\">OData Query Builder</h2>\r\n\r\n <formly-form\r\n [form]=\"form\"\r\n [model]=\"model\"\r\n [fields]=\"fields\"\r\n class=\"space-y-4\"\r\n ></formly-form>\r\n\r\n <div class=\"mt-6 flex justify-end space-x-3\">\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Reset\"\r\n icon=\"pi pi-refresh\"\r\n class=\"p-button-outlined\"\r\n (click)=\"form.reset()\"\r\n ></button>\r\n\r\n <button\r\n pButton\r\n type=\"button\"\r\n label=\"Build Query\"\r\n icon=\"pi pi-cog\"\r\n (click)=\"buildQuery()\"\r\n ></button>\r\n </div>\r\n\r\n <div *ngIf=\"form.valid && form.dirty\" class=\"mt-6 p-4 bg-gray-50 rounded\">\r\n <h3 class=\"font-medium text-gray-700 mb-2\">Generated OData Query:</h3>\r\n <pre class=\"p-3 bg-gray-100 rounded text-sm overflow-x-auto\">{{ buildQuery() }}</pre>\r\n </div>\r\n</div>\r\n" }]
|
|
286
|
+
}], ctorParameters: () => [], propDecorators: { entityFields: [{
|
|
287
|
+
type: Input
|
|
288
|
+
}], queryChange: [{
|
|
289
|
+
type: Output
|
|
290
|
+
}] } });
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Generated bundle index. Do not edit.
|
|
294
|
+
*/
|
|
295
|
+
|
|
296
|
+
export { ODataQueryBuilderComponent };
|
|
297
|
+
//# sourceMappingURL=elite.framework-ng.core-src-lib-components-odata-query-builder.mjs.map
|