@siliconst/metaui 1.0.2 → 1.2.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 (183) hide show
  1. package/README.md +134 -123
  2. package/package.json +3 -2
  3. package/src/nz/co/siliconst/ui5/metaui/.library +7 -7
  4. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost-dbg.js +299 -163
  5. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost-dbg.js.map +1 -1
  6. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.d.ts +54 -6
  7. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.d.ts.map +1 -1
  8. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.js +1 -1
  9. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.js.map +1 -1
  10. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.ts +292 -162
  11. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js +51 -43
  12. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js.map +1 -1
  13. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts +5 -0
  14. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts.map +1 -1
  15. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js +1 -1
  16. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js.map +1 -1
  17. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.ts +49 -40
  18. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +81 -58
  19. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
  20. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +5 -12
  21. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
  22. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
  23. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
  24. package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +82 -56
  25. package/src/nz/co/siliconst/ui5/metaui/core/EventBus-dbg.js +65 -50
  26. package/src/nz/co/siliconst/ui5/metaui/core/EventBus-dbg.js.map +1 -1
  27. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.d.ts +9 -0
  28. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.d.ts.map +1 -1
  29. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.js +1 -1
  30. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.js.map +1 -1
  31. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.ts +60 -45
  32. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +72 -59
  33. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
  34. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts +6 -4
  35. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
  36. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
  37. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
  38. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +71 -56
  39. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +145 -36
  40. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
  41. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts +13 -8
  42. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
  43. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js +1 -1
  44. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
  45. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +157 -31
  46. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js +55 -55
  47. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js.map +1 -1
  48. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts.map +1 -1
  49. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js.map +1 -1
  50. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.ts +56 -56
  51. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus-dbg.js +1 -1
  52. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus-dbg.js.map +1 -1
  53. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus.d.ts.map +1 -1
  54. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus.ts +29 -29
  55. package/src/nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager-dbg.js +1 -1
  56. package/src/nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager-dbg.js.map +1 -1
  57. package/src/nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager.d.ts +6 -12
  58. package/src/nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager.d.ts.map +1 -1
  59. package/src/nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager.ts +21 -26
  60. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin-dbg.js +1 -1
  61. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin-dbg.js.map +1 -1
  62. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts +3 -20
  63. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts.map +1 -1
  64. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.ts +14 -33
  65. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js +1 -1
  66. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js.map +1 -1
  67. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts +33 -43
  68. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
  69. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +70 -70
  70. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout-dbg.js +23 -38
  71. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout-dbg.js.map +1 -1
  72. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.d.ts +4 -17
  73. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.d.ts.map +1 -1
  74. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.js +1 -1
  75. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.js.map +1 -1
  76. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.ts +22 -34
  77. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +98 -56
  78. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js.map +1 -1
  79. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts +7 -7
  80. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts.map +1 -1
  81. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js +1 -1
  82. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js.map +1 -1
  83. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts +97 -60
  84. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js +102 -90
  85. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js.map +1 -1
  86. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts +4 -8
  87. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts.map +1 -1
  88. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js +1 -1
  89. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js.map +1 -1
  90. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.ts +119 -102
  91. package/src/nz/co/siliconst/ui5/metaui/library-dbg.js +43 -32
  92. package/src/nz/co/siliconst/ui5/metaui/library-dbg.js.map +1 -1
  93. package/src/nz/co/siliconst/ui5/metaui/library-preload.js +22 -17
  94. package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
  95. package/src/nz/co/siliconst/ui5/metaui/library.d.ts.map +1 -1
  96. package/src/nz/co/siliconst/ui5/metaui/library.js +1 -1
  97. package/src/nz/co/siliconst/ui5/metaui/library.js.map +1 -1
  98. package/src/nz/co/siliconst/ui5/metaui/library.ts +55 -43
  99. package/src/nz/co/siliconst/ui5/metaui/manifest.json +1 -0
  100. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin-dbg.js +68 -0
  101. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin-dbg.js.map +1 -0
  102. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.d.ts +15 -0
  103. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.d.ts.map +1 -0
  104. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.js +2 -0
  105. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.js.map +1 -0
  106. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.ts +71 -0
  107. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin-dbg.js +54 -59
  108. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin-dbg.js.map +1 -1
  109. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.d.ts +8 -27
  110. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.d.ts.map +1 -1
  111. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.js +1 -1
  112. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.js.map +1 -1
  113. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.ts +56 -58
  114. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin-dbg.js +41 -42
  115. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin-dbg.js.map +1 -1
  116. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.d.ts +2 -2
  117. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.d.ts.map +1 -1
  118. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.js +1 -1
  119. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.js.map +1 -1
  120. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.ts +41 -42
  121. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin-dbg.js +68 -60
  122. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin-dbg.js.map +1 -1
  123. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin.d.ts +2 -2
  124. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin.d.ts.map +1 -1
  125. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin.js +1 -1
  126. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin.js.map +1 -1
  127. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin.ts +69 -63
  128. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin-dbg.js +68 -0
  129. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin-dbg.js.map +1 -0
  130. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.d.ts +18 -0
  131. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.d.ts.map +1 -0
  132. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.js +2 -0
  133. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.js.map +1 -0
  134. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.ts +68 -0
  135. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin-dbg.js +66 -66
  136. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin-dbg.js.map +1 -1
  137. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.d.ts +2 -2
  138. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.d.ts.map +1 -1
  139. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.js +1 -1
  140. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.js.map +1 -1
  141. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.ts +65 -65
  142. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin-dbg.js +55 -53
  143. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin-dbg.js.map +1 -1
  144. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin.d.ts +3 -3
  145. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin.d.ts.map +1 -1
  146. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin.js +1 -1
  147. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin.js.map +1 -1
  148. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin.ts +56 -55
  149. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin-dbg.js +56 -53
  150. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin-dbg.js.map +1 -1
  151. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.d.ts +2 -2
  152. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.d.ts.map +1 -1
  153. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.js +1 -1
  154. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.js.map +1 -1
  155. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.ts +58 -55
  156. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin-dbg.js +43 -0
  157. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin-dbg.js.map +1 -0
  158. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin.d.ts +18 -0
  159. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin.d.ts.map +1 -0
  160. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin.js +2 -0
  161. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin.js.map +1 -0
  162. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin.ts +42 -0
  163. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin-dbg.js +58 -0
  164. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin-dbg.js.map +1 -0
  165. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin.d.ts +18 -0
  166. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin.d.ts.map +1 -0
  167. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin.js +2 -0
  168. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin.js.map +1 -0
  169. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin.ts +58 -0
  170. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin-dbg.js +74 -0
  171. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin-dbg.js.map +1 -0
  172. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin.d.ts +18 -0
  173. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin.d.ts.map +1 -0
  174. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin.js +2 -0
  175. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin.js.map +1 -0
  176. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin.ts +71 -0
  177. package/ui5.yaml +3 -3
  178. package/test-resources/App.js +0 -11
  179. package/test-resources/Main.controller.js +0 -73
  180. package/test-resources/Main.view.xml +0 -42
  181. package/test-resources/index.html +0 -21
  182. package/test-resources/mockData.json +0 -27
  183. package/test-resources/mockSchema.json +0 -98
