@mediusinc/mng-commons 0.8.0-rc.3 → 0.8.0

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 (279) hide show
  1. package/assets/i18n/en.json +3 -1
  2. package/esm2020/lib/api/models/builders/query-param.builder.mjs +58 -58
  3. package/esm2020/lib/api/models/filter-match-type.model.mjs +24 -24
  4. package/esm2020/lib/api/models/filter-param.model.mjs +32 -32
  5. package/esm2020/lib/api/models/index.mjs +8 -8
  6. package/esm2020/lib/api/models/mappers.mjs +12 -12
  7. package/esm2020/lib/api/models/query-mode.model.mjs +17 -17
  8. package/esm2020/lib/api/models/query-param.model.mjs +67 -67
  9. package/esm2020/lib/api/models/query-result.model.mjs +17 -17
  10. package/esm2020/lib/api/models/serialization.model.mjs +1 -1
  11. package/esm2020/lib/api/services/api.abstract.service.mjs +55 -55
  12. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +66 -66
  13. package/esm2020/lib/api/services/get-all-api.abstract.service.mjs +22 -22
  14. package/esm2020/lib/api/services/index.mjs +3 -3
  15. package/esm2020/lib/api/utils/index.mjs +2 -2
  16. package/esm2020/lib/api/utils/medius-rest.util.mjs +151 -151
  17. package/esm2020/lib/api/utils/object-serializer.util.mjs +243 -243
  18. package/esm2020/lib/components/action/action.component.mjs +176 -176
  19. package/esm2020/lib/components/action/editor/action-editor.component.mjs +247 -230
  20. package/esm2020/lib/components/action/index.mjs +3 -3
  21. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
  22. package/esm2020/lib/components/action/models/action-execution.model.mjs +234 -234
  23. package/esm2020/lib/components/action/models/index.mjs +2 -2
  24. package/esm2020/lib/components/action/route/action-route.component.mjs +124 -124
  25. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +268 -268
  26. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +160 -160
  27. package/esm2020/lib/components/form/editor/form-editor.component.mjs +189 -189
  28. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +18 -18
  29. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +42 -42
  30. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +24 -24
  31. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +95 -95
  32. package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +16 -16
  33. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +178 -178
  34. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +155 -155
  35. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +126 -126
  36. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +16 -16
  37. package/esm2020/lib/components/form/formly/fields/index.mjs +9 -9
  38. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +14 -14
  39. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +14 -14
  40. package/esm2020/lib/components/form/formly/wrappers/index.mjs +2 -2
  41. package/esm2020/lib/components/form/index.mjs +3 -3
  42. package/esm2020/lib/components/form/models/form-editor.event.mjs +33 -33
  43. package/esm2020/lib/components/form/models/index.mjs +1 -1
  44. package/esm2020/lib/components/layout/breadcrumb.component.mjs +16 -16
  45. package/esm2020/lib/components/layout/footer.component.mjs +16 -16
  46. package/esm2020/lib/components/layout/index.mjs +6 -6
  47. package/esm2020/lib/components/layout/main-layout.component.mjs +51 -51
  48. package/esm2020/lib/components/layout/menu-item.component.mjs +216 -216
  49. package/esm2020/lib/components/layout/menu.component.mjs +19 -19
  50. package/esm2020/lib/components/layout/services/index.mjs +1 -1
  51. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +192 -192
  52. package/esm2020/lib/components/layout/topbar.component.mjs +57 -57
  53. package/esm2020/lib/components/tableview/index.mjs +6 -6
  54. package/esm2020/lib/components/tableview/models/index.mjs +1 -1
  55. package/esm2020/lib/components/tableview/models/table.event.mjs +15 -15
  56. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +56 -56
  57. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +53 -53
  58. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +101 -101
  59. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +70 -70
  60. package/esm2020/lib/components/tableview/table/table.component.mjs +429 -429
  61. package/esm2020/lib/components/tableview/tableview.component.mjs +91 -91
  62. package/esm2020/lib/config/formly.config.mjs +180 -180
  63. package/esm2020/lib/config/index.mjs +1 -1
  64. package/esm2020/lib/config/models/index.mjs +1 -1
  65. package/esm2020/lib/config/models/mng-config.model.mjs +1 -1
  66. package/esm2020/lib/data-providers/base.data-provider.mjs +16 -16
  67. package/esm2020/lib/data-providers/editor.data-provider.mjs +36 -36
  68. package/esm2020/lib/data-providers/index.mjs +5 -5
  69. package/esm2020/lib/data-providers/lookup.data-provider.mjs +15 -15
  70. package/esm2020/lib/data-providers/table.data-provider.mjs +16 -16
  71. package/esm2020/lib/data-providers/tableview.data-provider.mjs +16 -16
  72. package/esm2020/lib/descriptors/action.descriptor.mjs +622 -622
  73. package/esm2020/lib/descriptors/column.descriptor.mjs +271 -271
  74. package/esm2020/lib/descriptors/editor.descriptor.mjs +154 -154
  75. package/esm2020/lib/descriptors/field-validation.descriptor.mjs +20 -20
  76. package/esm2020/lib/descriptors/field.descriptor.interface.mjs +1 -1
  77. package/esm2020/lib/descriptors/field.descriptor.mjs +863 -863
  78. package/esm2020/lib/descriptors/filter.descriptor.mjs +294 -294
  79. package/esm2020/lib/descriptors/index.mjs +11 -11
  80. package/esm2020/lib/descriptors/lookup.descriptor.mjs +1 -1
  81. package/esm2020/lib/descriptors/model.descriptor.mjs +33 -33
  82. package/esm2020/lib/descriptors/table.descriptor.mjs +213 -213
  83. package/esm2020/lib/descriptors/tableview.descriptor.mjs +134 -134
  84. package/esm2020/lib/directives/component.directive.mjs +43 -43
  85. package/esm2020/lib/directives/index.mjs +2 -2
  86. package/esm2020/lib/directives/template.directive.mjs +27 -27
  87. package/esm2020/lib/mng-commons.module.mjs +426 -426
  88. package/esm2020/lib/models/column-value.model.mjs +1 -1
  89. package/esm2020/lib/models/enum.model.mjs +1 -1
  90. package/esm2020/lib/models/error.model.mjs +1 -1
  91. package/esm2020/lib/models/index.mjs +6 -6
  92. package/esm2020/lib/models/menu.model.mjs +1 -1
  93. package/esm2020/lib/models/user.model.mjs +1 -1
  94. package/esm2020/lib/models/view-container.model.mjs +1 -1
  95. package/esm2020/lib/pipes/boolean.pipe.mjs +26 -26
  96. package/esm2020/lib/pipes/enum.pipe.mjs +24 -24
  97. package/esm2020/lib/pipes/i18n-property.pipe.mjs +17 -17
  98. package/esm2020/lib/pipes/index.mjs +5 -5
  99. package/esm2020/lib/pipes/json-path.pipe.mjs +79 -79
  100. package/esm2020/lib/pipes/link-formatter.pipe.mjs +38 -38
  101. package/esm2020/lib/router/index.mjs +1 -1
  102. package/esm2020/lib/router/models/index.mjs +1 -1
  103. package/esm2020/lib/router/models/router.model.mjs +1 -1
  104. package/esm2020/lib/router/route-builder.mjs +431 -431
  105. package/esm2020/lib/services/action-executor.service.mjs +535 -535
  106. package/esm2020/lib/services/commons.service.mjs +343 -343
  107. package/esm2020/lib/services/configuration.service.mjs +110 -110
  108. package/esm2020/lib/services/error-mapper.service.mjs +13 -13
  109. package/esm2020/lib/services/index.mjs +6 -6
  110. package/esm2020/lib/services/internal/commons-init.provider.mjs +3 -3
  111. package/esm2020/lib/services/internal/commons-init.service.mjs +43 -43
  112. package/esm2020/lib/services/internal/index.mjs +2 -2
  113. package/esm2020/lib/services/navigation.service.mjs +47 -47
  114. package/esm2020/lib/services/providers/config-service.provider.mjs +29 -29
  115. package/esm2020/lib/services/providers/formly-config.provider.mjs +30 -30
  116. package/esm2020/lib/services/providers/index.mjs +2 -2
  117. package/esm2020/lib/services/tokens/browser-storage.token.mjs +5 -5
  118. package/esm2020/lib/services/tokens/commons-init.token.mjs +2 -2
  119. package/esm2020/lib/services/tokens/default-setting.token.mjs +2 -2
  120. package/esm2020/lib/services/tokens/index.mjs +4 -4
  121. package/esm2020/lib/services/tokens/module-config.token.mjs +2 -2
  122. package/esm2020/lib/services/view-container.component.service.mjs +34 -34
  123. package/esm2020/lib/types/index.mjs +2 -2
  124. package/esm2020/lib/types/type.decorator.mjs +12 -12
  125. package/esm2020/lib/types/type.model.mjs +1 -1
  126. package/esm2020/lib/utils/action-data-provider.util.mjs +144 -144
  127. package/esm2020/lib/utils/editor-formly.util.mjs +209 -209
  128. package/esm2020/lib/utils/enum.util.mjs +81 -81
  129. package/esm2020/lib/utils/i18n.util.mjs +232 -232
  130. package/esm2020/lib/utils/index.mjs +7 -7
  131. package/esm2020/lib/utils/model.util.mjs +59 -59
  132. package/esm2020/lib/utils/notification.util.mjs +45 -45
  133. package/esm2020/lib/utils/route.util.mjs +23 -23
  134. package/esm2020/lib/utils/styles.util.mjs +40 -40
  135. package/esm2020/lib/utils/type.util.mjs +76 -76
  136. package/esm2020/mediusinc-mng-commons.mjs +4 -4
  137. package/esm2020/public-api.mjs +39 -39
  138. package/fesm2015/mediusinc-mng-commons.mjs +9908 -9891
  139. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  140. package/fesm2020/mediusinc-mng-commons.mjs +9774 -9757
  141. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  142. package/lib/api/models/builders/query-param.builder.d.ts +13 -13
  143. package/lib/api/models/filter-match-type.model.d.ts +23 -23
  144. package/lib/api/models/filter-param.model.d.ts +23 -23
  145. package/lib/api/models/index.d.ts +8 -8
  146. package/lib/api/models/mappers.d.ts +6 -6
  147. package/lib/api/models/query-mode.model.d.ts +16 -16
  148. package/lib/api/models/query-param.model.d.ts +31 -31
  149. package/lib/api/models/query-result.model.d.ts +23 -23
  150. package/lib/api/models/serialization.model.d.ts +8 -8
  151. package/lib/api/services/api.abstract.service.d.ts +24 -24
  152. package/lib/api/services/crud-api.abstract.service.d.ts +22 -22
  153. package/lib/api/services/get-all-api.abstract.service.d.ts +14 -14
  154. package/lib/api/services/index.d.ts +3 -3
  155. package/lib/api/utils/index.d.ts +2 -2
  156. package/lib/api/utils/medius-rest.util.d.ts +14 -14
  157. package/lib/api/utils/object-serializer.util.d.ts +33 -33
  158. package/lib/components/action/action.component.d.ts +68 -68
  159. package/lib/components/action/editor/action-editor.component.d.ts +64 -62
  160. package/lib/components/action/index.d.ts +3 -3
  161. package/lib/components/action/models/action-confirmation-service.model.d.ts +6 -6
  162. package/lib/components/action/models/action-execution.model.d.ts +129 -129
  163. package/lib/components/action/models/index.d.ts +2 -2
  164. package/lib/components/action/route/action-route.component.d.ts +31 -31
  165. package/lib/components/form/autocomplete/autocomplete.component.d.ts +53 -53
  166. package/lib/components/form/dropdown/dropdown.component.d.ts +44 -44
  167. package/lib/components/form/editor/form-editor.component.d.ts +45 -45
  168. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +12 -12
  169. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +14 -14
  170. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +12 -12
  171. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +21 -21
  172. package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +6 -6
  173. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +44 -44
  174. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +22 -22
  175. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +37 -37
  176. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +6 -6
  177. package/lib/components/form/formly/fields/index.d.ts +9 -9
  178. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +6 -6
  179. package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +6 -6
  180. package/lib/components/form/formly/wrappers/index.d.ts +2 -2
  181. package/lib/components/form/index.d.ts +3 -3
  182. package/lib/components/form/models/form-editor.event.d.ts +37 -37
  183. package/lib/components/form/models/index.d.ts +1 -1
  184. package/lib/components/layout/breadcrumb.component.d.ts +8 -8
  185. package/lib/components/layout/footer.component.d.ts +9 -9
  186. package/lib/components/layout/index.d.ts +6 -6
  187. package/lib/components/layout/main-layout.component.d.ts +20 -20
  188. package/lib/components/layout/menu-item.component.d.ts +37 -37
  189. package/lib/components/layout/menu.component.d.ts +10 -10
  190. package/lib/components/layout/services/index.d.ts +1 -1
  191. package/lib/components/layout/services/main-layout.component.service.d.ts +65 -65
  192. package/lib/components/layout/topbar.component.d.ts +24 -24
  193. package/lib/components/tableview/index.d.ts +6 -6
  194. package/lib/components/tableview/models/index.d.ts +1 -1
  195. package/lib/components/tableview/models/table.event.d.ts +17 -17
  196. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +20 -20
  197. package/lib/components/tableview/route/tableview-route.component.d.ts +18 -18
  198. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +31 -31
  199. package/lib/components/tableview/table/column-value/column-value.component.d.ts +28 -28
  200. package/lib/components/tableview/table/table.component.d.ts +104 -104
  201. package/lib/components/tableview/tableview.component.d.ts +41 -41
  202. package/lib/config/formly.config.d.ts +15 -15
  203. package/lib/config/index.d.ts +1 -1
  204. package/lib/config/models/index.d.ts +1 -1
  205. package/lib/config/models/mng-config.model.d.ts +34 -34
  206. package/lib/data-providers/base.data-provider.d.ts +14 -14
  207. package/lib/data-providers/editor.data-provider.d.ts +25 -25
  208. package/lib/data-providers/index.d.ts +5 -5
  209. package/lib/data-providers/lookup.data-provider.d.ts +14 -14
  210. package/lib/data-providers/table.data-provider.d.ts +14 -14
  211. package/lib/data-providers/tableview.data-provider.d.ts +15 -15
  212. package/lib/descriptors/action.descriptor.d.ts +277 -277
  213. package/lib/descriptors/column.descriptor.d.ts +91 -91
  214. package/lib/descriptors/editor.descriptor.d.ts +44 -44
  215. package/lib/descriptors/field-validation.descriptor.d.ts +18 -18
  216. package/lib/descriptors/field.descriptor.d.ts +342 -342
  217. package/lib/descriptors/field.descriptor.interface.d.ts +9 -9
  218. package/lib/descriptors/filter.descriptor.d.ts +127 -127
  219. package/lib/descriptors/index.d.ts +11 -11
  220. package/lib/descriptors/lookup.descriptor.d.ts +17 -17
  221. package/lib/descriptors/model.descriptor.d.ts +15 -15
  222. package/lib/descriptors/table.descriptor.d.ts +80 -80
  223. package/lib/descriptors/tableview.descriptor.d.ts +42 -42
  224. package/lib/directives/component.directive.d.ts +16 -16
  225. package/lib/directives/index.d.ts +2 -2
  226. package/lib/directives/template.directive.d.ts +13 -13
  227. package/lib/mng-commons.module.d.ts +86 -86
  228. package/lib/models/column-value.model.d.ts +4 -4
  229. package/lib/models/enum.model.d.ts +6 -6
  230. package/lib/models/error.model.d.ts +14 -14
  231. package/lib/models/index.d.ts +6 -6
  232. package/lib/models/menu.model.d.ts +25 -25
  233. package/lib/models/user.model.d.ts +8 -8
  234. package/lib/models/view-container.model.d.ts +6 -6
  235. package/lib/pipes/boolean.pipe.d.ts +7 -7
  236. package/lib/pipes/enum.pipe.d.ts +8 -8
  237. package/lib/pipes/i18n-property.pipe.d.ts +8 -8
  238. package/lib/pipes/index.d.ts +5 -5
  239. package/lib/pipes/json-path.pipe.d.ts +13 -13
  240. package/lib/pipes/link-formatter.pipe.d.ts +11 -11
  241. package/lib/router/index.d.ts +1 -1
  242. package/lib/router/models/index.d.ts +1 -1
  243. package/lib/router/models/router.model.d.ts +22 -22
  244. package/lib/router/route-builder.d.ts +86 -86
  245. package/lib/services/action-executor.service.d.ts +149 -149
  246. package/lib/services/commons.service.d.ts +72 -72
  247. package/lib/services/configuration.service.d.ts +36 -36
  248. package/lib/services/error-mapper.service.d.ts +7 -7
  249. package/lib/services/index.d.ts +6 -6
  250. package/lib/services/internal/commons-init.provider.d.ts +3 -3
  251. package/lib/services/internal/commons-init.service.d.ts +16 -16
  252. package/lib/services/internal/index.d.ts +2 -2
  253. package/lib/services/navigation.service.d.ts +14 -14
  254. package/lib/services/providers/config-service.provider.d.ts +6 -6
  255. package/lib/services/providers/formly-config.provider.d.ts +4 -4
  256. package/lib/services/providers/index.d.ts +2 -2
  257. package/lib/services/tokens/browser-storage.token.d.ts +2 -2
  258. package/lib/services/tokens/commons-init.token.d.ts +3 -3
  259. package/lib/services/tokens/default-setting.token.d.ts +2 -2
  260. package/lib/services/tokens/index.d.ts +4 -4
  261. package/lib/services/tokens/module-config.token.d.ts +3 -3
  262. package/lib/services/view-container.component.service.d.ts +22 -22
  263. package/lib/types/index.d.ts +2 -2
  264. package/lib/types/type.decorator.d.ts +4 -4
  265. package/lib/types/type.model.d.ts +20 -20
  266. package/lib/utils/action-data-provider.util.d.ts +20 -20
  267. package/lib/utils/editor-formly.util.d.ts +10 -10
  268. package/lib/utils/enum.util.d.ts +50 -50
  269. package/lib/utils/i18n.util.d.ts +56 -56
  270. package/lib/utils/index.d.ts +7 -7
  271. package/lib/utils/model.util.d.ts +8 -8
  272. package/lib/utils/notification.util.d.ts +11 -11
  273. package/lib/utils/route.util.d.ts +4 -4
  274. package/lib/utils/styles.util.d.ts +14 -14
  275. package/lib/utils/type.util.d.ts +36 -36
  276. package/mediusinc-mng-commons.d.ts +5 -5
  277. package/package.json +3 -3
  278. package/public-api.d.ts +28 -28
  279. package/mediusinc-mng-commons-0.8.0-rc.3.tgz +0 -0
