@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.
Files changed (246) hide show
  1. package/README.md +3 -0
  2. package/attachments/README.md +3 -0
  3. package/base-crud/README.md +3 -0
  4. package/breadcrumb/README.md +3 -0
  5. package/checkbox/README.md +3 -0
  6. package/collapsible/README.md +3 -0
  7. package/color-picker/README.md +3 -0
  8. package/column-settings-popover/README.md +3 -0
  9. package/custom-switch/README.md +3 -0
  10. package/datepicker/README.md +3 -0
  11. package/deactivation-reason/README.md +3 -0
  12. package/excel-import/README.md +3 -0
  13. package/fesm2022/es.framework-ng.ui.core-attachments.mjs +217 -0
  14. package/fesm2022/es.framework-ng.ui.core-attachments.mjs.map +1 -0
  15. package/fesm2022/es.framework-ng.ui.core-base-crud.mjs +370 -0
  16. package/fesm2022/es.framework-ng.ui.core-base-crud.mjs.map +1 -0
  17. package/fesm2022/es.framework-ng.ui.core-breadcrumb.mjs +145 -0
  18. package/fesm2022/es.framework-ng.ui.core-breadcrumb.mjs.map +1 -0
  19. package/fesm2022/es.framework-ng.ui.core-checkbox.mjs +131 -0
  20. package/fesm2022/es.framework-ng.ui.core-checkbox.mjs.map +1 -0
  21. package/fesm2022/es.framework-ng.ui.core-collapsible.mjs +90 -0
  22. package/fesm2022/es.framework-ng.ui.core-collapsible.mjs.map +1 -0
  23. package/fesm2022/es.framework-ng.ui.core-color-picker.mjs +87 -0
  24. package/fesm2022/es.framework-ng.ui.core-color-picker.mjs.map +1 -0
  25. package/fesm2022/es.framework-ng.ui.core-column-settings-popover.mjs +183 -0
  26. package/fesm2022/es.framework-ng.ui.core-column-settings-popover.mjs.map +1 -0
  27. package/fesm2022/es.framework-ng.ui.core-custom-switch.mjs +119 -0
  28. package/fesm2022/es.framework-ng.ui.core-custom-switch.mjs.map +1 -0
  29. package/fesm2022/es.framework-ng.ui.core-datepicker.mjs +519 -0
  30. package/fesm2022/es.framework-ng.ui.core-datepicker.mjs.map +1 -0
  31. package/fesm2022/es.framework-ng.ui.core-deactivation-reason.mjs +144 -0
  32. package/fesm2022/es.framework-ng.ui.core-deactivation-reason.mjs.map +1 -0
  33. package/fesm2022/es.framework-ng.ui.core-excel-import.mjs +566 -0
  34. package/fesm2022/es.framework-ng.ui.core-excel-import.mjs.map +1 -0
  35. package/fesm2022/es.framework-ng.ui.core-filter-templates.mjs +386 -0
  36. package/fesm2022/es.framework-ng.ui.core-filter-templates.mjs.map +1 -0
  37. package/fesm2022/es.framework-ng.ui.core-form-button.mjs +62 -0
  38. package/fesm2022/es.framework-ng.ui.core-form-button.mjs.map +1 -0
  39. package/fesm2022/es.framework-ng.ui.core-form-field.mjs +155 -0
  40. package/fesm2022/es.framework-ng.ui.core-form-field.mjs.map +1 -0
  41. package/fesm2022/es.framework-ng.ui.core-form-template.mjs +37 -0
  42. package/fesm2022/es.framework-ng.ui.core-form-template.mjs.map +1 -0
  43. package/fesm2022/es.framework-ng.ui.core-formly-avatar-image.mjs +132 -0
  44. package/fesm2022/es.framework-ng.ui.core-formly-avatar-image.mjs.map +1 -0
  45. package/fesm2022/es.framework-ng.ui.core-formly-avatar-label.mjs +89 -0
  46. package/fesm2022/es.framework-ng.ui.core-formly-avatar-label.mjs.map +1 -0
  47. package/fesm2022/es.framework-ng.ui.core-formly-button-selector.mjs +195 -0
  48. package/fesm2022/es.framework-ng.ui.core-formly-button-selector.mjs.map +1 -0
  49. package/fesm2022/es.framework-ng.ui.core-formly-button.mjs +73 -0
  50. package/fesm2022/es.framework-ng.ui.core-formly-button.mjs.map +1 -0
  51. package/fesm2022/es.framework-ng.ui.core-formly-presets.mjs +201 -0
  52. package/fesm2022/es.framework-ng.ui.core-formly-presets.mjs.map +1 -0
  53. package/fesm2022/es.framework-ng.ui.core-formly-prime-icon-picker.mjs +542 -0
  54. package/fesm2022/es.framework-ng.ui.core-formly-prime-icon-picker.mjs.map +1 -0
  55. package/fesm2022/es.framework-ng.ui.core-formly-split-button.mjs +62 -0
  56. package/fesm2022/es.framework-ng.ui.core-formly-split-button.mjs.map +1 -0
  57. package/fesm2022/es.framework-ng.ui.core-formly-ui-all.mjs +422 -0
  58. package/fesm2022/es.framework-ng.ui.core-formly-ui-all.mjs.map +1 -0
  59. package/fesm2022/es.framework-ng.ui.core-formly-ui.mjs +48 -0
  60. package/fesm2022/es.framework-ng.ui.core-formly-ui.mjs.map +1 -0
  61. package/fesm2022/es.framework-ng.ui.core-formly-username-with-domain.mjs +85 -0
  62. package/fesm2022/es.framework-ng.ui.core-formly-username-with-domain.mjs.map +1 -0
  63. package/fesm2022/es.framework-ng.ui.core-generic-assets.mjs +22 -0
  64. package/fesm2022/es.framework-ng.ui.core-generic-assets.mjs.map +1 -0
  65. package/fesm2022/es.framework-ng.ui.core-generic-autocomplete.mjs +173 -0
  66. package/fesm2022/es.framework-ng.ui.core-generic-autocomplete.mjs.map +1 -0
  67. package/fesm2022/es.framework-ng.ui.core-generic-button.mjs +150 -0
  68. package/fesm2022/es.framework-ng.ui.core-generic-button.mjs.map +1 -0
  69. package/fesm2022/es.framework-ng.ui.core-generic-card.mjs +218 -0
  70. package/fesm2022/es.framework-ng.ui.core-generic-card.mjs.map +1 -0
  71. package/fesm2022/es.framework-ng.ui.core-generic-crud-table.mjs +929 -0
  72. package/fesm2022/es.framework-ng.ui.core-generic-crud-table.mjs.map +1 -0
  73. package/fesm2022/es.framework-ng.ui.core-generic-dialog.mjs +321 -0
  74. package/fesm2022/es.framework-ng.ui.core-generic-dialog.mjs.map +1 -0
  75. package/fesm2022/es.framework-ng.ui.core-generic-errormessage.mjs +35 -0
  76. package/fesm2022/es.framework-ng.ui.core-generic-errormessage.mjs.map +1 -0
  77. package/fesm2022/es.framework-ng.ui.core-generic-formly-fields.mjs +63 -0
  78. package/fesm2022/es.framework-ng.ui.core-generic-formly-fields.mjs.map +1 -0
  79. package/fesm2022/es.framework-ng.ui.core-generic-loadingspinner.mjs +34 -0
  80. package/fesm2022/es.framework-ng.ui.core-generic-loadingspinner.mjs.map +1 -0
  81. package/fesm2022/es.framework-ng.ui.core-generic-report-tabs.mjs +196 -0
  82. package/fesm2022/es.framework-ng.ui.core-generic-report-tabs.mjs.map +1 -0
  83. package/fesm2022/es.framework-ng.ui.core-generic-report.mjs +556 -0
  84. package/fesm2022/es.framework-ng.ui.core-generic-report.mjs.map +1 -0
  85. package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs +2995 -0
  86. package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs.map +1 -0
  87. package/fesm2022/es.framework-ng.ui.core-generic-search.mjs +103 -0
  88. package/fesm2022/es.framework-ng.ui.core-generic-search.mjs.map +1 -0
  89. package/fesm2022/es.framework-ng.ui.core-generic-selector.mjs +684 -0
  90. package/fesm2022/es.framework-ng.ui.core-generic-selector.mjs.map +1 -0
  91. package/fesm2022/es.framework-ng.ui.core-generic-table.mjs +388 -0
  92. package/fesm2022/es.framework-ng.ui.core-generic-table.mjs.map +1 -0
  93. package/fesm2022/es.framework-ng.ui.core-generic-view.mjs +465 -0
  94. package/fesm2022/es.framework-ng.ui.core-generic-view.mjs.map +1 -0
  95. package/fesm2022/es.framework-ng.ui.core-header-wrapper.mjs +31 -0
  96. package/fesm2022/es.framework-ng.ui.core-header-wrapper.mjs.map +1 -0
  97. package/fesm2022/es.framework-ng.ui.core-icon-picker.mjs +205 -0
  98. package/fesm2022/es.framework-ng.ui.core-icon-picker.mjs.map +1 -0
  99. package/fesm2022/es.framework-ng.ui.core-input-switch.mjs +102 -0
  100. package/fesm2022/es.framework-ng.ui.core-input-switch.mjs.map +1 -0
  101. package/fesm2022/es.framework-ng.ui.core-input-with-icon.mjs +67 -0
  102. package/fesm2022/es.framework-ng.ui.core-input-with-icon.mjs.map +1 -0
  103. package/fesm2022/es.framework-ng.ui.core-input.mjs +250 -0
  104. package/fesm2022/es.framework-ng.ui.core-input.mjs.map +1 -0
  105. package/fesm2022/es.framework-ng.ui.core-label-type.mjs +184 -0
  106. package/fesm2022/es.framework-ng.ui.core-label-type.mjs.map +1 -0
  107. package/fesm2022/es.framework-ng.ui.core-loading-skeletons.mjs +66 -0
  108. package/fesm2022/es.framework-ng.ui.core-loading-skeletons.mjs.map +1 -0
  109. package/fesm2022/es.framework-ng.ui.core-odata-query-builder.mjs +307 -0
  110. package/fesm2022/es.framework-ng.ui.core-odata-query-builder.mjs.map +1 -0
  111. package/fesm2022/es.framework-ng.ui.core-query-type.mjs +162 -0
  112. package/fesm2022/es.framework-ng.ui.core-query-type.mjs.map +1 -0
  113. package/fesm2022/es.framework-ng.ui.core-radio.mjs +120 -0
  114. package/fesm2022/es.framework-ng.ui.core-radio.mjs.map +1 -0
  115. package/fesm2022/es.framework-ng.ui.core-repeat.mjs +290 -0
  116. package/fesm2022/es.framework-ng.ui.core-repeat.mjs.map +1 -0
  117. package/fesm2022/es.framework-ng.ui.core-select.mjs +179 -0
  118. package/fesm2022/es.framework-ng.ui.core-select.mjs.map +1 -0
  119. package/fesm2022/es.framework-ng.ui.core-sidebar-cards.mjs +52 -0
  120. package/fesm2022/es.framework-ng.ui.core-sidebar-cards.mjs.map +1 -0
  121. package/fesm2022/es.framework-ng.ui.core-sidebar-toggles.mjs +53 -0
  122. package/fesm2022/es.framework-ng.ui.core-sidebar-toggles.mjs.map +1 -0
  123. package/fesm2022/es.framework-ng.ui.core-tabs.mjs +57 -0
  124. package/fesm2022/es.framework-ng.ui.core-tabs.mjs.map +1 -0
  125. package/fesm2022/es.framework-ng.ui.core-tag-type.mjs +209 -0
  126. package/fesm2022/es.framework-ng.ui.core-tag-type.mjs.map +1 -0
  127. package/fesm2022/es.framework-ng.ui.core-text-editor.mjs +58 -0
  128. package/fesm2022/es.framework-ng.ui.core-text-editor.mjs.map +1 -0
  129. package/fesm2022/es.framework-ng.ui.core-textarea.mjs +93 -0
  130. package/fesm2022/es.framework-ng.ui.core-textarea.mjs.map +1 -0
  131. package/fesm2022/es.framework-ng.ui.core-wrappers.mjs +245 -0
  132. package/fesm2022/es.framework-ng.ui.core-wrappers.mjs.map +1 -0
  133. package/fesm2022/es.framework-ng.ui.core.mjs +20 -0
  134. package/fesm2022/es.framework-ng.ui.core.mjs.map +1 -0
  135. package/filter-templates/README.md +3 -0
  136. package/form-button/README.md +3 -0
  137. package/form-field/README.md +3 -0
  138. package/form-template/README.md +3 -0
  139. package/formly-avatar-image/README.md +3 -0
  140. package/formly-avatar-label/README.md +3 -0
  141. package/formly-button/README.md +3 -0
  142. package/formly-button-selector/README.md +3 -0
  143. package/formly-presets/README.md +3 -0
  144. package/formly-prime-icon-picker/README.md +3 -0
  145. package/formly-split-button/README.md +3 -0
  146. package/formly-ui/README.md +3 -0
  147. package/formly-ui-all/README.md +3 -0
  148. package/formly-username-with-domain/README.md +3 -0
  149. package/generic-assets/README.md +3 -0
  150. package/generic-autocomplete/README.md +3 -0
  151. package/generic-button/README.md +3 -0
  152. package/generic-card/README.md +3 -0
  153. package/generic-crud-table/README.md +3 -0
  154. package/generic-dialog/README.md +3 -0
  155. package/generic-errormessage/README.md +3 -0
  156. package/generic-formly-fields/README.md +3 -0
  157. package/generic-loadingspinner/README.md +3 -0
  158. package/generic-report/README.md +3 -0
  159. package/generic-report-tabs/README.md +0 -0
  160. package/generic-search/README.md +3 -0
  161. package/generic-search-advanced/README.md +3 -0
  162. package/generic-selector/README.md +3 -0
  163. package/generic-table/README.md +3 -0
  164. package/generic-view/README.md +3 -0
  165. package/header-wrapper/README.md +3 -0
  166. package/icon-picker/README.md +3 -0
  167. package/input/README.md +3 -0
  168. package/input-switch/README.md +3 -0
  169. package/input-with-icon/README.md +3 -0
  170. package/label-type/README.md +3 -0
  171. package/loading-skeletons/README.md +3 -0
  172. package/odata-query-builder/README.md +3 -0
  173. package/package.json +264 -0
  174. package/query-type/README.md +3 -0
  175. package/radio/README.md +3 -0
  176. package/repeat/README.md +3 -0
  177. package/select/README.md +3 -0
  178. package/sidebar-cards/README.md +3 -0
  179. package/sidebar-toggles/README.md +3 -0
  180. package/styles.css +2 -0
  181. package/tabs/README.md +3 -0
  182. package/tag-type/README.md +3 -0
  183. package/text-editor/README.md +3 -0
  184. package/textarea/README.md +3 -0
  185. package/types/es.framework-ng.ui.core-attachments.d.ts +38 -0
  186. package/types/es.framework-ng.ui.core-base-crud.d.ts +74 -0
  187. package/types/es.framework-ng.ui.core-breadcrumb.d.ts +17 -0
  188. package/types/es.framework-ng.ui.core-checkbox.d.ts +33 -0
  189. package/types/es.framework-ng.ui.core-collapsible.d.ts +18 -0
  190. package/types/es.framework-ng.ui.core-color-picker.d.ts +16 -0
  191. package/types/es.framework-ng.ui.core-column-settings-popover.d.ts +46 -0
  192. package/types/es.framework-ng.ui.core-custom-switch.d.ts +19 -0
  193. package/types/es.framework-ng.ui.core-datepicker.d.ts +23 -0
  194. package/types/es.framework-ng.ui.core-deactivation-reason.d.ts +32 -0
  195. package/types/es.framework-ng.ui.core-excel-import.d.ts +69 -0
  196. package/types/es.framework-ng.ui.core-filter-templates.d.ts +57 -0
  197. package/types/es.framework-ng.ui.core-form-button.d.ts +17 -0
  198. package/types/es.framework-ng.ui.core-form-field.d.ts +30 -0
  199. package/types/es.framework-ng.ui.core-form-template.d.ts +16 -0
  200. package/types/es.framework-ng.ui.core-formly-avatar-image.d.ts +18 -0
  201. package/types/es.framework-ng.ui.core-formly-avatar-label.d.ts +36 -0
  202. package/types/es.framework-ng.ui.core-formly-button-selector.d.ts +35 -0
  203. package/types/es.framework-ng.ui.core-formly-button.d.ts +20 -0
  204. package/types/es.framework-ng.ui.core-formly-presets.d.ts +37 -0
  205. package/types/es.framework-ng.ui.core-formly-prime-icon-picker.d.ts +45 -0
  206. package/types/es.framework-ng.ui.core-formly-split-button.d.ts +23 -0
  207. package/types/es.framework-ng.ui.core-formly-ui-all.d.ts +40 -0
  208. package/types/es.framework-ng.ui.core-formly-ui.d.ts +13 -0
  209. package/types/es.framework-ng.ui.core-formly-username-with-domain.d.ts +19 -0
  210. package/types/es.framework-ng.ui.core-generic-assets.d.ts +10 -0
  211. package/types/es.framework-ng.ui.core-generic-autocomplete.d.ts +41 -0
  212. package/types/es.framework-ng.ui.core-generic-button.d.ts +39 -0
  213. package/types/es.framework-ng.ui.core-generic-card.d.ts +93 -0
  214. package/types/es.framework-ng.ui.core-generic-crud-table.d.ts +293 -0
  215. package/types/es.framework-ng.ui.core-generic-dialog.d.ts +93 -0
  216. package/types/es.framework-ng.ui.core-generic-errormessage.d.ts +17 -0
  217. package/types/es.framework-ng.ui.core-generic-formly-fields.d.ts +26 -0
  218. package/types/es.framework-ng.ui.core-generic-loadingspinner.d.ts +16 -0
  219. package/types/es.framework-ng.ui.core-generic-report-tabs.d.ts +21 -0
  220. package/types/es.framework-ng.ui.core-generic-report.d.ts +121 -0
  221. package/types/es.framework-ng.ui.core-generic-search-advanced.d.ts +305 -0
  222. package/types/es.framework-ng.ui.core-generic-search.d.ts +36 -0
  223. package/types/es.framework-ng.ui.core-generic-selector.d.ts +99 -0
  224. package/types/es.framework-ng.ui.core-generic-table.d.ts +84 -0
  225. package/types/es.framework-ng.ui.core-generic-view.d.ts +97 -0
  226. package/types/es.framework-ng.ui.core-header-wrapper.d.ts +15 -0
  227. package/types/es.framework-ng.ui.core-icon-picker.d.ts +30 -0
  228. package/types/es.framework-ng.ui.core-input-switch.d.ts +16 -0
  229. package/types/es.framework-ng.ui.core-input-with-icon.d.ts +17 -0
  230. package/types/es.framework-ng.ui.core-input.d.ts +47 -0
  231. package/types/es.framework-ng.ui.core-label-type.d.ts +38 -0
  232. package/types/es.framework-ng.ui.core-loading-skeletons.d.ts +17 -0
  233. package/types/es.framework-ng.ui.core-odata-query-builder.d.ts +87 -0
  234. package/types/es.framework-ng.ui.core-query-type.d.ts +37 -0
  235. package/types/es.framework-ng.ui.core-radio.d.ts +38 -0
  236. package/types/es.framework-ng.ui.core-repeat.d.ts +31 -0
  237. package/types/es.framework-ng.ui.core-select.d.ts +42 -0
  238. package/types/es.framework-ng.ui.core-sidebar-cards.d.ts +25 -0
  239. package/types/es.framework-ng.ui.core-sidebar-toggles.d.ts +25 -0
  240. package/types/es.framework-ng.ui.core-tabs.d.ts +17 -0
  241. package/types/es.framework-ng.ui.core-tag-type.d.ts +34 -0
  242. package/types/es.framework-ng.ui.core-text-editor.d.ts +16 -0
  243. package/types/es.framework-ng.ui.core-textarea.d.ts +36 -0
  244. package/types/es.framework-ng.ui.core-wrappers.d.ts +36 -0
  245. package/types/es.framework-ng.ui.core.d.ts +8 -0
  246. package/wrappers/README.md +3 -0
