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