@@ -1,210 +1,210 @@
1
- import { FieldInputDescriptor, FieldLookupDescriptor, FieldLookupEnumDescriptor, FieldManyEditorDescriptor, FieldManyToManyEditorDescriptor } from '../descriptors';
2
- export class EditorFormlyUtil {
3
- static createFormlyConfigFromDescriptor(descriptor) {
4
- const fields = [];
5
- if (descriptor.tabs.length === 1 && descriptor.tabs[0].default) {
6
- // dont use tabs
7
- fields.push(...EditorFormlyUtil.createFormlyGroupType(descriptor.tabs[0].fields));
8
- }
9
- else {
10
- fields.push(...EditorFormlyUtil.createFormlyTabType(descriptor.tabs));
11
- }
12
- return fields;
13
- }
14
- static createFormlyTabType(tabGroups) {
15
- const tabsField = {
16
- type: 'tabs',
17
- fieldGroup: []
18
- };
19
- for (const tab of tabGroups) {
20
- const tabField = {
21
- id: tab.name,
22
- templateOptions: {},
23
- fieldGroup: []
24
- };
25
- if (tab.title) {
26
- tabField.templateOptions.label = tab.title;
27
- }
28
- tabField.fieldGroup.push(...EditorFormlyUtil.createFormlyGroupType(tab.fields));
29
- tabsField.fieldGroup.push(tabField);
30
- }
31
- return [tabsField];
32
- }
33
- static createFormlyGroupType(groups) {
34
- if (groups.length === 1 && groups[0].default) {
35
- // dont use fieldset, just create fields
36
- return EditorFormlyUtil.createFormlyFields(groups[0]);
37
- }
38
- else {
39
- const groupsField = {
40
- type: 'fieldset',
41
- fieldGroup: []
42
- };
43
- for (const group of groups) {
44
- const groupField = {
45
- id: group.name,
46
- templateOptions: {
47
- descriptor: group
48
- },
49
- fieldGroup: []
50
- };
51
- if (group.title) {
52
- groupField.templateOptions.label = group.title;
53
- }
54
- groupField.fieldGroup.push(...EditorFormlyUtil.createFormlyFields(group));
55
- groupsField.fieldGroup.push(groupField);
56
- }
57
- return [groupsField];
58
- }
59
- }
60
- static createFormlyFields(descriptor) {
61
- const fields = [];
62
- for (const descriptorField of descriptor.fields) {
63
- fields.push(EditorFormlyUtil.createFormlyField(descriptorField));
64
- }
65
- // wrap in group to be able to use flex grid
66
- const wrapperGroup = {
67
- fieldGroupClassName: 'p-fluid formgrid grid',
68
- fieldGroup: fields
69
- };
70
- EditorFormlyUtil.addValidationsToFormlyField(wrapperGroup, descriptor.validations);
71
- return [wrapperGroup];
72
- }
73
- static createFormlyField(descriptor) {
74
- const field = {
75
- key: descriptor.property,
76
- expressionProperties: {},
77
- templateOptions: {}
78
- };
79
- let className = descriptor.className;
80
- if (!className) {
81
- // assign default field width through entire row
82
- className = 'col-12';
83
- }
84
- field.className = className;
85
- field.templateOptions['descriptor'] = descriptor;
86
- if (descriptor instanceof FieldInputDescriptor) {
87
- switch (descriptor.fieldType) {
88
- case FieldInputDescriptor.TypeEnum.Hidden:
89
- break;
90
- case FieldInputDescriptor.TypeEnum.Label:
91
- field.type = 'label';
92
- delete field.key;
93
- break;
94
- case FieldInputDescriptor.TypeEnum.Textarea:
95
- field.type = 'textarea';
96
- break;
97
- case FieldInputDescriptor.TypeEnum.Number:
98
- field.type = 'number';
99
- field.templateOptions.min = descriptor.numberMin;
100
- field.templateOptions.max = descriptor.numberMax;
101
- break;
102
- case FieldInputDescriptor.TypeEnum.Currency:
103
- field.type = 'currency';
104
- field.templateOptions.min = descriptor.numberMin;
105
- field.templateOptions.max = descriptor.numberMax;
106
- break;
107
- case FieldInputDescriptor.TypeEnum.Switch:
108
- field.type = 'switch';
109
- break;
110
- case FieldInputDescriptor.TypeEnum.Radio:
111
- field.type = 'radio';
112
- break;
113
- case FieldInputDescriptor.TypeEnum.Datepicker:
114
- field.type = 'datepicker';
115
- break;
116
- case FieldInputDescriptor.TypeEnum.Mask:
117
- field.type = 'mask';
118
- break;
119
- case FieldInputDescriptor.TypeEnum.File:
120
- field.type = 'file';
121
- break;
122
- case FieldInputDescriptor.TypeEnum.Custom:
123
- field.type = descriptor.customComponentName;
124
- break;
125
- default:
126
- field.type = 'input';
127
- field.templateOptions.minLength = descriptor.minLength;
128
- field.templateOptions.maxLength = descriptor.maxLength;
129
- field.templateOptions.pattern = descriptor.pattern;
130
- break;
131
- }
132
- }
133
- else if (descriptor instanceof FieldLookupEnumDescriptor) {
134
- field.type = 'enum';
135
- }
136
- else if (descriptor instanceof FieldLookupDescriptor) {
137
- switch (descriptor.lookupType) {
138
- case FieldLookupDescriptor.LookupTypeEnum.Autocomplete:
139
- field.type = 'autocomplete';
140
- break;
141
- case FieldLookupDescriptor.LookupTypeEnum.Dialog:
142
- field.type = 'dialog';
143
- break;
144
- case FieldLookupDescriptor.LookupTypeEnum.Dropdown:
145
- default:
146
- field.type = 'dropdown';
147
- break;
148
- }
149
- }
150
- else if (descriptor instanceof FieldManyToManyEditorDescriptor) {
151
- field.type = 'table-dialog-multiselect';
152
- }
153
- else if (descriptor instanceof FieldManyEditorDescriptor) {
154
- field.type = 'table-dialog-form';
155
- }
156
- if (descriptor.label) {
157
- field.templateOptions.label = descriptor.label;
158
- }
159
- if (descriptor.requiredExpression) {
160
- field.expressionProperties['templateOptions.required'] = descriptor.requiredExpression;
161
- }
162
- if (descriptor.required) {
163
- field.templateOptions.required = true;
164
- }
165
- if (descriptor.hiddenExpression) {
166
- field.expressionProperties['hide'] = descriptor.hiddenExpression;
167
- }
168
- if (descriptor.disabledExpression) {
169
- field.expressionProperties['templateOptions.disabled'] = descriptor.disabledExpression;
170
- }
171
- else if (descriptor.disabled) {
172
- field.templateOptions.disabled = true;
173
- }
174
- else {
175
- field.expressionProperties['templateOptions.disabled'] = 'formState.disabled';
176
- }
177
- if (typeof descriptor.defaultValue !== 'undefined') {
178
- field.defaultValue = descriptor.defaultValue;
179
- }
180
- EditorFormlyUtil.addValidationsToFormlyField(field, descriptor.validations);
181
- return field;
182
- }
183
- static addValidationsToFormlyField(config, validations) {
184
- if (!config.validators) {
185
- config.validators = {};
186
- }
187
- for (const validation of validations) {
188
- if (typeof validation.validator === 'function') {
189
- config.validators[validation.name] = {
190
- expression: (control, field, options) => {
191
- const validatorRes = validation.validator(control, field, options);
192
- // formly validator only excepts true/false for validation
193
- // map possible angular validator result to true/false
194
- return typeof validatorRes === 'boolean' ? validatorRes : validatorRes === null;
195
- }
196
- };
197
- if (typeof validation.message === 'function') {
198
- config.validators[validation.name].message = validation.message;
199
- }
200
- }
201
- else {
202
- if (!Array.isArray(config.validators.validation)) {
203
- config.validators.validation = [];
204
- }
205
- config.validators.validation.push(validation.name);
206
- }
207
- }
208
- }
209
- }
1
+ import { FieldInputDescriptor, FieldLookupDescriptor, FieldLookupEnumDescriptor, FieldManyEditorDescriptor, FieldManyToManyEditorDescriptor } from '../descriptors';
2
+ export class EditorFormlyUtil {
3
+ static createFormlyConfigFromDescriptor(descriptor) {
4
+ const fields = [];
5
+ if (descriptor.tabs.length === 1 && descriptor.tabs[0].default) {
6
+ // dont use tabs
7
+ fields.push(...EditorFormlyUtil.createFormlyGroupType(descriptor.tabs[0].fields));
8
+ }
9
+ else {
10
+ fields.push(...EditorFormlyUtil.createFormlyTabType(descriptor.tabs));
11
+ }
12
+ return fields;
13
+ }
14
+ static createFormlyTabType(tabGroups) {
15
+ const tabsField = {
16
+ type: 'tabs',
17
+ fieldGroup: []
18
+ };
19
+ for (const tab of tabGroups) {
20
+ const tabField = {
21
+ id: tab.name,
22
+ templateOptions: {},
23
+ fieldGroup: []
24
+ };
25
+ if (tab.title) {
26
+ tabField.templateOptions.label = tab.title;
27
+ }
28
+ tabField.fieldGroup.push(...EditorFormlyUtil.createFormlyGroupType(tab.fields));
29
+ tabsField.fieldGroup.push(tabField);
30
+ }
31
+ return [tabsField];
32
+ }
33
+ static createFormlyGroupType(groups) {
34
+ if (groups.length === 1 && groups[0].default) {
35
+ // dont use fieldset, just create fields
36
+ return EditorFormlyUtil.createFormlyFields(groups[0]);
37
+ }
38
+ else {
39
+ const groupsField = {
40
+ type: 'fieldset',
41
+ fieldGroup: []
42
+ };
43
+ for (const group of groups) {
44
+ const groupField = {
45
+ id: group.name,
46
+ templateOptions: {
47
+ descriptor: group
48
+ },
49
+ fieldGroup: []
50
+ };
51
+ if (group.title) {
52
+ groupField.templateOptions.label = group.title;
53
+ }
54
+ groupField.fieldGroup.push(...EditorFormlyUtil.createFormlyFields(group));
55
+ groupsField.fieldGroup.push(groupField);
56
+ }
57
+ return [groupsField];
58
+ }
59
+ }
60
+ static createFormlyFields(descriptor) {
61
+ const fields = [];
62
+ for (const descriptorField of descriptor.fields) {
63
+ fields.push(EditorFormlyUtil.createFormlyField(descriptorField));
64
+ }
65
+ // wrap in group to be able to use flex grid
66
+ const wrapperGroup = {
67
+ fieldGroupClassName: 'p-fluid formgrid grid',
68
+ fieldGroup: fields
69
+ };
70
+ EditorFormlyUtil.addValidationsToFormlyField(wrapperGroup, descriptor.validations);
71
+ return [wrapperGroup];
72
+ }
73
+ static createFormlyField(descriptor) {
74
+ const field = {
75
+ key: descriptor.property,
76
+ expressionProperties: {},
77
+ templateOptions: {}
78
+ };
79
+ let className = descriptor.className;
80
+ if (!className) {
81
+ // assign default field width through entire row
82
+ className = 'col-12';
83
+ }
84
+ field.className = className;
85
+ field.templateOptions['descriptor'] = descriptor;
86
+ if (descriptor instanceof FieldInputDescriptor) {
87
+ switch (descriptor.fieldType) {
88
+ case FieldInputDescriptor.TypeEnum.Hidden:
89
+ break;
90
+ case FieldInputDescriptor.TypeEnum.Label:
91
+ field.type = 'label';
92
+ delete field.key;
93
+ break;
94
+ case FieldInputDescriptor.TypeEnum.Textarea:
95
+ field.type = 'textarea';
96
+ break;
97
+ case FieldInputDescriptor.TypeEnum.Number:
98
+ field.type = 'number';
99
+ field.templateOptions.min = descriptor.numberMin;
100
+ field.templateOptions.max = descriptor.numberMax;
101
+ break;
102
+ case FieldInputDescriptor.TypeEnum.Currency:
103
+ field.type = 'currency';
104
+ field.templateOptions.min = descriptor.numberMin;
105
+ field.templateOptions.max = descriptor.numberMax;
106
+ break;
107
+ case FieldInputDescriptor.TypeEnum.Switch:
108
+ field.type = 'switch';
109
+ break;
110
+ case FieldInputDescriptor.TypeEnum.Radio:
111
+ field.type = 'radio';
112
+ break;
113
+ case FieldInputDescriptor.TypeEnum.Datepicker:
114
+ field.type = 'datepicker';
115
+ break;
116
+ case FieldInputDescriptor.TypeEnum.Mask:
117
+ field.type = 'mask';
118
+ break;
119
+ case FieldInputDescriptor.TypeEnum.File:
120
+ field.type = 'file';
121
+ break;
122
+ case FieldInputDescriptor.TypeEnum.Custom:
123
+ field.type = descriptor.customComponentName;
124
+ break;
125
+ default:
126
+ field.type = 'input';
127
+ field.templateOptions.minLength = descriptor.minLength;
128
+ field.templateOptions.maxLength = descriptor.maxLength;
129
+ field.templateOptions.pattern = descriptor.pattern;
130
+ break;
131
+ }
132
+ }
133
+ else if (descriptor instanceof FieldLookupEnumDescriptor) {
134
+ field.type = 'enum';
135
+ }
136
+ else if (descriptor instanceof FieldLookupDescriptor) {
137
+ switch (descriptor.lookupType) {
138
+ case FieldLookupDescriptor.LookupTypeEnum.Autocomplete:
139
+ field.type = 'autocomplete';
140
+ break;
141
+ case FieldLookupDescriptor.LookupTypeEnum.Dialog:
142
+ field.type = 'dialog';
143
+ break;
144
+ case FieldLookupDescriptor.LookupTypeEnum.Dropdown:
145
+ default:
146
+ field.type = 'dropdown';
147
+ break;
148
+ }
149
+ }
150
+ else if (descriptor instanceof FieldManyToManyEditorDescriptor) {
151
+ field.type = 'table-dialog-multiselect';
152
+ }
153
+ else if (descriptor instanceof FieldManyEditorDescriptor) {
154
+ field.type = 'table-dialog-form';
155
+ }
156
+ if (descriptor.label) {
157
+ field.templateOptions.label = descriptor.label;
158
+ }
159
+ if (descriptor.requiredExpression) {
160
+ field.expressionProperties['templateOptions.required'] = descriptor.requiredExpression;
161
+ }
162
+ if (descriptor.required) {
163
+ field.templateOptions.required = true;
164
+ }
165
+ if (descriptor.hiddenExpression) {
166
+ field.expressionProperties['hide'] = descriptor.hiddenExpression;
167
+ }
168
+ if (descriptor.disabledExpression) {
169
+ field.expressionProperties['templateOptions.disabled'] = descriptor.disabledExpression;
170
+ }
171
+ else if (descriptor.disabled) {
172
+ field.templateOptions.disabled = true;
173
+ }
174
+ else {
175
+ field.expressionProperties['templateOptions.disabled'] = 'formState.disabled';
176
+ }
177
+ if (typeof descriptor.defaultValue !== 'undefined') {
178
+ field.defaultValue = descriptor.defaultValue;
179
+ }
180
+ EditorFormlyUtil.addValidationsToFormlyField(field, descriptor.validations);
181
+ return field;
182
+ }
183
+ static addValidationsToFormlyField(config, validations) {
184
+ if (!config.validators) {
185
+ config.validators = {};
186
+ }
187
+ for (const validation of validations) {
188
+ if (typeof validation.validator === 'function') {
189
+ config.validators[validation.name] = {
190
+ expression: (control, field, options) => {
191
+ const validatorRes = validation.validator(control, field, options);
192
+ // formly validator only excepts true/false for validation
193
+ // map possible angular validator result to true/false
194
+ return typeof validatorRes === 'boolean' ? validatorRes : validatorRes === null;
195
+ }
196
+ };
197
+ if (typeof validation.message === 'function') {
198
+ config.validators[validation.name].message = validation.message;
199
+ }
200
+ }
201
+ else {
202
+ if (!Array.isArray(config.validators.validation)) {
203
+ config.validators.validation = [];
204
+ }
205
+ config.validators.validation.push(validation.name);
206
+ }
207
+ }
208
+ }
209
+ }
210
210
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWZvcm1seS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9lZGl0b3ItZm9ybWx5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUlILG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QiwrQkFBK0IsRUFHbEMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxVQUFpQztRQUM1RSxNQUFNLE1BQU0sR0FBd0IsRUFBRSxDQUFDO1FBRXZDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQzVELGdCQUFnQjtZQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JGO2FBQU07WUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDekU7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQXlDO1FBQ3ZFLE1BQU0sU0FBUyxHQUFzQjtZQUNqQyxJQUFJLEVBQUUsTUFBTTtZQUNaLFVBQVUsRUFBRSxFQUFFO1NBQ2pCLENBQUM7UUFDRixLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRTtZQUN6QixNQUFNLFFBQVEsR0FBc0I7Z0JBQ2hDLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSTtnQkFDWixlQUFlLEVBQUUsRUFBRTtn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QUFVLENBQUMsRUFBRTtvQkFDOUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO2lCQUNyQztnQkFDRCxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3REO1NBQ0o7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Fic3RyYWN0Q29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge0Zvcm1seUZpZWxkQ29uZmlnfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcblxuaW1wb3J0IHtcbiAgICBBRmllbGREZXNjcmlwdG9yLFxuICAgIEVkaXRvckRlc2NyaXB0b3IsXG4gICAgRmllbGRHcm91cERlc2NyaXB0b3IsXG4gICAgRmllbGRJbnB1dERlc2NyaXB0b3IsXG4gICAgRmllbGRMb29rdXBEZXNjcmlwdG9yLFxuICAgIEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3IsXG4gICAgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcixcbiAgICBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLFxuICAgIEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yLFxuICAgIEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3Jcbn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuXG5leHBvcnQgY2xhc3MgRWRpdG9yRm9ybWx5VXRpbCB7XG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGb3JtbHlDb25maWdGcm9tRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9yPGFueT4pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcbiAgICAgICAgY29uc3QgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IudGFicy5sZW5ndGggPT09IDEgJiYgZGVzY3JpcHRvci50YWJzWzBdLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIC8vIGRvbnQgdXNlIHRhYnNcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKC4uLkVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5R3JvdXBUeXBlKGRlc2NyaXB0b3IudGFic1swXS5maWVsZHMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKC4uLkVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5VGFiVHlwZShkZXNjcmlwdG9yLnRhYnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGb3JtbHlUYWJUeXBlKHRhYkdyb3VwczogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8YW55PltdKTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgICAgIGNvbnN0IHRhYnNGaWVsZDogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAgICB0eXBlOiAndGFicycsXG4gICAgICAgICAgICBmaWVsZEdyb3VwOiBbXVxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IHRhYiBvZiB0YWJHcm91cHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYkZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICBpZDogdGFiLm5hbWUsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7fSxcbiAgICAgICAgICAgICAgICBmaWVsZEdyb3VwOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0YWIudGl0bGUpIHtcbiAgICAgICAgICAgICAgICB0YWJGaWVsZC50ZW1wbGF0ZU9wdGlvbnMhLmxhYmVsID0gdGFiLnRpdGxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFiRmllbGQuZmllbGRHcm91cCEucHVzaCguLi5FZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUdyb3VwVHlwZSh0YWIuZmllbGRzKSk7XG4gICAgICAgICAgICB0YWJzRmllbGQuZmllbGRHcm91cCEucHVzaCh0YWJGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFt0YWJzRmllbGRdO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRm9ybWx5R3JvdXBUeXBlKGdyb3VwczogRmllbGRHcm91cERlc2NyaXB0b3I8YW55PltdKTogRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgICAgIGlmIChncm91cHMubGVuZ3RoID09PSAxICYmIGdyb3Vwc1swXS5kZWZhdWx0KSB7XG4gICAgICAgICAgICAvLyBkb250IHVzZSBmaWVsZHNldCwganVzdCBjcmVhdGUgZmllbGRzXG4gICAgICAgICAgICByZXR1cm4gRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlGaWVsZHMoZ3JvdXBzWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3Vwc0ZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZmllbGRzZXQnLFxuICAgICAgICAgICAgICAgIGZpZWxkR3JvdXA6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBncm91cHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cEZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGdyb3VwLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcjogZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGRHcm91cDogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChncm91cC50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICBncm91cEZpZWxkLnRlbXBsYXRlT3B0aW9ucyEubGFiZWwgPSBncm91cC50aXRsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ3JvdXBGaWVsZC5maWVsZEdyb3VwIS5wdXNoKC4uLkVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5RmllbGRzKGdyb3VwKSk7XG4gICAgICAgICAgICAgICAgZ3JvdXBzRmllbGQuZmllbGRHcm91cCEucHVzaChncm91cEZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbZ3JvdXBzRmllbGRdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGb3JtbHlGaWVsZHMoZGVzY3JpcHRvcjogRmllbGRHcm91cERlc2NyaXB0b3I8YW55Pik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgICAgICBjb25zdCBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBkZXNjcmlwdG9yRmllbGQgb2YgZGVzY3JpcHRvci5maWVsZHMpIHtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKEVkaXRvckZvcm1seVV0aWwuY3JlYXRlRm9ybWx5RmllbGQoZGVzY3JpcHRvckZpZWxkKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd3JhcCBpbiBncm91cCB0byBiZSBhYmxlIHRvIHVzZSBmbGV4IGdyaWRcbiAgICAgICAgY29uc3Qgd3JhcHBlckdyb3VwOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICAgIGZpZWxkR3JvdXBDbGFzc05hbWU6ICdwLWZsdWlkIGZvcm1ncmlkIGdyaWQnLFxuICAgICAgICAgICAgZmllbGRHcm91cDogZmllbGRzXG4gICAgICAgIH07XG5cbiAgICAgICAgRWRpdG9yRm9ybWx5VXRpbC5hZGRWYWxpZGF0aW9uc1RvRm9ybWx5RmllbGQod3JhcHBlckdyb3VwLCBkZXNjcmlwdG9yLnZhbGlkYXRpb25zKTtcblxuICAgICAgICByZXR1cm4gW3dyYXBwZXJHcm91cF07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGb3JtbHlGaWVsZChkZXNjcmlwdG9yOiBBRmllbGREZXNjcmlwdG9yPGFueSwgYW55Pik6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICAgICAgY29uc3QgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgICAga2V5OiBkZXNjcmlwdG9yLnByb3BlcnR5LFxuICAgICAgICAgICAgZXhwcmVzc2lvblByb3BlcnRpZXM6IHt9LFxuICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7fVxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBjbGFzc05hbWUgPSBkZXNjcmlwdG9yLmNsYXNzTmFtZTtcbiAgICAgICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgICAgICAgIC8vIGFzc2lnbiBkZWZhdWx0IGZpZWxkIHdpZHRoIHRocm91Z2ggZW50aXJlIHJvd1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gJ2NvbC0xMic7XG4gICAgICAgIH1cbiAgICAgICAgZmllbGQuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuXG4gICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucyFbJ2Rlc2NyaXB0b3InXSA9IGRlc2NyaXB0b3I7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmllbGRJbnB1dERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZGVzY3JpcHRvci5maWVsZFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLkhpZGRlbjpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5MYWJlbDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdsYWJlbCc7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uVGV4dGFyZWE6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAndGV4dGFyZWEnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLk51bWJlcjpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdudW1iZXInO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMhLm1pbiA9IGRlc2NyaXB0b3IubnVtYmVyTWluO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMhLm1heCA9IGRlc2NyaXB0b3IubnVtYmVyTWF4O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLkN1cnJlbmN5OlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ2N1cnJlbmN5JztcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zIS5taW4gPSBkZXNjcmlwdG9yLm51bWJlck1pbjtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zIS5tYXggPSBkZXNjcmlwdG9yLm51bWJlck1heDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5Td2l0Y2g6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnc3dpdGNoJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5SYWRpbzpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdyYWRpbyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uRGF0ZXBpY2tlcjpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdkYXRlcGlja2VyJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0RGVzY3JpcHRvci5UeXBlRW51bS5NYXNrOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ21hc2snO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXREZXNjcmlwdG9yLlR5cGVFbnVtLkZpbGU6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dERlc2NyaXB0b3IuVHlwZUVudW0uQ3VzdG9tOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gZGVzY3JpcHRvci5jdXN0b21Db21wb25lbnROYW1lO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ2lucHV0JztcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zIS5taW5MZW5ndGggPSBkZXNjcmlwdG9yLm1pbkxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zIS5tYXhMZW5ndGggPSBkZXNjcmlwdG9yLm1heExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zIS5wYXR0ZXJuID0gZGVzY3JpcHRvci5wYXR0ZXJuO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgZmllbGQudHlwZSA9ICdlbnVtJztcbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRmllbGRMb29rdXBEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0b3IubG9va3VwVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRmllbGRMb29rdXBEZXNjcmlwdG9yLkxvb2t1cFR5cGVFbnVtLkF1dG9jb21wbGV0ZTpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdhdXRvY29tcGxldGUnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkTG9va3VwRGVzY3JpcHRvci5Mb29rdXBUeXBlRW51bS5EaWFsb2c6XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnZGlhbG9nJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZExvb2t1cERlc2NyaXB0b3IuTG9va3VwVHlwZUVudW0uRHJvcGRvd246XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdkcm9wZG93bic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBmaWVsZC50eXBlID0gJ3RhYmxlLWRpYWxvZy1tdWx0aXNlbGVjdCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAndGFibGUtZGlhbG9nLWZvcm0nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IubGFiZWwpIHtcbiAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucyEubGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IucmVxdWlyZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICBmaWVsZC5leHByZXNzaW9uUHJvcGVydGllcyFbJ3RlbXBsYXRlT3B0aW9ucy5yZXF1aXJlZCddID0gZGVzY3JpcHRvci5yZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucyEucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuaGlkZGVuRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgZmllbGQuZXhwcmVzc2lvblByb3BlcnRpZXMhWydoaWRlJ10gPSBkZXNjcmlwdG9yLmhpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRvci5kaXNhYmxlZEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGZpZWxkLmV4cHJlc3Npb25Qcm9wZXJ0aWVzIVsndGVtcGxhdGVPcHRpb25zLmRpc2FibGVkJ10gPSBkZXNjcmlwdG9yLmRpc2FibGVkRXhwcmVzc2lvbjtcbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMhLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkLmV4cHJlc3Npb25Qcm9wZXJ0aWVzIVsndGVtcGxhdGVPcHRpb25zLmRpc2FibGVkJ10gPSAnZm9ybVN0YXRlLmRpc2FibGVkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci5kZWZhdWx0VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBmaWVsZC5kZWZhdWx0VmFsdWUgPSBkZXNjcmlwdG9yLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIEVkaXRvckZvcm1seVV0aWwuYWRkVmFsaWRhdGlvbnNUb0Zvcm1seUZpZWxkKGZpZWxkLCBkZXNjcmlwdG9yLnZhbGlkYXRpb25zKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRWYWxpZGF0aW9uc1RvRm9ybWx5RmllbGQoY29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZywgdmFsaWRhdGlvbnM6IEFycmF5PEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3I+KSB7XG4gICAgICAgIGlmICghY29uZmlnLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2YgdmFsaWRhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25maWcudmFsaWRhdG9yc1t2YWxpZGF0aW9uLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogRm9ybWx5RmllbGRDb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZDogc3RyaW5nXTogYW55O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvclJlcyA9IHZhbGlkYXRpb24udmFsaWRhdG9yIShjb250cm9sLCBmaWVsZCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JtbHkgdmFsaWRhdG9yIG9ubHkgZXhjZXB0cyB0cnVlL2ZhbHNlIGZvciB2YWxpZGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXAgcG9zc2libGUgYW5ndWxhciB2YWxpZGF0b3IgcmVzdWx0IHRvIHRydWUvZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsaWRhdG9yUmVzID09PSAnYm9vbGVhbicgPyB2YWxpZGF0b3JSZXMgOiB2YWxpZGF0b3JSZXMgPT09IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5tZXNzYWdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzW3ZhbGlkYXRpb24ubmFtZV0ubWVzc2FnZSA9IHZhbGlkYXRpb24ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcudmFsaWRhdG9ycy52YWxpZGF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcudmFsaWRhdG9ycy52YWxpZGF0aW9uID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZGF0b3JzLnZhbGlkYXRpb24ucHVzaCh2YWxpZGF0aW9uLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,82 +1,82 @@
1
- export class EnumUtil {
2
- /**
3
- * Returns array of names for constants in enum.
4
- * @param enumType Enum object.
5
- */
6
- static getConstantNames(enumType) {
7
- return EnumUtil.getConstantNamesFromEnumObject(enumType);
8
- }
9
- /**
10
- * Returns array of names for constants in enum.
11
- * @param enumObj Enum object.
12
- */
13
- static getConstantNamesFromEnumObject(enumObj) {
14
- // in number enum, the numbers are also represented in objects and should be filtered out
15
- return Object.keys(enumObj).filter(v => isNaN(+v));
16
- }
17
- /**
18
- * Returns array of string values for constants in enum.
19
- * @param enumType Enum object.
20
- */
21
- static getConstantValuesAsString(enumType) {
22
- return Object.keys(enumType).map(v => enumType[v]);
23
- }
24
- /**
25
- * Returns array of number values for constants in enum.
26
- * @param enumType Enum object.
27
- */
28
- static getConstantValuesAsNumber(enumType) {
29
- return Object.keys(enumType)
30
- .filter(v => !isNaN(+v))
31
- .map(v => +v);
32
- }
33
- /**
34
- * Returns array of type EnumValue for all constants in enum.
35
- * @param enumType Enum object.
36
- * @param nameAsValue If use name of constant as value (optional, default: false).
37
- * @param titlePath Base path for title to use as translation (optional).
38
- */
39
- static fromConstantsAsEnumValueArray(enumType, nameAsValue = false, titlePath) {
40
- return EnumUtil.getConstantNames(enumType).map(n => ({ name: n, title: `${titlePath ? `${titlePath}.` : ''}${n}`, value: nameAsValue ? n : enumType[n] }));
41
- }
42
- /**
43
- * Returns array of type EnumValue for provided values in enum.
44
- * @param enumType Enum object.
45
- * @param nameAsValue If use name of constant as value (optional, default: false).
46
- * @param titlePath Base path for title to use as translation (optional).
47
- */
48
- static fromValuesAsEnumValueArray(enumType, values, nameAsValue = false, titlePath) {
49
- return values.map(v => {
50
- const k = EnumUtil.getConstantName(enumType, v);
51
- return { name: k, title: `${titlePath ? `${titlePath}.` : ''}${k}`, value: nameAsValue ? k : v };
52
- });
53
- }
54
- /**
55
- * Gets constant name for value.
56
- * @param enumType Enum object.
57
- * @param value Value of enum constant.
58
- */
59
- static getConstantName(enumType, value) {
60
- if (typeof value === 'string') {
61
- return EnumUtil.getConstantNames(enumType).find(c => enumType[c] === value) ?? null;
62
- }
63
- else {
64
- return typeof enumType[value] !== 'undefined' ? enumType[value] : null;
65
- }
66
- }
67
- /**
68
- * Gets constant name for value.
69
- * @param enumObj Enum object.
70
- * @param value Value of enum constant.
71
- */
72
- static getConstantNameFromEnumObject(enumObj, value) {
73
- const enumObjAny = enumObj;
74
- if (typeof value === 'string') {
75
- return EnumUtil.getConstantNamesFromEnumObject(enumObj).find(c => enumObjAny[c] === value) ?? null;
76
- }
77
- else {
78
- return typeof enumObjAny[value] !== 'undefined' ? enumObjAny[value] : null;
79
- }
80
- }
81
- }
1
+ export class EnumUtil {
2
+ /**
3
+ * Returns array of names for constants in enum.
4
+ * @param enumType Enum object.
5
+ */
6
+ static getConstantNames(enumType) {
7
+ return EnumUtil.getConstantNamesFromEnumObject(enumType);
8
+ }
9
+ /**
10
+ * Returns array of names for constants in enum.
11
+ * @param enumObj Enum object.
12
+ */
13
+ static getConstantNamesFromEnumObject(enumObj) {
14
+ // in number enum, the numbers are also represented in objects and should be filtered out
15
+ return Object.keys(enumObj).filter(v => isNaN(+v));
16
+ }
17
+ /**
18
+ * Returns array of string values for constants in enum.
19
+ * @param enumType Enum object.
20
+ */
21
+ static getConstantValuesAsString(enumType) {
22
+ return Object.keys(enumType).map(v => enumType[v]);
23
+ }
24
+ /**
25
+ * Returns array of number values for constants in enum.
26
+ * @param enumType Enum object.
27
+ */
28
+ static getConstantValuesAsNumber(enumType) {
29
+ return Object.keys(enumType)
30
+ .filter(v => !isNaN(+v))
31
+ .map(v => +v);
32
+ }
33
+ /**
34
+ * Returns array of type EnumValue for all constants in enum.
35
+ * @param enumType Enum object.
36
+ * @param nameAsValue If use name of constant as value (optional, default: false).
37
+ * @param titlePath Base path for title to use as translation (optional).
38
+ */
39
+ static fromConstantsAsEnumValueArray(enumType, nameAsValue = false, titlePath) {
40
+ return EnumUtil.getConstantNames(enumType).map(n => ({ name: n, title: `${titlePath ? `${titlePath}.` : ''}${n}`, value: nameAsValue ? n : enumType[n] }));
41
+ }
42
+ /**
43
+ * Returns array of type EnumValue for provided values in enum.
44
+ * @param enumType Enum object.
45
+ * @param nameAsValue If use name of constant as value (optional, default: false).
46
+ * @param titlePath Base path for title to use as translation (optional).
47
+ */
48
+ static fromValuesAsEnumValueArray(enumType, values, nameAsValue = false, titlePath) {
49
+ return values.map(v => {
50
+ const k = EnumUtil.getConstantName(enumType, v);
51
+ return { name: k, title: `${titlePath ? `${titlePath}.` : ''}${k}`, value: nameAsValue ? k : v };
52
+ });
53
+ }
54
+ /**
55
+ * Gets constant name for value.
56
+ * @param enumType Enum object.
57
+ * @param value Value of enum constant.
58
+ */
59
+ static getConstantName(enumType, value) {
60
+ if (typeof value === 'string') {
61
+ return EnumUtil.getConstantNames(enumType).find(c => enumType[c] === value) ?? null;
62
+ }
63
+ else {
64
+ return typeof enumType[value] !== 'undefined' ? enumType[value] : null;
65
+ }
66
+ }
67
+ /**
68
+ * Gets constant name for value.
69
+ * @param enumObj Enum object.
70
+ * @param value Value of enum constant.
71
+ */
72
+ static getConstantNameFromEnumObject(enumObj, value) {
73
+ const enumObjAny = enumObj;
74
+ if (typeof value === 'string') {
75
+ return EnumUtil.getConstantNamesFromEnumObject(enumObj).find(c => enumObjAny[c] === value) ?? null;
76
+ }
77
+ else {
78
+ return typeof enumObjAny[value] !== 'undefined' ? enumObjAny[value] : null;
79
+ }
80
+ }
81
+ }
82
82
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9lbnVtLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLFFBQVE7SUFDakI7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQWtCO1FBQzdDLE9BQU8sUUFBUSxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsOEJBQThCLENBQUMsT0FBZTtRQUN4RCx5RkFBeUY7UUFDekYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxRQUFrQjtRQUN0RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQWlCLENBQVcsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMseUJBQXlCLENBQUMsUUFBa0I7UUFDdEQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLDZCQUE2QixDQUFDLFFBQWtCLEVBQUUsV0FBVyxHQUFHLEtBQUssRUFBRSxTQUFrQjtRQUNuRyxPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQzFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBNEIsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUEsQ0FDckksQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxRQUFrQixFQUFFLE1BQStCLEVBQUUsV0FBVyxHQUFHLEtBQUssRUFBRSxTQUFrQjtRQUNqSSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbEIsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEQsT0FBTyxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQStCLENBQUM7UUFDakksQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxlQUFlLENBQUMsUUFBa0IsRUFBRSxLQUF1QjtRQUNyRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUMzQixPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO1NBQ3ZGO2FBQU07WUFDSCxPQUFPLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUUsUUFBUSxDQUFDLEtBQUssQ0FBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDdEY7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxPQUFlLEVBQUUsS0FBdUI7UUFDaEYsTUFBTSxVQUFVLEdBQUcsT0FBYyxDQUFDO1FBQ2xDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzNCLE9BQU8sUUFBUSxDQUFDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUM7U0FDdEc7YUFBTTtZQUNILE9BQU8sT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBRSxVQUFVLENBQUMsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUMxRjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RW51bVZhbHVlfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtFbnVtQ29uc3RhbnRUeXBlLCBFbnVtVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgRW51bVV0aWwge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYXJyYXkgb2YgbmFtZXMgZm9yIGNvbnN0YW50cyBpbiBlbnVtLlxuICAgICAqIEBwYXJhbSBlbnVtVHlwZSBFbnVtIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldENvbnN0YW50TmFtZXMoZW51bVR5cGU6IEVudW1UeXBlKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBFbnVtVXRpbC5nZXRDb25zdGFudE5hbWVzRnJvbUVudW1PYmplY3QoZW51bVR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYXJyYXkgb2YgbmFtZXMgZm9yIGNvbnN0YW50cyBpbiBlbnVtLlxuICAgICAqIEBwYXJhbSBlbnVtT2JqIEVudW0gb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q29uc3RhbnROYW1lc0Zyb21FbnVtT2JqZWN0KGVudW1PYmo6IG9iamVjdCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICAvLyBpbiBudW1iZXIgZW51bSwgdGhlIG51bWJlcnMgYXJlIGFsc28gcmVwcmVzZW50ZWQgaW4gb2JqZWN0cyBhbmQgc2hvdWxkIGJlIGZpbHRlcmVkIG91dFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZW51bU9iaikuZmlsdGVyKHYgPT4gaXNOYU4oK3YpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMgZm9yIGNvbnN0YW50cyBpbiBlbnVtLlxuICAgICAqIEBwYXJhbSBlbnVtVHlwZSBFbnVtIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldENvbnN0YW50VmFsdWVzQXNTdHJpbmcoZW51bVR5cGU6IEVudW1UeXBlKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnVtVHlwZSkubWFwKHYgPT4gZW51bVR5cGVbdiBhcyBrZXlvZiBvYmplY3RdIGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhcnJheSBvZiBudW1iZXIgdmFsdWVzIGZvciBjb25zdGFudHMgaW4gZW51bS5cbiAgICAgKiBAcGFyYW0gZW51bVR5cGUgRW51bSBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRDb25zdGFudFZhbHVlc0FzTnVtYmVyKGVudW1UeXBlOiBFbnVtVHlwZSk6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZW51bVR5cGUpXG4gICAgICAgICAgICAuZmlsdGVyKHYgPT4gIWlzTmFOKCt2KSlcbiAgICAgICAgICAgIC5tYXAodiA9PiArdik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhcnJheSBvZiB0eXBlIEVudW1WYWx1ZSBmb3IgYWxsIGNvbnN0YW50cyBpbiBlbnVtLlxuICAgICAqIEBwYXJhbSBlbnVtVHlwZSBFbnVtIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gbmFtZUFzVmFsdWUgSWYgdXNlIG5hbWUgb2YgY29uc3RhbnQgYXMgdmFsdWUgKG9wdGlvbmFsLCBkZWZhdWx0OiBmYWxzZSkuXG4gICAgICogQHBhcmFtIHRpdGxlUGF0aCBCYXNlIHBhdGggZm9yIHRpdGxlIHRvIHVzZSBhcyB0cmFuc2xhdGlvbiAob3B0aW9uYWwpLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNvbnN0YW50c0FzRW51bVZhbHVlQXJyYXkoZW51bVR5cGU6IEVudW1UeXBlLCBuYW1lQXNWYWx1ZSA9IGZhbHNlLCB0aXRsZVBhdGg/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIEVudW1VdGlsLmdldENvbnN0YW50TmFtZXMoZW51bVR5cGUpLm1hcChcbiAgICAgICAgICAgIG4gPT4gPEVudW1WYWx1ZTxzdHJpbmcgfCBudW1iZXI+PntuYW1lOiBuLCB0aXRsZTogYCR7dGl0bGVQYXRoID8gYCR7dGl0bGVQYXRofS5gIDogJyd9JHtufWAsIHZhbHVlOiBuYW1lQXNWYWx1ZSA/IG4gOiBlbnVtVHlwZVtuXX1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFycmF5IG9mIHR5cGUgRW51bVZhbHVlIGZvciBwcm92aWRlZCB2YWx1ZXMgaW4gZW51bS5cbiAgICAgKiBAcGFyYW0gZW51bVR5cGUgRW51bSBvYmplY3QuXG4gICAgICogQHBhcmFtIG5hbWVBc1ZhbHVlIElmIHVzZSBuYW1lIG9mIGNvbnN0YW50IGFzIHZhbHVlIChvcHRpb25hbCwgZGVmYXVsdDogZmFsc2UpLlxuICAgICAqIEBwYXJhbSB0aXRsZVBhdGggQmFzZSBwYXRoIGZvciB0aXRsZSB0byB1c2UgYXMgdHJhbnNsYXRpb24gKG9wdGlvbmFsKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21WYWx1ZXNBc0VudW1WYWx1ZUFycmF5KGVudW1UeXBlOiBFbnVtVHlwZSwgdmFsdWVzOiBBcnJheTxFbnVtQ29uc3RhbnRUeXBlPiwgbmFtZUFzVmFsdWUgPSBmYWxzZSwgdGl0bGVQYXRoPzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMubWFwKHYgPT4ge1xuICAgICAgICAgICAgY29uc3QgayA9IEVudW1VdGlsLmdldENvbnN0YW50TmFtZShlbnVtVHlwZSwgdik7XG4gICAgICAgICAgICByZXR1cm4ge25hbWU6IGssIHRpdGxlOiBgJHt0aXRsZVBhdGggPyBgJHt0aXRsZVBhdGh9LmAgOiAnJ30ke2t9YCwgdmFsdWU6IG5hbWVBc1ZhbHVlID8gayA6IHZ9IGFzIEVudW1WYWx1ZTxzdHJpbmcgfCBudW1iZXI+O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGNvbnN0YW50IG5hbWUgZm9yIHZhbHVlLlxuICAgICAqIEBwYXJhbSBlbnVtVHlwZSBFbnVtIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgb2YgZW51bSBjb25zdGFudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldENvbnN0YW50TmFtZShlbnVtVHlwZTogRW51bVR5cGUsIHZhbHVlOiBFbnVtQ29uc3RhbnRUeXBlKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gRW51bVV0aWwuZ2V0Q29uc3RhbnROYW1lcyhlbnVtVHlwZSkuZmluZChjID0+IGVudW1UeXBlW2NdID09PSB2YWx1ZSkgPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZW51bVR5cGVbdmFsdWVdICE9PSAndW5kZWZpbmVkJyA/IChlbnVtVHlwZVt2YWx1ZV0gYXMgc3RyaW5nKSA6IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGNvbnN0YW50IG5hbWUgZm9yIHZhbHVlLlxuICAgICAqIEBwYXJhbSBlbnVtT2JqIEVudW0gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiBlbnVtIGNvbnN0YW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q29uc3RhbnROYW1lRnJvbUVudW1PYmplY3QoZW51bU9iajogb2JqZWN0LCB2YWx1ZTogRW51bUNvbnN0YW50VHlwZSk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCBlbnVtT2JqQW55ID0gZW51bU9iaiBhcyBhbnk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gRW51bVV0aWwuZ2V0Q29uc3RhbnROYW1lc0Zyb21FbnVtT2JqZWN0KGVudW1PYmopLmZpbmQoYyA9PiBlbnVtT2JqQW55W2NdID09PSB2YWx1ZSkgPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZW51bU9iakFueVt2YWx1ZV0gIT09ICd1bmRlZmluZWQnID8gKGVudW1PYmpBbnlbdmFsdWVdIGFzIHN0cmluZykgOiBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19