@siliconst/metaui 1.4.21 → 1.4.34
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/constants/MetaUIConstants-dbg.js +51 -0
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts +41 -0
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.ts +44 -0
- package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.ts +2 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +5 -1
- 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 +6 -2
- 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 +10 -9
- package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js +0 -9
- package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts +0 -9
- package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.ts +3 -9
- package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js +0 -11
- package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts +0 -11
- package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.ts +2 -9
- package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js +2 -7
- package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts +0 -5
- package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.ts +3 -7
- package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js +1 -6
- package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts +0 -5
- package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.ts +9 -12
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +51 -12
- 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 +13 -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 +53 -14
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.ts +8 -7
- 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.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts.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 +3 -3
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +3 -4
- package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +6 -7
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js +84 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.d.ts +16 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.ts +80 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js +137 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.d.ts +24 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.ts +141 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +26 -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 +2 -0
- 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 +29 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +1 -1
- 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 +4 -4
- 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 +11 -11
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager.ts +1 -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 +4 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +5 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +5 -5
- 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 +4 -4
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js +7 -5
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.ts +11 -7
- package/src/nz/co/siliconst/ui5/metaui/library-preload.js +40 -37
- package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.ts +19 -19
- package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.ts +2 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js +18 -15
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.ts +18 -18
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.ts +2 -2
- 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 +1 -6
- 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.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.ts +2 -2
- 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.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +1 -1
- 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.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 +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +1 -1
- 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.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 +2 -2
- 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.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +1 -1
- 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.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 +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js +1 -1
- 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.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 +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +3 -3
- 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.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 +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js +5 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.ts +7 -6
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +1 -1
- 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.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 +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js +3 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.ts +3 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +1 -1
- 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.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 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +1 -1
- 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.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 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.ts +109 -108
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.ts +64 -63
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.ts +118 -117
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.ts +105 -104
- package/src/nz/co/siliconst/ui5/metaui/utils/Logger-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/utils/Logger.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/utils/Logger.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/utils/Logger.ts +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
sap.ui.define(["./BasePlugin","sap/m/MultiInput","sap/m/Token","sap/m/Text","../../utils/Logger"],function(t,e,n,i,o){"use strict";const s=t["BasePlugin"];const r=o["Logger"];class a extends s{render(t,o,s="meta",a,l){this.onChange=l;this.metadata=t;this.fieldKey=o.startsWith("/")?o.substring(1):o;this.modelName=s;if(!this.isEditable){this.control=new i({id:this.generateStableId(a,o),text:this.generateBindingInfo(o,s,undefined,{formatter:t=>Array.isArray(t)?t.join(", "):""})});this.applyCommonDirectives(this.control,t,s);return this.control}const u=this;const d=new e({id:this.generateStableId(a,o),enabled:!t.ui?.readOnly,placeholder:t.ui?.label||"Type and press Enter...",showValueHelp:false,tokenUpdate:t=>{const e=t.getParameter("type");const n=t.getSource();if(e==="removed"){const e=t.getParameter("removedTokens");const i=e.map(t=>t.getText());const o=u.getNativeBindingContext(n);if(o){const{model:t,absPath:e}=o;const s=t.getProperty(e)||[];const a=s.filter(t=>!i.includes(t));r.debug(`[MultiInputPlugin] Removing tokens from absolute path: ${e}`,i.join(", "),"MultiInputPlugin");u.syncTokensToModel(n,a)}}}});if(typeof d.attachSubmit==="function"){d.attachSubmit(t=>{const e=t.getSource();const n=(t.getParameter("value")||e.
|
|
1
|
+
sap.ui.define(["./BasePlugin","sap/m/MultiInput","sap/m/Token","sap/m/Text","../../utils/Logger"],function(t,e,n,i,o){"use strict";const s=t["BasePlugin"];const r=o["Logger"];class a extends s{render(t,o,s="meta",a,l){this.onChange=l;this.metadata=t;this.fieldKey=o.startsWith("/")?o.substring(1):o;this.modelName=s;if(!this.isEditable){this.control=new i({id:this.generateStableId(a,o),text:this.generateBindingInfo(o,s,undefined,{formatter:t=>Array.isArray(t)?t.join(", "):""})});this.applyCommonDirectives(this.control,t,s);return this.control}const u=this;const d=new e({id:this.generateStableId(a,o),enabled:!t.ui?.readOnly,placeholder:t.ui?.label||"Type and press Enter...",showValueHelp:false,tokenUpdate:t=>{const e=t.getParameter("type");const n=t.getSource();if(e==="removed"){const e=t.getParameter("removedTokens");const i=e.map(t=>t.getText());const o=u.getNativeBindingContext(n);if(o){const{model:t,absPath:e}=o;const s=t.getProperty(e)||[];const a=s.filter(t=>!i.includes(t));r.debug(`[MultiInputPlugin] Removing tokens from absolute path: ${e}`,i.join(", "),"MultiInputPlugin");u.syncTokensToModel(n,a)}}}});if(typeof d.attachSubmit==="function"){d.attachSubmit(t=>{const e=t.getSource();const n=(t.getParameter("value")||e.getProperty("value")).trim();if(n){const t=u.getNativeBindingContext(e);if(t){const{model:i,absPath:o}=t;const s=i.getProperty(o)||[];if(!s.includes(n)){const t=[...s,n];r.debug(`[MultiInputPlugin] submit (Enter) fired. Adding token to absolute path: ${o}`,n,"MultiInputPlugin");e.setValue("");u.syncTokensToModel(e,t)}else{e.setValue("")}}}})}d.addValidator(function(t){return null});d.bindAggregation("tokens",this.generateBindingInfo(o,s,undefined,{factory:(t,e)=>{const i=e.getObject()||"";return new n(t,{key:i,text:i})}}));this.control=d;this.applyCommonDirectives(this.control,t,s);return this.control}getNativeBindingContext(t){const e=t.getBinding("tokens");if(!e){r.error("[MultiInputPlugin] token list binding is completely missing on the source clone.");return null}const n=e.getModel();if(!n){r.error("[MultiInputPlugin] Failed to resolve underlying JSONModel from ListBinding.");return null}let i;const o=e.getContext();const s=e.getPath();if(o){const t=o.getPath();i=t.endsWith("/")?t+s:t==="/"?"/"+s:t+"/"+s}else{i=s.startsWith("/")?s:"/"+s}return{model:n,absPath:i}}syncTokensToModel(t,e){const n=this.getNativeBindingContext(t);if(!n)return;const{model:i,absPath:o}=n;i.setProperty(o,e);i.refresh(true);if(this.onChange){const t=this.validateAndApplyVisualState();this.onChange(t.isValid,this.fieldKey)}}getValue(){if(!this.control)return[];const t=this.control.getTokens();return t.map(t=>t.getText())}applyState(){if(this.control&&this.metadata){if(!this.isEditable)return;this.control.setEnabled(!this.metadata.ui?.readOnly)}}}var l={__esModule:true};l.MultiInputPlugin=a;return l});
|
|
2
2
|
//# sourceMappingURL=MultiInputPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiInputPlugin.js","names":["BasePlugin","___BasePlugin","Logger","____utils_Logger","MultiInputPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","this","metadata","fieldKey","startsWith","substring","isEditable","control","TextControl","id","generateStableId","text","generateBindingInfo","undefined","formatter","val","Array","isArray","join","applyCommonDirectives","plugin","mi","MultiInput","enabled","ui","readOnly","placeholder","label","showValueHelp","tokenUpdate","oEvent","type","getParameter","sourceMi","getSource","removedTokens","removedTexts","map","t","getText","bindingInfo","getNativeBindingContext","model","absPath","currentArray","getProperty","newArray","filter","includes","debug","syncTokensToModel","attachSubmit","getValue","trim","setValue","addValidator","args","bindAggregation","factory","sId","oContext","getObject","Token","key","binding","getBinding","error","getModel","ctx","getContext","getPath","cp","endsWith","setProperty","refresh","result","validateAndApplyVisualState","isValid","tokens","getTokens","applyState","setEnabled","__exports","__esModule"],"sources":["MultiInputPlugin.ts"],"sourcesContent":["/**\n * @file MultiInputPlugin.ts\n * @description Renders a sap.m.MultiInput for primitive arrays (e.g. arrays of strings).\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport MultiInput from \"sap/m/MultiInput\";\nimport Token from \"sap/m/Token\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\nimport Event from \"sap/ui/base/Event\";\nimport ListBinding from \"sap/ui/model/ListBinding\";\nimport { Logger } from \"../../utils/Logger\";\n\n/**\n * Handles rendering logic for arrays of primitive strings.\n * Users can type custom strings and press Enter to add them as tokens.\n * Adheres strictly to native UI5 Model-View-Controller ListBinding principles.\n * \n * @namespace nz.co.siliconst.ui5.metaui.plugins.controls\n * @public\n */\nexport class MultiInputPlugin extends BasePlugin {\n /**\n * Renders a `sap.m.MultiInput` component natively bound to a JSONModel array.\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 MultiInput 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 this.modelName = modelName;\n\n if (!this.isEditable) {\n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: this.generateBindingInfo(bindingPath, modelName, undefined, {\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 const plugin = this;\n\n const mi = new MultiInput({\n id: this.generateStableId(engineScopeId, bindingPath),\n enabled: !fieldMetadata.ui?.readOnly,\n placeholder: fieldMetadata.ui?.label || \"Type and press Enter...\",\n showValueHelp: false, // We don't have a list of options for primitive tags\n tokenUpdate: (oEvent: Event) => {\n const type = oEvent.getParameter(\"type\");\n const sourceMi = oEvent.getSource() as MultiInput;\n \n // Native UI5 tokens removed via the 'x' icon. We sync this directly back to the model.\n if (type === \"removed\") {\n const removedTokens = oEvent.getParameter(\"removedTokens\") as Token[];\n const removedTexts = removedTokens.map(t => t.getText());\n \n const bindingInfo = plugin.getNativeBindingContext(sourceMi);\n if (bindingInfo) {\n const { model, absPath } = bindingInfo;\n const currentArray = (model.getProperty(absPath) || []) as string[];\n const newArray = currentArray.filter(text => !removedTexts.includes(text));\n \n Logger.debug(`[MultiInputPlugin] Removing tokens from absolute path: ${absPath}`, removedTexts.join(\", \"), \"MultiInputPlugin\");\n plugin.syncTokensToModel(sourceMi, newArray);\n }\n }\n }\n });\n\n // The native addValidator pipeline is notoriously unreliable when there is no suggestion list bound,\n // often completely dropping the 'Enter' key event. Therefore, we use the standard `submit` event \n // inherited from InputBase to robustly capture when the user presses Enter.\n if (typeof mi.attachSubmit === \"function\") {\n mi.attachSubmit((oEvent: Event) => {\n const sourceMi = oEvent.getSource() as MultiInput;\n const val = (oEvent.getParameter(\"value\") as string || sourceMi.getValue()).trim();\n \n if (val) {\n const bindingInfo = plugin.getNativeBindingContext(sourceMi);\n if (bindingInfo) {\n const { model, absPath } = bindingInfo;\n const currentArray = (model.getProperty(absPath) || []) as string[];\n \n if (!currentArray.includes(val)) { // Prevent exact duplicates in primitive arrays\n const newArray = [...currentArray, val];\n Logger.debug(`[MultiInputPlugin] submit (Enter) fired. Adding token to absolute path: ${absPath}`, val, \"MultiInputPlugin\");\n \n // Natively clear the text input\n sourceMi.setValue(\"\");\n \n // Synchronize natively to the JSON model\n plugin.syncTokensToModel(sourceMi, newArray);\n } else {\n sourceMi.setValue(\"\");\n }\n }\n }\n });\n }\n\n // We must still register an addValidator returning null.\n // If UI5 *does* sporadically trigger the validator pipeline, this prevents the control \n // from attempting to natively mutate the bound ListBinding aggregation, which causes a core crash.\n mi.addValidator(function(args: { text: string }) {\n return null;\n });\n\n // Bind existing strings to tokens using a factory function\n mi.bindAggregation(\"tokens\", this.generateBindingInfo(bindingPath, modelName, undefined, {\n factory: (sId: string, oContext: sap.ui.model.Context) => {\n const text = (oContext.getObject() as string) || \"\";\n return new Token(sId, { key: text, text: text });\n }\n }));\n\n this.control = mi;\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n /**\n * Extracts the native UI5 ListBinding, its absolute path, and underlying JSONModel.\n * \n * @param sourceMi The live, cloned MultiInput control instance inside the DOM tree.\n * @returns Object containing model and absolute path, or null if resolution fails.\n */\n private getNativeBindingContext(sourceMi: MultiInput): { model: JSONModel, absPath: string } | null {\n const binding = sourceMi.getBinding(\"tokens\") as ListBinding;\n if (!binding) {\n Logger.error(\"[MultiInputPlugin] token list binding is completely missing on the source clone.\");\n return null;\n }\n\n const model = binding.getModel() as JSONModel;\n if (!model) {\n Logger.error(\"[MultiInputPlugin] Failed to resolve underlying JSONModel from ListBinding.\");\n return null;\n }\n\n let absPath: string;\n const ctx = binding.getContext();\n const bindingPath = binding.getPath();\n\n if (ctx) {\n const cp = ctx.getPath();\n absPath = cp.endsWith(\"/\") ? cp + bindingPath : (cp === \"/\" ? \"/\" + bindingPath : cp + \"/\" + bindingPath);\n } else {\n absPath = bindingPath.startsWith(\"/\") ? bindingPath : \"/\" + bindingPath;\n }\n\n return { model, absPath };\n }\n\n /**\n * Synchronizes the primitive string array derived from the MultiInput tokens directly back into the Model.\n * \n * @param sourceMi The live MultiInput clone.\n * @param newArray The final array of string values to save.\n */\n private syncTokensToModel(sourceMi: MultiInput, newArray: string[]): void {\n const bindingInfo = this.getNativeBindingContext(sourceMi);\n if (!bindingInfo) return;\n\n const { model, absPath } = bindingInfo;\n \n model.setProperty(absPath, newArray);\n model.refresh(true); // Force UI5 to sync bindings down the tree\n\n if (this.onChange) {\n const result = this.validateAndApplyVisualState();\n this.onChange(result.isValid, this.fieldKey);\n }\n }\n\n /**\n * Retrieves the current primitive array from the control.\n * @returns {unknown} The array of string tokens.\n */\n protected getValue(): unknown {\n if (!this.control) return [];\n const tokens = (this.control as MultiInput).getTokens();\n return tokens.map(t => t.getText());\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 MultiInput).setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"MultiInputPlugin.js","names":["BasePlugin","___BasePlugin","Logger","____utils_Logger","MultiInputPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","this","metadata","fieldKey","startsWith","substring","isEditable","control","TextControl","id","generateStableId","text","generateBindingInfo","undefined","formatter","val","Array","isArray","join","applyCommonDirectives","plugin","mi","MultiInput","enabled","ui","readOnly","placeholder","label","showValueHelp","tokenUpdate","oEvent","type","getParameter","sourceMi","getSource","removedTokens","removedTexts","map","t","getText","bindingInfo","getNativeBindingContext","model","absPath","currentArray","getProperty","newArray","filter","includes","debug","syncTokensToModel","attachSubmit","trim","setValue","addValidator","args","bindAggregation","factory","sId","oContext","getObject","Token","key","binding","getBinding","error","getModel","ctx","getContext","getPath","cp","endsWith","setProperty","refresh","result","validateAndApplyVisualState","isValid","getValue","tokens","getTokens","applyState","setEnabled","__exports","__esModule"],"sources":["MultiInputPlugin.ts"],"sourcesContent":["/**\n * @file MultiInputPlugin.ts\n * @description Renders a sap.m.MultiInput for primitive arrays (e.g. arrays of strings).\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport MultiInput from \"sap/m/MultiInput\";\nimport Token from \"sap/m/Token\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\nimport Event from \"sap/ui/base/Event\";\nimport ListBinding from \"sap/ui/model/ListBinding\";\nimport { Logger } from \"../../utils/Logger\";\n\n/**\n * Handles rendering logic for arrays of primitive strings.\n * Users can type custom strings and press Enter to add them as tokens.\n * Adheres strictly to native UI5 Model-View-Controller ListBinding principles.\n * \n * @namespace nz.co.siliconst.ui5.metaui.plugins.controls\n * @public\n */\nexport class MultiInputPlugin extends BasePlugin {\n /**\n * Renders a `sap.m.MultiInput` component natively bound to a JSONModel array.\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 MultiInput 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 this.modelName = modelName;\n\n if (!this.isEditable) {\n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: this.generateBindingInfo(bindingPath, modelName, undefined, {\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 const plugin = this;\n\n const mi = new MultiInput({\n id: this.generateStableId(engineScopeId, bindingPath),\n enabled: !fieldMetadata.ui?.readOnly,\n placeholder: fieldMetadata.ui?.label || \"Type and press Enter...\",\n showValueHelp: false, // We don't have a list of options for primitive tags\n tokenUpdate: (oEvent: Event) => {\n const type = (oEvent as any).getParameter(\"type\");\n const sourceMi = oEvent.getSource() as MultiInput;\n \n // Native UI5 tokens removed via the 'x' icon. We sync this directly back to the model.\n if (type === \"removed\") {\n const removedTokens = (oEvent as any).getParameter(\"removedTokens\") as Token[];\n const removedTexts = removedTokens.map(t => t.getText());\n \n const bindingInfo = plugin.getNativeBindingContext(sourceMi);\n if (bindingInfo) {\n const { model, absPath } = bindingInfo;\n const currentArray = (model.getProperty(absPath) || []) as string[];\n const newArray = currentArray.filter(text => !removedTexts.includes(text));\n \n Logger.debug(`[MultiInputPlugin] Removing tokens from absolute path: ${absPath}`, removedTexts.join(\", \"), \"MultiInputPlugin\");\n plugin.syncTokensToModel(sourceMi, newArray);\n }\n }\n }\n });\n\n // The native addValidator pipeline is notoriously unreliable when there is no suggestion list bound,\n // often completely dropping the 'Enter' key event. Therefore, we use the standard `submit` event \n // inherited from InputBase to robustly capture when the user presses Enter.\n if (typeof mi.attachSubmit === \"function\") {\n mi.attachSubmit((oEvent: Event) => {\n const sourceMi = oEvent.getSource() as MultiInput;\n const val = ((oEvent as any).getParameter(\"value\") as string || sourceMi.getProperty('value')).trim();\n \n if (val) {\n const bindingInfo = plugin.getNativeBindingContext(sourceMi);\n if (bindingInfo) {\n const { model, absPath } = bindingInfo;\n const currentArray = (model.getProperty(absPath) || []) as string[];\n \n if (!currentArray.includes(val)) { // Prevent exact duplicates in primitive arrays\n const newArray = [...currentArray, val];\n Logger.debug(`[MultiInputPlugin] submit (Enter) fired. Adding token to absolute path: ${absPath}`, val, \"MultiInputPlugin\");\n \n // Natively clear the text input\n sourceMi.setValue(\"\");\n \n // Synchronize natively to the JSON model\n plugin.syncTokensToModel(sourceMi, newArray);\n } else {\n sourceMi.setValue(\"\");\n }\n }\n }\n });\n }\n\n // We must still register an addValidator returning null.\n // If UI5 *does* sporadically trigger the validator pipeline, this prevents the control \n // from attempting to natively mutate the bound ListBinding aggregation, which causes a core crash.\n mi.addValidator(function(args: { text: string }) {\n return null;\n });\n\n // Bind existing strings to tokens using a factory function\n mi.bindAggregation(\"tokens\", this.generateBindingInfo(bindingPath, modelName, undefined, {\n factory: (sId: string, oContext: sap.ui.model.Context) => {\n const text = (oContext.getObject() as string) || \"\";\n return new Token(sId, { key: text, text: text });\n }\n }));\n\n this.control = mi;\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n /**\n * Extracts the native UI5 ListBinding, its absolute path, and underlying JSONModel.\n * \n * @param sourceMi The live, cloned MultiInput control instance inside the DOM tree.\n * @returns Object containing model and absolute path, or null if resolution fails.\n */\n private getNativeBindingContext(sourceMi: MultiInput): { model: JSONModel, absPath: string } | null {\n const binding = sourceMi.getBinding(\"tokens\") as ListBinding;\n if (!binding) {\n Logger.error(\"[MultiInputPlugin] token list binding is completely missing on the source clone.\");\n return null;\n }\n\n const model = binding.getModel() as JSONModel;\n if (!model) {\n Logger.error(\"[MultiInputPlugin] Failed to resolve underlying JSONModel from ListBinding.\");\n return null;\n }\n\n let absPath: string;\n const ctx = binding.getContext();\n const bindingPath = binding.getPath();\n\n if (ctx) {\n const cp = ctx.getPath();\n absPath = cp.endsWith(\"/\") ? cp + bindingPath : (cp === \"/\" ? \"/\" + bindingPath : cp + \"/\" + bindingPath);\n } else {\n absPath = bindingPath.startsWith(\"/\") ? bindingPath : \"/\" + bindingPath;\n }\n\n return { model, absPath };\n }\n\n /**\n * Synchronizes the primitive string array derived from the MultiInput tokens directly back into the Model.\n * \n * @param sourceMi The live MultiInput clone.\n * @param newArray The final array of string values to save.\n */\n private syncTokensToModel(sourceMi: MultiInput, newArray: string[]): void {\n const bindingInfo = this.getNativeBindingContext(sourceMi);\n if (!bindingInfo) return;\n\n const { model, absPath } = bindingInfo;\n \n model.setProperty(absPath, newArray);\n model.refresh(true); // Force UI5 to sync bindings down the tree\n\n if (this.onChange) {\n const result = this.validateAndApplyVisualState();\n this.onChange(result.isValid, this.fieldKey);\n }\n }\n\n /**\n * Retrieves the current primitive array from the control.\n * @returns {unknown} The array of string tokens.\n */\n protected getValue(): unknown {\n if (!this.control) return [];\n const tokens = (this.control as MultiInput).getTokens();\n return tokens.map(t => t.getText());\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 MultiInput).setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -57,12 +57,12 @@ export class MultiInputPlugin extends BasePlugin {
|
|
|
57
57
|
placeholder: fieldMetadata.ui?.label || "Type and press Enter...",
|
|
58
58
|
showValueHelp: false, // We don't have a list of options for primitive tags
|
|
59
59
|
tokenUpdate: (oEvent: Event) => {
|
|
60
|
-
const type = oEvent.getParameter("type");
|
|
60
|
+
const type = (oEvent as any).getParameter("type");
|
|
61
61
|
const sourceMi = oEvent.getSource() as MultiInput;
|
|
62
62
|
|
|
63
63
|
// Native UI5 tokens removed via the 'x' icon. We sync this directly back to the model.
|
|
64
64
|
if (type === "removed") {
|
|
65
|
-
const removedTokens = oEvent.getParameter("removedTokens") as Token[];
|
|
65
|
+
const removedTokens = (oEvent as any).getParameter("removedTokens") as Token[];
|
|
66
66
|
const removedTexts = removedTokens.map(t => t.getText());
|
|
67
67
|
|
|
68
68
|
const bindingInfo = plugin.getNativeBindingContext(sourceMi);
|
|
@@ -84,7 +84,7 @@ export class MultiInputPlugin extends BasePlugin {
|
|
|
84
84
|
if (typeof mi.attachSubmit === "function") {
|
|
85
85
|
mi.attachSubmit((oEvent: Event) => {
|
|
86
86
|
const sourceMi = oEvent.getSource() as MultiInput;
|
|
87
|
-
const val = (oEvent.getParameter("value") as string || sourceMi.
|
|
87
|
+
const val = ((oEvent as any).getParameter("value") as string || sourceMi.getProperty('value')).trim();
|
|
88
88
|
|
|
89
89
|
if (val) {
|
|
90
90
|
const bindingInfo = plugin.getNativeBindingContext(sourceMi);
|
|
@@ -72,14 +72,14 @@ sap.ui.define(["./BasePlugin", "sap/m/Input", "sap/m/Text", "sap/ui/model/type/F
|
|
|
72
72
|
*/
|
|
73
73
|
getValue() {
|
|
74
74
|
if (!this.control) return null;
|
|
75
|
-
// In UI5, Input.
|
|
75
|
+
// In UI5, Input.getProperty('value') returns a string. We must parse it if it's bound.
|
|
76
76
|
// However, we can also extract it directly from the binding.
|
|
77
77
|
const input = this.control;
|
|
78
78
|
const binding = input.getBinding("value");
|
|
79
79
|
if (binding) {
|
|
80
|
-
return binding.
|
|
80
|
+
return binding.getProperty('value');
|
|
81
81
|
}
|
|
82
|
-
return input.
|
|
82
|
+
return input.getProperty('value');
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
/**
|
|
@@ -1 +1 @@
|
|
|
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","generateBindingInfo","applyCommonDirectives","typeInstance","type","Integer","groupingEnabled","Float","minFractionDigits","scale","undefined","maxFractionDigits","Input","value","path","model","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: this.generateBindingInfo(bindingPath, modelName)\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: bindingPath,\n model: modelName,\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.
|
|
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","generateBindingInfo","applyCommonDirectives","typeInstance","type","Integer","groupingEnabled","Float","minFractionDigits","scale","undefined","maxFractionDigits","Input","value","path","model","editable","ui","readOnly","required","change","oEvent","val","getParameter","result","validateAndApplyVisualState","isValid","getValue","input","binding","getBinding","getProperty","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: this.generateBindingInfo(bindingPath, modelName)\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: bindingPath,\n model: modelName,\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 as any).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.getProperty('value') 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.getProperty('value');\n }\n return input.getProperty('value');\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,2 +1,2 @@
|
|
|
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,n,a){"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:this.generateBindingInfo(s,r)});this.applyCommonDirectives(this.control,e,r);return this.control}let u;if(e.type==="integer"){u=new a({groupingEnabled:false})}else{u=new n({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:s,model:r,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.
|
|
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,n,a){"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:this.generateBindingInfo(s,r)});this.applyCommonDirectives(this.control,e,r);return this.control}let u;if(e.type==="integer"){u=new a({groupingEnabled:false})}else{u=new n({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:s,model:r,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.getProperty("value")}return e.getProperty("value")}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","fieldKey","startsWith","substring","isEditable","control","TextControl","id","generateStableId","text","generateBindingInfo","applyCommonDirectives","typeInstance","type","Integer","groupingEnabled","Float","minFractionDigits","scale","undefined","maxFractionDigits","Input","value","path","model","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: this.generateBindingInfo(bindingPath, modelName)\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: bindingPath,\n model: modelName,\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.
|
|
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","generateBindingInfo","applyCommonDirectives","typeInstance","type","Integer","groupingEnabled","Float","minFractionDigits","scale","undefined","maxFractionDigits","Input","value","path","model","editable","ui","readOnly","required","change","oEvent","val","getParameter","result","validateAndApplyVisualState","isValid","getValue","input","binding","getBinding","getProperty","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: this.generateBindingInfo(bindingPath, modelName)\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: bindingPath,\n model: modelName,\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 as any).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.getProperty('value') 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.getProperty('value');\n }\n return input.getProperty('value');\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,KAAMV,KAAKW,oBAAoBf,EAAaC,KAEhDG,KAAKY,sBAAsBZ,KAAKM,QAASX,EAAeE,GACxD,OAAOG,KAAKM,OAChB,CAEA,IAAIO,EACJ,GAAIlB,EAAcmB,OAAS,UAAW,CAClCD,EAAe,IAAIE,EAAQ,CAAEC,gBAAiB,OAClD,KAAO,CACHH,EAAe,IAAII,EAAM,CACrBD,gBAAiB,MACjBE,kBAAmBvB,EAAcwB,QAAUC,UAAYzB,EAAcwB,MAAQ,EAC7EE,kBAAmB1B,EAAcwB,QAAUC,UAAYzB,EAAcwB,MAAQ,GAErF,CAEAnB,KAAKM,QAAU,IAAIgB,EAAM,CACrBd,GAAIR,KAAKS,iBAAiBX,EAAeF,GACzC2B,MAAO,CACHC,KAAM5B,EACN6B,MAAO5B,EACPiB,KAAMD,GAEVC,KAAM,SACNY,UAAW/B,EAAcgC,IAAIC,SAC7BC,WAAYlC,EAAckC,SAC1BC,OAASC,IACL,MAAMC,EAAOD,EAAeE,aAAa,SACzC,MAAMC,EAASlC,KAAKmC,8BACpB,GAAInC,KAAKD,SAAU,CACfC,KAAKD,SAASmC,EAAOE,QAASpC,KAAKE,SACvC,KAIRF,KAAKY,sBAAsBZ,KAAKM,QAASX,EAAeE,GAExD,OAAOG,KAAKM,OAChB,CAMU+B,WACN,IAAKrC,KAAKM,QAAS,OAAO,KAG1B,MAAMgC,EAAQtC,KAAKM,QACnB,MAAMiC,EAAUD,EAAME,WAAW,SACjC,GAAID,EAAS,CACT,OAAOA,EAAQE,YAAY,QAC/B,CACA,OAAOH,EAAMG,YAAY,QAC7B,CAKUC,aACN,GAAI1C,KAAKM,SAAWN,KAAKC,SAAU,CAC/B,IAAKD,KAAKK,WAAY,OACtB,MAAMiC,EAAQtC,KAAKM,QACnBgC,EAAMK,aAAa3C,KAAKC,SAAS0B,IAAIC,UACrCU,EAAMM,cAAc5C,KAAKC,SAAS4B,SACtC,CACJ,EACH,IAAAgB,EAAA,CAAAC,WAAA,MAAAD,EAAApD,eAAA,OAAAoD,CAAA","ignoreList":[]}
|
|
@@ -61,7 +61,7 @@ export class NumberPlugin extends BasePlugin {
|
|
|
61
61
|
editable: !fieldMetadata.ui?.readOnly,
|
|
62
62
|
required: !!fieldMetadata.required,
|
|
63
63
|
change: (oEvent: sap.ui.base.Event) => {
|
|
64
|
-
const val = oEvent.getParameter("value");
|
|
64
|
+
const val = (oEvent as any).getParameter("value");
|
|
65
65
|
const result = this.validateAndApplyVisualState();
|
|
66
66
|
if (this.onChange) {
|
|
67
67
|
this.onChange(result.isValid, this.fieldKey);
|
|
@@ -80,14 +80,14 @@ export class NumberPlugin extends BasePlugin {
|
|
|
80
80
|
*/
|
|
81
81
|
protected getValue(): unknown {
|
|
82
82
|
if (!this.control) return null;
|
|
83
|
-
// In UI5, Input.
|
|
83
|
+
// In UI5, Input.getProperty('value') returns a string. We must parse it if it's bound.
|
|
84
84
|
// However, we can also extract it directly from the binding.
|
|
85
85
|
const input = this.control as Input;
|
|
86
86
|
const binding = input.getBinding("value");
|
|
87
87
|
if (binding) {
|
|
88
|
-
return binding.
|
|
88
|
+
return binding.getProperty('value');
|
|
89
89
|
}
|
|
90
|
-
return input.
|
|
90
|
+
return input.getProperty('value');
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
/**
|
|
@@ -46,14 +46,15 @@ sap.ui.define(["./BasePlugin", "sap/m/Button"], function (___BasePlugin, Button)
|
|
|
46
46
|
|
|
47
47
|
// Deep clone to prevent live-mutations on the parent model before 'Submit' is clicked
|
|
48
48
|
const nestedData = JSON.parse(JSON.stringify(parentModel.getProperty(updatePath) || {}));
|
|
49
|
-
sap.ui.require(["nz/co/siliconst/ui5/metaui/controls/DynamicHost"],
|
|
50
|
-
const host = new
|
|
49
|
+
sap.ui.require(["nz/co/siliconst/ui5/metaui/controls/DynamicHost"], DynamicHostClass => {
|
|
50
|
+
const host = new DynamicHostClass({
|
|
51
51
|
schemaDefinition: subSchema,
|
|
52
52
|
data: nestedData,
|
|
53
|
-
editable: this.isEditable
|
|
53
|
+
editable: this.isEditable,
|
|
54
|
+
layoutBudget: this.metadata?.ui?.layoutBudget || 0
|
|
54
55
|
});
|
|
55
56
|
if (!!this.isEditable) {
|
|
56
|
-
host.
|
|
57
|
+
host.attachEvent("submit", e => {
|
|
57
58
|
const payload = e.getParameter("payload");
|
|
58
59
|
parentModel.setProperty(updatePath, payload);
|
|
59
60
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectPlugin-dbg.js","names":["BasePlugin","___BasePlugin","ObjectPlugin","render","field","bindingPath","modelName","engineScopeId","onChange","metadata","propKey","startsWith","substring","subSchema","type","title","ui","label","properties","uiLayout","control","Button","id","generateStableId","text","isEditable","icon","press","oEvent","btn","getSource","parentModel","getModel","bindingContext","getBindingContext","updatePath","ctxPath","getPath","endsWith","nestedData","JSON","parse","stringify","getProperty","sap","require","
|
|
1
|
+
{"version":3,"file":"ObjectPlugin-dbg.js","names":["BasePlugin","___BasePlugin","ObjectPlugin","render","field","bindingPath","modelName","engineScopeId","onChange","metadata","propKey","startsWith","substring","subSchema","type","title","ui","label","properties","uiLayout","control","Button","id","generateStableId","text","isEditable","icon","press","oEvent","btn","getSource","parentModel","getModel","bindingContext","getBindingContext","updatePath","ctxPath","getPath","endsWith","nestedData","JSON","parse","stringify","getProperty","sap","require","DynamicHostClass","host","schemaDefinition","data","editable","layoutBudget","attachEvent","e","payload","getParameter","setProperty","buttonText","dialogButtonText","openInDialog","validate","isValid","getValue","applyState","__exports","__esModule"],"sources":["ObjectPlugin.ts"],"sourcesContent":["/**\n * @file ObjectPlugin.ts\n * @description Renders a button that opens a dialog to edit a nested object structure.\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPluginValidationResult } from \"../../interfaces/IPlugin\";\nimport { ISchema, IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport Control from \"sap/ui/core/Control\";\nimport Event from \"sap/ui/base/Event\";\nimport Button from \"sap/m/Button\";\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\n\nexport class ObjectPlugin extends BasePlugin {\n /**\n * Renders a `sap.m.Button` to open a nested Object form dialog.\n * \n * @param field 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 Button control.\n */\n public render(field: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = field;\n const propKey = bindingPath.startsWith(\"/\") ? bindingPath.substring(1) : bindingPath;\n \n const subSchema: ISchema = {\n type: \"object\",\n title: field.ui?.label || propKey,\n properties: field.properties || {}\n };\n \n if (field.uiLayout) {\n subSchema.uiLayout = field.uiLayout;\n }\n\n this.control = new Button({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: !this.isEditable ? \"View Details\" : \"Edit Details\",\n icon: !this.isEditable ? \"sap-icon://display\" : \"sap-icon://form\",\n press: (oEvent: Event) => {\n const btn = oEvent.getSource() as Button;\n const parentModel = btn.getModel(modelName) as JSONModel;\n if (!parentModel) return;\n \n const bindingContext = btn.getBindingContext(modelName);\n let updatePath = bindingPath;\n if (bindingContext && !bindingPath.startsWith(\"/\")) {\n const ctxPath = bindingContext.getPath();\n updatePath = ctxPath.endsWith(\"/\") ? ctxPath + bindingPath : (ctxPath === \"/\" ? \"/\" + bindingPath : ctxPath + \"/\" + bindingPath);\n }\n \n // Deep clone to prevent live-mutations on the parent model before 'Submit' is clicked\n const nestedData = JSON.parse(JSON.stringify(parentModel.getProperty(updatePath) || {}));\n\n sap.ui.require([\"nz/co/siliconst/ui5/metaui/controls/DynamicHost\"], (DynamicHostClass: typeof import(\"../../controls/DynamicHost\").default) => {\n const host = new DynamicHostClass({\n schemaDefinition: subSchema,\n data: nestedData,\n editable: this.isEditable,\n layoutBudget: this.metadata?.ui?.layoutBudget || 0\n } as object);\n\n if (!!this.isEditable) {\n host.attachEvent(\"submit\", (e: Event) => {\n const payload = e.getParameter(\"payload\");\n parentModel.setProperty(updatePath, payload);\n \n // CRITICAL: Notify the parent Engine that this field mutated\n // so it can trigger LiveUpdate syncs and validate!\n if (this.onChange) {\n this.onChange(true, propKey);\n }\n });\n }\n\n const buttonText = field.ui?.dialogButtonText || (!this.isEditable ? \"Close\" : \"OK\");\n host.openInDialog(`Nested Details: ${field.ui?.label || propKey}`, buttonText);\n });\n }\n });\n\n return this.control as Control;\n }\n\n /**\n * Validates the object plugin (always true as validation is deferred to the dialog host).\n * @returns {IPluginValidationResult} The validation result.\n */\n public validate(): IPluginValidationResult {\n return { isValid: true };\n }\n\n /**\n * Read-only component for the engine, returns null.\n */\n protected getValue(): null {\n return null;\n }\n\n /**\n * Read-only component, no dynamic state handling needed for the button itself.\n */\n protected applyState(): void {\n // No dynamic state handling needed for the button\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,0DAA0D,CAAC;IAC1E;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;IACxF,OAAO,EAAW,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAC3F,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAK1C,MAAa,YAAa,SAAQ,UAAU;QACxC;;;;;;;;;WASG;QACI,MAAM,CAAC,KAAK,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":"ObjectPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,0DAA0D,CAAC;IAC1E;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;IACxF,OAAO,EAAW,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAC3F,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAK1C,MAAa,YAAa,SAAQ,UAAU;QACxC;;;;;;;;;WASG;QACI,MAAM,CAAC,KAAK,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;QAgErL;;;WAGG;QACI,QAAQ,IAAI,uBAAuB;QAI1C;;WAEG;QACH,SAAS,CAAC,QAAQ,IAAI,IAAI;QAI1B;;WAEG;QACH,SAAS,CAAC,UAAU,IAAI,IAAI;KAG/B;CAEA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
sap.ui.define(["./BasePlugin","sap/m/Button"],function(t,e){"use strict";const i=t["BasePlugin"];class s extends i{render(t,i,s="meta",a,n){this.onChange=n;this.metadata=t;const o=i.startsWith("/")?i.substring(1):i;const r={type:"object",title:t.ui?.label||o,properties:t.properties||{}};if(t.uiLayout){r.uiLayout=t.uiLayout}this.control=new e({id:this.generateStableId(a,i),text:!this.isEditable?"View Details":"Edit Details",icon:!this.isEditable?"sap-icon://display":"sap-icon://form",press:e=>{const a=e.getSource();const n=a.getModel(s);if(!n)return;const
|
|
1
|
+
sap.ui.define(["./BasePlugin","sap/m/Button"],function(t,e){"use strict";const i=t["BasePlugin"];class s extends i{render(t,i,s="meta",a,n){this.onChange=n;this.metadata=t;const o=i.startsWith("/")?i.substring(1):i;const r={type:"object",title:t.ui?.label||o,properties:t.properties||{}};if(t.uiLayout){r.uiLayout=t.uiLayout}this.control=new e({id:this.generateStableId(a,i),text:!this.isEditable?"View Details":"Edit Details",icon:!this.isEditable?"sap-icon://display":"sap-icon://form",press:e=>{const a=e.getSource();const n=a.getModel(s);if(!n)return;const u=a.getBindingContext(s);let l=i;if(u&&!i.startsWith("/")){const t=u.getPath();l=t.endsWith("/")?t+i:t==="/"?"/"+i:t+"/"+i}const c=JSON.parse(JSON.stringify(n.getProperty(l)||{}));sap.ui.require(["nz/co/siliconst/ui5/metaui/controls/DynamicHost"],e=>{const i=new e({schemaDefinition:r,data:c,editable:this.isEditable,layoutBudget:this.metadata?.ui?.layoutBudget||0});if(!!this.isEditable){i.attachEvent("submit",t=>{const e=t.getParameter("payload");n.setProperty(l,e);if(this.onChange){this.onChange(true,o)}})}const s=t.ui?.dialogButtonText||(!this.isEditable?"Close":"OK");i.openInDialog(`Nested Details: ${t.ui?.label||o}`,s)})}});return this.control}validate(){return{isValid:true}}getValue(){return null}applyState(){}}var a={__esModule:true};a.ObjectPlugin=s;return a});
|
|
2
2
|
//# sourceMappingURL=ObjectPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectPlugin.js","names":["BasePlugin","___BasePlugin","ObjectPlugin","render","field","bindingPath","modelName","engineScopeId","onChange","this","metadata","propKey","startsWith","substring","subSchema","type","title","ui","label","properties","uiLayout","control","Button","id","generateStableId","text","isEditable","icon","press","oEvent","btn","getSource","parentModel","getModel","bindingContext","getBindingContext","updatePath","ctxPath","getPath","endsWith","nestedData","JSON","parse","stringify","getProperty","sap","require","
|
|
1
|
+
{"version":3,"file":"ObjectPlugin.js","names":["BasePlugin","___BasePlugin","ObjectPlugin","render","field","bindingPath","modelName","engineScopeId","onChange","this","metadata","propKey","startsWith","substring","subSchema","type","title","ui","label","properties","uiLayout","control","Button","id","generateStableId","text","isEditable","icon","press","oEvent","btn","getSource","parentModel","getModel","bindingContext","getBindingContext","updatePath","ctxPath","getPath","endsWith","nestedData","JSON","parse","stringify","getProperty","sap","require","DynamicHostClass","host","schemaDefinition","data","editable","layoutBudget","attachEvent","e","payload","getParameter","setProperty","buttonText","dialogButtonText","openInDialog","validate","isValid","getValue","applyState","__exports","__esModule"],"sources":["ObjectPlugin.ts"],"sourcesContent":["/**\n * @file ObjectPlugin.ts\n * @description Renders a button that opens a dialog to edit a nested object structure.\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPluginValidationResult } from \"../../interfaces/IPlugin\";\nimport { ISchema, IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport Control from \"sap/ui/core/Control\";\nimport Event from \"sap/ui/base/Event\";\nimport Button from \"sap/m/Button\";\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\n\nexport class ObjectPlugin extends BasePlugin {\n /**\n * Renders a `sap.m.Button` to open a nested Object form dialog.\n * \n * @param field 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 Button control.\n */\n public render(field: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = field;\n const propKey = bindingPath.startsWith(\"/\") ? bindingPath.substring(1) : bindingPath;\n \n const subSchema: ISchema = {\n type: \"object\",\n title: field.ui?.label || propKey,\n properties: field.properties || {}\n };\n \n if (field.uiLayout) {\n subSchema.uiLayout = field.uiLayout;\n }\n\n this.control = new Button({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: !this.isEditable ? \"View Details\" : \"Edit Details\",\n icon: !this.isEditable ? \"sap-icon://display\" : \"sap-icon://form\",\n press: (oEvent: Event) => {\n const btn = oEvent.getSource() as Button;\n const parentModel = btn.getModel(modelName) as JSONModel;\n if (!parentModel) return;\n \n const bindingContext = btn.getBindingContext(modelName);\n let updatePath = bindingPath;\n if (bindingContext && !bindingPath.startsWith(\"/\")) {\n const ctxPath = bindingContext.getPath();\n updatePath = ctxPath.endsWith(\"/\") ? ctxPath + bindingPath : (ctxPath === \"/\" ? \"/\" + bindingPath : ctxPath + \"/\" + bindingPath);\n }\n \n // Deep clone to prevent live-mutations on the parent model before 'Submit' is clicked\n const nestedData = JSON.parse(JSON.stringify(parentModel.getProperty(updatePath) || {}));\n\n sap.ui.require([\"nz/co/siliconst/ui5/metaui/controls/DynamicHost\"], (DynamicHostClass: typeof import(\"../../controls/DynamicHost\").default) => {\n const host = new DynamicHostClass({\n schemaDefinition: subSchema,\n data: nestedData,\n editable: this.isEditable,\n layoutBudget: this.metadata?.ui?.layoutBudget || 0\n } as object);\n\n if (!!this.isEditable) {\n host.attachEvent(\"submit\", (e: Event) => {\n const payload = e.getParameter(\"payload\");\n parentModel.setProperty(updatePath, payload);\n \n // CRITICAL: Notify the parent Engine that this field mutated\n // so it can trigger LiveUpdate syncs and validate!\n if (this.onChange) {\n this.onChange(true, propKey);\n }\n });\n }\n\n const buttonText = field.ui?.dialogButtonText || (!this.isEditable ? \"Close\" : \"OK\");\n host.openInDialog(`Nested Details: ${field.ui?.label || propKey}`, buttonText);\n });\n }\n });\n\n return this.control as Control;\n }\n\n /**\n * Validates the object plugin (always true as validation is deferred to the dialog host).\n * @returns {IPluginValidationResult} The validation result.\n */\n public validate(): IPluginValidationResult {\n return { isValid: true };\n }\n\n /**\n * Read-only component for the engine, returns null.\n */\n protected getValue(): null {\n return null;\n }\n\n /**\n * Read-only component, no dynamic state handling needed for the button itself.\n */\n protected applyState(): void {\n // No dynamic state handling needed for the button\n }\n}\n"],"mappings":"yEAAA,MAKSA,EAAUC,EAAA,cAQZ,MAAMC,UAAqBF,EAWvBG,OAAOC,EAA2BC,EAAsBC,EAAoB,OAAQC,EAAwBC,GAC/GC,KAAKD,SAAWA,EAChBC,KAAKC,SAAWN,EAChB,MAAMO,EAAUN,EAAYO,WAAW,KAAOP,EAAYQ,UAAU,GAAKR,EAEzE,MAAMS,EAAqB,CACvBC,KAAM,SACNC,MAAOZ,EAAMa,IAAIC,OAASP,EAC1BQ,WAAYf,EAAMe,YAAc,CAAC,GAGrC,GAAIf,EAAMgB,SAAU,CAChBN,EAAUM,SAAWhB,EAAMgB,QAC/B,CAEAX,KAAKY,QAAU,IAAIC,EAAO,CACtBC,GAAId,KAAKe,iBAAiBjB,EAAeF,GACzCoB,MAAOhB,KAAKiB,WAAa,eAAiB,eAC1CC,MAAOlB,KAAKiB,WAAa,qBAAuB,kBAChDE,MAAQC,IACJ,MAAMC,EAAMD,EAAOE,YACnB,MAAMC,EAAcF,EAAIG,SAAS3B,GACjC,IAAK0B,EAAa,OAElB,MAAME,EAAiBJ,EAAIK,kBAAkB7B,GAC7C,IAAI8B,EAAa/B,EACjB,GAAI6B,IAAmB7B,EAAYO,WAAW,KAAM,CAChD,MAAMyB,EAAUH,EAAeI,UAC/BF,EAAaC,EAAQE,SAAS,KAAOF,EAAUhC,EAAegC,IAAY,IAAM,IAAMhC,EAAcgC,EAAU,IAAMhC,CACxH,CAGA,MAAMmC,EAAaC,KAAKC,MAAMD,KAAKE,UAAUX,EAAYY,YAAYR,IAAe,CAAC,IAErFS,IAAI5B,GAAG6B,QAAQ,CAAC,mDAAqDC,IACjE,MAAMC,EAAO,IAAID,EAAiB,CAC9BE,iBAAkBnC,EAClBoC,KAAMV,EACNW,SAAU1C,KAAKiB,WACf0B,aAAc3C,KAAKC,UAAUO,IAAImC,cAAgB,IAGrD,KAAM3C,KAAKiB,WAAY,CACnBsB,EAAKK,YAAY,SAAWC,IACxB,MAAMC,EAAUD,EAAEE,aAAa,WAC/BxB,EAAYyB,YAAYrB,EAAYmB,GAIpC,GAAI9C,KAAKD,SAAU,CACfC,KAAKD,SAAS,KAAMG,EACxB,GAER,CAEA,MAAM+C,EAAatD,EAAMa,IAAI0C,oBAAsBlD,KAAKiB,WAAa,QAAU,MAC/EsB,EAAKY,aAAa,mBAAmBxD,EAAMa,IAAIC,OAASP,IAAW+C,QAK/E,OAAOjD,KAAKY,OAChB,CAMOwC,WACH,MAAO,CAAEC,QAAS,KACtB,CAKUC,WACN,OAAO,IACX,CAKUC,aACN,EAEP,IAAAC,EAAA,CAAAC,WAAA,MAAAD,EAAA/D,eAAA,OAAA+D,CAAA","ignoreList":[]}
|
|
@@ -56,16 +56,17 @@ export class ObjectPlugin extends BasePlugin {
|
|
|
56
56
|
// Deep clone to prevent live-mutations on the parent model before 'Submit' is clicked
|
|
57
57
|
const nestedData = JSON.parse(JSON.stringify(parentModel.getProperty(updatePath) || {}));
|
|
58
58
|
|
|
59
|
-
sap.ui.require(["nz/co/siliconst/ui5/metaui/controls/DynamicHost"], (
|
|
60
|
-
const host = new
|
|
59
|
+
sap.ui.require(["nz/co/siliconst/ui5/metaui/controls/DynamicHost"], (DynamicHostClass: typeof import("../../controls/DynamicHost").default) => {
|
|
60
|
+
const host = new DynamicHostClass({
|
|
61
61
|
schemaDefinition: subSchema,
|
|
62
62
|
data: nestedData,
|
|
63
|
-
editable: this.isEditable
|
|
64
|
-
|
|
63
|
+
editable: this.isEditable,
|
|
64
|
+
layoutBudget: this.metadata?.ui?.layoutBudget || 0
|
|
65
|
+
} as object);
|
|
65
66
|
|
|
66
67
|
if (!!this.isEditable) {
|
|
67
|
-
host.
|
|
68
|
-
const payload =
|
|
68
|
+
host.attachEvent("submit", (e: Event) => {
|
|
69
|
+
const payload = e.getParameter("payload");
|
|
69
70
|
parentModel.setProperty(updatePath, payload);
|
|
70
71
|
|
|
71
72
|
// CRITICAL: Notify the parent Engine that this field mutated
|
|
@@ -31,7 +31,7 @@ sap.ui.define(["./BasePlugin", "sap/m/Input", "sap/m/Text"], function (___BasePl
|
|
|
31
31
|
return this.control;
|
|
32
32
|
}
|
|
33
33
|
getValue() {
|
|
34
|
-
return this.control && this.control.getMetadata().getName() === "sap.m.Input" ? this.control.
|
|
34
|
+
return this.control && this.control.getMetadata().getName() === "sap.m.Input" ? this.control.getProperty('value') : null;
|
|
35
35
|
}
|
|
36
36
|
applyState() {
|
|
37
37
|
if (!this.control || !this.metadata || this.control.getMetadata().getName() !== "sap.m.Input") return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PasswordPlugin-dbg.js","names":["BasePlugin","___BasePlugin","PasswordPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","metadata","fieldKey","replace","isEditable","control","TextControl","id","generateStableId","text","applyCommonDirectives","Input","value","generateBindingInfo","type","maxLength","required","change","oEvent","result","validateAndApplyVisualState","isValid","getValue","getMetadata","getName","applyState","input","setEditable","ui","readOnly","setRequired","__exports","__esModule"],"sources":["PasswordPlugin.ts"],"sourcesContent":["import { 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\";\n\nexport class PasswordPlugin extends BasePlugin {\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.replace(\"/\", \"\");\n \n if (!this.isEditable) {\n // Password in read-only should be masked natively\n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: \"********\" \n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n this.control = new Input({\n id: this.generateStableId(engineScopeId, bindingPath),\n value: this.generateBindingInfo(bindingPath, modelName),\n type: \"Password\",\n maxLength: fieldMetadata.maxLength || 0,\n required: !!fieldMetadata.required,\n change: (oEvent: sap.ui.base.Event) => {\n const result = this.validateAndApplyVisualState();\n if (this.onChange) this.onChange(result.isValid, this.fieldKey);\n }\n });\n\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n protected getValue(): unknown {\n return this.control && this.control.getMetadata().getName() === \"sap.m.Input\" ? (this.control as Input).
|
|
1
|
+
{"version":3,"file":"PasswordPlugin-dbg.js","names":["BasePlugin","___BasePlugin","PasswordPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","metadata","fieldKey","replace","isEditable","control","TextControl","id","generateStableId","text","applyCommonDirectives","Input","value","generateBindingInfo","type","maxLength","required","change","oEvent","result","validateAndApplyVisualState","isValid","getValue","getMetadata","getName","getProperty","applyState","input","setEditable","ui","readOnly","setRequired","__exports","__esModule"],"sources":["PasswordPlugin.ts"],"sourcesContent":["import { 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\";\n\nexport class PasswordPlugin extends BasePlugin {\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.replace(\"/\", \"\");\n \n if (!this.isEditable) {\n // Password in read-only should be masked natively\n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: \"********\" \n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n this.control = new Input({\n id: this.generateStableId(engineScopeId, bindingPath),\n value: this.generateBindingInfo(bindingPath, modelName),\n type: \"Password\",\n maxLength: fieldMetadata.maxLength || 0,\n required: !!fieldMetadata.required,\n change: (oEvent: sap.ui.base.Event) => {\n const result = this.validateAndApplyVisualState();\n if (this.onChange) this.onChange(result.isValid, this.fieldKey);\n }\n });\n\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n protected getValue(): unknown {\n return this.control && this.control.getMetadata().getName() === \"sap.m.Input\" ? (this.control as Input).getProperty('value') : null;\n }\n\n protected applyState(): void {\n if (!this.control || !this.metadata || this.control.getMetadata().getName() !== \"sap.m.Input\") return;\n const input = this.control as Input;\n input.setEditable(!this.metadata.ui?.readOnly);\n input.setRequired(!!this.metadata.required);\n }\n}\n"],"mappings":";;;QAASA,UAAU,GAAAC,aAAA;EAMZ,MAAMC,cAAc,SAASF,UAAU,CAAC;IACpCG,MAAMA,CAACC,aAAgC,EAAEC,WAAmB,EAAEC,SAAiB,GAAG,MAAM,EAAEC,aAAsB,EAAEC,QAAwD,EAAW;MACxL,IAAI,CAACA,QAAQ,GAAGA,QAAQ;MACxB,IAAI,CAACC,QAAQ,GAAGL,aAAa;MAC7B,IAAI,CAACM,QAAQ,GAAGL,WAAW,CAACM,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;MAE5C,IAAI,CAAC,IAAI,CAACC,UAAU,EAAE;QAClB;QACA,IAAI,CAACC,OAAO,GAAG,IAAIC,WAAW,CAAC;UAC3BC,EAAE,EAAE,IAAI,CAACC,gBAAgB,CAACT,aAAa,EAAEF,WAAW,CAAC;UACrDY,IAAI,EAAE;QACV,CAAC,CAAC;QACF,IAAI,CAACC,qBAAqB,CAAC,IAAI,CAACL,OAAO,EAAET,aAAa,EAAEE,SAAS,CAAC;QAClE,OAAO,IAAI,CAACO,OAAO;MACvB;MAEA,IAAI,CAACA,OAAO,GAAG,IAAIM,KAAK,CAAC;QACrBJ,EAAE,EAAE,IAAI,CAACC,gBAAgB,CAACT,aAAa,EAAEF,WAAW,CAAC;QACrDe,KAAK,EAAE,IAAI,CAACC,mBAAmB,CAAChB,WAAW,EAAEC,SAAS,CAAC;QACvDgB,IAAI,EAAE,UAAU;QAChBC,SAAS,EAAEnB,aAAa,CAACmB,SAAS,IAAI,CAAC;QACvCC,QAAQ,EAAE,CAAC,CAACpB,aAAa,CAACoB,QAAQ;QAClCC,MAAM,EAAGC,MAAyB,IAAK;UACnC,MAAMC,MAAM,GAAG,IAAI,CAACC,2BAA2B,CAAC,CAAC;UACjD,IAAI,IAAI,CAACpB,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAACmB,MAAM,CAACE,OAAO,EAAE,IAAI,CAACnB,QAAQ,CAAC;QACnE;MACJ,CAAC,CAAC;MAEF,IAAI,CAACQ,qBAAqB,CAAC,IAAI,CAACL,OAAO,EAAET,aAAa,EAAEE,SAAS,CAAC;MAClE,OAAO,IAAI,CAACO,OAAO;IACvB;IAEUiB,QAAQA,CAAA,EAAY;MAC1B,OAAO,IAAI,CAACjB,OAAO,IAAI,IAAI,CAACA,OAAO,CAACkB,WAAW,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,KAAK,aAAa,GAAI,IAAI,CAACnB,OAAO,CAAWoB,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;IACvI;IAEUC,UAAUA,CAAA,EAAS;MACzB,IAAI,CAAC,IAAI,CAACrB,OAAO,IAAI,CAAC,IAAI,CAACJ,QAAQ,IAAI,IAAI,CAACI,OAAO,CAACkB,WAAW,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,KAAK,aAAa,EAAE;MAC/F,MAAMG,KAAK,GAAG,IAAI,CAACtB,OAAgB;MACnCsB,KAAK,CAACC,WAAW,CAAC,CAAC,IAAI,CAAC3B,QAAQ,CAAC4B,EAAE,EAAEC,QAAQ,CAAC;MAC9CH,KAAK,CAACI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC9B,QAAQ,CAACe,QAAQ,CAAC;IAC/C;EACJ;EAAC,IAAAgB,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAAtC,cAAA,GAAAA,cAAA;EAAA,OAAAsC,SAAA;AAAA","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
sap.ui.define(["./BasePlugin","sap/m/Input","sap/m/Text"],function(t,e,i){"use strict";const a=t["BasePlugin"];class s extends a{render(t,a,s="meta",n,r){this.onChange=r;this.metadata=t;this.fieldKey=a.replace("/","");if(!this.isEditable){this.control=new i({id:this.generateStableId(n,a),text:"********"});this.applyCommonDirectives(this.control,t,s);return this.control}this.control=new e({id:this.generateStableId(n,a),value:this.generateBindingInfo(a,s),type:"Password",maxLength:t.maxLength||0,required:!!t.required,change:t=>{const e=this.validateAndApplyVisualState();if(this.onChange)this.onChange(e.isValid,this.fieldKey)}});this.applyCommonDirectives(this.control,t,s);return this.control}getValue(){return this.control&&this.control.getMetadata().getName()==="sap.m.Input"?this.control.
|
|
1
|
+
sap.ui.define(["./BasePlugin","sap/m/Input","sap/m/Text"],function(t,e,i){"use strict";const a=t["BasePlugin"];class s extends a{render(t,a,s="meta",n,r){this.onChange=r;this.metadata=t;this.fieldKey=a.replace("/","");if(!this.isEditable){this.control=new i({id:this.generateStableId(n,a),text:"********"});this.applyCommonDirectives(this.control,t,s);return this.control}this.control=new e({id:this.generateStableId(n,a),value:this.generateBindingInfo(a,s),type:"Password",maxLength:t.maxLength||0,required:!!t.required,change:t=>{const e=this.validateAndApplyVisualState();if(this.onChange)this.onChange(e.isValid,this.fieldKey)}});this.applyCommonDirectives(this.control,t,s);return this.control}getValue(){return this.control&&this.control.getMetadata().getName()==="sap.m.Input"?this.control.getProperty("value"):null}applyState(){if(!this.control||!this.metadata||this.control.getMetadata().getName()!=="sap.m.Input")return;const t=this.control;t.setEditable(!this.metadata.ui?.readOnly);t.setRequired(!!this.metadata.required)}}var n={__esModule:true};n.PasswordPlugin=s;return n});
|
|
2
2
|
//# sourceMappingURL=PasswordPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PasswordPlugin.js","names":["BasePlugin","___BasePlugin","PasswordPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","this","metadata","fieldKey","replace","isEditable","control","TextControl","id","generateStableId","text","applyCommonDirectives","Input","value","generateBindingInfo","type","maxLength","required","change","oEvent","result","validateAndApplyVisualState","isValid","getValue","getMetadata","getName","applyState","input","setEditable","ui","readOnly","setRequired","__exports","__esModule"],"sources":["PasswordPlugin.ts"],"sourcesContent":["import { 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\";\n\nexport class PasswordPlugin extends BasePlugin {\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.replace(\"/\", \"\");\n \n if (!this.isEditable) {\n // Password in read-only should be masked natively\n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: \"********\" \n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n this.control = new Input({\n id: this.generateStableId(engineScopeId, bindingPath),\n value: this.generateBindingInfo(bindingPath, modelName),\n type: \"Password\",\n maxLength: fieldMetadata.maxLength || 0,\n required: !!fieldMetadata.required,\n change: (oEvent: sap.ui.base.Event) => {\n const result = this.validateAndApplyVisualState();\n if (this.onChange) this.onChange(result.isValid, this.fieldKey);\n }\n });\n\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n protected getValue(): unknown {\n return this.control && this.control.getMetadata().getName() === \"sap.m.Input\" ? (this.control as Input).
|
|
1
|
+
{"version":3,"file":"PasswordPlugin.js","names":["BasePlugin","___BasePlugin","PasswordPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","this","metadata","fieldKey","replace","isEditable","control","TextControl","id","generateStableId","text","applyCommonDirectives","Input","value","generateBindingInfo","type","maxLength","required","change","oEvent","result","validateAndApplyVisualState","isValid","getValue","getMetadata","getName","getProperty","applyState","input","setEditable","ui","readOnly","setRequired","__exports","__esModule"],"sources":["PasswordPlugin.ts"],"sourcesContent":["import { 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\";\n\nexport class PasswordPlugin extends BasePlugin {\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.replace(\"/\", \"\");\n \n if (!this.isEditable) {\n // Password in read-only should be masked natively\n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: \"********\" \n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n this.control = new Input({\n id: this.generateStableId(engineScopeId, bindingPath),\n value: this.generateBindingInfo(bindingPath, modelName),\n type: \"Password\",\n maxLength: fieldMetadata.maxLength || 0,\n required: !!fieldMetadata.required,\n change: (oEvent: sap.ui.base.Event) => {\n const result = this.validateAndApplyVisualState();\n if (this.onChange) this.onChange(result.isValid, this.fieldKey);\n }\n });\n\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n protected getValue(): unknown {\n return this.control && this.control.getMetadata().getName() === \"sap.m.Input\" ? (this.control as Input).getProperty('value') : null;\n }\n\n protected applyState(): void {\n if (!this.control || !this.metadata || this.control.getMetadata().getName() !== \"sap.m.Input\") return;\n const input = this.control as Input;\n input.setEditable(!this.metadata.ui?.readOnly);\n input.setRequired(!!this.metadata.required);\n }\n}\n"],"mappings":"6FAASA,EAAUC,EAAA,cAMZ,MAAMC,UAAuBF,EACzBG,OAAOC,EAAkCC,EAAqBC,EAAoB,OAAQC,EAAwBC,GACrHC,KAAKD,SAAWA,EAChBC,KAAKC,SAAWN,EAChBK,KAAKE,SAAWN,EAAYO,QAAQ,IAAK,IAEzC,IAAKH,KAAKI,WAAY,CAElBJ,KAAKK,QAAU,IAAIC,EAAY,CAC3BC,GAAIP,KAAKQ,iBAAiBV,EAAeF,GACzCa,KAAM,aAEVT,KAAKU,sBAAsBV,KAAKK,QAASV,EAAeE,GACxD,OAAOG,KAAKK,OAChB,CAEAL,KAAKK,QAAU,IAAIM,EAAM,CACrBJ,GAAIP,KAAKQ,iBAAiBV,EAAeF,GACzCgB,MAAOZ,KAAKa,oBAAoBjB,EAAaC,GAC7CiB,KAAM,WACNC,UAAWpB,EAAcoB,WAAa,EACtCC,WAAYrB,EAAcqB,SAC1BC,OAASC,IACL,MAAMC,EAASnB,KAAKoB,8BACpB,GAAIpB,KAAKD,SAAUC,KAAKD,SAASoB,EAAOE,QAASrB,KAAKE,aAI9DF,KAAKU,sBAAsBV,KAAKK,QAASV,EAAeE,GACxD,OAAOG,KAAKK,OAChB,CAEUiB,WACN,OAAOtB,KAAKK,SAAWL,KAAKK,QAAQkB,cAAcC,YAAc,cAAiBxB,KAAKK,QAAkBoB,YAAY,SAAW,IACnI,CAEUC,aACN,IAAK1B,KAAKK,UAAYL,KAAKC,UAAYD,KAAKK,QAAQkB,cAAcC,YAAc,cAAe,OAC/F,MAAMG,EAAQ3B,KAAKK,QACnBsB,EAAMC,aAAa5B,KAAKC,SAAS4B,IAAIC,UACrCH,EAAMI,cAAc/B,KAAKC,SAASe,SACtC,EACH,IAAAgB,EAAA,CAAAC,WAAA,MAAAD,EAAAvC,iBAAA,OAAAuC,CAAA","ignoreList":[]}
|
|
@@ -37,7 +37,7 @@ export class PasswordPlugin extends BasePlugin {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
protected getValue(): unknown {
|
|
40
|
-
return this.control && this.control.getMetadata().getName() === "sap.m.Input" ? (this.control as Input).
|
|
40
|
+
return this.control && this.control.getMetadata().getName() === "sap.m.Input" ? (this.control as Input).getProperty('value') : null;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
protected applyState(): void {
|
|
@@ -57,7 +57,7 @@ sap.ui.define(["./BasePlugin", "sap/m/RatingIndicator", "sap/m/Text"], function
|
|
|
57
57
|
* @returns {unknown} The rating value.
|
|
58
58
|
*/
|
|
59
59
|
getValue() {
|
|
60
|
-
return this.control ? this.control.
|
|
60
|
+
return this.control ? this.control.getProperty('value') : 0;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
/**
|
|
@@ -1 +1 @@
|
|
|
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","generateBindingInfo","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: this.generateBindingInfo(bindingPath, modelName)\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: this.generateBindingInfo(bindingPath, modelName),\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).
|
|
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","generateBindingInfo","applyCommonDirectives","RatingIndicator","value","enabled","ui","readOnly","maxValue","maximum","undefined","change","oEvent","val","getParameter","result","validateAndApplyVisualState","isValid","getValue","getProperty","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: this.generateBindingInfo(bindingPath, modelName)\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: this.generateBindingInfo(bindingPath, modelName),\n enabled: !fieldMetadata.ui?.readOnly,\n maxValue: fieldMetadata.maximum !== undefined ? fieldMetadata.maximum : 5,\n change: (oEvent: sap.ui.base.Event) => {\n const val = (oEvent as any).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).getProperty('value') : 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,IAAI,CAACC,mBAAmB,CAACd,WAAW,EAAEC,SAAS;QACzD,CAAC,CAAC;QACF,IAAI,CAACc,qBAAqB,CAAC,IAAI,CAACN,OAAO,EAAEV,aAAa,EAAEE,SAAS,CAAC;QAClE,OAAO,IAAI,CAACQ,OAAO;MACvB;MAEA,IAAI,CAACA,OAAO,GAAG,IAAIO,eAAe,CAAC;QAC/BL,EAAE,EAAE,IAAI,CAACC,gBAAgB,CAACV,aAAa,EAAEF,WAAW,CAAC;QACrDiB,KAAK,EAAE,IAAI,CAACH,mBAAmB,CAACd,WAAW,EAAEC,SAAS,CAAC;QACvDiB,OAAO,EAAE,CAACnB,aAAa,CAACoB,EAAE,EAAEC,QAAQ;QACpCC,QAAQ,EAAEtB,aAAa,CAACuB,OAAO,KAAKC,SAAS,GAAGxB,aAAa,CAACuB,OAAO,GAAG,CAAC;QACzEE,MAAM,EAAGC,MAAyB,IAAK;UACnC,MAAMC,GAAG,GAAID,MAAM,CAASE,YAAY,CAAC,OAAO,CAAC;UACjD,MAAMC,MAAM,GAAG,IAAI,CAACC,2BAA2B,CAAC,CAAC;UACjD,IAAI,IAAI,CAAC1B,QAAQ,EAAE;YACf,IAAI,CAACA,QAAQ,CAACyB,MAAM,CAACE,OAAO,EAAE,IAAI,CAACzB,QAAQ,CAAC;UAChD;QACJ;MACJ,CAAC,CAAC;MAEF,IAAI,CAACU,qBAAqB,CAAC,IAAI,CAACN,OAAO,EAAEV,aAAa,EAAEE,SAAS,CAAC;MAElE,OAAO,IAAI,CAACQ,OAAO;IACvB;;IAEA;AACJ;AACA;AACA;IACcsB,QAAQA,CAAA,EAAY;MAC1B,OAAO,IAAI,CAACtB,OAAO,GAAI,IAAI,CAACA,OAAO,CAAqBuB,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC;IACpF;;IAEA;AACJ;AACA;IACcC,UAAUA,CAAA,EAAS;MACzB,IAAI,IAAI,CAACxB,OAAO,IAAI,IAAI,CAACL,QAAQ,EAAE;QAC/B,IAAI,CAAC,IAAI,CAACI,UAAU,EAAE;QACrB,IAAI,CAACC,OAAO,CAAqByB,UAAU,CAAC,CAAC,IAAI,CAAC9B,QAAQ,CAACe,EAAE,EAAEC,QAAQ,CAAC;MAC7E;IACJ;EACJ;EAAC,IAAAe,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAAtC,qBAAA,GAAAA,qBAAA;EAAA,OAAAsC,SAAA;AAAA","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
sap.ui.define(["./BasePlugin","sap/m/RatingIndicator","sap/m/Text"],function(t,e,i){"use strict";const n=t["BasePlugin"];class a extends n{render(t,n,a="meta",s,r){this.onChange=r;this.metadata=t;this.fieldKey=n.startsWith("/")?n.substring(1):n;if(!this.isEditable){this.control=new i({id:this.generateStableId(s,n),text:this.generateBindingInfo(n,a)});this.applyCommonDirectives(this.control,t,a);return this.control}this.control=new e({id:this.generateStableId(s,n),value:this.generateBindingInfo(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,a);return this.control}getValue(){return this.control?this.control.
|
|
1
|
+
sap.ui.define(["./BasePlugin","sap/m/RatingIndicator","sap/m/Text"],function(t,e,i){"use strict";const n=t["BasePlugin"];class a extends n{render(t,n,a="meta",s,r){this.onChange=r;this.metadata=t;this.fieldKey=n.startsWith("/")?n.substring(1):n;if(!this.isEditable){this.control=new i({id:this.generateStableId(s,n),text:this.generateBindingInfo(n,a)});this.applyCommonDirectives(this.control,t,a);return this.control}this.control=new e({id:this.generateStableId(s,n),value:this.generateBindingInfo(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,a);return this.control}getValue(){return this.control?this.control.getProperty("value"):0}applyState(){if(this.control&&this.metadata){if(!this.isEditable)return;this.control.setEnabled(!this.metadata.ui?.readOnly)}}}var s={__esModule:true};s.RatingIndicatorPlugin=a;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","fieldKey","startsWith","substring","isEditable","control","TextControl","id","generateStableId","text","generateBindingInfo","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: this.generateBindingInfo(bindingPath, modelName)\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: this.generateBindingInfo(bindingPath, modelName),\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).
|
|
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","generateBindingInfo","applyCommonDirectives","RatingIndicator","value","enabled","ui","readOnly","maxValue","maximum","undefined","change","oEvent","val","getParameter","result","validateAndApplyVisualState","isValid","getValue","getProperty","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: this.generateBindingInfo(bindingPath, modelName)\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: this.generateBindingInfo(bindingPath, modelName),\n enabled: !fieldMetadata.ui?.readOnly,\n maxValue: fieldMetadata.maximum !== undefined ? fieldMetadata.maximum : 5,\n change: (oEvent: sap.ui.base.Event) => {\n const val = (oEvent as any).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).getProperty('value') : 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,KAAMV,KAAKW,oBAAoBf,EAAaC,KAEhDG,KAAKY,sBAAsBZ,KAAKM,QAASX,EAAeE,GACxD,OAAOG,KAAKM,OAChB,CAEAN,KAAKM,QAAU,IAAIO,EAAgB,CAC/BL,GAAIR,KAAKS,iBAAiBX,EAAeF,GACzCkB,MAAOd,KAAKW,oBAAoBf,EAAaC,GAC7CkB,SAAUpB,EAAcqB,IAAIC,SAC5BC,SAAUvB,EAAcwB,UAAYC,UAAYzB,EAAcwB,QAAU,EACxEE,OAASC,IACL,MAAMC,EAAOD,EAAeE,aAAa,SACzC,MAAMC,EAASzB,KAAK0B,8BACpB,GAAI1B,KAAKD,SAAU,CACfC,KAAKD,SAAS0B,EAAOE,QAAS3B,KAAKE,SACvC,KAIRF,KAAKY,sBAAsBZ,KAAKM,QAASX,EAAeE,GAExD,OAAOG,KAAKM,OAChB,CAMUsB,WACN,OAAO5B,KAAKM,QAAWN,KAAKM,QAA4BuB,YAAY,SAAW,CACnF,CAKUC,aACN,GAAI9B,KAAKM,SAAWN,KAAKC,SAAU,CAC/B,IAAKD,KAAKK,WAAY,OACrBL,KAAKM,QAA4ByB,YAAY/B,KAAKC,SAASe,IAAIC,SACpE,CACJ,EACH,IAAAe,EAAA,CAAAC,WAAA,MAAAD,EAAAvC,wBAAA,OAAAuC,CAAA","ignoreList":[]}
|