@@ -0,0 +1,68 @@
1
+ sap.ui.define(["./BasePlugin", "sap/m/DateTimePicker"], function (___BasePlugin, DateTimePicker) {
2
+ "use strict";
3
+
4
+ /**
5
+ * @file DateTimePlugin.ts
6
+ * @description Handles rendering logic for DateTime strings (timestamps).
7
+ */
8
+ const BasePlugin = ___BasePlugin["BasePlugin"];
9
+ /**
10
+ * Handles rendering and logic for timestamps/datetime inputs.
11
+ */
12
+ class DateTimePlugin extends BasePlugin {
13
+ render(fieldMetadata, bindingPath, modelName = "meta") {
14
+ this.metadata = fieldMetadata;
15
+ this.control = new DateTimePicker({
16
+ value: {
17
+ path: `${modelName}>${bindingPath}`,
18
+ type: "sap.ui.model.type.DateTime",
19
+ formatOptions: {
20
+ source: {
21
+ pattern: "yyyy-MM-dd'T'HH:mm:ss'Z'"
22
+ },
23
+ pattern: "yyyy-MM-dd'T'HH:mm:ss'Z'"
24
+ }
25
+ },
26
+ editable: !fieldMetadata.ui?.readOnly,
27
+ required: fieldMetadata.required,
28
+ change: oEvent => {
29
+ const val = oEvent.getParameter("value");
30
+ this.publishChange(val);
31
+ this.validate();
32
+ }
33
+ });
34
+ return this.control;
35
+ }
36
+ validate() {
37
+ if (!this.control || !this.metadata) return true;
38
+ const input = this.control;
39
+ const isValid = typeof input.isValidValue === "function" ? input.isValidValue() : true;
40
+ const val = input.getValue();
41
+ if (this.metadata.required && (!val || typeof val !== 'string' || val.trim() === "")) {
42
+ input.setValueState("Error");
43
+ input.setValueStateText("This field is required.");
44
+ return false;
45
+ }
46
+ if (val && !isValid) {
47
+ input.setValueState("Error");
48
+ input.setValueStateText("Invalid datetime format.");
49
+ return false;
50
+ }
51
+ input.setValueState("None");
52
+ return true;
53
+ }
54
+ applyState() {
55
+ if (this.control && this.metadata) {
56
+ const input = this.control;
57
+ input.setEditable(!this.metadata.ui?.readOnly);
58
+ input.setRequired(this.metadata.required);
59
+ }
60
+ }
61
+ }
62
+ var __exports = {
63
+ __esModule: true
64
+ };
65
+ __exports.DateTimePlugin = DateTimePlugin;
66
+ return __exports;
67
+ });
68
+ //# sourceMappingURL=DateTimePlugin-dbg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateTimePlugin-dbg.js","names":["BasePlugin","___BasePlugin","DateTimePlugin","render","fieldMetadata","bindingPath","modelName","metadata","control","DateTimePicker","value","path","type","formatOptions","source","pattern","editable","ui","readOnly","required","change","oEvent","val","getParameter","publishChange","validate","input","isValid","isValidValue","getValue","trim","setValueState","setValueStateText","applyState","setEditable","setRequired","__exports","__esModule"],"sources":["DateTimePlugin.ts"],"sourcesContent":["/**\n * @file DateTimePlugin.ts\n * @description Handles rendering logic for DateTime strings (timestamps).\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../interfaces/ISchema\";\nimport DateTimePicker from \"sap/m/DateTimePicker\";\nimport Control from \"sap/ui/core/Control\";\n\n/**\n * Handles rendering and logic for timestamps/datetime inputs.\n */\nexport class DateTimePlugin extends BasePlugin {\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\"): Control {\n this.metadata = fieldMetadata;\n \n this.control = new DateTimePicker({\n value: {\n path: `${modelName}>${bindingPath}`,\n type: \"sap.ui.model.type.DateTime\",\n formatOptions: {\n source: { pattern: \"yyyy-MM-dd'T'HH:mm:ss'Z'\" },\n pattern: \"yyyy-MM-dd'T'HH:mm:ss'Z'\"\n }\n },\n editable: !fieldMetadata.ui?.readOnly,\n required: fieldMetadata.required,\n change: (oEvent: any) => {\n const val = oEvent.getParameter(\"value\");\n this.publishChange(val);\n this.validate();\n }\n });\n\n return this.control;\n }\n\n public validate(): boolean {\n if (!this.control || !this.metadata) return true;\n const input = this.control as DateTimePicker;\n const isValid = typeof input.isValidValue === \"function\" ? input.isValidValue() : true;\n const val = input.getValue();\n\n if (this.metadata.required && (!val || typeof val !== 'string' || val.trim() === \"\")) {\n input.setValueState(\"Error\" as any);\n input.setValueStateText(\"This field is required.\");\n return false;\n }\n\n if (val && !isValid) {\n input.setValueState(\"Error\" as any);\n input.setValueStateText(\"Invalid datetime format.\");\n return false;\n }\n\n input.setValueState(\"None\" as any);\n return true;\n }\n\n protected applyState(): void {\n if (this.control && this.metadata) {\n const input = this.control as DateTimePicker;\n input.setEditable(!this.metadata.ui?.readOnly);\n input.setRequired(this.metadata.required);\n }\n }\n}\n"],"mappings":";;;EAAA;AACA;AACA;AACA;EAHA,MAKSA,UAAU,GAAAC,aAAA;EAKnB;AACA;AACA;EACO,MAAMC,cAAc,SAASF,UAAU,CAAC;IACpCG,MAAMA,CAACC,aAAgC,EAAEC,WAAmB,EAAEC,SAAiB,GAAG,MAAM,EAAW;MACtG,IAAI,CAACC,QAAQ,GAAGH,aAAa;MAE7B,IAAI,CAACI,OAAO,GAAG,IAAIC,cAAc,CAAC;QAC9BC,KAAK,EAAE;UACHC,IAAI,EAAE,GAAGL,SAAS,IAAID,WAAW,EAAE;UACnCO,IAAI,EAAE,4BAA4B;UAClCC,aAAa,EAAE;YACXC,MAAM,EAAE;cAAEC,OAAO,EAAE;YAA2B,CAAC;YAC/CA,OAAO,EAAE;UACb;QACJ,CAAC;QACDC,QAAQ,EAAE,CAACZ,aAAa,CAACa,EAAE,EAAEC,QAAQ;QACrCC,QAAQ,EAAEf,aAAa,CAACe,QAAQ;QAChCC,MAAM,EAAGC,MAAW,IAAK;UACrB,MAAMC,GAAG,GAAGD,MAAM,CAACE,YAAY,CAAC,OAAO,CAAC;UACxC,IAAI,CAACC,aAAa,CAACF,GAAG,CAAC;UACvB,IAAI,CAACG,QAAQ,CAAC,CAAC;QACnB;MACJ,CAAC,CAAC;MAEF,OAAO,IAAI,CAACjB,OAAO;IACvB;IAEOiB,QAAQA,CAAA,EAAY;MACvB,IAAI,CAAC,IAAI,CAACjB,OAAO,IAAI,CAAC,IAAI,CAACD,QAAQ,EAAE,OAAO,IAAI;MAChD,MAAMmB,KAAK,GAAG,IAAI,CAAClB,OAAyB;MAC5C,MAAMmB,OAAO,GAAG,OAAOD,KAAK,CAACE,YAAY,KAAK,UAAU,GAAGF,KAAK,CAACE,YAAY,CAAC,CAAC,GAAG,IAAI;MACtF,MAAMN,GAAG,GAAGI,KAAK,CAACG,QAAQ,CAAC,CAAC;MAE5B,IAAI,IAAI,CAACtB,QAAQ,CAACY,QAAQ,KAAK,CAACG,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAIA,GAAG,CAACQ,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;QAClFJ,KAAK,CAACK,aAAa,CAAC,OAAc,CAAC;QACnCL,KAAK,CAACM,iBAAiB,CAAC,yBAAyB,CAAC;QAClD,OAAO,KAAK;MAChB;MAEA,IAAIV,GAAG,IAAI,CAACK,OAAO,EAAE;QACjBD,KAAK,CAACK,aAAa,CAAC,OAAc,CAAC;QACnCL,KAAK,CAACM,iBAAiB,CAAC,0BAA0B,CAAC;QACnD,OAAO,KAAK;MAChB;MAEAN,KAAK,CAACK,aAAa,CAAC,MAAa,CAAC;MAClC,OAAO,IAAI;IACf;IAEUE,UAAUA,CAAA,EAAS;MACzB,IAAI,IAAI,CAACzB,OAAO,IAAI,IAAI,CAACD,QAAQ,EAAE;QAC/B,MAAMmB,KAAK,GAAG,IAAI,CAAClB,OAAyB;QAC5CkB,KAAK,CAACQ,WAAW,CAAC,CAAC,IAAI,CAAC3B,QAAQ,CAACU,EAAE,EAAEC,QAAQ,CAAC;QAC9CQ,KAAK,CAACS,WAAW,CAAC,IAAI,CAAC5B,QAAQ,CAACY,QAAQ,CAAC;MAC7C;IACJ;EACJ;EAAC,IAAAiB,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAAlC,cAAA,GAAAA,cAAA;EAAA,OAAAkC,SAAA;AAAA","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ declare module "nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin" {
2
+ /**
3
+ * @file DateTimePlugin.ts
4
+ * @description Handles rendering logic for DateTime strings (timestamps).
5
+ */
6
+ import { BasePlugin } from "nz/co/siliconst/ui5/metaui/plugins/BasePlugin";
7
+ import { IPropertyMetadata } from "nz/co/siliconst/ui5/metaui/interfaces/ISchema";
8
+ import Control from "sap/ui/core/Control";
9
+ /**
10
+ * Handles rendering and logic for timestamps/datetime inputs.
11
+ */
12
+ export class DateTimePlugin extends BasePlugin {
13
+ render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string): Control;
14
+ validate(): boolean;
15
+ protected applyState(): void;
16
+ }
17
+ }
18
+ //# sourceMappingURL=DateTimePlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateTimePlugin.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,mDAAmD,CAAC;IACnE;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;IAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAElF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAE1C;;OAEG;IACH,MAAa,cAAe,SAAQ,UAAU;QACnC,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAe,GAAG,OAAO;QAwBlG,QAAQ,IAAI,OAAO;QAsB1B,SAAS,CAAC,UAAU,IAAI,IAAI;KAO/B;CAEA"}
@@ -0,0 +1,2 @@
1
+ sap.ui.define(["./BasePlugin","sap/m/DateTimePicker"],function(t,e){"use strict";const a=t["BasePlugin"];class i extends a{render(t,a,i="meta"){this.metadata=t;this.control=new e({value:{path:`${i}>${a}`,type:"sap.ui.model.type.DateTime",formatOptions:{source:{pattern:"yyyy-MM-dd'T'HH:mm:ss'Z'"},pattern:"yyyy-MM-dd'T'HH:mm:ss'Z'"}},editable:!t.ui?.readOnly,required:t.required,change:t=>{const e=t.getParameter("value");this.publishChange(e);this.validate()}});return this.control}validate(){if(!this.control||!this.metadata)return true;const t=this.control;const e=typeof t.isValidValue==="function"?t.isValidValue():true;const a=t.getValue();if(this.metadata.required&&(!a||typeof a!=="string"||a.trim()==="")){t.setValueState("Error");t.setValueStateText("This field is required.");return false}if(a&&!e){t.setValueState("Error");t.setValueStateText("Invalid datetime format.");return false}t.setValueState("None");return true}applyState(){if(this.control&&this.metadata){const t=this.control;t.setEditable(!this.metadata.ui?.readOnly);t.setRequired(this.metadata.required)}}}var r={__esModule:true};r.DateTimePlugin=i;return r});
2
+ //# sourceMappingURL=DateTimePlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateTimePlugin.js","names":["BasePlugin","___BasePlugin","DateTimePlugin","render","fieldMetadata","bindingPath","modelName","this","metadata","control","DateTimePicker","value","path","type","formatOptions","source","pattern","editable","ui","readOnly","required","change","oEvent","val","getParameter","publishChange","validate","input","isValid","isValidValue","getValue","trim","setValueState","setValueStateText","applyState","setEditable","setRequired","__exports","__esModule"],"sources":["DateTimePlugin.ts"],"sourcesContent":["/**\n * @file DateTimePlugin.ts\n * @description Handles rendering logic for DateTime strings (timestamps).\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../interfaces/ISchema\";\nimport DateTimePicker from \"sap/m/DateTimePicker\";\nimport Control from \"sap/ui/core/Control\";\n\n/**\n * Handles rendering and logic for timestamps/datetime inputs.\n */\nexport class DateTimePlugin extends BasePlugin {\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\"): Control {\n this.metadata = fieldMetadata;\n \n this.control = new DateTimePicker({\n value: {\n path: `${modelName}>${bindingPath}`,\n type: \"sap.ui.model.type.DateTime\",\n formatOptions: {\n source: { pattern: \"yyyy-MM-dd'T'HH:mm:ss'Z'\" },\n pattern: \"yyyy-MM-dd'T'HH:mm:ss'Z'\"\n }\n },\n editable: !fieldMetadata.ui?.readOnly,\n required: fieldMetadata.required,\n change: (oEvent: any) => {\n const val = oEvent.getParameter(\"value\");\n this.publishChange(val);\n this.validate();\n }\n });\n\n return this.control;\n }\n\n public validate(): boolean {\n if (!this.control || !this.metadata) return true;\n const input = this.control as DateTimePicker;\n const isValid = typeof input.isValidValue === \"function\" ? input.isValidValue() : true;\n const val = input.getValue();\n\n if (this.metadata.required && (!val || typeof val !== 'string' || val.trim() === \"\")) {\n input.setValueState(\"Error\" as any);\n input.setValueStateText(\"This field is required.\");\n return false;\n }\n\n if (val && !isValid) {\n input.setValueState(\"Error\" as any);\n input.setValueStateText(\"Invalid datetime format.\");\n return false;\n }\n\n input.setValueState(\"None\" as any);\n return true;\n }\n\n protected applyState(): void {\n if (this.control && this.metadata) {\n const input = this.control as DateTimePicker;\n input.setEditable(!this.metadata.ui?.readOnly);\n input.setRequired(this.metadata.required);\n }\n }\n}\n"],"mappings":"iFAAA,MAKSA,EAAUC,EAAA,cAQZ,MAAMC,UAAuBF,EACzBG,OAAOC,EAAkCC,EAAqBC,EAAoB,QACrFC,KAAKC,SAAWJ,EAEhBG,KAAKE,QAAU,IAAIC,EAAe,CAC9BC,MAAO,CACHC,KAAM,GAAGN,KAAaD,IACtBQ,KAAM,6BACNC,cAAe,CACXC,OAAQ,CAAEC,QAAS,4BACnBA,QAAS,6BAGjBC,UAAWb,EAAcc,IAAIC,SAC7BC,SAAUhB,EAAcgB,SACxBC,OAASC,IACL,MAAMC,EAAMD,EAAOE,aAAa,SAChCjB,KAAKkB,cAAcF,GACnBhB,KAAKmB,cAIb,OAAOnB,KAAKE,OAChB,CAEOiB,WACH,IAAKnB,KAAKE,UAAYF,KAAKC,SAAU,OAAO,KAC5C,MAAMmB,EAAQpB,KAAKE,QACnB,MAAMmB,SAAiBD,EAAME,eAAiB,WAAaF,EAAME,eAAiB,KAClF,MAAMN,EAAMI,EAAMG,WAElB,GAAIvB,KAAKC,SAASY,YAAcG,UAAcA,IAAQ,UAAYA,EAAIQ,SAAW,IAAK,CAClFJ,EAAMK,cAAc,SACpBL,EAAMM,kBAAkB,2BACxB,OAAO,KACX,CAEA,GAAIV,IAAQK,EAAS,CACjBD,EAAMK,cAAc,SACpBL,EAAMM,kBAAkB,4BACxB,OAAO,KACX,CAEAN,EAAMK,cAAc,QACpB,OAAO,IACX,CAEUE,aACN,GAAI3B,KAAKE,SAAWF,KAAKC,SAAU,CAC/B,MAAMmB,EAAQpB,KAAKE,QACnBkB,EAAMQ,aAAa5B,KAAKC,SAASU,IAAIC,UACrCQ,EAAMS,YAAY7B,KAAKC,SAASY,SACpC,CACJ,EACH,IAAAiB,EAAA,CAAAC,WAAA,MAAAD,EAAAnC,iBAAA,OAAAmC,CAAA","ignoreList":[]}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @file DateTimePlugin.ts
3
+ * @description Handles rendering logic for DateTime strings (timestamps).
4
+ */
5
+
6
+ import { BasePlugin } from "./BasePlugin";
7
+ import { IPropertyMetadata } from "../interfaces/ISchema";
8
+ import DateTimePicker from "sap/m/DateTimePicker";
9
+ import Control from "sap/ui/core/Control";
10
+
11
+ /**
12
+ * Handles rendering and logic for timestamps/datetime inputs.
13
+ */
14
+ export class DateTimePlugin extends BasePlugin {
15
+ public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = "meta"): Control {
16
+ this.metadata = fieldMetadata;
17
+
18
+ this.control = new DateTimePicker({
19
+ value: {
20
+ path: `${modelName}>${bindingPath}`,
21
+ type: "sap.ui.model.type.DateTime",
22
+ formatOptions: {
23
+ source: { pattern: "yyyy-MM-dd'T'HH:mm:ss'Z'" },
24
+ pattern: "yyyy-MM-dd'T'HH:mm:ss'Z'"
25
+ }
26
+ },
27
+ editable: !fieldMetadata.ui?.readOnly,
28
+ required: fieldMetadata.required,
29
+ change: (oEvent: any) => {
30
+ const val = oEvent.getParameter("value");
31
+ this.publishChange(val);
32
+ this.validate();
33
+ }
34
+ });
35
+
36
+ return this.control;
37
+ }
38
+
39
+ public validate(): boolean {
40
+ if (!this.control || !this.metadata) return true;
41
+ const input = this.control as DateTimePicker;
42
+ const isValid = typeof input.isValidValue === "function" ? input.isValidValue() : true;
43
+ const val = input.getValue();
44
+
45
+ if (this.metadata.required && (!val || typeof val !== 'string' || val.trim() === "")) {
46
+ input.setValueState("Error" as any);
47
+ input.setValueStateText("This field is required.");
48
+ return false;
49
+ }
50
+
51
+ if (val && !isValid) {
52
+ input.setValueState("Error" as any);
53
+ input.setValueStateText("Invalid datetime format.");
54
+ return false;
55
+ }
56
+
57
+ input.setValueState("None" as any);
58
+ return true;
59
+ }
60
+
61
+ protected applyState(): void {
62
+ if (this.control && this.metadata) {
63
+ const input = this.control as DateTimePicker;
64
+ input.setEditable(!this.metadata.ui?.readOnly);
65
+ input.setRequired(this.metadata.required);
66
+ }
67
+ }
68
+ }
@@ -1,67 +1,67 @@
1
- sap.ui.define(["./BasePlugin", "sap/m/Select", "sap/ui/core/Item"], function (___BasePlugin, Select, Item) {
2
- "use strict";
3
-
4
- /**
5
- * @file DropdownPlugin.ts
6
- * @description Renders a sap.m.Select utilizing the schema's valueHelp structure.
7
- */
8
- const BasePlugin = ___BasePlugin["BasePlugin"];
9
- /**
10
- * Handles rendering logic for dropdown inputs.
11
- */
12
- class DropdownPlugin extends BasePlugin {
13
- render(fieldMetadata, bindingPath) {
14
- this.metadata = fieldMetadata;
15
- const select = new Select({
16
- selectedKey: `{meta>${bindingPath}}`,
17
- enabled: !fieldMetadata.isReadOnly,
18
- change: oEvent => {
19
- const item = oEvent.getParameter("selectedItem");
20
- const val = item ? item.getKey() : "";
21
- this.publishChange(val);
22
- this.validate();
23
- }
24
- });
25
- if (fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp)) {
26
- if (!fieldMetadata.isRequired) {
27
- select.addItem(new Item({
28
- key: "",
29
- text: "--- Select ---"
30
- }));
31
- }
32
- fieldMetadata.valueHelp.forEach(vh => {
33
- select.addItem(new Item({
34
- key: vh.key,
35
- text: vh.text
36
- }));
37
- });
38
- }
39
- this.control = select;
40
- return this.control;
41
- }
42
- validate() {
43
- if (!this.control || !this.metadata) return true;
44
- const select = this.control;
45
- const val = select.getSelectedKey();
46
- if (this.metadata.isRequired && (!val || val.trim() === "")) {
47
- select.setValueState("Error");
48
- select.setValueStateText("Selection is required.");
49
- return false;
50
- }
51
- select.setValueState("None");
52
- return true;
53
- }
54
- applyState() {
55
- if (this.control && this.metadata) {
56
- const select = this.control;
57
- select.setEnabled(!this.metadata.isReadOnly);
58
- }
59
- }
60
- }
61
- var __exports = {
62
- __esModule: true
63
- };
64
- __exports.DropdownPlugin = DropdownPlugin;
65
- return __exports;
66
- });
1
+ sap.ui.define(["./BasePlugin", "sap/m/Select", "sap/ui/core/Item"], function (___BasePlugin, Select, Item) {
2
+ "use strict";
3
+
4
+ /**
5
+ * @file DropdownPlugin.ts
6
+ * @description Renders a sap.m.Select utilizing the schema's valueHelp structure.
7
+ */
8
+ const BasePlugin = ___BasePlugin["BasePlugin"];
9
+ /**
10
+ * Handles rendering logic for dropdown inputs.
11
+ */
12
+ class DropdownPlugin extends BasePlugin {
13
+ render(fieldMetadata, bindingPath, modelName = "meta") {
14
+ this.metadata = fieldMetadata;
15
+ const select = new Select({
16
+ selectedKey: `{${modelName}>${bindingPath}}`,
17
+ enabled: !fieldMetadata.ui?.readOnly,
18
+ forceSelection: false,
19
+ change: oEvent => {
20
+ const item = oEvent.getParameter("selectedItem");
21
+ const val = item ? item.getKey() : "";
22
+ this.publishChange(val);
23
+ this.validate();
24
+ }
25
+ });
26
+ if (fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp)) {
27
+ // Always add the empty placeholder so that 'required' checks can actually fire if the user hasn't made a choice
28
+ select.addItem(new Item({
29
+ key: "",
30
+ text: "--- Select ---"
31
+ }));
32
+ fieldMetadata.valueHelp.forEach(vh => {
33
+ select.addItem(new Item({
34
+ key: vh.key,
35
+ text: vh.text
36
+ }));
37
+ });
38
+ }
39
+ this.control = select;
40
+ return this.control;
41
+ }
42
+ validate() {
43
+ if (!this.control || !this.metadata) return true;
44
+ const select = this.control;
45
+ const val = select.getSelectedKey();
46
+ if (this.metadata.required && (!val || val.trim() === "")) {
47
+ select.setValueState("Error");
48
+ select.setValueStateText("Selection is required.");
49
+ return false;
50
+ }
51
+ select.setValueState("None");
52
+ return true;
53
+ }
54
+ applyState() {
55
+ if (this.control && this.metadata) {
56
+ const select = this.control;
57
+ select.setEnabled(!this.metadata.ui?.readOnly);
58
+ }
59
+ }
60
+ }
61
+ var __exports = {
62
+ __esModule: true
63
+ };
64
+ __exports.DropdownPlugin = DropdownPlugin;
65
+ return __exports;
66
+ });
67
67
  //# sourceMappingURL=DropdownPlugin-dbg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownPlugin-dbg.js","names":["BasePlugin","___BasePlugin","DropdownPlugin","render","fieldMetadata","bindingPath","metadata","select","Select","selectedKey","enabled","isReadOnly","change","oEvent","item","getParameter","val","getKey","publishChange","validate","valueHelp","Array","isArray","isRequired","addItem","Item","key","text","forEach","vh","control","getSelectedKey","trim","setValueState","setValueStateText","applyState","setEnabled","__exports","__esModule"],"sources":["DropdownPlugin.ts"],"sourcesContent":["/**\r\n * @file DropdownPlugin.ts\r\n * @description Renders a sap.m.Select utilizing the schema's valueHelp structure.\r\n */\r\n\r\nimport { BasePlugin } from \"./BasePlugin\";\r\nimport { IFieldMetadata } from \"../interfaces/ISchema\";\r\nimport Select from \"sap/m/Select\";\r\nimport Item from \"sap/ui/core/Item\";\r\nimport Control from \"sap/ui/core/Control\";\r\n\r\n/**\r\n * Handles rendering logic for dropdown inputs.\r\n */\r\nexport class DropdownPlugin extends BasePlugin {\r\n public render(fieldMetadata: IFieldMetadata, bindingPath: string): Control {\r\n this.metadata = fieldMetadata;\r\n \r\n const select = new Select({\r\n selectedKey: `{meta>${bindingPath}}`,\r\n enabled: !fieldMetadata.isReadOnly,\r\n change: (oEvent: any) => {\r\n const item = oEvent.getParameter(\"selectedItem\");\r\n const val = item ? item.getKey() : \"\";\r\n this.publishChange(val);\r\n this.validate();\r\n }\r\n });\r\n\r\n if (fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp)) {\r\n if (!fieldMetadata.isRequired) {\r\n select.addItem(new Item({ key: \"\", text: \"--- Select ---\" }));\r\n }\r\n \r\n fieldMetadata.valueHelp.forEach(vh => {\r\n select.addItem(new Item({ key: vh.key, text: vh.text }));\r\n });\r\n }\r\n\r\n this.control = select;\r\n return this.control;\r\n }\r\n\r\n public validate(): boolean {\r\n if (!this.control || !this.metadata) return true;\r\n const select = this.control as Select;\r\n const val = select.getSelectedKey();\r\n\r\n if (this.metadata.isRequired && (!val || val.trim() === \"\")) {\r\n select.setValueState(\"Error\" as any);\r\n select.setValueStateText(\"Selection is required.\");\r\n return false;\r\n }\r\n\r\n select.setValueState(\"None\" as any);\r\n return true;\r\n }\r\n\r\n protected applyState(): void {\r\n if (this.control && this.metadata) {\r\n const select = this.control as Select;\r\n select.setEnabled(!this.metadata.isReadOnly);\r\n }\r\n }\r\n}\r\n"],"mappings":";;;EAAA;AACA;AACA;AACA;EAHA,MAKSA,UAAU,GAAAC,aAAA;EAMnB;AACA;AACA;EACO,MAAMC,cAAc,SAASF,UAAU,CAAC;IACpCG,MAAMA,CAACC,aAA6B,EAAEC,WAAmB,EAAW;MACvE,IAAI,CAACC,QAAQ,GAAGF,aAAa;MAE7B,MAAMG,MAAM,GAAG,IAAIC,MAAM,CAAC;QACtBC,WAAW,EAAE,SAASJ,WAAW,GAAG;QACpCK,OAAO,EAAE,CAACN,aAAa,CAACO,UAAU;QAClCC,MAAM,EAAGC,MAAW,IAAK;UACrB,MAAMC,IAAI,GAAGD,MAAM,CAACE,YAAY,CAAC,cAAc,CAAC;UAChD,MAAMC,GAAG,GAAGF,IAAI,GAAGA,IAAI,CAACG,MAAM,CAAC,CAAC,GAAG,EAAE;UACrC,IAAI,CAACC,aAAa,CAACF,GAAG,CAAC;UACvB,IAAI,CAACG,QAAQ,CAAC,CAAC;QACnB;MACJ,CAAC,CAAC;MAEF,IAAIf,aAAa,CAACgB,SAAS,IAAIC,KAAK,CAACC,OAAO,CAAClB,aAAa,CAACgB,SAAS,CAAC,EAAE;QACnE,IAAI,CAAChB,aAAa,CAACmB,UAAU,EAAE;UAC3BhB,MAAM,CAACiB,OAAO,CAAC,IAAIC,IAAI,CAAC;YAAEC,GAAG,EAAE,EAAE;YAAEC,IAAI,EAAE;UAAiB,CAAC,CAAC,CAAC;QACjE;QAEAvB,aAAa,CAACgB,SAAS,CAACQ,OAAO,CAACC,EAAE,IAAI;UAClCtB,MAAM,CAACiB,OAAO,CAAC,IAAIC,IAAI,CAAC;YAAEC,GAAG,EAAEG,EAAE,CAACH,GAAG;YAAEC,IAAI,EAAEE,EAAE,CAACF;UAAK,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC;MACN;MAEA,IAAI,CAACG,OAAO,GAAGvB,MAAM;MACrB,OAAO,IAAI,CAACuB,OAAO;IACvB;IAEOX,QAAQA,CAAA,EAAY;MACvB,IAAI,CAAC,IAAI,CAACW,OAAO,IAAI,CAAC,IAAI,CAACxB,QAAQ,EAAE,OAAO,IAAI;MAChD,MAAMC,MAAM,GAAG,IAAI,CAACuB,OAAiB;MACrC,MAAMd,GAAG,GAAGT,MAAM,CAACwB,cAAc,CAAC,CAAC;MAEnC,IAAI,IAAI,CAACzB,QAAQ,CAACiB,UAAU,KAAK,CAACP,GAAG,IAAIA,GAAG,CAACgB,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;QACzDzB,MAAM,CAAC0B,aAAa,CAAC,OAAc,CAAC;QACpC1B,MAAM,CAAC2B,iBAAiB,CAAC,wBAAwB,CAAC;QAClD,OAAO,KAAK;MAChB;MAEA3B,MAAM,CAAC0B,aAAa,CAAC,MAAa,CAAC;MACnC,OAAO,IAAI;IACf;IAEUE,UAAUA,CAAA,EAAS;MACzB,IAAI,IAAI,CAACL,OAAO,IAAI,IAAI,CAACxB,QAAQ,EAAE;QAC/B,MAAMC,MAAM,GAAG,IAAI,CAACuB,OAAiB;QACrCvB,MAAM,CAAC6B,UAAU,CAAC,CAAC,IAAI,CAAC9B,QAAQ,CAACK,UAAU,CAAC;MAChD;IACJ;EACJ;EAAC,IAAA0B,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAAnC,cAAA,GAAAA,cAAA;EAAA,OAAAmC,SAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"DropdownPlugin-dbg.js","names":["BasePlugin","___BasePlugin","DropdownPlugin","render","fieldMetadata","bindingPath","modelName","metadata","select","Select","selectedKey","enabled","ui","readOnly","forceSelection","change","oEvent","item","getParameter","val","getKey","publishChange","validate","valueHelp","Array","isArray","addItem","Item","key","text","forEach","vh","control","getSelectedKey","required","trim","setValueState","setValueStateText","applyState","setEnabled","__exports","__esModule"],"sources":["DropdownPlugin.ts"],"sourcesContent":["/**\n * @file DropdownPlugin.ts\n * @description Renders a sap.m.Select utilizing the schema's valueHelp structure.\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../interfaces/ISchema\";\nimport Select from \"sap/m/Select\";\nimport Item from \"sap/ui/core/Item\";\nimport Control from \"sap/ui/core/Control\";\n\n/**\n * Handles rendering logic for dropdown inputs.\n */\nexport class DropdownPlugin extends BasePlugin {\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\"): Control {\n this.metadata = fieldMetadata;\n \n const select = new Select({\n selectedKey: `{${modelName}>${bindingPath}}`,\n enabled: !fieldMetadata.ui?.readOnly,\n forceSelection: false,\n change: (oEvent: any) => {\n const item = oEvent.getParameter(\"selectedItem\");\n const val = item ? item.getKey() : \"\";\n this.publishChange(val);\n this.validate();\n }\n });\n\n if (fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp)) {\n // Always add the empty placeholder so that 'required' checks can actually fire if the user hasn't made a choice\n select.addItem(new Item({ key: \"\", text: \"--- Select ---\" }));\n \n fieldMetadata.valueHelp.forEach(vh => {\n select.addItem(new Item({ key: vh.key, text: vh.text }));\n });\n }\n\n this.control = select;\n return this.control;\n }\n\n public validate(): boolean {\n if (!this.control || !this.metadata) return true;\n const select = this.control as Select;\n const val = select.getSelectedKey();\n\n if (this.metadata.required && (!val || val.trim() === \"\")) {\n select.setValueState(\"Error\" as any);\n select.setValueStateText(\"Selection is required.\");\n return false;\n }\n\n select.setValueState(\"None\" as any);\n return true;\n }\n\n protected applyState(): void {\n if (this.control && this.metadata) {\n const select = this.control as Select;\n select.setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":";;;EAAA;AACA;AACA;AACA;EAHA,MAKSA,UAAU,GAAAC,aAAA;EAMnB;AACA;AACA;EACO,MAAMC,cAAc,SAASF,UAAU,CAAC;IACpCG,MAAMA,CAACC,aAAgC,EAAEC,WAAmB,EAAEC,SAAiB,GAAG,MAAM,EAAW;MACtG,IAAI,CAACC,QAAQ,GAAGH,aAAa;MAE7B,MAAMI,MAAM,GAAG,IAAIC,MAAM,CAAC;QACtBC,WAAW,EAAE,IAAIJ,SAAS,IAAID,WAAW,GAAG;QAC5CM,OAAO,EAAE,CAACP,aAAa,CAACQ,EAAE,EAAEC,QAAQ;QACpCC,cAAc,EAAE,KAAK;QACrBC,MAAM,EAAGC,MAAW,IAAK;UACrB,MAAMC,IAAI,GAAGD,MAAM,CAACE,YAAY,CAAC,cAAc,CAAC;UAChD,MAAMC,GAAG,GAAGF,IAAI,GAAGA,IAAI,CAACG,MAAM,CAAC,CAAC,GAAG,EAAE;UACrC,IAAI,CAACC,aAAa,CAACF,GAAG,CAAC;UACvB,IAAI,CAACG,QAAQ,CAAC,CAAC;QACnB;MACJ,CAAC,CAAC;MAEF,IAAIlB,aAAa,CAACmB,SAAS,IAAIC,KAAK,CAACC,OAAO,CAACrB,aAAa,CAACmB,SAAS,CAAC,EAAE;QACnE;QACAf,MAAM,CAACkB,OAAO,CAAC,IAAIC,IAAI,CAAC;UAAEC,GAAG,EAAE,EAAE;UAAEC,IAAI,EAAE;QAAiB,CAAC,CAAC,CAAC;QAE7DzB,aAAa,CAACmB,SAAS,CAACO,OAAO,CAACC,EAAE,IAAI;UAClCvB,MAAM,CAACkB,OAAO,CAAC,IAAIC,IAAI,CAAC;YAAEC,GAAG,EAAEG,EAAE,CAACH,GAAG;YAAEC,IAAI,EAAEE,EAAE,CAACF;UAAK,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC;MACN;MAEA,IAAI,CAACG,OAAO,GAAGxB,MAAM;MACrB,OAAO,IAAI,CAACwB,OAAO;IACvB;IAEOV,QAAQA,CAAA,EAAY;MACvB,IAAI,CAAC,IAAI,CAACU,OAAO,IAAI,CAAC,IAAI,CAACzB,QAAQ,EAAE,OAAO,IAAI;MAChD,MAAMC,MAAM,GAAG,IAAI,CAACwB,OAAiB;MACrC,MAAMb,GAAG,GAAGX,MAAM,CAACyB,cAAc,CAAC,CAAC;MAEnC,IAAI,IAAI,CAAC1B,QAAQ,CAAC2B,QAAQ,KAAK,CAACf,GAAG,IAAIA,GAAG,CAACgB,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;QACvD3B,MAAM,CAAC4B,aAAa,CAAC,OAAc,CAAC;QACpC5B,MAAM,CAAC6B,iBAAiB,CAAC,wBAAwB,CAAC;QAClD,OAAO,KAAK;MAChB;MAEA7B,MAAM,CAAC4B,aAAa,CAAC,MAAa,CAAC;MACnC,OAAO,IAAI;IACf;IAEUE,UAAUA,CAAA,EAAS;MACzB,IAAI,IAAI,CAACN,OAAO,IAAI,IAAI,CAACzB,QAAQ,EAAE;QAC/B,MAAMC,MAAM,GAAG,IAAI,CAACwB,OAAiB;QACrCxB,MAAM,CAAC+B,UAAU,CAAC,CAAC,IAAI,CAAChC,QAAQ,CAACK,EAAE,EAAEC,QAAQ,CAAC;MAClD;IACJ;EACJ;EAAC,IAAA2B,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAAtC,cAAA,GAAAA,cAAA;EAAA,OAAAsC,SAAA;AAAA","ignoreList":[]}
