@siliconst/metaui 1.4.13 → 1.4.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +50 -3
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts +57 -4
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +44 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts +4 -0
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.ts +51 -4
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js +42 -5
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts +9 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.ts +44 -5
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry-dbg.js +47 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.d.ts +23 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaBuilderRegistry.ts +45 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +17 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts +10 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +19 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts +7 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +9 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin-dbg.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.d.ts +23 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchemaBuilderPlugin.ts +23 -0
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +6 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts +6 -1
- package/src/nz/co/siliconst/ui5/metaui/library-preload.js +29 -20
- package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js +3 -20
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.ts +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.ts +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.ts +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.ts +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.ts +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js +30 -17
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.ts +33 -15
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +35 -11
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts +38 -14
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.ts +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js +79 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts +35 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.ts +80 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.ts +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.ts +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder-dbg.js +226 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.d.ts +63 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerBuilder.ts +233 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver-dbg.js +43 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.d.ts +15 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerRefResolver.ts +37 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper-dbg.js +37 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.d.ts +18 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerTypeMapper.ts +28 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper-dbg.js +84 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.d.ts +27 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/swagger/SwaggerUIMapper.ts +80 -0
|
@@ -34,6 +34,7 @@ export class MultiInputPlugin extends BasePlugin {
|
|
|
34
34
|
public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = "meta", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {
|
|
35
35
|
this.onChange = onChange;
|
|
36
36
|
this.metadata = fieldMetadata;
|
|
37
|
+
this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;
|
|
37
38
|
|
|
38
39
|
if (!this.isEditable) {
|
|
39
40
|
this.control = new TextControl({
|
|
@@ -55,16 +56,14 @@ export class MultiInputPlugin extends BasePlugin {
|
|
|
55
56
|
tokenUpdate: (oEvent: Event) => {
|
|
56
57
|
const params = oEvent.getParameters();
|
|
57
58
|
const type = params.type;
|
|
58
|
-
const model = mi.getModel(modelName) as JSONModel;
|
|
59
|
-
|
|
60
|
-
// Get current array from model
|
|
61
|
-
const rawArr = model.getProperty(bindingPath);
|
|
62
|
-
const arr: string[] = Array.isArray(rawArr) ? [...rawArr] : [];
|
|
63
59
|
|
|
64
|
-
if (type === "
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
60
|
+
if (type === "removed") {
|
|
61
|
+
const model = mi.getModel(modelName) as JSONModel;
|
|
62
|
+
|
|
63
|
+
// Get current array from model
|
|
64
|
+
const rawArr = model.getProperty(bindingPath);
|
|
65
|
+
const arr: string[] = Array.isArray(rawArr) ? [...rawArr] : [];
|
|
66
|
+
|
|
68
67
|
const removedTokens = params.removedTokens as Token[];
|
|
69
68
|
removedTokens.forEach(t => {
|
|
70
69
|
const text = t.getText();
|
|
@@ -73,22 +72,41 @@ export class MultiInputPlugin extends BasePlugin {
|
|
|
73
72
|
arr.splice(idx, 1);
|
|
74
73
|
}
|
|
75
74
|
});
|
|
75
|
+
|
|
76
|
+
// Update model
|
|
77
|
+
model.setProperty(bindingPath, arr);
|
|
78
|
+
|
|
79
|
+
// Trigger engine validation/extraction
|
|
80
|
+
const result = this.validateAndApplyVisualState();
|
|
81
|
+
if (this.onChange) {
|
|
82
|
+
this.onChange(result.isValid, this.fieldKey);
|
|
83
|
+
}
|
|
76
84
|
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
// Add validator to instantly accept typed text, update model, and clear input
|
|
89
|
+
mi.addValidator((args: { text: string }) => {
|
|
90
|
+
const text = args.text?.trim();
|
|
91
|
+
if (text) {
|
|
92
|
+
const model = mi.getModel(modelName) as JSONModel;
|
|
93
|
+
const rawArr = model.getProperty(bindingPath);
|
|
94
|
+
const arr: string[] = Array.isArray(rawArr) ? [...rawArr] : [];
|
|
77
95
|
|
|
78
|
-
|
|
96
|
+
arr.push(text);
|
|
79
97
|
model.setProperty(bindingPath, arr);
|
|
80
98
|
|
|
99
|
+
// Clear the input value immediately
|
|
100
|
+
mi.setValue("");
|
|
101
|
+
|
|
81
102
|
// Trigger engine validation/extraction
|
|
82
103
|
const result = this.validateAndApplyVisualState();
|
|
83
104
|
if (this.onChange) {
|
|
84
105
|
this.onChange(result.isValid, this.fieldKey);
|
|
85
106
|
}
|
|
86
107
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
// Add validator to instantly accept typed text as a token
|
|
90
|
-
mi.addValidator((args: { text: string }) => {
|
|
91
|
-
return new Token({ key: args.text, text: args.text });
|
|
108
|
+
// Return null to explicitly prevent MultiInput from modifying the bound aggregation
|
|
109
|
+
return null;
|
|
92
110
|
});
|
|
93
111
|
|
|
94
112
|
// Bind existing strings to tokens using a factory function
|
|
@@ -27,6 +27,7 @@ sap.ui.define(["./BasePlugin", "sap/m/MultiComboBox", "sap/ui/core/Item", "sap/m
|
|
|
27
27
|
render(fieldMetadata, bindingPath, modelName = "meta", engineScopeId, onChange) {
|
|
28
28
|
this.onChange = onChange;
|
|
29
29
|
this.metadata = fieldMetadata;
|
|
30
|
+
this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;
|
|
30
31
|
if (!this.isEditable) {
|
|
31
32
|
this.control = new TextControl({
|
|
32
33
|
id: this.generateStableId(engineScopeId, bindingPath),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelectPlugin-dbg.js","names":["BasePlugin","___BasePlugin","MultiSelectPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","metadata","isEditable","control","TextControl","id","generateStableId","text","path","formatter","val","Array","isArray","join","applyCommonDirectives","mcb","MultiComboBox","selectedKeys","enabled","ui","readOnly","placeholder","label","selectionChange","oEvent","keys","getSelectedKeys","result","validateAndApplyVisualState","isValid","
|
|
1
|
+
{"version":3,"file":"MultiSelectPlugin-dbg.js","names":["BasePlugin","___BasePlugin","MultiSelectPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","metadata","fieldKey","startsWith","substring","isEditable","control","TextControl","id","generateStableId","text","path","formatter","val","Array","isArray","join","applyCommonDirectives","mcb","MultiComboBox","selectedKeys","enabled","ui","readOnly","placeholder","label","selectionChange","oEvent","keys","getSelectedKeys","result","validateAndApplyVisualState","isValid","enum","forEach","addItem","Item","key","toString","getValue","applyState","setEnabled","__exports","__esModule"],"sources":["MultiSelectPlugin.ts"],"sourcesContent":["/**\n * @file MultiSelectPlugin.ts\n * @description Renders a sap.m.MultiComboBox for selecting multiple string values.\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport MultiComboBox from \"sap/m/MultiComboBox\";\nimport Item from \"sap/ui/core/Item\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\n\n/**\n * Handles rendering logic for selecting multiple strings from a predefined list.\n * Expects the payload to be an array of strings.\n * \n * @namespace nz.co.siliconst.ui5.metaui.plugins.controls\n * @public\n */\nexport class MultiSelectPlugin extends BasePlugin {\n /**\n * Renders a `sap.m.MultiComboBox` component.\n * \n * @param fieldMetadata The specific JSON schema properties for this field.\n * @param bindingPath The JSON path bound to this control.\n * @param modelName The UI5 JSONModel name.\n * @param engineScopeId The deterministic scope ID.\n * @param onChange The callback fired on value change.\n * @returns {Control} The configured MultiComboBox control.\n */\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = fieldMetadata;\n this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;\n\n if (!this.isEditable) {\n \n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: {\n path: `${modelName}>${bindingPath}`,\n formatter: (val: unknown[]) => Array.isArray(val) ? val.join(\", \") : \"\"\n }\n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n \n const mcb = new MultiComboBox({\n id: this.generateStableId(engineScopeId, bindingPath),\n selectedKeys: `{${modelName}>${bindingPath}}`,\n enabled: !fieldMetadata.ui?.readOnly,\n placeholder: fieldMetadata.ui?.label || \"Select items...\",\n selectionChange: (oEvent: sap.ui.base.Event) => {\n const keys = (this.control as MultiComboBox).getSelectedKeys();\n const result = this.validateAndApplyVisualState();\n if (this.onChange) {\n this.onChange(result.isValid, this.fieldKey);\n }\n }\n });\n\n if (fieldMetadata.enum) {\n fieldMetadata.enum.forEach((val: string | number) => {\n mcb.addItem(new Item({ key: val.toString(), text: val.toString() }));\n });\n }\n\n this.control = mcb;\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n /**\n * Retrieves the current selection keys.\n * @returns {unknown} The selected keys.\n */\n protected getValue(): unknown {\n return this.control ? (this.control as MultiComboBox).getSelectedKeys() : [];\n }\n\n /**\n * Applies dynamic read-only state.\n */\n protected applyState(): void {\n if (this.control && this.metadata) {\n if (!this.isEditable) return;\n (this.control as MultiComboBox).setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelectPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,+DAA+D,CAAC;IAC/E;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAGlF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAG1C;;;;;;OAMG;IACH,MAAa,iBAAkB,SAAQ,UAAU;QAC7C;;;;;;;;;WASG;QACI,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAG,WAAW,EAAE,MAAM,EAAG,SAAS,GAAE,MAAe,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"MultiSelectPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,+DAA+D,CAAC;IAC/E;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAGlF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAG1C;;;;;;OAMG;IACH,MAAa,iBAAkB,SAAQ,UAAU;QAC7C;;;;;;;;;WASG;QACI,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAG,WAAW,EAAE,MAAM,EAAG,SAAS,GAAE,MAAe,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;QA2C7L;;;WAGG;QACH,SAAS,CAAC,QAAQ,IAAI,OAAO;QAI7B;;WAEG;QACH,SAAS,CAAC,UAAU,IAAI,IAAI;KAM/B;CAEA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
sap.ui.define(["./BasePlugin","sap/m/MultiComboBox","sap/ui/core/Item","sap/m/Text"],function(t,e,i,s){"use strict";const n=t["BasePlugin"];class a extends n{render(t,n,a="meta",o
|
|
1
|
+
sap.ui.define(["./BasePlugin","sap/m/MultiComboBox","sap/ui/core/Item","sap/m/Text"],function(t,e,i,s){"use strict";const n=t["BasePlugin"];class a extends n{render(t,n,a="meta",l,o){this.onChange=o;this.metadata=t;this.fieldKey=n.startsWith("/")?n.substring(1):n;if(!this.isEditable){this.control=new s({id:this.generateStableId(l,n),text:{path:`${a}>${n}`,formatter:t=>Array.isArray(t)?t.join(", "):""}});this.applyCommonDirectives(this.control,t,a);return this.control}const r=new e({id:this.generateStableId(l,n),selectedKeys:`{${a}>${n}}`,enabled:!t.ui?.readOnly,placeholder:t.ui?.label||"Select items...",selectionChange:t=>{const e=this.control.getSelectedKeys();const i=this.validateAndApplyVisualState();if(this.onChange){this.onChange(i.isValid,this.fieldKey)}}});if(t.enum){t.enum.forEach(t=>{r.addItem(new i({key:t.toString(),text:t.toString()}))})}this.control=r;this.applyCommonDirectives(this.control,t,a);return this.control}getValue(){return this.control?this.control.getSelectedKeys():[]}applyState(){if(this.control&&this.metadata){if(!this.isEditable)return;this.control.setEnabled(!this.metadata.ui?.readOnly)}}}var l={__esModule:true};l.MultiSelectPlugin=a;return l});
|
|
2
2
|
//# sourceMappingURL=MultiSelectPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelectPlugin.js","names":["BasePlugin","___BasePlugin","MultiSelectPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","this","metadata","isEditable","control","TextControl","id","generateStableId","text","path","formatter","val","Array","isArray","join","applyCommonDirectives","mcb","MultiComboBox","selectedKeys","enabled","ui","readOnly","placeholder","label","selectionChange","oEvent","keys","getSelectedKeys","result","validateAndApplyVisualState","isValid","
|
|
1
|
+
{"version":3,"file":"MultiSelectPlugin.js","names":["BasePlugin","___BasePlugin","MultiSelectPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","this","metadata","fieldKey","startsWith","substring","isEditable","control","TextControl","id","generateStableId","text","path","formatter","val","Array","isArray","join","applyCommonDirectives","mcb","MultiComboBox","selectedKeys","enabled","ui","readOnly","placeholder","label","selectionChange","oEvent","keys","getSelectedKeys","result","validateAndApplyVisualState","isValid","enum","forEach","addItem","Item","key","toString","getValue","applyState","setEnabled","__exports","__esModule"],"sources":["MultiSelectPlugin.ts"],"sourcesContent":["/**\n * @file MultiSelectPlugin.ts\n * @description Renders a sap.m.MultiComboBox for selecting multiple string values.\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport MultiComboBox from \"sap/m/MultiComboBox\";\nimport Item from \"sap/ui/core/Item\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\n\n/**\n * Handles rendering logic for selecting multiple strings from a predefined list.\n * Expects the payload to be an array of strings.\n * \n * @namespace nz.co.siliconst.ui5.metaui.plugins.controls\n * @public\n */\nexport class MultiSelectPlugin extends BasePlugin {\n /**\n * Renders a `sap.m.MultiComboBox` component.\n * \n * @param fieldMetadata The specific JSON schema properties for this field.\n * @param bindingPath The JSON path bound to this control.\n * @param modelName The UI5 JSONModel name.\n * @param engineScopeId The deterministic scope ID.\n * @param onChange The callback fired on value change.\n * @returns {Control} The configured MultiComboBox control.\n */\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = fieldMetadata;\n this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;\n\n if (!this.isEditable) {\n \n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: {\n path: `${modelName}>${bindingPath}`,\n formatter: (val: unknown[]) => Array.isArray(val) ? val.join(\", \") : \"\"\n }\n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n \n const mcb = new MultiComboBox({\n id: this.generateStableId(engineScopeId, bindingPath),\n selectedKeys: `{${modelName}>${bindingPath}}`,\n enabled: !fieldMetadata.ui?.readOnly,\n placeholder: fieldMetadata.ui?.label || \"Select items...\",\n selectionChange: (oEvent: sap.ui.base.Event) => {\n const keys = (this.control as MultiComboBox).getSelectedKeys();\n const result = this.validateAndApplyVisualState();\n if (this.onChange) {\n this.onChange(result.isValid, this.fieldKey);\n }\n }\n });\n\n if (fieldMetadata.enum) {\n fieldMetadata.enum.forEach((val: string | number) => {\n mcb.addItem(new Item({ key: val.toString(), text: val.toString() }));\n });\n }\n\n this.control = mcb;\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n /**\n * Retrieves the current selection keys.\n * @returns {unknown} The selected keys.\n */\n protected getValue(): unknown {\n return this.control ? (this.control as MultiComboBox).getSelectedKeys() : [];\n }\n\n /**\n * Applies dynamic read-only state.\n */\n protected applyState(): void {\n if (this.control && this.metadata) {\n if (!this.isEditable) return;\n (this.control as MultiComboBox).setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":"oHAAA,MAKSA,EAAUC,EAAA,cAcZ,MAAMC,UAA0BF,EAW5BG,OAAOC,EAAmCC,EAAsBC,EAAoB,OAAQC,EAAwBC,GACvHC,KAAKD,SAAWA,EAChBC,KAAKC,SAAWN,EAChBK,KAAKE,SAAWN,EAAYO,WAAW,KAAOP,EAAYQ,UAAU,GAAKR,EAEzE,IAAKI,KAAKK,WAAY,CAElBL,KAAKM,QAAU,IAAIC,EAAY,CAC3BC,GAAIR,KAAKS,iBAAiBX,EAAeF,GACzCc,KAAM,CACFC,KAAM,GAAGd,KAAaD,IACtBgB,UAAYC,GAAmBC,MAAMC,QAAQF,GAAOA,EAAIG,KAAK,MAAQ,MAG7EhB,KAAKiB,sBAAsBjB,KAAKM,QAASX,EAAeE,GACxD,OAAOG,KAAKM,OAChB,CAEA,MAAMY,EAAM,IAAIC,EAAc,CAC1BX,GAAIR,KAAKS,iBAAiBX,EAAeF,GACzCwB,aAAc,IAAIvB,KAAaD,KAC/ByB,SAAU1B,EAAc2B,IAAIC,SAC5BC,YAAa7B,EAAc2B,IAAIG,OAAS,kBACxCC,gBAAkBC,IACd,MAAMC,EAAQ5B,KAAKM,QAA0BuB,kBAC7C,MAAMC,EAAS9B,KAAK+B,8BACpB,GAAI/B,KAAKD,SAAU,CACfC,KAAKD,SAAS+B,EAAOE,QAAShC,KAAKE,SACvC,KAIR,GAAIP,EAAcsC,KAAM,CACpBtC,EAAcsC,KAAKC,QAASrB,IACxBK,EAAIiB,QAAQ,IAAIC,EAAK,CAAEC,IAAKxB,EAAIyB,WAAY5B,KAAMG,EAAIyB,eAE9D,CAEAtC,KAAKM,QAAUY,EACflB,KAAKiB,sBAAsBjB,KAAKM,QAASX,EAAeE,GACxD,OAAOG,KAAKM,OAChB,CAMUiC,WACN,OAAOvC,KAAKM,QAAWN,KAAKM,QAA0BuB,kBAAoB,EAC9E,CAKUW,aACN,GAAIxC,KAAKM,SAAWN,KAAKC,SAAU,CAC/B,IAAKD,KAAKK,WAAY,OACrBL,KAAKM,QAA0BmC,YAAYzC,KAAKC,SAASqB,IAAIC,SAClE,CACJ,EACH,IAAAmB,EAAA,CAAAC,WAAA,MAAAD,EAAAjD,oBAAA,OAAAiD,CAAA","ignoreList":[]}
|
|
@@ -31,6 +31,7 @@ export class MultiSelectPlugin extends BasePlugin {
|
|
|
31
31
|
public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = "meta", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {
|
|
32
32
|
this.onChange = onChange;
|
|
33
33
|
this.metadata = fieldMetadata;
|
|
34
|
+
this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;
|
|
34
35
|
|
|
35
36
|
if (!this.isEditable) {
|
|
36
37
|
|
|
@@ -1,28 +1,29 @@
|
|
|
1
|
-
sap.ui.define(["./BasePlugin", "sap/m/
|
|
1
|
+
sap.ui.define(["./BasePlugin", "sap/m/Input", "sap/m/Text", "sap/ui/model/type/Float", "sap/ui/model/type/Integer"], function (___BasePlugin, Input, TextControl, Float, Integer) {
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* @file NumberPlugin.ts
|
|
6
|
-
* @description Renders a sap.m.
|
|
6
|
+
* @description Renders a sap.m.Input configured for generic dynamic numeric data.
|
|
7
7
|
*/
|
|
8
8
|
const BasePlugin = ___BasePlugin["BasePlugin"];
|
|
9
9
|
/**
|
|
10
|
-
* Handles rendering and logic for numeric inputs.
|
|
10
|
+
* Handles rendering and logic for dynamic numeric inputs.
|
|
11
11
|
*/
|
|
12
12
|
class NumberPlugin extends BasePlugin {
|
|
13
13
|
/**
|
|
14
|
-
* Renders a `sap.m.
|
|
14
|
+
* Renders a `sap.m.Input` component for numeric evaluation with dynamic Float type.
|
|
15
15
|
*
|
|
16
16
|
* @param fieldMetadata The specific JSON schema properties for this field.
|
|
17
17
|
* @param bindingPath The JSON path bound to this control.
|
|
18
18
|
* @param modelName The UI5 JSONModel name.
|
|
19
19
|
* @param engineScopeId The deterministic scope ID.
|
|
20
20
|
* @param onChange The callback fired on value change.
|
|
21
|
-
* @returns {Control} The configured
|
|
21
|
+
* @returns {Control} The configured Input control.
|
|
22
22
|
*/
|
|
23
23
|
render(fieldMetadata, bindingPath, modelName = "meta", engineScopeId, onChange) {
|
|
24
24
|
this.onChange = onChange;
|
|
25
25
|
this.metadata = fieldMetadata;
|
|
26
|
+
this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;
|
|
26
27
|
if (!this.isEditable) {
|
|
27
28
|
this.control = new TextControl({
|
|
28
29
|
id: this.generateStableId(engineScopeId, bindingPath),
|
|
@@ -31,12 +32,27 @@ sap.ui.define(["./BasePlugin", "sap/m/StepInput", "sap/m/Text"], function (___Ba
|
|
|
31
32
|
this.applyCommonDirectives(this.control, fieldMetadata, modelName);
|
|
32
33
|
return this.control;
|
|
33
34
|
}
|
|
34
|
-
|
|
35
|
+
let typeInstance;
|
|
36
|
+
if (fieldMetadata.type === "integer") {
|
|
37
|
+
typeInstance = new Integer({
|
|
38
|
+
groupingEnabled: false
|
|
39
|
+
});
|
|
40
|
+
} else {
|
|
41
|
+
typeInstance = new Float({
|
|
42
|
+
groupingEnabled: false,
|
|
43
|
+
minFractionDigits: fieldMetadata.scale !== undefined ? fieldMetadata.scale : 0,
|
|
44
|
+
maxFractionDigits: fieldMetadata.scale !== undefined ? fieldMetadata.scale : 9
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
this.control = new Input({
|
|
35
48
|
id: this.generateStableId(engineScopeId, bindingPath),
|
|
36
|
-
value:
|
|
37
|
-
|
|
49
|
+
value: {
|
|
50
|
+
path: `${modelName}>${bindingPath}`,
|
|
51
|
+
type: typeInstance
|
|
52
|
+
},
|
|
53
|
+
type: "Number",
|
|
38
54
|
editable: !fieldMetadata.ui?.readOnly,
|
|
39
|
-
required: fieldMetadata.required,
|
|
55
|
+
required: !!fieldMetadata.required,
|
|
40
56
|
change: oEvent => {
|
|
41
57
|
const val = oEvent.getParameter("value");
|
|
42
58
|
const result = this.validateAndApplyVisualState();
|
|
@@ -54,7 +70,15 @@ sap.ui.define(["./BasePlugin", "sap/m/StepInput", "sap/m/Text"], function (___Ba
|
|
|
54
70
|
* @returns {unknown} The numeric value.
|
|
55
71
|
*/
|
|
56
72
|
getValue() {
|
|
57
|
-
|
|
73
|
+
if (!this.control) return null;
|
|
74
|
+
// In UI5, Input.getValue() returns a string. We must parse it if it's bound.
|
|
75
|
+
// However, we can also extract it directly from the binding.
|
|
76
|
+
const input = this.control;
|
|
77
|
+
const binding = input.getBinding("value");
|
|
78
|
+
if (binding) {
|
|
79
|
+
return binding.getValue();
|
|
80
|
+
}
|
|
81
|
+
return input.getValue();
|
|
58
82
|
}
|
|
59
83
|
|
|
60
84
|
/**
|
|
@@ -65,7 +89,7 @@ sap.ui.define(["./BasePlugin", "sap/m/StepInput", "sap/m/Text"], function (___Ba
|
|
|
65
89
|
if (!this.isEditable) return;
|
|
66
90
|
const input = this.control;
|
|
67
91
|
input.setEditable(!this.metadata.ui?.readOnly);
|
|
68
|
-
input.setRequired(this.metadata.required);
|
|
92
|
+
input.setRequired(!!this.metadata.required);
|
|
69
93
|
}
|
|
70
94
|
}
|
|
71
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberPlugin-dbg.js","names":["BasePlugin","___BasePlugin","NumberPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","metadata","isEditable","control","TextControl","id","generateStableId","text","applyCommonDirectives","
|
|
1
|
+
{"version":3,"file":"NumberPlugin-dbg.js","names":["BasePlugin","___BasePlugin","NumberPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","metadata","fieldKey","startsWith","substring","isEditable","control","TextControl","id","generateStableId","text","applyCommonDirectives","typeInstance","type","Integer","groupingEnabled","Float","minFractionDigits","scale","undefined","maxFractionDigits","Input","value","path","editable","ui","readOnly","required","change","oEvent","val","getParameter","result","validateAndApplyVisualState","isValid","getValue","input","binding","getBinding","applyState","setEditable","setRequired","__exports","__esModule"],"sources":["NumberPlugin.ts"],"sourcesContent":["/**\n * @file NumberPlugin.ts\n * @description Renders a sap.m.Input configured for generic dynamic numeric data.\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport Input from \"sap/m/Input\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\nimport Float from \"sap/ui/model/type/Float\";\nimport Integer from \"sap/ui/model/type/Integer\";\n\n/**\n * Handles rendering and logic for dynamic numeric inputs.\n */\nexport class NumberPlugin extends BasePlugin {\n /**\n * Renders a `sap.m.Input` component for numeric evaluation with dynamic Float type.\n * \n * @param fieldMetadata The specific JSON schema properties for this field.\n * @param bindingPath The JSON path bound to this control.\n * @param modelName The UI5 JSONModel name.\n * @param engineScopeId The deterministic scope ID.\n * @param onChange The callback fired on value change.\n * @returns {Control} The configured Input control.\n */\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = fieldMetadata;\n this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;\n\n if (!this.isEditable) {\n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: `{${modelName}>${bindingPath}}`\n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n let typeInstance;\n if (fieldMetadata.type === \"integer\") {\n typeInstance = new Integer({ groupingEnabled: false });\n } else {\n typeInstance = new Float({\n groupingEnabled: false,\n minFractionDigits: fieldMetadata.scale !== undefined ? fieldMetadata.scale : 0,\n maxFractionDigits: fieldMetadata.scale !== undefined ? fieldMetadata.scale : 9\n });\n }\n\n this.control = new Input({\n id: this.generateStableId(engineScopeId, bindingPath),\n value: {\n path: `${modelName}>${bindingPath}`,\n type: typeInstance\n },\n type: \"Number\",\n editable: !fieldMetadata.ui?.readOnly,\n required: !!fieldMetadata.required,\n change: (oEvent: sap.ui.base.Event) => {\n const val = oEvent.getParameter(\"value\");\n const result = this.validateAndApplyVisualState();\n if (this.onChange) {\n this.onChange(result.isValid, this.fieldKey);\n }\n }\n });\n\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n\n return this.control as Control;\n }\n\n /**\n * Retrieves the current numeric state.\n * @returns {unknown} The numeric value.\n */\n protected getValue(): unknown {\n if (!this.control) return null;\n // In UI5, Input.getValue() returns a string. We must parse it if it's bound.\n // However, we can also extract it directly from the binding.\n const input = this.control as Input;\n const binding = input.getBinding(\"value\");\n if (binding) {\n return binding.getValue();\n }\n return input.getValue();\n }\n\n /**\n * Applies dynamic read-only state.\n */\n protected applyState(): void {\n if (this.control && this.metadata) {\n if (!this.isEditable) return;\n const input = this.control as Input;\n input.setEditable(!this.metadata.ui?.readOnly);\n input.setRequired(!!this.metadata.required);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
declare module "nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin" {
|
|
2
2
|
/**
|
|
3
3
|
* @file NumberPlugin.ts
|
|
4
|
-
* @description Renders a sap.m.
|
|
4
|
+
* @description Renders a sap.m.Input configured for generic dynamic numeric data.
|
|
5
5
|
*/
|
|
6
6
|
import { BasePlugin } from "nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin";
|
|
7
7
|
import { IPropertyMetadata } from "nz/co/siliconst/ui5/metaui/interfaces/ISchema";
|
|
8
8
|
import Control from "sap/ui/core/Control";
|
|
9
9
|
/**
|
|
10
|
-
* Handles rendering and logic for numeric inputs.
|
|
10
|
+
* Handles rendering and logic for dynamic numeric inputs.
|
|
11
11
|
*/
|
|
12
12
|
export class NumberPlugin extends BasePlugin {
|
|
13
13
|
/**
|
|
14
|
-
* Renders a `sap.m.
|
|
14
|
+
* Renders a `sap.m.Input` component for numeric evaluation with dynamic Float type.
|
|
15
15
|
*
|
|
16
16
|
* @param fieldMetadata The specific JSON schema properties for this field.
|
|
17
17
|
* @param bindingPath The JSON path bound to this control.
|
|
18
18
|
* @param modelName The UI5 JSONModel name.
|
|
19
19
|
* @param engineScopeId The deterministic scope ID.
|
|
20
20
|
* @param onChange The callback fired on value change.
|
|
21
|
-
* @returns {Control} The configured
|
|
21
|
+
* @returns {Control} The configured Input control.
|
|
22
22
|
*/
|
|
23
23
|
render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control;
|
|
24
24
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,0DAA0D,CAAC;IAC1E;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAElF,OAAO,OAAO,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"NumberPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,0DAA0D,CAAC;IAC1E;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAElF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAK1C;;OAEG;IACH,MAAa,YAAa,SAAQ,UAAU;QACxC;;;;;;;;;WASG;QACI,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAe,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;QAgD3L;;;WAGG;QACH,SAAS,CAAC,QAAQ,IAAI,OAAO;QAY7B;;WAEG;QACH,SAAS,CAAC,UAAU,IAAI,IAAI;KAQ/B;CAEA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
sap.ui.define(["./BasePlugin","sap/m/
|
|
1
|
+
sap.ui.define(["./BasePlugin","sap/m/Input","sap/m/Text","sap/ui/model/type/Float","sap/ui/model/type/Integer"],function(e,t,i,a,n){"use strict";const s=e["BasePlugin"];class r extends s{render(e,s,r="meta",l,o){this.onChange=o;this.metadata=e;this.fieldKey=s.startsWith("/")?s.substring(1):s;if(!this.isEditable){this.control=new i({id:this.generateStableId(l,s),text:`{${r}>${s}}`});this.applyCommonDirectives(this.control,e,r);return this.control}let u;if(e.type==="integer"){u=new n({groupingEnabled:false})}else{u=new a({groupingEnabled:false,minFractionDigits:e.scale!==undefined?e.scale:0,maxFractionDigits:e.scale!==undefined?e.scale:9})}this.control=new t({id:this.generateStableId(l,s),value:{path:`${r}>${s}`,type:u},type:"Number",editable:!e.ui?.readOnly,required:!!e.required,change:e=>{const t=e.getParameter("value");const i=this.validateAndApplyVisualState();if(this.onChange){this.onChange(i.isValid,this.fieldKey)}}});this.applyCommonDirectives(this.control,e,r);return this.control}getValue(){if(!this.control)return null;const e=this.control;const t=e.getBinding("value");if(t){return t.getValue()}return e.getValue()}applyState(){if(this.control&&this.metadata){if(!this.isEditable)return;const e=this.control;e.setEditable(!this.metadata.ui?.readOnly);e.setRequired(!!this.metadata.required)}}}var l={__esModule:true};l.NumberPlugin=r;return l});
|
|
2
2
|
//# sourceMappingURL=NumberPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberPlugin.js","names":["BasePlugin","___BasePlugin","NumberPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","this","metadata","isEditable","control","TextControl","id","generateStableId","text","applyCommonDirectives","
|
|
1
|
+
{"version":3,"file":"NumberPlugin.js","names":["BasePlugin","___BasePlugin","NumberPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","this","metadata","fieldKey","startsWith","substring","isEditable","control","TextControl","id","generateStableId","text","applyCommonDirectives","typeInstance","type","Integer","groupingEnabled","Float","minFractionDigits","scale","undefined","maxFractionDigits","Input","value","path","editable","ui","readOnly","required","change","oEvent","val","getParameter","result","validateAndApplyVisualState","isValid","getValue","input","binding","getBinding","applyState","setEditable","setRequired","__exports","__esModule"],"sources":["NumberPlugin.ts"],"sourcesContent":["/**\n * @file NumberPlugin.ts\n * @description Renders a sap.m.Input configured for generic dynamic numeric data.\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport Input from \"sap/m/Input\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\nimport Float from \"sap/ui/model/type/Float\";\nimport Integer from \"sap/ui/model/type/Integer\";\n\n/**\n * Handles rendering and logic for dynamic numeric inputs.\n */\nexport class NumberPlugin extends BasePlugin {\n /**\n * Renders a `sap.m.Input` component for numeric evaluation with dynamic Float type.\n * \n * @param fieldMetadata The specific JSON schema properties for this field.\n * @param bindingPath The JSON path bound to this control.\n * @param modelName The UI5 JSONModel name.\n * @param engineScopeId The deterministic scope ID.\n * @param onChange The callback fired on value change.\n * @returns {Control} The configured Input control.\n */\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = fieldMetadata;\n this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;\n\n if (!this.isEditable) {\n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: `{${modelName}>${bindingPath}}`\n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n let typeInstance;\n if (fieldMetadata.type === \"integer\") {\n typeInstance = new Integer({ groupingEnabled: false });\n } else {\n typeInstance = new Float({\n groupingEnabled: false,\n minFractionDigits: fieldMetadata.scale !== undefined ? fieldMetadata.scale : 0,\n maxFractionDigits: fieldMetadata.scale !== undefined ? fieldMetadata.scale : 9\n });\n }\n\n this.control = new Input({\n id: this.generateStableId(engineScopeId, bindingPath),\n value: {\n path: `${modelName}>${bindingPath}`,\n type: typeInstance\n },\n type: \"Number\",\n editable: !fieldMetadata.ui?.readOnly,\n required: !!fieldMetadata.required,\n change: (oEvent: sap.ui.base.Event) => {\n const val = oEvent.getParameter(\"value\");\n const result = this.validateAndApplyVisualState();\n if (this.onChange) {\n this.onChange(result.isValid, this.fieldKey);\n }\n }\n });\n\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n\n return this.control as Control;\n }\n\n /**\n * Retrieves the current numeric state.\n * @returns {unknown} The numeric value.\n */\n protected getValue(): unknown {\n if (!this.control) return null;\n // In UI5, Input.getValue() returns a string. We must parse it if it's bound.\n // However, we can also extract it directly from the binding.\n const input = this.control as Input;\n const binding = input.getBinding(\"value\");\n if (binding) {\n return binding.getValue();\n }\n return input.getValue();\n }\n\n /**\n * Applies dynamic read-only state.\n */\n protected applyState(): void {\n if (this.control && this.metadata) {\n if (!this.isEditable) return;\n const input = this.control as Input;\n input.setEditable(!this.metadata.ui?.readOnly);\n input.setRequired(!!this.metadata.required);\n }\n }\n}\n"],"mappings":"iJAAA,MAKSA,EAAUC,EAAA,cAWZ,MAAMC,UAAqBF,EAWvBG,OAAOC,EAAkCC,EAAqBC,EAAoB,OAAQC,EAAwBC,GACrHC,KAAKD,SAAWA,EAChBC,KAAKC,SAAWN,EAChBK,KAAKE,SAAWN,EAAYO,WAAW,KAAOP,EAAYQ,UAAU,GAAKR,EAEzE,IAAKI,KAAKK,WAAY,CAClBL,KAAKM,QAAU,IAAIC,EAAY,CAC3BC,GAAIR,KAAKS,iBAAiBX,EAAeF,GACzCc,KAAM,IAAIb,KAAaD,OAE3BI,KAAKW,sBAAsBX,KAAKM,QAASX,EAAeE,GACxD,OAAOG,KAAKM,OAChB,CAEA,IAAIM,EACJ,GAAIjB,EAAckB,OAAS,UAAW,CAClCD,EAAe,IAAIE,EAAQ,CAAEC,gBAAiB,OAClD,KAAO,CACHH,EAAe,IAAII,EAAM,CACrBD,gBAAiB,MACjBE,kBAAmBtB,EAAcuB,QAAUC,UAAYxB,EAAcuB,MAAQ,EAC7EE,kBAAmBzB,EAAcuB,QAAUC,UAAYxB,EAAcuB,MAAQ,GAErF,CAEAlB,KAAKM,QAAU,IAAIe,EAAM,CACrBb,GAAIR,KAAKS,iBAAiBX,EAAeF,GACzC0B,MAAO,CACHC,KAAM,GAAG1B,KAAaD,IACtBiB,KAAMD,GAEVC,KAAM,SACNW,UAAW7B,EAAc8B,IAAIC,SAC7BC,WAAYhC,EAAcgC,SAC1BC,OAASC,IACL,MAAMC,EAAMD,EAAOE,aAAa,SAChC,MAAMC,EAAShC,KAAKiC,8BACpB,GAAIjC,KAAKD,SAAU,CACfC,KAAKD,SAASiC,EAAOE,QAASlC,KAAKE,SACvC,KAIRF,KAAKW,sBAAsBX,KAAKM,QAASX,EAAeE,GAExD,OAAOG,KAAKM,OAChB,CAMU6B,WACN,IAAKnC,KAAKM,QAAS,OAAO,KAG1B,MAAM8B,EAAQpC,KAAKM,QACnB,MAAM+B,EAAUD,EAAME,WAAW,SACjC,GAAID,EAAS,CACT,OAAOA,EAAQF,UACnB,CACA,OAAOC,EAAMD,UACjB,CAKUI,aACN,GAAIvC,KAAKM,SAAWN,KAAKC,SAAU,CAC/B,IAAKD,KAAKK,WAAY,OACtB,MAAM+B,EAAQpC,KAAKM,QACnB8B,EAAMI,aAAaxC,KAAKC,SAASwB,IAAIC,UACrCU,EAAMK,cAAczC,KAAKC,SAAS0B,SACtC,CACJ,EACH,IAAAe,EAAA,CAAAC,WAAA,MAAAD,EAAAjD,eAAA,OAAAiD,CAAA","ignoreList":[]}
|
|
@@ -1,34 +1,36 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file NumberPlugin.ts
|
|
3
|
-
* @description Renders a sap.m.
|
|
3
|
+
* @description Renders a sap.m.Input configured for generic dynamic numeric data.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { BasePlugin } from "./BasePlugin";
|
|
7
7
|
import { IPropertyMetadata } from "../../interfaces/ISchema";
|
|
8
|
-
import
|
|
8
|
+
import Input from "sap/m/Input";
|
|
9
9
|
import Control from "sap/ui/core/Control";
|
|
10
10
|
import TextControl from "sap/m/Text";
|
|
11
|
+
import Float from "sap/ui/model/type/Float";
|
|
12
|
+
import Integer from "sap/ui/model/type/Integer";
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
|
-
* Handles rendering and logic for numeric inputs.
|
|
15
|
+
* Handles rendering and logic for dynamic numeric inputs.
|
|
14
16
|
*/
|
|
15
17
|
export class NumberPlugin extends BasePlugin {
|
|
16
18
|
/**
|
|
17
|
-
* Renders a `sap.m.
|
|
19
|
+
* Renders a `sap.m.Input` component for numeric evaluation with dynamic Float type.
|
|
18
20
|
*
|
|
19
21
|
* @param fieldMetadata The specific JSON schema properties for this field.
|
|
20
22
|
* @param bindingPath The JSON path bound to this control.
|
|
21
23
|
* @param modelName The UI5 JSONModel name.
|
|
22
24
|
* @param engineScopeId The deterministic scope ID.
|
|
23
25
|
* @param onChange The callback fired on value change.
|
|
24
|
-
* @returns {Control} The configured
|
|
26
|
+
* @returns {Control} The configured Input control.
|
|
25
27
|
*/
|
|
26
|
-
public render(fieldMetadata: IPropertyMetadata,
|
|
28
|
+
public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = "meta", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {
|
|
27
29
|
this.onChange = onChange;
|
|
28
30
|
this.metadata = fieldMetadata;
|
|
31
|
+
this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;
|
|
29
32
|
|
|
30
33
|
if (!this.isEditable) {
|
|
31
|
-
|
|
32
34
|
this.control = new TextControl({
|
|
33
35
|
id: this.generateStableId(engineScopeId, bindingPath),
|
|
34
36
|
text: `{${modelName}>${bindingPath}}`
|
|
@@ -37,12 +39,26 @@ export class NumberPlugin extends BasePlugin {
|
|
|
37
39
|
return this.control as Control;
|
|
38
40
|
}
|
|
39
41
|
|
|
40
|
-
|
|
42
|
+
let typeInstance;
|
|
43
|
+
if (fieldMetadata.type === "integer") {
|
|
44
|
+
typeInstance = new Integer({ groupingEnabled: false });
|
|
45
|
+
} else {
|
|
46
|
+
typeInstance = new Float({
|
|
47
|
+
groupingEnabled: false,
|
|
48
|
+
minFractionDigits: fieldMetadata.scale !== undefined ? fieldMetadata.scale : 0,
|
|
49
|
+
maxFractionDigits: fieldMetadata.scale !== undefined ? fieldMetadata.scale : 9
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
this.control = new Input({
|
|
41
54
|
id: this.generateStableId(engineScopeId, bindingPath),
|
|
42
|
-
value:
|
|
43
|
-
|
|
55
|
+
value: {
|
|
56
|
+
path: `${modelName}>${bindingPath}`,
|
|
57
|
+
type: typeInstance
|
|
58
|
+
},
|
|
59
|
+
type: "Number",
|
|
44
60
|
editable: !fieldMetadata.ui?.readOnly,
|
|
45
|
-
required: fieldMetadata.required,
|
|
61
|
+
required: !!fieldMetadata.required,
|
|
46
62
|
change: (oEvent: sap.ui.base.Event) => {
|
|
47
63
|
const val = oEvent.getParameter("value");
|
|
48
64
|
const result = this.validateAndApplyVisualState();
|
|
@@ -62,7 +78,15 @@ export class NumberPlugin extends BasePlugin {
|
|
|
62
78
|
* @returns {unknown} The numeric value.
|
|
63
79
|
*/
|
|
64
80
|
protected getValue(): unknown {
|
|
65
|
-
|
|
81
|
+
if (!this.control) return null;
|
|
82
|
+
// In UI5, Input.getValue() returns a string. We must parse it if it's bound.
|
|
83
|
+
// However, we can also extract it directly from the binding.
|
|
84
|
+
const input = this.control as Input;
|
|
85
|
+
const binding = input.getBinding("value");
|
|
86
|
+
if (binding) {
|
|
87
|
+
return binding.getValue();
|
|
88
|
+
}
|
|
89
|
+
return input.getValue();
|
|
66
90
|
}
|
|
67
91
|
|
|
68
92
|
/**
|
|
@@ -71,9 +95,9 @@ export class NumberPlugin extends BasePlugin {
|
|
|
71
95
|
protected applyState(): void {
|
|
72
96
|
if (this.control && this.metadata) {
|
|
73
97
|
if (!this.isEditable) return;
|
|
74
|
-
const input = this.control as
|
|
98
|
+
const input = this.control as Input;
|
|
75
99
|
input.setEditable(!this.metadata.ui?.readOnly);
|
|
76
|
-
input.setRequired(this.metadata.required);
|
|
100
|
+
input.setRequired(!!this.metadata.required);
|
|
77
101
|
}
|
|
78
102
|
}
|
|
79
103
|
}
|
|
@@ -26,6 +26,7 @@ sap.ui.define(["./BasePlugin", "sap/m/RatingIndicator", "sap/m/Text"], function
|
|
|
26
26
|
render(fieldMetadata, bindingPath, modelName = "meta", engineScopeId, onChange) {
|
|
27
27
|
this.onChange = onChange;
|
|
28
28
|
this.metadata = fieldMetadata;
|
|
29
|
+
this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;
|
|
29
30
|
if (!this.isEditable) {
|
|
30
31
|
this.control = new TextControl({
|
|
31
32
|
id: this.generateStableId(engineScopeId, bindingPath),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RatingIndicatorPlugin-dbg.js","names":["BasePlugin","___BasePlugin","RatingIndicatorPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","metadata","isEditable","control","TextControl","id","generateStableId","text","applyCommonDirectives","RatingIndicator","value","enabled","ui","readOnly","maxValue","maximum","undefined","change","oEvent","val","getParameter","result","validateAndApplyVisualState","isValid","
|
|
1
|
+
{"version":3,"file":"RatingIndicatorPlugin-dbg.js","names":["BasePlugin","___BasePlugin","RatingIndicatorPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","metadata","fieldKey","startsWith","substring","isEditable","control","TextControl","id","generateStableId","text","applyCommonDirectives","RatingIndicator","value","enabled","ui","readOnly","maxValue","maximum","undefined","change","oEvent","val","getParameter","result","validateAndApplyVisualState","isValid","getValue","applyState","setEnabled","__exports","__esModule"],"sources":["RatingIndicatorPlugin.ts"],"sourcesContent":["/**\n * @file RatingIndicatorPlugin.ts\n * @description Renders a sap.m.RatingIndicator for 1-5 numeric feedback.\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport RatingIndicator from \"sap/m/RatingIndicator\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\n\n/**\n * Handles rendering logic for rating feedback.\n * \n * @namespace nz.co.siliconst.ui5.metaui.plugins.controls\n * @public\n */\nexport class RatingIndicatorPlugin extends BasePlugin {\n /**\n * Renders a `sap.m.RatingIndicator` component.\n * \n * @param fieldMetadata The specific JSON schema properties for this field.\n * @param bindingPath The JSON path bound to this control.\n * @param modelName The UI5 JSONModel name.\n * @param engineScopeId The deterministic scope ID.\n * @param onChange The callback fired on value change.\n * @returns {Control} The configured RatingIndicator control.\n */\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = fieldMetadata;\n this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;\n\n if (!this.isEditable) {\n \n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: `{${modelName}>${bindingPath}}`\n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n \n this.control = new RatingIndicator({\n id: this.generateStableId(engineScopeId, bindingPath),\n value: `{${modelName}>${bindingPath}}`,\n enabled: !fieldMetadata.ui?.readOnly,\n maxValue: fieldMetadata.maximum !== undefined ? fieldMetadata.maximum : 5,\n change: (oEvent: sap.ui.base.Event) => {\n const val = oEvent.getParameter(\"value\");\n const result = this.validateAndApplyVisualState();\n if (this.onChange) {\n this.onChange(result.isValid, this.fieldKey);\n }\n }\n });\n\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n\n return this.control as Control;\n }\n\n /**\n * Retrieves the current rating value.\n * @returns {unknown} The rating value.\n */\n protected getValue(): unknown {\n return this.control ? (this.control as RatingIndicator).getValue() : 0;\n }\n\n /**\n * Applies dynamic read-only state.\n */\n protected applyState(): void {\n if (this.control && this.metadata) {\n if (!this.isEditable) return;\n (this.control as RatingIndicator).setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":";;;EAAA;AACA;AACA;AACA;EAHA,MAKSA,UAAU,GAAAC,aAAA;EAMnB;AACA;AACA;AACA;AACA;AACA;EACO,MAAMC,qBAAqB,SAASF,UAAU,CAAC;IAClD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACWG,MAAMA,CAACC,aAAgC,EAAGC,WAAmB,EAAGC,SAAiB,GAAG,MAAM,EAAEC,aAAsB,EAAEC,QAAwD,EAAW;MAC1L,IAAI,CAACA,QAAQ,GAAGA,QAAQ;MACxB,IAAI,CAACC,QAAQ,GAAGL,aAAa;MAC7B,IAAI,CAACM,QAAQ,GAAGL,WAAW,CAACM,UAAU,CAAC,GAAG,CAAC,GAAGN,WAAW,CAACO,SAAS,CAAC,CAAC,CAAC,GAAGP,WAAW;MAEpF,IAAI,CAAC,IAAI,CAACQ,UAAU,EAAE;QAElB,IAAI,CAACC,OAAO,GAAG,IAAIC,WAAW,CAAC;UAC3BC,EAAE,EAAE,IAAI,CAACC,gBAAgB,CAACV,aAAa,EAAEF,WAAW,CAAC;UACrDa,IAAI,EAAE,IAAIZ,SAAS,IAAID,WAAW;QACtC,CAAC,CAAC;QACF,IAAI,CAACc,qBAAqB,CAAC,IAAI,CAACL,OAAO,EAAEV,aAAa,EAAEE,SAAS,CAAC;QAClE,OAAO,IAAI,CAACQ,OAAO;MACvB;MAEA,IAAI,CAACA,OAAO,GAAG,IAAIM,eAAe,CAAC;QAC/BJ,EAAE,EAAE,IAAI,CAACC,gBAAgB,CAACV,aAAa,EAAEF,WAAW,CAAC;QACrDgB,KAAK,EAAE,IAAIf,SAAS,IAAID,WAAW,GAAG;QACtCiB,OAAO,EAAE,CAAClB,aAAa,CAACmB,EAAE,EAAEC,QAAQ;QACpCC,QAAQ,EAAErB,aAAa,CAACsB,OAAO,KAAKC,SAAS,GAAGvB,aAAa,CAACsB,OAAO,GAAG,CAAC;QACzEE,MAAM,EAAGC,MAAyB,IAAK;UACnC,MAAMC,GAAG,GAAGD,MAAM,CAACE,YAAY,CAAC,OAAO,CAAC;UACxC,MAAMC,MAAM,GAAG,IAAI,CAACC,2BAA2B,CAAC,CAAC;UACjD,IAAI,IAAI,CAACzB,QAAQ,EAAE;YACf,IAAI,CAACA,QAAQ,CAACwB,MAAM,CAACE,OAAO,EAAE,IAAI,CAACxB,QAAQ,CAAC;UAChD;QACJ;MACJ,CAAC,CAAC;MAEF,IAAI,CAACS,qBAAqB,CAAC,IAAI,CAACL,OAAO,EAAEV,aAAa,EAAEE,SAAS,CAAC;MAElE,OAAO,IAAI,CAACQ,OAAO;IACvB;;IAEA;AACJ;AACA;AACA;IACcqB,QAAQA,CAAA,EAAY;MAC1B,OAAO,IAAI,CAACrB,OAAO,GAAI,IAAI,CAACA,OAAO,CAAqBqB,QAAQ,CAAC,CAAC,GAAG,CAAC;IAC1E;;IAEA;AACJ;AACA;IACcC,UAAUA,CAAA,EAAS;MACzB,IAAI,IAAI,CAACtB,OAAO,IAAI,IAAI,CAACL,QAAQ,EAAE;QAC/B,IAAI,CAAC,IAAI,CAACI,UAAU,EAAE;QACrB,IAAI,CAACC,OAAO,CAAqBuB,UAAU,CAAC,CAAC,IAAI,CAAC5B,QAAQ,CAACc,EAAE,EAAEC,QAAQ,CAAC;MAC7E;IACJ;EACJ;EAAC,IAAAc,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAApC,qBAAA,GAAAA,qBAAA;EAAA,OAAAoC,SAAA;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RatingIndicatorPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,mEAAmE,CAAC;IACnF;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAElF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAG1C;;;;;OAKG;IACH,MAAa,qBAAsB,SAAQ,UAAU;QACjD;;;;;;;;;WASG;QACI,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAG,WAAW,EAAE,MAAM,EAAG,SAAS,GAAE,MAAe,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"RatingIndicatorPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,mEAAmE,CAAC;IACnF;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAElF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAG1C;;;;;OAKG;IACH,MAAa,qBAAsB,SAAQ,UAAU;QACjD;;;;;;;;;WASG;QACI,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAG,WAAW,EAAE,MAAM,EAAG,SAAS,GAAE,MAAe,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;QAkC7L;;;WAGG;QACH,SAAS,CAAC,QAAQ,IAAI,OAAO;QAI7B;;WAEG;QACH,SAAS,CAAC,UAAU,IAAI,IAAI;KAM/B;CAEA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
sap.ui.define(["./BasePlugin","sap/m/RatingIndicator","sap/m/Text"],function(t,e,i){"use strict";const a=t["BasePlugin"];class n extends a{render(t,a,n="meta",s,l){this.onChange=l;this.metadata=t;if(!this.isEditable){this.control=new i({id:this.generateStableId(s,a),text:`{${n}>${a}}`});this.applyCommonDirectives(this.control,t,n);return this.control}this.control=new e({id:this.generateStableId(s,a),value:`{${n}>${a}}`,enabled:!t.ui?.readOnly,maxValue:t.maximum!==undefined?t.maximum:5,change:t=>{const e=t.getParameter("value");const i=this.validateAndApplyVisualState();if(this.onChange){this.onChange(i.isValid,this.fieldKey)}}});this.applyCommonDirectives(this.control,t,n);return this.control}getValue(){return this.control?this.control.getValue():0}applyState(){if(this.control&&this.metadata){if(!this.isEditable)return;this.control.setEnabled(!this.metadata.ui?.readOnly)}}}var s={__esModule:true};s.RatingIndicatorPlugin=n;return s});
|
|
1
|
+
sap.ui.define(["./BasePlugin","sap/m/RatingIndicator","sap/m/Text"],function(t,e,i){"use strict";const a=t["BasePlugin"];class n extends a{render(t,a,n="meta",s,l){this.onChange=l;this.metadata=t;this.fieldKey=a.startsWith("/")?a.substring(1):a;if(!this.isEditable){this.control=new i({id:this.generateStableId(s,a),text:`{${n}>${a}}`});this.applyCommonDirectives(this.control,t,n);return this.control}this.control=new e({id:this.generateStableId(s,a),value:`{${n}>${a}}`,enabled:!t.ui?.readOnly,maxValue:t.maximum!==undefined?t.maximum:5,change:t=>{const e=t.getParameter("value");const i=this.validateAndApplyVisualState();if(this.onChange){this.onChange(i.isValid,this.fieldKey)}}});this.applyCommonDirectives(this.control,t,n);return this.control}getValue(){return this.control?this.control.getValue():0}applyState(){if(this.control&&this.metadata){if(!this.isEditable)return;this.control.setEnabled(!this.metadata.ui?.readOnly)}}}var s={__esModule:true};s.RatingIndicatorPlugin=n;return s});
|
|
2
2
|
//# sourceMappingURL=RatingIndicatorPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RatingIndicatorPlugin.js","names":["BasePlugin","___BasePlugin","RatingIndicatorPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","this","metadata","isEditable","control","TextControl","id","generateStableId","text","applyCommonDirectives","RatingIndicator","value","enabled","ui","readOnly","maxValue","maximum","undefined","change","oEvent","val","getParameter","result","validateAndApplyVisualState","isValid","
|
|
1
|
+
{"version":3,"file":"RatingIndicatorPlugin.js","names":["BasePlugin","___BasePlugin","RatingIndicatorPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","this","metadata","fieldKey","startsWith","substring","isEditable","control","TextControl","id","generateStableId","text","applyCommonDirectives","RatingIndicator","value","enabled","ui","readOnly","maxValue","maximum","undefined","change","oEvent","val","getParameter","result","validateAndApplyVisualState","isValid","getValue","applyState","setEnabled","__exports","__esModule"],"sources":["RatingIndicatorPlugin.ts"],"sourcesContent":["/**\n * @file RatingIndicatorPlugin.ts\n * @description Renders a sap.m.RatingIndicator for 1-5 numeric feedback.\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport RatingIndicator from \"sap/m/RatingIndicator\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\n\n/**\n * Handles rendering logic for rating feedback.\n * \n * @namespace nz.co.siliconst.ui5.metaui.plugins.controls\n * @public\n */\nexport class RatingIndicatorPlugin extends BasePlugin {\n /**\n * Renders a `sap.m.RatingIndicator` component.\n * \n * @param fieldMetadata The specific JSON schema properties for this field.\n * @param bindingPath The JSON path bound to this control.\n * @param modelName The UI5 JSONModel name.\n * @param engineScopeId The deterministic scope ID.\n * @param onChange The callback fired on value change.\n * @returns {Control} The configured RatingIndicator control.\n */\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = fieldMetadata;\n this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;\n\n if (!this.isEditable) {\n \n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: `{${modelName}>${bindingPath}}`\n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n \n this.control = new RatingIndicator({\n id: this.generateStableId(engineScopeId, bindingPath),\n value: `{${modelName}>${bindingPath}}`,\n enabled: !fieldMetadata.ui?.readOnly,\n maxValue: fieldMetadata.maximum !== undefined ? fieldMetadata.maximum : 5,\n change: (oEvent: sap.ui.base.Event) => {\n const val = oEvent.getParameter(\"value\");\n const result = this.validateAndApplyVisualState();\n if (this.onChange) {\n this.onChange(result.isValid, this.fieldKey);\n }\n }\n });\n\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n\n return this.control as Control;\n }\n\n /**\n * Retrieves the current rating value.\n * @returns {unknown} The rating value.\n */\n protected getValue(): unknown {\n return this.control ? (this.control as RatingIndicator).getValue() : 0;\n }\n\n /**\n * Applies dynamic read-only state.\n */\n protected applyState(): void {\n if (this.control && this.metadata) {\n if (!this.isEditable) return;\n (this.control as RatingIndicator).setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":"iGAAA,MAKSA,EAAUC,EAAA,cAYZ,MAAMC,UAA8BF,EAWhCG,OAAOC,EAAmCC,EAAsBC,EAAoB,OAAQC,EAAwBC,GACvHC,KAAKD,SAAWA,EAChBC,KAAKC,SAAWN,EAChBK,KAAKE,SAAWN,EAAYO,WAAW,KAAOP,EAAYQ,UAAU,GAAKR,EAEzE,IAAKI,KAAKK,WAAY,CAElBL,KAAKM,QAAU,IAAIC,EAAY,CAC3BC,GAAIR,KAAKS,iBAAiBX,EAAeF,GACzCc,KAAM,IAAIb,KAAaD,OAE3BI,KAAKW,sBAAsBX,KAAKM,QAASX,EAAeE,GACxD,OAAOG,KAAKM,OAChB,CAEAN,KAAKM,QAAU,IAAIM,EAAgB,CAC/BJ,GAAIR,KAAKS,iBAAiBX,EAAeF,GACzCiB,MAAO,IAAIhB,KAAaD,KACxBkB,SAAUnB,EAAcoB,IAAIC,SAC5BC,SAAUtB,EAAcuB,UAAYC,UAAYxB,EAAcuB,QAAU,EACxEE,OAASC,IACL,MAAMC,EAAMD,EAAOE,aAAa,SAChC,MAAMC,EAASxB,KAAKyB,8BACpB,GAAIzB,KAAKD,SAAU,CACfC,KAAKD,SAASyB,EAAOE,QAAS1B,KAAKE,SACvC,KAIRF,KAAKW,sBAAsBX,KAAKM,QAASX,EAAeE,GAExD,OAAOG,KAAKM,OAChB,CAMUqB,WACN,OAAO3B,KAAKM,QAAWN,KAAKM,QAA4BqB,WAAa,CACzE,CAKUC,aACN,GAAI5B,KAAKM,SAAWN,KAAKC,SAAU,CAC/B,IAAKD,KAAKK,WAAY,OACrBL,KAAKM,QAA4BuB,YAAY7B,KAAKC,SAASc,IAAIC,SACpE,CACJ,EACH,IAAAc,EAAA,CAAAC,WAAA,MAAAD,EAAArC,wBAAA,OAAAqC,CAAA","ignoreList":[]}
|