@@ -0,0 +1,307 @@
1
+ import * as i0 from '@angular/core';
2
+ import { NgModule, EventEmitter, Output, Input, Component } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import { FormGroup } from '@angular/forms';
5
+ import { FormlyForm } from '@ngx-formly/core';
6
+
7
+ class OdataQueryBuilderModule {
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: OdataQueryBuilderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: OdataQueryBuilderModule, imports: [CommonModule] });
10
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: OdataQueryBuilderModule, imports: [CommonModule] });
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: OdataQueryBuilderModule, decorators: [{
13
+ type: NgModule,
14
+ args: [{
15
+ imports: [CommonModule],
16
+ }]
17
+ }] });
18
+
19
+ class ODataQueryBuilderComponent {
20
+ set entityFields(fields) {
21
+ this._entityFields = fields || [];
22
+ this.updateFieldOptions();
23
+ }
24
+ get entityFields() {
25
+ return this._entityFields;
26
+ }
27
+ _entityFields = [];
28
+ queryChange = new EventEmitter();
29
+ form = new FormGroup({});
30
+ model = {
31
+ conditionGroups: [
32
+ {
33
+ operator: 'and',
34
+ conditions: []
35
+ }
36
+ ],
37
+ orderBy: [],
38
+ groupBy: [],
39
+ top: null,
40
+ skip: null
41
+ };
42
+ fields = [
43
+ {
44
+ key: 'conditionGroups',
45
+ type: 'repeat',
46
+ props: {
47
+ addText: 'Add Condition Group',
48
+ required: true
49
+ },
50
+ fieldArray: {
51
+ fieldGroup: [
52
+ {
53
+ key: 'operator',
54
+ type: 'select',
55
+ props: {
56
+ label: 'Group Operator',
57
+ required: true,
58
+ options: [
59
+ { value: 'and', label: 'AND' },
60
+ { value: 'or', label: 'OR' }
61
+ ]
62
+ }
63
+ },
64
+ {
65
+ key: 'conditions',
66
+ type: 'repeat',
67
+ props: {
68
+ addText: 'Add Condition',
69
+ required: true
70
+ },
71
+ fieldArray: {
72
+ fieldGroup: [
73
+ {
74
+ key: 'field',
75
+ type: 'select',
76
+ props: {
77
+ label: 'Field',
78
+ required: true,
79
+ options: []
80
+ }
81
+ },
82
+ {
83
+ key: 'operator',
84
+ type: 'select',
85
+ props: {
86
+ label: 'Operator',
87
+ required: true,
88
+ options: [
89
+ { value: 'eq', label: 'Equals' },
90
+ { value: 'ne', label: 'Not Equals' },
91
+ { value: 'gt', label: 'Greater Than' },
92
+ { value: 'ge', label: 'Greater or Equal' },
93
+ { value: 'lt', label: 'Less Than' },
94
+ { value: 'le', label: 'Less or Equal' },
95
+ { value: 'contains', label: 'Contains' },
96
+ { value: 'startswith', label: 'Starts With' },
97
+ { value: 'endswith', label: 'Ends With' }
98
+ ]
99
+ }
100
+ },
101
+ {
102
+ key: 'value',
103
+ type: 'input',
104
+ props: {
105
+ label: 'Value',
106
+ required: true
107
+ },
108
+ expressions: {
109
+ 'props.type': (field) => {
110
+ const model = field.model;
111
+ if (!model?.field)
112
+ return 'string';
113
+ const selectedField = this.entityFields.find(f => f.value === model.field);
114
+ return selectedField?.type || 'string';
115
+ }
116
+ }
117
+ }
118
+ ]
119
+ }
120
+ }
121
+ ]
122
+ }
123
+ },
124
+ {
125
+ key: 'orderBy',
126
+ type: 'repeat',
127
+ props: {
128
+ addText: 'Add Order By'
129
+ },
130
+ fieldArray: {
131
+ fieldGroup: [
132
+ {
133
+ key: 'field',
134
+ type: 'select',
135
+ props: {
136
+ label: 'Field',
137
+ required: true,
138
+ options: []
139
+ }
140
+ },
141
+ {
142
+ key: 'direction',
143
+ type: 'select',
144
+ props: {
145
+ label: 'Direction',
146
+ required: true,
147
+ options: [
148
+ { value: 'asc', label: 'Ascending' },
149
+ { value: 'desc', label: 'Descending' }
150
+ ]
151
+ }
152
+ }
153
+ ]
154
+ }
155
+ },
156
+ {
157
+ key: 'groupBy',
158
+ type: 'repeat',
159
+ props: {
160
+ addText: 'Add Group By'
161
+ },
162
+ fieldArray: {
163
+ fieldGroup: [
164
+ {
165
+ key: 'field',
166
+ type: 'select',
167
+ props: {
168
+ label: 'Field',
169
+ required: true,
170
+ options: []
171
+ }
172
+ }
173
+ ]
174
+ }
175
+ },
176
+ {
177
+ key: 'top',
178
+ type: 'input',
179
+ props: {
180
+ label: 'Top',
181
+ type: 'number',
182
+ min: 1
183
+ }
184
+ },
185
+ {
186
+ key: 'skip',
187
+ type: 'input',
188
+ props: {
189
+ label: 'Skip',
190
+ type: 'number',
191
+ min: 0
192
+ }
193
+ }
194
+ ];
195
+ updateFieldOptions() {
196
+ const fieldOptions = this.entityFields.map(f => ({ value: f.value, label: f.label }));
197
+ // Update conditions field options in all groups
198
+ const conditionGroupsField = this.fields.find(f => f.key === 'conditionGroups');
199
+ if (conditionGroupsField && conditionGroupsField.fieldArray?.fieldGroup) {
200
+ const conditionsField = conditionGroupsField.fieldArray.fieldGroup.find(f => f.key === 'conditions');
201
+ if (conditionsField && conditionsField.fieldArray?.fieldGroup) {
202
+ const fieldSelect = conditionsField.fieldArray.fieldGroup.find(f => f.key === 'field');
203
+ if (fieldSelect) {
204
+ fieldSelect.props.options = fieldOptions;
205
+ }
206
+ }
207
+ }
208
+ // Update orderBy field options
209
+ const orderByField = this.fields.find(f => f.key === 'orderBy');
210
+ if (orderByField && orderByField.fieldArray?.fieldGroup) {
211
+ const fieldSelect = orderByField.fieldArray.fieldGroup.find(f => f.key === 'field');
212
+ if (fieldSelect) {
213
+ fieldSelect.props.options = fieldOptions;
214
+ }
215
+ }
216
+ // Update groupBy field options
217
+ const groupByField = this.fields.find(f => f.key === 'groupBy');
218
+ if (groupByField && groupByField.fieldArray?.fieldGroup) {
219
+ const fieldSelect = groupByField.fieldArray.fieldGroup.find(f => f.key === 'field');
220
+ if (fieldSelect) {
221
+ fieldSelect.props.options = fieldOptions;
222
+ }
223
+ }
224
+ }
225
+ buildQuery() {
226
+ const queryParts = [];
227
+ // Handle condition groups
228
+ if (this.model.conditionGroups?.length > 0) {
229
+ const groupFilters = this.model.conditionGroups
230
+ .filter((group) => group.conditions?.length > 0)
231
+ .map((group) => {
232
+ const conditionParts = group.conditions
233
+ .filter((cond) => cond.field && cond.operator && cond.value !== undefined && cond.value !== null)
234
+ .map((cond) => {
235
+ const field = this.entityFields.find(f => f.value === cond.field);
236
+ let value = cond.value;
237
+ if (field?.type === 'string') {
238
+ value = `'${String(value).replace(/'/g, "''")}'`; // Escape single quotes
239
+ }
240
+ else if (field?.type === 'date' && value) {
241
+ value = new Date(value).toISOString();
242
+ }
243
+ else if (field?.type === 'boolean') {
244
+ value = value ? 'true' : 'false';
245
+ }
246
+ return `${cond.field} ${cond.operator} ${value}`;
247
+ });
248
+ if (conditionParts.length > 0) {
249
+ return conditionParts.length > 1
250
+ ? `(${conditionParts.join(` ${group.operator} `)})`
251
+ : conditionParts[0];
252
+ }
253
+ return null;
254
+ })
255
+ .filter(Boolean);
256
+ if (groupFilters.length > 0) {
257
+ queryParts.push(`$filter=${groupFilters.join(' and ')}`);
258
+ }
259
+ }
260
+ // Handle order by
261
+ if (this.model.orderBy?.length > 0) {
262
+ const orderParts = this.model.orderBy
263
+ .filter((order) => order.field && order.direction)
264
+ .map((order) => `${order.field} ${order.direction}`);
265
+ if (orderParts.length > 0) {
266
+ queryParts.push(`$orderby=${orderParts.join(', ')}`);
267
+ }
268
+ }
269
+ // Handle group by
270
+ if (this.model.groupBy?.length > 0) {
271
+ const groupParts = this.model.groupBy
272
+ .filter((group) => group.field)
273
+ .map((group) => group.field);
274
+ if (groupParts.length > 0) {
275
+ queryParts.push(`$groupby=${groupParts.join(',')}`);
276
+ }
277
+ }
278
+ // Handle top
279
+ if (this.model.top) {
280
+ queryParts.push(`$top=${this.model.top}`);
281
+ }
282
+ // Handle skip
283
+ if (this.model.skip) {
284
+ queryParts.push(`$skip=${this.model.skip}`);
285
+ }
286
+ const query = queryParts.join('&');
287
+ this.queryChange.emit(query);
288
+ return query;
289
+ }
290
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ODataQueryBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
291
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", 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\">\n <h2 class=\"text-xl font-semibold mb-4 text-gray-800\">OData Query Builder</h2>\n\n <formly-form\n [form]=\"form\"\n [model]=\"model\"\n [fields]=\"fields\"\n class=\"space-y-4\"\n ></formly-form>\n\n <div class=\"mt-6 flex justify-end space-x-3\">\n <button\n pButton\n type=\"button\"\n label=\"Reset\"\n icon=\"pi pi-refresh\"\n class=\"p-button-outlined\"\n (click)=\"form.reset()\"\n ></button>\n\n <button\n pButton\n type=\"button\"\n label=\"Build Query\"\n icon=\"pi pi-cog\"\n (click)=\"buildQuery()\"\n ></button>\n </div>\n\n @if (form.valid && form.dirty) {\n <div class=\"mt-6 p-4 bg-gray-50 rounded\">\n <h3 class=\"font-medium text-gray-700 mb-2\">Generated OData Query:</h3>\n <pre class=\"p-3 bg-gray-100 rounded text-sm overflow-x-auto\">{{ buildQuery() }}</pre>\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }] });
292
+ }
293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ODataQueryBuilderComponent, decorators: [{
294
+ type: Component,
295
+ args: [{ selector: 'app-odata-query-builder', imports: [FormlyForm], template: "<div class=\"p-4 bg-white rounded-lg shadow-md\">\n <h2 class=\"text-xl font-semibold mb-4 text-gray-800\">OData Query Builder</h2>\n\n <formly-form\n [form]=\"form\"\n [model]=\"model\"\n [fields]=\"fields\"\n class=\"space-y-4\"\n ></formly-form>\n\n <div class=\"mt-6 flex justify-end space-x-3\">\n <button\n pButton\n type=\"button\"\n label=\"Reset\"\n icon=\"pi pi-refresh\"\n class=\"p-button-outlined\"\n (click)=\"form.reset()\"\n ></button>\n\n <button\n pButton\n type=\"button\"\n label=\"Build Query\"\n icon=\"pi pi-cog\"\n (click)=\"buildQuery()\"\n ></button>\n </div>\n\n @if (form.valid && form.dirty) {\n <div class=\"mt-6 p-4 bg-gray-50 rounded\">\n <h3 class=\"font-medium text-gray-700 mb-2\">Generated OData Query:</h3>\n <pre class=\"p-3 bg-gray-100 rounded text-sm overflow-x-auto\">{{ buildQuery() }}</pre>\n </div>\n }\n</div>\n" }]
296
+ }], propDecorators: { entityFields: [{
297
+ type: Input
298
+ }], queryChange: [{
299
+ type: Output
300
+ }] } });
301
+
302
+ /**
303
+ * Generated bundle index. Do not edit.
304
+ */
305
+
306
+ export { ODataQueryBuilderComponent, OdataQueryBuilderModule };
307
+ //# sourceMappingURL=es.framework-ng.ui.core-odata-query-builder.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es.framework-ng.ui.core-odata-query-builder.mjs","sources":["../../../../libs/ng.ui.core/odata-query-builder/src/lib/odata-query-builder-module.ts","../../../../libs/ng.ui.core/odata-query-builder/src/lib/odata-query-builder.component.ts","../../../../libs/ng.ui.core/odata-query-builder/src/lib/odata-query-builder.component.html","../../../../libs/ng.ui.core/odata-query-builder/src/es.framework-ng.ui.core-odata-query-builder.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class OdataQueryBuilderModule {}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FormlyFieldConfig, FormlyFieldProps, FormlyForm } from '@ngx-formly/core';\r\nimport { EntityField } from './odata-types';\r\n\r\n\r\ninterface ConditionGroup {\r\n operator: 'and' | 'or';\r\n conditions: Condition[];\r\n}\r\n\r\ninterface Condition {\r\n field: string;\r\n operator: string;\r\n value: any;\r\n}\r\n\r\ninterface OrderBy {\r\n field: string;\r\n direction: 'asc' | 'desc';\r\n}\r\n\r\ninterface GroupBy {\r\n field: string;\r\n}\r\n\r\ninterface QueryModel {\r\n conditionGroups: ConditionGroup[];\r\n orderBy: OrderBy[];\r\n groupBy: GroupBy[];\r\n top: number | null;\r\n skip: number | null;\r\n}\r\n\r\ninterface FieldSelectProps extends FormlyFieldProps {\r\n options: { value: string; label: string }[];\r\n}\r\n\r\ninterface RepeatFieldProps extends FormlyFieldProps {\r\n addText: string;\r\n}\r\n\r\ninterface FieldArrayConfig extends FormlyFieldConfig {\r\n fieldGroup: FormlyFieldConfig[];\r\n}\r\n\r\n@Component({\r\n selector: 'app-odata-query-builder',\r\n templateUrl: './odata-query-builder.component.html',\r\n styleUrls: ['./odata-query-builder.component.css'],\r\n imports: [FormlyForm]\r\n})\r\nexport class ODataQueryBuilderComponent {\r\n @Input() set entityFields(fields: EntityField[]) {\r\n this._entityFields = fields || [];\r\n this.updateFieldOptions();\r\n }\r\n get entityFields(): EntityField[] {\r\n return this._entityFields;\r\n }\r\n private _entityFields: EntityField[] = [];\r\n\r\n @Output() queryChange = new EventEmitter<string>();\r\n\r\n form = new FormGroup({});\r\n model: QueryModel = {\r\n conditionGroups: [\r\n {\r\n operator: 'and',\r\n conditions: []\r\n }\r\n ],\r\n orderBy: [],\r\n groupBy: [],\r\n top: null,\r\n skip: null\r\n };\r\n\r\n fields: FormlyFieldConfig[] = [\r\n {\r\n key: 'conditionGroups',\r\n type: 'repeat',\r\n props: {\r\n addText: 'Add Condition Group',\r\n required: true\r\n } as RepeatFieldProps,\r\n fieldArray: {\r\n fieldGroup: [\r\n {\r\n key: 'operator',\r\n type: 'select',\r\n props: {\r\n label: 'Group Operator',\r\n required: true,\r\n options: [\r\n { value: 'and', label: 'AND' },\r\n { value: 'or', label: 'OR' }\r\n ]\r\n } as FieldSelectProps\r\n },\r\n {\r\n key: 'conditions',\r\n type: 'repeat',\r\n props: {\r\n addText: 'Add Condition',\r\n required: true\r\n } as RepeatFieldProps,\r\n fieldArray: {\r\n fieldGroup: [\r\n {\r\n key: 'field',\r\n type: 'select',\r\n props: {\r\n label: 'Field',\r\n required: true,\r\n options: []\r\n } as FieldSelectProps\r\n },\r\n {\r\n key: 'operator',\r\n type: 'select',\r\n props: {\r\n label: 'Operator',\r\n required: true,\r\n options: [\r\n { value: 'eq', label: 'Equals' },\r\n { value: 'ne', label: 'Not Equals' },\r\n { value: 'gt', label: 'Greater Than' },\r\n { value: 'ge', label: 'Greater or Equal' },\r\n { value: 'lt', label: 'Less Than' },\r\n { value: 'le', label: 'Less or Equal' },\r\n { value: 'contains', label: 'Contains' },\r\n { value: 'startswith', label: 'Starts With' },\r\n { value: 'endswith', label: 'Ends With' }\r\n ]\r\n } as FieldSelectProps\r\n },\r\n {\r\n key: 'value',\r\n type: 'input',\r\n props: {\r\n label: 'Value',\r\n required: true\r\n },\r\n expressions: {\r\n 'props.type': (field: FormlyFieldConfig) => {\r\n const model = field.model as Condition;\r\n if (!model?.field) return 'string';\r\n const selectedField = this.entityFields.find(f => f.value === model.field);\r\n return selectedField?.type || 'string';\r\n }\r\n }\r\n }\r\n ]\r\n } as FieldArrayConfig\r\n }\r\n ]\r\n } as FieldArrayConfig\r\n },\r\n {\r\n key: 'orderBy',\r\n type: 'repeat',\r\n props: {\r\n addText: 'Add Order By'\r\n } as RepeatFieldProps,\r\n fieldArray: {\r\n fieldGroup: [\r\n {\r\n key: 'field',\r\n type: 'select',\r\n props: {\r\n label: 'Field',\r\n required: true,\r\n options: []\r\n } as FieldSelectProps\r\n },\r\n {\r\n key: 'direction',\r\n type: 'select',\r\n props: {\r\n label: 'Direction',\r\n required: true,\r\n options: [\r\n { value: 'asc', label: 'Ascending' },\r\n { value: 'desc', label: 'Descending' }\r\n ]\r\n } as FieldSelectProps\r\n }\r\n ]\r\n } as FieldArrayConfig\r\n },\r\n {\r\n key: 'groupBy',\r\n type: 'repeat',\r\n props: {\r\n addText: 'Add Group By'\r\n } as RepeatFieldProps,\r\n fieldArray: {\r\n fieldGroup: [\r\n {\r\n key: 'field',\r\n type: 'select',\r\n props: {\r\n label: 'Field',\r\n required: true,\r\n options: []\r\n } as FieldSelectProps\r\n }\r\n ]\r\n } as FieldArrayConfig\r\n },\r\n {\r\n key: 'top',\r\n type: 'input',\r\n props: {\r\n label: 'Top',\r\n type: 'number',\r\n min: 1\r\n }\r\n },\r\n {\r\n key: 'skip',\r\n type: 'input',\r\n props: {\r\n label: 'Skip',\r\n type: 'number',\r\n min: 0\r\n }\r\n }\r\n ];\r\n\r\n\r\n\r\n private updateFieldOptions(): void {\r\n const fieldOptions = this.entityFields.map(f => ({ value: f.value, label: f.label }));\r\n\r\n // Update conditions field options in all groups\r\n const conditionGroupsField = this.fields.find(f => f.key === 'conditionGroups');\r\n if (conditionGroupsField && (conditionGroupsField.fieldArray as FieldArrayConfig)?.fieldGroup) {\r\n const conditionsField = (conditionGroupsField.fieldArray as FieldArrayConfig).fieldGroup.find(f => f.key === 'conditions');\r\n if (conditionsField && (conditionsField.fieldArray as FieldArrayConfig)?.fieldGroup) {\r\n const fieldSelect = (conditionsField.fieldArray as FieldArrayConfig).fieldGroup.find(f => f.key === 'field');\r\n if (fieldSelect) {\r\n (fieldSelect.props as FieldSelectProps).options = fieldOptions;\r\n }\r\n }\r\n }\r\n\r\n // Update orderBy field options\r\n const orderByField = this.fields.find(f => f.key === 'orderBy');\r\n if (orderByField && (orderByField.fieldArray as FieldArrayConfig)?.fieldGroup) {\r\n const fieldSelect = (orderByField.fieldArray as FieldArrayConfig).fieldGroup.find(f => f.key === 'field');\r\n if (fieldSelect) {\r\n (fieldSelect.props as FieldSelectProps).options = fieldOptions;\r\n }\r\n }\r\n\r\n // Update groupBy field options\r\n const groupByField = this.fields.find(f => f.key === 'groupBy');\r\n if (groupByField && (groupByField.fieldArray as FieldArrayConfig)?.fieldGroup) {\r\n const fieldSelect = (groupByField.fieldArray as FieldArrayConfig).fieldGroup.find(f => f.key === 'field');\r\n if (fieldSelect) {\r\n (fieldSelect.props as FieldSelectProps).options = fieldOptions;\r\n }\r\n }\r\n }\r\n\r\n buildQuery(): string {\r\n const queryParts = [];\r\n\r\n // Handle condition groups\r\n if (this.model.conditionGroups?.length > 0) {\r\n const groupFilters = this.model.conditionGroups\r\n .filter((group: ConditionGroup) => group.conditions?.length > 0)\r\n .map((group: ConditionGroup) => {\r\n const conditionParts = group.conditions\r\n .filter((cond: Condition) => cond.field && cond.operator && cond.value !== undefined && cond.value !== null)\r\n .map((cond: Condition) => {\r\n const field = this.entityFields.find(f => f.value === cond.field);\r\n let value = cond.value;\r\n\r\n if (field?.type === 'string') {\r\n value = `'${String(value).replace(/'/g, \"''\")}'`; // Escape single quotes\r\n } else if (field?.type === 'date' && value) {\r\n value = new Date(value).toISOString();\r\n } else if (field?.type === 'boolean') {\r\n value = value ? 'true' : 'false';\r\n }\r\n\r\n return `${cond.field} ${cond.operator} ${value}`;\r\n });\r\n\r\n if (conditionParts.length > 0) {\r\n return conditionParts.length > 1\r\n ? `(${conditionParts.join(` ${group.operator} `)})`\r\n : conditionParts[0];\r\n }\r\n return null;\r\n })\r\n .filter(Boolean);\r\n\r\n if (groupFilters.length > 0) {\r\n queryParts.push(`$filter=${groupFilters.join(' and ')}`);\r\n }\r\n }\r\n\r\n // Handle order by\r\n if (this.model.orderBy?.length > 0) {\r\n const orderParts = this.model.orderBy\r\n .filter((order: OrderBy) => order.field && order.direction)\r\n .map((order: OrderBy) => `${order.field} ${order.direction}`);\r\n\r\n if (orderParts.length > 0) {\r\n queryParts.push(`$orderby=${orderParts.join(', ')}`);\r\n }\r\n }\r\n\r\n // Handle group by\r\n if (this.model.groupBy?.length > 0) {\r\n const groupParts = this.model.groupBy\r\n .filter((group: GroupBy) => group.field)\r\n .map((group: GroupBy) => group.field);\r\n\r\n if (groupParts.length > 0) {\r\n queryParts.push(`$groupby=${groupParts.join(',')}`);\r\n }\r\n }\r\n\r\n // Handle top\r\n if (this.model.top) {\r\n queryParts.push(`$top=${this.model.top}`);\r\n }\r\n\r\n // Handle skip\r\n if (this.model.skip) {\r\n queryParts.push(`$skip=${this.model.skip}`);\r\n }\r\n\r\n const query = queryParts.join('&');\r\n this.queryChange.emit(query);\r\n return query;\r\n }\r\n}\r\n","<div class=\"p-4 bg-white rounded-lg shadow-md\">\n <h2 class=\"text-xl font-semibold mb-4 text-gray-800\">OData Query Builder</h2>\n\n <formly-form\n [form]=\"form\"\n [model]=\"model\"\n [fields]=\"fields\"\n class=\"space-y-4\"\n ></formly-form>\n\n <div class=\"mt-6 flex justify-end space-x-3\">\n <button\n pButton\n type=\"button\"\n label=\"Reset\"\n icon=\"pi pi-refresh\"\n class=\"p-button-outlined\"\n (click)=\"form.reset()\"\n ></button>\n\n <button\n pButton\n type=\"button\"\n label=\"Build Query\"\n icon=\"pi pi-cog\"\n (click)=\"buildQuery()\"\n ></button>\n </div>\n\n @if (form.valid && form.dirty) {\n <div class=\"mt-6 p-4 bg-gray-50 rounded\">\n <h3 class=\"font-medium text-gray-700 mb-2\">Generated OData Query:</h3>\n <pre class=\"p-3 bg-gray-100 rounded text-sm overflow-x-auto\">{{ buildQuery() }}</pre>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ import * as i0 from '@angular/core';
2
+ import { NgModule, Component } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import { FieldType, FormlyForm } from '@ngx-formly/core';
5
+ import { FormGroup, FormsModule } from '@angular/forms';
6
+ import { Subject, takeUntil } from 'rxjs';
7
+ import * as i1 from '@es.framework/ng.ui.core/generic-search-advanced';
8
+
9
+ class QueryTypeModule {
10
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: QueryTypeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: QueryTypeModule, imports: [CommonModule] });
12
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: QueryTypeModule, imports: [CommonModule] });
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: QueryTypeModule, decorators: [{
15
+ type: NgModule,
16
+ args: [{
17
+ imports: [CommonModule],
18
+ }]
19
+ }] });
20
+
21
+ class QueryTypeComponent extends FieldType {
22
+ queryBuilderService;
23
+ destroy$ = new Subject();
24
+ queryForm = new FormGroup({});
25
+ queryModel = {};
26
+ queryOptions = {};
27
+ enableQueryBuilder = true;
28
+ hasQueryBuilderError = false;
29
+ fields_ = [];
30
+ get filterFields() {
31
+ return this.props['filterFields'] || [];
32
+ }
33
+ constructor(queryBuilderService) {
34
+ super();
35
+ this.queryBuilderService = queryBuilderService;
36
+ }
37
+ ngOnInit() {
38
+ // Initialize based on current value
39
+ this.initQueryBuilder();
40
+ // Listen to form changes
41
+ this.formControl.valueChanges
42
+ .pipe(takeUntil(this.destroy$))
43
+ .subscribe(value => {
44
+ if (!this.enableQueryBuilder) {
45
+ this.tryParseJson(value);
46
+ }
47
+ });
48
+ }
49
+ initQueryBuilder() {
50
+ const currentValue = this.formControl.value;
51
+ // If we have value and it's JSON, try to parse it
52
+ if (currentValue) {
53
+ const parsed = this.tryParseJson(currentValue);
54
+ if (parsed && this.filterFields.length > 0) {
55
+ this.enableQueryBuilder = true;
56
+ this.queryModel = parsed;
57
+ }
58
+ }
59
+ this.buildQueryUIFields();
60
+ this.setupQueryFormListeners();
61
+ }
62
+ buildQueryUIFields() {
63
+ if (this.enableQueryBuilder && this.filterFields.length > 0) {
64
+ try {
65
+ this.fields_ = this.queryBuilderService.buildQueryUIFields(this.filterFields, true, true);
66
+ this.hasQueryBuilderError = false;
67
+ }
68
+ catch (error) {
69
+ console.error('Error building query UI fields:', error);
70
+ this.hasQueryBuilderError = true;
71
+ this.fields_ = [];
72
+ }
73
+ }
74
+ else {
75
+ this.fields_ = this.filterFields;
76
+ }
77
+ }
78
+ setupQueryFormListeners() {
79
+ this.queryForm.valueChanges
80
+ .pipe(takeUntil(this.destroy$))
81
+ .subscribe(() => {
82
+ this.onQueryBuilderChange();
83
+ });
84
+ }
85
+ onQueryBuilderChange() {
86
+ if (!this.enableQueryBuilder || this.hasQueryBuilderError)
87
+ return;
88
+ try {
89
+ const odataParams = this.queryBuilderService.buildODataFromQueryModel(this.queryModel, this.filterFields);
90
+ const queryString = this.queryBuilderService.toODataQueryString(odataParams);
91
+ // Update the main form control
92
+ if (queryString) {
93
+ this.formControl.setValue(queryString, { emitEvent: true });
94
+ }
95
+ }
96
+ catch (error) {
97
+ console.error('Error building query:', error);
98
+ this.hasQueryBuilderError = true;
99
+ }
100
+ }
101
+ toggleQueryBuilder() {
102
+ this.enableQueryBuilder = !this.enableQueryBuilder;
103
+ this.buildQueryUIFields();
104
+ if (this.enableQueryBuilder) {
105
+ // When switching to query builder, try to parse existing JSON
106
+ const currentValue = this.formControl.value;
107
+ if (currentValue) {
108
+ const parsed = this.tryParseJson(currentValue);
109
+ if (parsed) {
110
+ this.queryModel = parsed;
111
+ }
112
+ }
113
+ }
114
+ else {
115
+ // When switching back to JSON, ensure we have the latest value
116
+ this.onQueryBuilderChange();
117
+ }
118
+ }
119
+ tryParseJson(value) {
120
+ const params = this.queryBuilderService.parseODataQuery(value);
121
+ return this.queryBuilderService.queryParamsToFormModel(params);
122
+ }
123
+ ngOnDestroy() {
124
+ this.destroy$.next();
125
+ this.destroy$.complete();
126
+ }
127
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: QueryTypeComponent, deps: [{ token: i1.QueryBuilderService }], target: i0.ɵɵFactoryTarget.Component });
128
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: QueryTypeComponent, isStandalone: true, selector: "formly-query-type", usesInheritance: true, ngImport: i0, template: `
129
+ <formly-form
130
+ [form]="queryForm"
131
+ [fields]="fields_"
132
+ [model]="queryModel"
133
+ [options]="queryOptions">
134
+ </formly-form>
135
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: FormsModule }] });
136
+ }
137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: QueryTypeComponent, decorators: [{
138
+ type: Component,
139
+ args: [{
140
+ selector: 'formly-query-type',
141
+ imports: [
142
+ CommonModule,
143
+ FormlyForm,
144
+ FormsModule,
145
+ ],
146
+ template: `
147
+ <formly-form
148
+ [form]="queryForm"
149
+ [fields]="fields_"
150
+ [model]="queryModel"
151
+ [options]="queryOptions">
152
+ </formly-form>
153
+ `,
154
+ }]
155
+ }], ctorParameters: () => [{ type: i1.QueryBuilderService }] });
156
+
157
+ /**
158
+ * Generated bundle index. Do not edit.
159
+ */
160
+
161
+ export { QueryTypeComponent, QueryTypeModule };
162
+ //# sourceMappingURL=es.framework-ng.ui.core-query-type.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es.framework-ng.ui.core-query-type.mjs","sources":["../../../../libs/ng.ui.core/query-type/src/lib/query-type.module.ts","../../../../libs/ng.ui.core/query-type/src/lib/query.type.ts","../../../../libs/ng.ui.core/query-type/src/es.framework-ng.ui.core-query-type.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class QueryTypeModule {}\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { FieldType, FieldTypeConfig, FormlyFieldConfig, FormlyForm } from '@ngx-formly/core';\nimport { FormGroup, FormsModule } from '@angular/forms';\nimport { Subject, takeUntil } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { QueryBuilderService } from '@es.framework/ng.ui.core/generic-search-advanced';\n\n@Component({\n selector: 'formly-query-type',\n imports: [\n CommonModule,\n FormlyForm,\n FormsModule,\n ],\n template: `\n <formly-form\n [form]=\"queryForm\"\n [fields]=\"fields_\"\n [model]=\"queryModel\"\n [options]=\"queryOptions\">\n </formly-form>\n `,\n})\nexport class QueryTypeComponent extends FieldType<FieldTypeConfig> implements OnInit, OnDestroy {\n private destroy$ = new Subject<void>();\n\n queryForm = new FormGroup({});\n queryModel: any = {};\n queryOptions: any = {};\n\n enableQueryBuilder = true;\n hasQueryBuilderError = false;\n fields_: FormlyFieldConfig[] = [];\n\n get filterFields(): FormlyFieldConfig[] {\n return this.props['filterFields'] || [];\n }\n\n constructor(private queryBuilderService: QueryBuilderService) {\n super();\n }\n\n ngOnInit() {\n // Initialize based on current value\n this.initQueryBuilder();\n\n // Listen to form changes\n this.formControl.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(value => {\n if (!this.enableQueryBuilder) {\n this.tryParseJson(value);\n }\n });\n }\n\n private initQueryBuilder() {\n const currentValue = this.formControl.value;\n\n // If we have value and it's JSON, try to parse it\n if (currentValue) {\n const parsed = this.tryParseJson(currentValue);\n if (parsed && this.filterFields.length > 0) {\n this.enableQueryBuilder = true;\n this.queryModel = parsed;\n }\n }\n\n this.buildQueryUIFields();\n this.setupQueryFormListeners();\n }\n\n private buildQueryUIFields() {\n if (this.enableQueryBuilder && this.filterFields.length > 0) {\n try {\n this.fields_ = this.queryBuilderService.buildQueryUIFields(\n this.filterFields,\n true,\n true\n );\n\n this.hasQueryBuilderError = false;\n } catch (error) {\n console.error('Error building query UI fields:', error);\n this.hasQueryBuilderError = true;\n this.fields_ = [];\n }\n } else {\n this.fields_ = this.filterFields;\n }\n }\n\n private setupQueryFormListeners() {\n this.queryForm.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.onQueryBuilderChange();\n });\n }\n\n private onQueryBuilderChange() {\n if (!this.enableQueryBuilder || this.hasQueryBuilderError) return;\n\n try {\n const odataParams = this.queryBuilderService.buildODataFromQueryModel(\n this.queryModel,\n this.filterFields\n );\n const queryString = this.queryBuilderService.toODataQueryString(odataParams);\n\n // Update the main form control\n if (queryString) {\n this.formControl.setValue(queryString, { emitEvent: true });\n }\n } catch (error) {\n console.error('Error building query:', error);\n this.hasQueryBuilderError = true;\n }\n }\n\n toggleQueryBuilder() {\n this.enableQueryBuilder = !this.enableQueryBuilder;\n this.buildQueryUIFields();\n\n if (this.enableQueryBuilder) {\n // When switching to query builder, try to parse existing JSON\n const currentValue = this.formControl.value;\n if (currentValue) {\n const parsed = this.tryParseJson(currentValue);\n if (parsed) {\n this.queryModel = parsed;\n }\n }\n } else {\n // When switching back to JSON, ensure we have the latest value\n this.onQueryBuilderChange();\n }\n }\n\n\n private tryParseJson(value: string): any {\n const params = this.queryBuilderService.parseODataQuery(value);\n return this.queryBuilderService.queryParamsToFormModel(params);\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}