@@ -4,13 +4,13 @@ declare module "nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin" {
4
4
  * @description Renders a sap.m.Select utilizing the schema's valueHelp structure.
5
5
  */
6
6
  import { BasePlugin } from "nz/co/siliconst/ui5/metaui/plugins/BasePlugin";
7
- import { IFieldMetadata } from "nz/co/siliconst/ui5/metaui/interfaces/ISchema";
7
+ import { IPropertyMetadata } from "nz/co/siliconst/ui5/metaui/interfaces/ISchema";
8
8
  import Control from "sap/ui/core/Control";
9
9
  /**
10
10
  * Handles rendering logic for dropdown inputs.
11
11
  */
12
12
  export class DropdownPlugin extends BasePlugin {
13
- render(fieldMetadata: IFieldMetadata, bindingPath: string): Control;
13
+ render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string): Control;
14
14
  validate(): boolean;
15
15
  protected applyState(): void;
16
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownPlugin.d.ts","sourceRoot":"..\\..\\..\\..\\..\\..\\..\\..","sources":["src\\nz\\co\\siliconst\\ui5\\metaui\\plugins\\DropdownPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,mDAAmD,CAAC;IACnE;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;IAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;IAG/E,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAE1C;;OAEG;IACH,MAAa,cAAe,SAAQ,UAAU;QACnC,MAAM,CAAC,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;QA4BnE,QAAQ,IAAI,OAAO;QAe1B,SAAS,CAAC,UAAU,IAAI,IAAI;KAM/B;CAEA"}
1
+ {"version":3,"file":"DropdownPlugin.d.ts","sourceRoot":"../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,mDAAmD,CAAC;IACnE;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;IAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAGlF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAE1C;;OAEG;IACH,MAAa,cAAe,SAAQ,UAAU;QACnC,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAe,GAAG,OAAO;QA4BlG,QAAQ,IAAI,OAAO;QAe1B,SAAS,CAAC,UAAU,IAAI,IAAI;KAM/B;CAEA"}
@@ -1,2 +1,2 @@
1
- sap.ui.define(["./BasePlugin","sap/m/Select","sap/ui/core/Item"],function(e,t,a){"use strict";const s=e["BasePlugin"];class i extends s{render(e,s){this.metadata=e;const i=new t({selectedKey:`{meta>${s}}`,enabled:!e.isReadOnly,change:e=>{const t=e.getParameter("selectedItem");const a=t?t.getKey():"";this.publishChange(a);this.validate()}});if(e.valueHelp&&Array.isArray(e.valueHelp)){if(!e.isRequired){i.addItem(new a({key:"",text:"--- Select ---"}))}e.valueHelp.forEach(e=>{i.addItem(new a({key:e.key,text:e.text}))})}this.control=i;return this.control}validate(){if(!this.control||!this.metadata)return true;const e=this.control;const t=e.getSelectedKey();if(this.metadata.isRequired&&(!t||t.trim()==="")){e.setValueState("Error");e.setValueStateText("Selection is required.");return false}e.setValueState("None");return true}applyState(){if(this.control&&this.metadata){const e=this.control;e.setEnabled(!this.metadata.isReadOnly)}}}var r={__esModule:true};r.DropdownPlugin=i;return r});
1
+ sap.ui.define(["./BasePlugin","sap/m/Select","sap/ui/core/Item"],function(e,t,a){"use strict";const r=e["BasePlugin"];class s extends r{render(e,r,s="meta"){this.metadata=e;const n=new t({selectedKey:`{${s}>${r}}`,enabled:!e.ui?.readOnly,forceSelection:false,change:e=>{const t=e.getParameter("selectedItem");const a=t?t.getKey():"";this.publishChange(a);this.validate()}});if(e.valueHelp&&Array.isArray(e.valueHelp)){n.addItem(new a({key:"",text:"--- Select ---"}));e.valueHelp.forEach(e=>{n.addItem(new a({key:e.key,text:e.text}))})}this.control=n;return this.control}validate(){if(!this.control||!this.metadata)return true;const e=this.control;const t=e.getSelectedKey();if(this.metadata.required&&(!t||t.trim()==="")){e.setValueState("Error");e.setValueStateText("Selection is required.");return false}e.setValueState("None");return true}applyState(){if(this.control&&this.metadata){const e=this.control;e.setEnabled(!this.metadata.ui?.readOnly)}}}var n={__esModule:true};n.DropdownPlugin=s;return n});
2
2
  //# sourceMappingURL=DropdownPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownPlugin.js","names":["BasePlugin","___BasePlugin","DropdownPlugin","render","fieldMetadata","bindingPath","this","metadata","select","Select","selectedKey","enabled","isReadOnly","change","oEvent","item","getParameter","val","getKey","publishChange","validate","valueHelp","Array","isArray","isRequired","addItem","Item","key","text","forEach","vh","control","getSelectedKey","trim","setValueState","setValueStateText","applyState","setEnabled","__exports","__esModule"],"sources":["DropdownPlugin.ts"],"sourcesContent":["/**\r\n * @file DropdownPlugin.ts\r\n * @description Renders a sap.m.Select utilizing the schema's valueHelp structure.\r\n */\r\n\r\nimport { BasePlugin } from \"./BasePlugin\";\r\nimport { IFieldMetadata } from \"../interfaces/ISchema\";\r\nimport Select from \"sap/m/Select\";\r\nimport Item from \"sap/ui/core/Item\";\r\nimport Control from \"sap/ui/core/Control\";\r\n\r\n/**\r\n * Handles rendering logic for dropdown inputs.\r\n */\r\nexport class DropdownPlugin extends BasePlugin {\r\n public render(fieldMetadata: IFieldMetadata, bindingPath: string): Control {\r\n this.metadata = fieldMetadata;\r\n \r\n const select = new Select({\r\n selectedKey: `{meta>${bindingPath}}`,\r\n enabled: !fieldMetadata.isReadOnly,\r\n change: (oEvent: any) => {\r\n const item = oEvent.getParameter(\"selectedItem\");\r\n const val = item ? item.getKey() : \"\";\r\n this.publishChange(val);\r\n this.validate();\r\n }\r\n });\r\n\r\n if (fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp)) {\r\n if (!fieldMetadata.isRequired) {\r\n select.addItem(new Item({ key: \"\", text: \"--- Select ---\" }));\r\n }\r\n \r\n fieldMetadata.valueHelp.forEach(vh => {\r\n select.addItem(new Item({ key: vh.key, text: vh.text }));\r\n });\r\n }\r\n\r\n this.control = select;\r\n return this.control;\r\n }\r\n\r\n public validate(): boolean {\r\n if (!this.control || !this.metadata) return true;\r\n const select = this.control as Select;\r\n const val = select.getSelectedKey();\r\n\r\n if (this.metadata.isRequired && (!val || val.trim() === \"\")) {\r\n select.setValueState(\"Error\" as any);\r\n select.setValueStateText(\"Selection is required.\");\r\n return false;\r\n }\r\n\r\n select.setValueState(\"None\" as any);\r\n return true;\r\n }\r\n\r\n protected applyState(): void {\r\n if (this.control && this.metadata) {\r\n const select = this.control as Select;\r\n select.setEnabled(!this.metadata.isReadOnly);\r\n }\r\n }\r\n}\r\n"],"mappings":"8FAAA,MAKSA,EAAUC,EAAA,cASZ,MAAMC,UAAuBF,EACzBG,OAAOC,EAA+BC,GACzCC,KAAKC,SAAWH,EAEhB,MAAMI,EAAS,IAAIC,EAAO,CACtBC,YAAa,SAASL,KACtBM,SAAUP,EAAcQ,WACxBC,OAASC,IACL,MAAMC,EAAOD,EAAOE,aAAa,gBACjC,MAAMC,EAAMF,EAAOA,EAAKG,SAAW,GACnCZ,KAAKa,cAAcF,GACnBX,KAAKc,cAIb,GAAIhB,EAAciB,WAAaC,MAAMC,QAAQnB,EAAciB,WAAY,CACnE,IAAKjB,EAAcoB,WAAY,CAC3BhB,EAAOiB,QAAQ,IAAIC,EAAK,CAAEC,IAAK,GAAIC,KAAM,mBAC7C,CAEAxB,EAAciB,UAAUQ,QAAQC,IAC5BtB,EAAOiB,QAAQ,IAAIC,EAAK,CAAEC,IAAKG,EAAGH,IAAKC,KAAME,EAAGF,SAExD,CAEAtB,KAAKyB,QAAUvB,EACf,OAAOF,KAAKyB,OAChB,CAEOX,WACH,IAAKd,KAAKyB,UAAYzB,KAAKC,SAAU,OAAO,KAC5C,MAAMC,EAASF,KAAKyB,QACpB,MAAMd,EAAMT,EAAOwB,iBAEnB,GAAI1B,KAAKC,SAASiB,cAAgBP,GAAOA,EAAIgB,SAAW,IAAK,CACzDzB,EAAO0B,cAAc,SACrB1B,EAAO2B,kBAAkB,0BACzB,OAAO,KACX,CAEA3B,EAAO0B,cAAc,QACrB,OAAO,IACX,CAEUE,aACN,GAAI9B,KAAKyB,SAAWzB,KAAKC,SAAU,CAC/B,MAAMC,EAASF,KAAKyB,QACpBvB,EAAO6B,YAAY/B,KAAKC,SAASK,WACrC,CACJ,EACH,IAAA0B,EAAA,CAAAC,WAAA,MAAAD,EAAApC,iBAAA,OAAAoC,CAAA","ignoreList":[]}
1
+ {"version":3,"file":"DropdownPlugin.js","names":["BasePlugin","___BasePlugin","DropdownPlugin","render","fieldMetadata","bindingPath","modelName","this","metadata","select","Select","selectedKey","enabled","ui","readOnly","forceSelection","change","oEvent","item","getParameter","val","getKey","publishChange","validate","valueHelp","Array","isArray","addItem","Item","key","text","forEach","vh","control","getSelectedKey","required","trim","setValueState","setValueStateText","applyState","setEnabled","__exports","__esModule"],"sources":["DropdownPlugin.ts"],"sourcesContent":["/**\n * @file DropdownPlugin.ts\n * @description Renders a sap.m.Select utilizing the schema's valueHelp structure.\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../interfaces/ISchema\";\nimport Select from \"sap/m/Select\";\nimport Item from \"sap/ui/core/Item\";\nimport Control from \"sap/ui/core/Control\";\n\n/**\n * Handles rendering logic for dropdown inputs.\n */\nexport class DropdownPlugin extends BasePlugin {\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\"): Control {\n this.metadata = fieldMetadata;\n \n const select = new Select({\n selectedKey: `{${modelName}>${bindingPath}}`,\n enabled: !fieldMetadata.ui?.readOnly,\n forceSelection: false,\n change: (oEvent: any) => {\n const item = oEvent.getParameter(\"selectedItem\");\n const val = item ? item.getKey() : \"\";\n this.publishChange(val);\n this.validate();\n }\n });\n\n if (fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp)) {\n // Always add the empty placeholder so that 'required' checks can actually fire if the user hasn't made a choice\n select.addItem(new Item({ key: \"\", text: \"--- Select ---\" }));\n \n fieldMetadata.valueHelp.forEach(vh => {\n select.addItem(new Item({ key: vh.key, text: vh.text }));\n });\n }\n\n this.control = select;\n return this.control;\n }\n\n public validate(): boolean {\n if (!this.control || !this.metadata) return true;\n const select = this.control as Select;\n const val = select.getSelectedKey();\n\n if (this.metadata.required && (!val || val.trim() === \"\")) {\n select.setValueState(\"Error\" as any);\n select.setValueStateText(\"Selection is required.\");\n return false;\n }\n\n select.setValueState(\"None\" as any);\n return true;\n }\n\n protected applyState(): void {\n if (this.control && this.metadata) {\n const select = this.control as Select;\n select.setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":"8FAAA,MAKSA,EAAUC,EAAA,cASZ,MAAMC,UAAuBF,EACzBG,OAAOC,EAAkCC,EAAqBC,EAAoB,QACrFC,KAAKC,SAAWJ,EAEhB,MAAMK,EAAS,IAAIC,EAAO,CACtBC,YAAa,IAAIL,KAAaD,KAC9BO,SAAUR,EAAcS,IAAIC,SAC5BC,eAAgB,MAChBC,OAASC,IACL,MAAMC,EAAOD,EAAOE,aAAa,gBACjC,MAAMC,EAAMF,EAAOA,EAAKG,SAAW,GACnCd,KAAKe,cAAcF,GACnBb,KAAKgB,cAIb,GAAInB,EAAcoB,WAAaC,MAAMC,QAAQtB,EAAcoB,WAAY,CAEnEf,EAAOkB,QAAQ,IAAIC,EAAK,CAAEC,IAAK,GAAIC,KAAM,oBAEzC1B,EAAcoB,UAAUO,QAAQC,IAC5BvB,EAAOkB,QAAQ,IAAIC,EAAK,CAAEC,IAAKG,EAAGH,IAAKC,KAAME,EAAGF,SAExD,CAEAvB,KAAK0B,QAAUxB,EACf,OAAOF,KAAK0B,OAChB,CAEOV,WACH,IAAKhB,KAAK0B,UAAY1B,KAAKC,SAAU,OAAO,KAC5C,MAAMC,EAASF,KAAK0B,QACpB,MAAMb,EAAMX,EAAOyB,iBAEnB,GAAI3B,KAAKC,SAAS2B,YAAcf,GAAOA,EAAIgB,SAAW,IAAK,CACvD3B,EAAO4B,cAAc,SACrB5B,EAAO6B,kBAAkB,0BACzB,OAAO,KACX,CAEA7B,EAAO4B,cAAc,QACrB,OAAO,IACX,CAEUE,aACN,GAAIhC,KAAK0B,SAAW1B,KAAKC,SAAU,CAC/B,MAAMC,EAASF,KAAK0B,QACpBxB,EAAO+B,YAAYjC,KAAKC,SAASK,IAAIC,SACzC,CACJ,EACH,IAAA2B,EAAA,CAAAC,WAAA,MAAAD,EAAAvC,iBAAA,OAAAuC,CAAA","ignoreList":[]}
@@ -1,65 +1,65 @@
1
- /**
2
- * @file DropdownPlugin.ts
3
- * @description Renders a sap.m.Select utilizing the schema's valueHelp structure.
4
- */
5
-
6
- import { BasePlugin } from "./BasePlugin";
7
- import { IFieldMetadata } from "../interfaces/ISchema";
8
- import Select from "sap/m/Select";
9
- import Item from "sap/ui/core/Item";
10
- import Control from "sap/ui/core/Control";
11
-
12
- /**
13
- * Handles rendering logic for dropdown inputs.
14
- */
15
- export class DropdownPlugin extends BasePlugin {
16
- public render(fieldMetadata: IFieldMetadata, bindingPath: string): Control {
17
- this.metadata = fieldMetadata;
18
-
19
- const select = new Select({
20
- selectedKey: `{meta>${bindingPath}}`,
21
- enabled: !fieldMetadata.isReadOnly,
22
- change: (oEvent: any) => {
23
- const item = oEvent.getParameter("selectedItem");
24
- const val = item ? item.getKey() : "";
25
- this.publishChange(val);
26
- this.validate();
27
- }
28
- });
29
-
30
- if (fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp)) {
31
- if (!fieldMetadata.isRequired) {
32
- select.addItem(new Item({ key: "", text: "--- Select ---" }));
33
- }
34
-
35
- fieldMetadata.valueHelp.forEach(vh => {
36
- select.addItem(new Item({ key: vh.key, text: vh.text }));
37
- });
38
- }
39
-
40
- this.control = select;
41
- return this.control;
42
- }
43
-
44
- public validate(): boolean {
45
- if (!this.control || !this.metadata) return true;
46
- const select = this.control as Select;
47
- const val = select.getSelectedKey();
48
-
49
- if (this.metadata.isRequired && (!val || val.trim() === "")) {
50
- select.setValueState("Error" as any);
51
- select.setValueStateText("Selection is required.");
52
- return false;
53
- }
54
-
55
- select.setValueState("None" as any);
56
- return true;
57
- }
58
-
59
- protected applyState(): void {
60
- if (this.control && this.metadata) {
61
- const select = this.control as Select;
62
- select.setEnabled(!this.metadata.isReadOnly);
63
- }
64
- }
65
- }
1
+ /**
2
+ * @file DropdownPlugin.ts
3
+ * @description Renders a sap.m.Select utilizing the schema's valueHelp structure.
4
+ */
5
+
6
+ import { BasePlugin } from "./BasePlugin";
7
+ import { IPropertyMetadata } from "../interfaces/ISchema";
8
+ import Select from "sap/m/Select";
9
+ import Item from "sap/ui/core/Item";
10
+ import Control from "sap/ui/core/Control";
11
+
12
+ /**
13
+ * Handles rendering logic for dropdown inputs.
14
+ */
15
+ export class DropdownPlugin extends BasePlugin {
16
+ public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = "meta"): Control {
17
+ this.metadata = fieldMetadata;
18
+
19
+ const select = new Select({
20
+ selectedKey: `{${modelName}>${bindingPath}}`,
21
+ enabled: !fieldMetadata.ui?.readOnly,
22
+ forceSelection: false,
23
+ change: (oEvent: any) => {
24
+ const item = oEvent.getParameter("selectedItem");
25
+ const val = item ? item.getKey() : "";
26
+ this.publishChange(val);
27
+ this.validate();
28
+ }
29
+ });
30
+
31
+ if (fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp)) {
32
+ // Always add the empty placeholder so that 'required' checks can actually fire if the user hasn't made a choice
33
+ select.addItem(new Item({ key: "", text: "--- Select ---" }));
34
+
35
+ fieldMetadata.valueHelp.forEach(vh => {
36
+ select.addItem(new Item({ key: vh.key, text: vh.text }));
37
+ });
38
+ }
39
+
40
+ this.control = select;
41
+ return this.control;
42
+ }
43
+
44
+ public validate(): boolean {
45
+ if (!this.control || !this.metadata) return true;
46
+ const select = this.control as Select;
47
+ const val = select.getSelectedKey();
48
+
49
+ if (this.metadata.required && (!val || val.trim() === "")) {
50
+ select.setValueState("Error" as any);
51
+ select.setValueStateText("Selection is required.");
52
+ return false;
53
+ }
54
+
55
+ select.setValueState("None" as any);
56
+ return true;
57
+ }
58
+
59
+ protected applyState(): void {
60
+ if (this.control && this.metadata) {
61
+ const select = this.control as Select;
62
+ select.setEnabled(!this.metadata.ui?.readOnly);
63
+ }
64
+ }
65
+ }