@siliconst/metaui 1.4.20 → 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 +13 -4
- 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 +14 -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 +12 -12
- 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 +64 -15
- 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 +21 -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 +61 -17
- 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 +13 -0
- 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 +5 -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 +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 +19 -5
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.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 +11 -8
- 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 +6 -2
- 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 +15 -11
- 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 +29 -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 +32 -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 +42 -36
- 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 +6 -3
- 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 +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 +7 -4
- 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 +48 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.d.ts +11 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.ts +48 -0
- 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 +58 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.d.ts +11 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.ts +57 -0
- 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 +49 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.d.ts +11 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.ts +49 -0
- 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/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
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
sap.ui.define(["./BasePlugin", "sap/m/Input", "sap/m/Text"], function (___BasePlugin, Input, TextControl) {
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
const BasePlugin = ___BasePlugin["BasePlugin"];
|
|
5
|
+
class PasswordPlugin extends BasePlugin {
|
|
6
|
+
render(fieldMetadata, bindingPath, modelName = "meta", engineScopeId, onChange) {
|
|
7
|
+
this.onChange = onChange;
|
|
8
|
+
this.metadata = fieldMetadata;
|
|
9
|
+
this.fieldKey = bindingPath.replace("/", "");
|
|
10
|
+
if (!this.isEditable) {
|
|
11
|
+
// Password in read-only should be masked natively
|
|
12
|
+
this.control = new TextControl({
|
|
13
|
+
id: this.generateStableId(engineScopeId, bindingPath),
|
|
14
|
+
text: "********"
|
|
15
|
+
});
|
|
16
|
+
this.applyCommonDirectives(this.control, fieldMetadata, modelName);
|
|
17
|
+
return this.control;
|
|
18
|
+
}
|
|
19
|
+
this.control = new Input({
|
|
20
|
+
id: this.generateStableId(engineScopeId, bindingPath),
|
|
21
|
+
value: this.generateBindingInfo(bindingPath, modelName),
|
|
22
|
+
type: "Password",
|
|
23
|
+
maxLength: fieldMetadata.maxLength || 0,
|
|
24
|
+
required: !!fieldMetadata.required,
|
|
25
|
+
change: oEvent => {
|
|
26
|
+
const result = this.validateAndApplyVisualState();
|
|
27
|
+
if (this.onChange) this.onChange(result.isValid, this.fieldKey);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
this.applyCommonDirectives(this.control, fieldMetadata, modelName);
|
|
31
|
+
return this.control;
|
|
32
|
+
}
|
|
33
|
+
getValue() {
|
|
34
|
+
return this.control && this.control.getMetadata().getName() === "sap.m.Input" ? this.control.getProperty('value') : null;
|
|
35
|
+
}
|
|
36
|
+
applyState() {
|
|
37
|
+
if (!this.control || !this.metadata || this.control.getMetadata().getName() !== "sap.m.Input") return;
|
|
38
|
+
const input = this.control;
|
|
39
|
+
input.setEditable(!this.metadata.ui?.readOnly);
|
|
40
|
+
input.setRequired(!!this.metadata.required);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
var __exports = {
|
|
44
|
+
__esModule: true
|
|
45
|
+
};
|
|
46
|
+
__exports.PasswordPlugin = PasswordPlugin;
|
|
47
|
+
return __exports;
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=PasswordPlugin-dbg.js.map
|
|
@@ -0,0 +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","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":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare module "nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin" {
|
|
2
|
+
import { BasePlugin } from "nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin";
|
|
3
|
+
import { IPropertyMetadata } from "nz/co/siliconst/ui5/metaui/interfaces/ISchema";
|
|
4
|
+
import Control from "sap/ui/core/Control";
|
|
5
|
+
export class PasswordPlugin extends BasePlugin {
|
|
6
|
+
render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control;
|
|
7
|
+
protected getValue(): unknown;
|
|
8
|
+
protected applyState(): void;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=PasswordPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PasswordPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,4DAA4D,CAAC;IAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAElF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAG1C,MAAa,cAAe,SAAQ,UAAU;QACnC,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAe,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;QA+B3L,SAAS,CAAC,QAAQ,IAAI,OAAO;QAI7B,SAAS,CAAC,UAAU,IAAI,IAAI;KAM/B;CAEA"}
|
|
@@ -0,0 +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.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
|
+
//# sourceMappingURL=PasswordPlugin.js.map
|
|
@@ -0,0 +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","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":[]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { BasePlugin } from "./BasePlugin";
|
|
2
|
+
import { IPropertyMetadata } from "../../interfaces/ISchema";
|
|
3
|
+
import Input from "sap/m/Input";
|
|
4
|
+
import Control from "sap/ui/core/Control";
|
|
5
|
+
import TextControl from "sap/m/Text";
|
|
6
|
+
|
|
7
|
+
export class PasswordPlugin extends BasePlugin {
|
|
8
|
+
public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = "meta", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {
|
|
9
|
+
this.onChange = onChange;
|
|
10
|
+
this.metadata = fieldMetadata;
|
|
11
|
+
this.fieldKey = bindingPath.replace("/", "");
|
|
12
|
+
|
|
13
|
+
if (!this.isEditable) {
|
|
14
|
+
// Password in read-only should be masked natively
|
|
15
|
+
this.control = new TextControl({
|
|
16
|
+
id: this.generateStableId(engineScopeId, bindingPath),
|
|
17
|
+
text: "********"
|
|
18
|
+
});
|
|
19
|
+
this.applyCommonDirectives(this.control, fieldMetadata, modelName);
|
|
20
|
+
return this.control as Control;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
this.control = new Input({
|
|
24
|
+
id: this.generateStableId(engineScopeId, bindingPath),
|
|
25
|
+
value: this.generateBindingInfo(bindingPath, modelName),
|
|
26
|
+
type: "Password",
|
|
27
|
+
maxLength: fieldMetadata.maxLength || 0,
|
|
28
|
+
required: !!fieldMetadata.required,
|
|
29
|
+
change: (oEvent: sap.ui.base.Event) => {
|
|
30
|
+
const result = this.validateAndApplyVisualState();
|
|
31
|
+
if (this.onChange) this.onChange(result.isValid, this.fieldKey);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
this.applyCommonDirectives(this.control, fieldMetadata, modelName);
|
|
36
|
+
return this.control as Control;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
protected getValue(): unknown {
|
|
40
|
+
return this.control && this.control.getMetadata().getName() === "sap.m.Input" ? (this.control as Input).getProperty('value') : null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
protected applyState(): void {
|
|
44
|
+
if (!this.control || !this.metadata || this.control.getMetadata().getName() !== "sap.m.Input") return;
|
|
45
|
+
const input = this.control as Input;
|
|
46
|
+
input.setEditable(!this.metadata.ui?.readOnly);
|
|
47
|
+
input.setRequired(!!this.metadata.required);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -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":[]}
|
|
@@ -47,7 +47,7 @@ export class RatingIndicatorPlugin extends BasePlugin {
|
|
|
47
47
|
enabled: !fieldMetadata.ui?.readOnly,
|
|
48
48
|
maxValue: fieldMetadata.maximum !== undefined ? fieldMetadata.maximum : 5,
|
|
49
49
|
change: (oEvent: sap.ui.base.Event) => {
|
|
50
|
-
const val = oEvent.getParameter("value");
|
|
50
|
+
const val = (oEvent as any).getParameter("value");
|
|
51
51
|
const result = this.validateAndApplyVisualState();
|
|
52
52
|
if (this.onChange) {
|
|
53
53
|
this.onChange(result.isValid, this.fieldKey);
|
|
@@ -65,7 +65,7 @@ export class RatingIndicatorPlugin extends BasePlugin {
|
|
|
65
65
|
* @returns {unknown} The rating value.
|
|
66
66
|
*/
|
|
67
67
|
protected getValue(): unknown {
|
|
68
|
-
return this.control ? (this.control as RatingIndicator).
|
|
68
|
+
return this.control ? (this.control as RatingIndicator).getProperty('value') : 0;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
sap.ui.define(["./BasePlugin", "sap/m/Button", "../../core/PipelineManager"], function (___BasePlugin, Button, ____core_PipelineManager) {
|
|
1
|
+
sap.ui.define(["./BasePlugin", "sap/m/Button", "../../core/PipelineManager", "../../utils/Logger"], function (___BasePlugin, Button, ____core_PipelineManager, ____utils_Logger) {
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -8,6 +8,7 @@ sap.ui.define(["./BasePlugin", "sap/m/Button", "../../core/PipelineManager"], fu
|
|
|
8
8
|
*/
|
|
9
9
|
const BasePlugin = ___BasePlugin["BasePlugin"];
|
|
10
10
|
const GlobalPipeline = ____core_PipelineManager["GlobalPipeline"];
|
|
11
|
+
const Logger = ____utils_Logger["Logger"];
|
|
11
12
|
class ReferencePlugin extends BasePlugin {
|
|
12
13
|
/**
|
|
13
14
|
* Finds the closest GeneratorHost in the control hierarchy.
|
|
@@ -79,7 +80,7 @@ sap.ui.define(["./BasePlugin", "sap/m/Button", "../../core/PipelineManager"], fu
|
|
|
79
80
|
parentHost.fireEvent("validationSuccess", e.getParameters());
|
|
80
81
|
});
|
|
81
82
|
if (!!this.isEditable) {
|
|
82
|
-
host.
|
|
83
|
+
host.attachEvent("submit", e => {
|
|
83
84
|
const payload = e.getParameter("payload");
|
|
84
85
|
parentModel.setProperty(updatePath, payload);
|
|
85
86
|
if (this.onChange) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReferencePlugin-dbg.js","names":["BasePlugin","___BasePlugin","GlobalPipeline","____core_PipelineManager","ReferencePlugin","findParentHost","control","parent","getParent","getSchemaDefinition","render","field","bindingPath","modelName","engineScopeId","onChange","metadata","propKey","startsWith","substring","label","ui","Button","id","generateStableId","text","isEditable","icon","press","oEvent","btn","getSource","$ref","Logger","error","parentHost","subSchema","getProperty","parentModel","getModel","bindingContext","getBindingContext","updatePath","ctxPath","getPath","endsWith","rawData","nestedData","JSON","parse","stringify","sap","require","DynamicHostModule","DynamicHostClass","default","host","schemaDefinition","schemaDefinitions","data","editable","useMessageManager","attachEvent","e","fireEvent","getParameters","attachSubmit","payload","getParameter","setProperty","buttonText","dialogButtonText","openInDialog","undefined","message","validate","isValid","properties","getAbsoluteBindingPath","key","Object","keys","propMeta","val","required","errMsg","setVisualValidationState","errorMessage","validatorsToRun","argsMap","minLength","maxLength","push","min","max","pattern","regex","minimum","maximum","format","length","res","executeValidation","getValue","applyState","setEnabled","readOnly","__exports","__esModule"],"sources":["ReferencePlugin.ts"],"sourcesContent":["/**\n * @file ReferencePlugin.ts\n * @description Renders a button that lazily loads a referenced schema definition from the global dictionary\n * and opens it in a nested dialog. Implements headless validation for the deferred schema.\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\";\nimport { GlobalPipeline } from \"../../core/PipelineManager\";\n\nexport class ReferencePlugin extends BasePlugin {\n /**\n * Finds the closest GeneratorHost in the control hierarchy.\n */\n private findParentHost(control: Control): unknown {\n let parent = control.getParent();\n while (parent) {\n if (typeof (parent as any).getSchemaDefinition === \"function\") {\n return parent;\n }\n parent = parent.getParent();\n }\n return null;\n }\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 const label = field.ui?.label || propKey;\n\n this.control = new Button({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: !this.isEditable ? `View Link: ${label}` : `Edit Link: ${label}`,\n icon: \"sap-icon://chain-link\",\n press: (oEvent: Event) => {\n const btn = oEvent.getSource() as Button;\n if (!this.metadata?.$ref) {\n Logger.error(`[ReferencePlugin] FATAL: this.metadata.$ref is MISSING or UNDEFINED! Cannot resolve child schema.`);\n return;\n }\n \n const parentHost = this.findParentHost(btn);\n if (!parentHost) {\n Logger.error(\"[ReferencePlugin] FATAL: Could not locate parent GeneratorHost via duck typing `getSchemaDefinition`.\");\n return;\n }\n\n const subSchema = parentHost.getSchemaDefinition(this.metadata.$ref);\n if (!subSchema) {\n Logger.error(`[ReferencePlugin] FATAL: Schema definition not found for reference: ${this.metadata.$ref}. Dumping parent schemaDefinitions:`, parentHost.getProperty(\"schemaDefinitions\"));\n return;\n }\n\n const parentModel = btn.getModel(modelName) as JSONModel;\n if (!parentModel) {\n Logger.error(`[ReferencePlugin] FATAL: Could not get JSONModel named '${modelName}' from the button.`);\n return;\n }\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 const rawData = parentModel.getProperty(updatePath);\n const nestedData = rawData ? JSON.parse(JSON.stringify(rawData)) : {};\n\n sap.ui.require([\"nz/co/siliconst/ui5/metaui/controls/DynamicHost\"], (DynamicHostModule: unknown) => {\n const DynamicHostClass = DynamicHostModule.default || DynamicHostModule;\n const host = new DynamicHostClass({\n schemaDefinition: subSchema,\n schemaDefinitions: parentHost.getProperty(\"schemaDefinitions\"), // Pass the dictionary down\n data: nestedData,\n editable: this.isEditable,\n useMessageManager: this.useMessageManager\n });\n\n // Event Piping: Bubble validation events up to the parent host\n host.attachEvent(\"validationError\", (e: Event) => {\n parentHost.fireEvent(\"validationError\", e.getParameters());\n });\n host.attachEvent(\"validationSuccess\", (e: Event) => {\n parentHost.fireEvent(\"validationSuccess\", e.getParameters());\n });\n\n if (!!this.isEditable) {\n host.attachSubmit((e: Event) => {\n const payload = (e.getParameter(\"payload\") as unknown);\n parentModel.setProperty(updatePath, payload);\n \n if (this.onChange) {\n this.onChange(true, propKey);\n }\n });\n }\n\n const buttonText = field.ui?.dialogButtonText || (!this.isEditable ? \"Close\" : \"OK\");\n try {\n host.openInDialog(`Nested Link: ${label}`, buttonText, undefined, undefined, btn);\n } catch (e) {\n Logger.error(`[ReferencePlugin] FATAL ERROR CALLING openInDialog:`, (e as Error).message);\n }\n });\n }\n });\n\n return this.control as Control;\n }\n\n /**\n * Headless validation: since child controls are not rendered, we manually validate the nested payload against the lazily resolved schema.\n */\n public validate(): IPluginValidationResult {\n if (!this.metadata?.$ref || !this.control) return { isValid: true };\n \n const parentHost = this.findParentHost(this.control);\n if (!parentHost) return { isValid: true };\n \n const subSchema = parentHost.getSchemaDefinition(this.metadata.$ref);\n if (!subSchema || !subSchema.properties) return { isValid: true };\n \n const parentModel = this.control.getModel(this.modelName) as JSONModel;\n if (!parentModel) return { isValid: true };\n \n let updatePath = this.getAbsoluteBindingPath();\n \n const nestedData = parentModel.getProperty(updatePath) || {};\n \n // Basic headless validation over the subSchema properties\n for (const key of Object.keys(subSchema.properties)) {\n const propMeta = subSchema.properties[key] as IPropertyMetadata;\n const val = nestedData[key];\n \n if (propMeta.required && (val === undefined || val === null || val === \"\")) {\n const errMsg = `Field '${key}' is required in referenced object.`;\n this.setVisualValidationState(false, errMsg);\n return { isValid: false, errorMessage: errMsg };\n }\n \n const validatorsToRun: string[] = [];\n const argsMap: Record<string, unknown> = {};\n\n if (propMeta.minLength !== undefined || propMeta.maxLength !== undefined) {\n validatorsToRun.push(\"length\");\n argsMap[\"length\"] = { min: propMeta.minLength, max: propMeta.maxLength };\n }\n if (propMeta.pattern !== undefined) {\n validatorsToRun.push(\"pattern\");\n argsMap[\"pattern\"] = { regex: propMeta.pattern };\n }\n if (propMeta.minimum !== undefined || propMeta.maximum !== undefined) {\n validatorsToRun.push(\"range\");\n argsMap[\"range\"] = { min: propMeta.minimum, max: propMeta.maximum };\n }\n \n const format = propMeta.ui?.format;\n if (format === \"email\" || format === \"url\" || format === \"iban\") {\n validatorsToRun.push(format);\n }\n \n if (validatorsToRun.length > 0) {\n const res = GlobalPipeline.executeValidation(val, validatorsToRun, argsMap);\n if (!res.isValid) {\n const errMsg = `Field '${key}' in reference: ${res.errorMessage}`;\n this.setVisualValidationState(false, errMsg);\n return { isValid: false, errorMessage: errMsg };\n }\n }\n }\n \n this.setVisualValidationState(true);\n return { isValid: true };\n }\n\n protected getValue(): null {\n return null;\n }\n\n protected applyState(): void {\n if (this.control && this.metadata) {\n (this.control as Button).setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ReferencePlugin-dbg.js","names":["BasePlugin","___BasePlugin","GlobalPipeline","____core_PipelineManager","Logger","____utils_Logger","ReferencePlugin","findParentHost","control","parent","getParent","getSchemaDefinition","render","field","bindingPath","modelName","engineScopeId","onChange","metadata","propKey","startsWith","substring","label","ui","Button","id","generateStableId","text","isEditable","icon","press","oEvent","btn","getSource","$ref","error","parentHost","subSchema","getProperty","parentModel","getModel","bindingContext","getBindingContext","updatePath","ctxPath","getPath","endsWith","rawData","nestedData","JSON","parse","stringify","sap","require","DynamicHostModule","DynamicHostClass","default","host","schemaDefinition","schemaDefinitions","data","editable","useMessageManager","attachEvent","e","fireEvent","getParameters","payload","getParameter","setProperty","buttonText","dialogButtonText","openInDialog","undefined","message","validate","isValid","properties","getAbsoluteBindingPath","key","Object","keys","propMeta","val","required","errMsg","setVisualValidationState","errorMessage","validatorsToRun","argsMap","minLength","maxLength","push","min","max","pattern","regex","minimum","maximum","format","length","res","executeValidation","getValue","applyState","setEnabled","readOnly","__exports","__esModule"],"sources":["ReferencePlugin.ts"],"sourcesContent":["/**\n * @file ReferencePlugin.ts\n * @description Renders a button that lazily loads a referenced schema definition from the global dictionary\n * and opens it in a nested dialog. Implements headless validation for the deferred schema.\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\";\nimport { GlobalPipeline } from \"../../core/PipelineManager\";\nimport { Logger } from \"../../utils/Logger\";\n\nexport class ReferencePlugin extends BasePlugin {\n /**\n * Finds the closest GeneratorHost in the control hierarchy.\n */\n private findParentHost(control: Control): unknown {\n let parent = control.getParent();\n while (parent) {\n if (typeof (parent as any).getSchemaDefinition === \"function\") {\n return parent;\n }\n parent = parent.getParent();\n }\n return null;\n }\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 const label = field.ui?.label || propKey;\n\n this.control = new Button({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: !this.isEditable ? `View Link: ${label}` : `Edit Link: ${label}`,\n icon: \"sap-icon://chain-link\",\n press: (oEvent: Event) => {\n const btn = oEvent.getSource() as Button;\n if (!this.metadata?.$ref) {\n Logger.error(`[ReferencePlugin] FATAL: this.metadata.$ref is MISSING or UNDEFINED! Cannot resolve child schema.`);\n return;\n }\n \n const parentHost = this.findParentHost(btn) as any;\n if (!parentHost) {\n Logger.error(\"[ReferencePlugin] FATAL: Could not locate parent GeneratorHost via duck typing `getSchemaDefinition`.\");\n return;\n }\n\n const subSchema = parentHost.getSchemaDefinition(this.metadata.$ref);\n if (!subSchema) {\n Logger.error(`[ReferencePlugin] FATAL: Schema definition not found for reference: ${this.metadata.$ref}. Dumping parent schemaDefinitions:`, parentHost.getProperty(\"schemaDefinitions\"));\n return;\n }\n\n const parentModel = btn.getModel(modelName) as JSONModel;\n if (!parentModel) {\n Logger.error(`[ReferencePlugin] FATAL: Could not get JSONModel named '${modelName}' from the button.`);\n return;\n }\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 const rawData = parentModel.getProperty(updatePath);\n const nestedData = rawData ? JSON.parse(JSON.stringify(rawData)) : {};\n\n sap.ui.require([\"nz/co/siliconst/ui5/metaui/controls/DynamicHost\"], (DynamicHostModule: unknown) => {\n const DynamicHostClass = DynamicHostModule.default || DynamicHostModule;\n const host = new DynamicHostClass({\n schemaDefinition: subSchema,\n schemaDefinitions: parentHost.getProperty(\"schemaDefinitions\"), // Pass the dictionary down\n data: nestedData,\n editable: this.isEditable,\n useMessageManager: this.useMessageManager\n });\n\n // Event Piping: Bubble validation events up to the parent host\n host.attachEvent(\"validationError\", (e: Event) => {\n parentHost.fireEvent(\"validationError\", e.getParameters());\n });\n host.attachEvent(\"validationSuccess\", (e: Event) => {\n parentHost.fireEvent(\"validationSuccess\", e.getParameters());\n });\n\n if (!!this.isEditable) {\n host.attachEvent(\"submit\", (e: any) => {\n const payload = (e.getParameter(\"payload\") as unknown);\n parentModel.setProperty(updatePath, payload);\n \n if (this.onChange) {\n this.onChange(true, propKey);\n }\n });\n }\n\n const buttonText = field.ui?.dialogButtonText || (!this.isEditable ? \"Close\" : \"OK\");\n try {\n host.openInDialog(`Nested Link: ${label}`, buttonText, undefined, undefined, btn);\n } catch (e) {\n Logger.error(`[ReferencePlugin] FATAL ERROR CALLING openInDialog:`, (e as Error).message);\n }\n });\n }\n });\n\n return this.control as Control;\n }\n\n /**\n * Headless validation: since child controls are not rendered, we manually validate the nested payload against the lazily resolved schema.\n */\n public validate(): IPluginValidationResult {\n if (!this.metadata?.$ref || !this.control) return { isValid: true };\n \n const parentHost = this.findParentHost(this.control);\n if (!parentHost) return { isValid: true };\n \n const subSchema = parentHost.getSchemaDefinition(this.metadata.$ref);\n if (!subSchema || !subSchema.properties) return { isValid: true };\n \n const parentModel = this.control.getModel(this.modelName) as JSONModel;\n if (!parentModel) return { isValid: true };\n \n let updatePath = this.getAbsoluteBindingPath();\n \n const nestedData = parentModel.getProperty(updatePath) || {};\n \n // Basic headless validation over the subSchema properties\n for (const key of Object.keys(subSchema.properties)) {\n const propMeta = subSchema.properties[key] as IPropertyMetadata;\n const val = nestedData[key];\n \n if (propMeta.required && (val === undefined || val === null || val === \"\")) {\n const errMsg = `Field '${key}' is required in referenced object.`;\n this.setVisualValidationState(false, errMsg);\n return { isValid: false, errorMessage: errMsg };\n }\n \n const validatorsToRun: string[] = [];\n const argsMap: Record<string, unknown> = {};\n\n if (propMeta.minLength !== undefined || propMeta.maxLength !== undefined) {\n validatorsToRun.push(\"length\");\n argsMap[\"length\"] = { min: propMeta.minLength, max: propMeta.maxLength };\n }\n if (propMeta.pattern !== undefined) {\n validatorsToRun.push(\"pattern\");\n argsMap[\"pattern\"] = { regex: propMeta.pattern };\n }\n if (propMeta.minimum !== undefined || propMeta.maximum !== undefined) {\n validatorsToRun.push(\"range\");\n argsMap[\"range\"] = { min: propMeta.minimum, max: propMeta.maximum };\n }\n \n const format = propMeta.ui?.format;\n if (format === \"email\" || format === \"url\" || format === \"iban\") {\n validatorsToRun.push(format);\n }\n \n if (validatorsToRun.length > 0) {\n const res = GlobalPipeline.executeValidation(val, validatorsToRun, argsMap);\n if (!res.isValid) {\n const errMsg = `Field '${key}' in reference: ${res.errorMessage}`;\n this.setVisualValidationState(false, errMsg);\n return { isValid: false, errorMessage: errMsg };\n }\n }\n }\n \n this.setVisualValidationState(true);\n return { isValid: true };\n }\n\n protected getValue(): null {\n return null;\n }\n\n protected applyState(): void {\n if (this.control && this.metadata) {\n (this.control as Button).setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReferencePlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,6DAA6D,CAAC;IAC7E;;;;OAIG;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;
|
|
1
|
+
{"version":3,"file":"ReferencePlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,6DAA6D,CAAC;IAC7E;;;;OAIG;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;IAO1C,MAAa,eAAgB,SAAQ,UAAU;QAC3C;;WAEG;QACH,OAAO,CAAC,cAAc;QAWf,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAe,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;QAuFnL;;WAEG;QACI,QAAQ,IAAI,uBAAuB;QA8D1C,SAAS,CAAC,QAAQ,IAAI,IAAI;QAI1B,SAAS,CAAC,UAAU,IAAI,IAAI;KAK/B;CAEA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
sap.ui.define(["./BasePlugin","sap/m/Button","../../core/PipelineManager"],function(e,t,i){"use strict";const
|
|
1
|
+
sap.ui.define(["./BasePlugin","sap/m/Button","../../core/PipelineManager","../../utils/Logger"],function(e,t,i,n){"use strict";const a=e["BasePlugin"];const r=i["GlobalPipeline"];const s=n["Logger"];class o extends a{findParentHost(e){let t=e.getParent();while(t){if(typeof t.getSchemaDefinition==="function"){return t}t=t.getParent()}return null}render(e,i,n="meta",a,r){this.onChange=r;this.metadata=e;const o=i.startsWith("/")?i.substring(1):i;const l=e.ui?.label||o;this.control=new t({id:this.generateStableId(a,i),text:!this.isEditable?`View Link: ${l}`:`Edit Link: ${l}`,icon:"sap-icon://chain-link",press:t=>{const a=t.getSource();if(!this.metadata?.$ref){s.error(`[ReferencePlugin] FATAL: this.metadata.$ref is MISSING or UNDEFINED! Cannot resolve child schema.`);return}const r=this.findParentHost(a);if(!r){s.error("[ReferencePlugin] FATAL: Could not locate parent GeneratorHost via duck typing `getSchemaDefinition`.");return}const u=r.getSchemaDefinition(this.metadata.$ref);if(!u){s.error(`[ReferencePlugin] FATAL: Schema definition not found for reference: ${this.metadata.$ref}. Dumping parent schemaDefinitions:`,r.getProperty("schemaDefinitions"));return}const c=a.getModel(n);if(!c){s.error(`[ReferencePlugin] FATAL: Could not get JSONModel named '${n}' from the button.`);return}const d=a.getBindingContext(n);let f=i;if(d&&!i.startsWith("/")){const e=d.getPath();f=e.endsWith("/")?e+i:e==="/"?"/"+i:e+"/"+i}const h=c.getProperty(f);const g=h?JSON.parse(JSON.stringify(h)):{};sap.ui.require(["nz/co/siliconst/ui5/metaui/controls/DynamicHost"],t=>{const i=t.default||t;const n=new i({schemaDefinition:u,schemaDefinitions:r.getProperty("schemaDefinitions"),data:g,editable:this.isEditable,useMessageManager:this.useMessageManager});n.attachEvent("validationError",e=>{r.fireEvent("validationError",e.getParameters())});n.attachEvent("validationSuccess",e=>{r.fireEvent("validationSuccess",e.getParameters())});if(!!this.isEditable){n.attachEvent("submit",e=>{const t=e.getParameter("payload");c.setProperty(f,t);if(this.onChange){this.onChange(true,o)}})}const d=e.ui?.dialogButtonText||(!this.isEditable?"Close":"OK");try{n.openInDialog(`Nested Link: ${l}`,d,undefined,undefined,a)}catch(e){s.error(`[ReferencePlugin] FATAL ERROR CALLING openInDialog:`,e.message)}})}});return this.control}validate(){if(!this.metadata?.$ref||!this.control)return{isValid:true};const e=this.findParentHost(this.control);if(!e)return{isValid:true};const t=e.getSchemaDefinition(this.metadata.$ref);if(!t||!t.properties)return{isValid:true};const i=this.control.getModel(this.modelName);if(!i)return{isValid:true};let n=this.getAbsoluteBindingPath();const a=i.getProperty(n)||{};for(const e of Object.keys(t.properties)){const i=t.properties[e];const n=a[e];if(i.required&&(n===undefined||n===null||n==="")){const t=`Field '${e}' is required in referenced object.`;this.setVisualValidationState(false,t);return{isValid:false,errorMessage:t}}const s=[];const o={};if(i.minLength!==undefined||i.maxLength!==undefined){s.push("length");o["length"]={min:i.minLength,max:i.maxLength}}if(i.pattern!==undefined){s.push("pattern");o["pattern"]={regex:i.pattern}}if(i.minimum!==undefined||i.maximum!==undefined){s.push("range");o["range"]={min:i.minimum,max:i.maximum}}const l=i.ui?.format;if(l==="email"||l==="url"||l==="iban"){s.push(l)}if(s.length>0){const t=r.executeValidation(n,s,o);if(!t.isValid){const i=`Field '${e}' in reference: ${t.errorMessage}`;this.setVisualValidationState(false,i);return{isValid:false,errorMessage:i}}}}this.setVisualValidationState(true);return{isValid:true}}getValue(){return null}applyState(){if(this.control&&this.metadata){this.control.setEnabled(!this.metadata.ui?.readOnly)}}}var l={__esModule:true};l.ReferencePlugin=o;return l});
|
|
2
2
|
//# sourceMappingURL=ReferencePlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReferencePlugin.js","names":["BasePlugin","___BasePlugin","GlobalPipeline","____core_PipelineManager","ReferencePlugin","findParentHost","control","parent","getParent","getSchemaDefinition","render","field","bindingPath","modelName","engineScopeId","onChange","this","metadata","propKey","startsWith","substring","label","ui","Button","id","generateStableId","text","isEditable","icon","press","oEvent","btn","getSource","$ref","Logger","error","parentHost","subSchema","getProperty","parentModel","getModel","bindingContext","getBindingContext","updatePath","ctxPath","getPath","endsWith","rawData","nestedData","JSON","parse","stringify","sap","require","DynamicHostModule","DynamicHostClass","default","host","schemaDefinition","schemaDefinitions","data","editable","useMessageManager","attachEvent","e","fireEvent","getParameters","attachSubmit","payload","getParameter","setProperty","buttonText","dialogButtonText","openInDialog","undefined","message","validate","isValid","properties","getAbsoluteBindingPath","key","Object","keys","propMeta","val","required","errMsg","setVisualValidationState","errorMessage","validatorsToRun","argsMap","minLength","maxLength","push","min","max","pattern","regex","minimum","maximum","format","length","res","executeValidation","getValue","applyState","setEnabled","readOnly","__exports","__esModule"],"sources":["ReferencePlugin.ts"],"sourcesContent":["/**\n * @file ReferencePlugin.ts\n * @description Renders a button that lazily loads a referenced schema definition from the global dictionary\n * and opens it in a nested dialog. Implements headless validation for the deferred schema.\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\";\nimport { GlobalPipeline } from \"../../core/PipelineManager\";\n\nexport class ReferencePlugin extends BasePlugin {\n /**\n * Finds the closest GeneratorHost in the control hierarchy.\n */\n private findParentHost(control: Control): unknown {\n let parent = control.getParent();\n while (parent) {\n if (typeof (parent as any).getSchemaDefinition === \"function\") {\n return parent;\n }\n parent = parent.getParent();\n }\n return null;\n }\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 const label = field.ui?.label || propKey;\n\n this.control = new Button({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: !this.isEditable ? `View Link: ${label}` : `Edit Link: ${label}`,\n icon: \"sap-icon://chain-link\",\n press: (oEvent: Event) => {\n const btn = oEvent.getSource() as Button;\n if (!this.metadata?.$ref) {\n Logger.error(`[ReferencePlugin] FATAL: this.metadata.$ref is MISSING or UNDEFINED! Cannot resolve child schema.`);\n return;\n }\n \n const parentHost = this.findParentHost(btn);\n if (!parentHost) {\n Logger.error(\"[ReferencePlugin] FATAL: Could not locate parent GeneratorHost via duck typing `getSchemaDefinition`.\");\n return;\n }\n\n const subSchema = parentHost.getSchemaDefinition(this.metadata.$ref);\n if (!subSchema) {\n Logger.error(`[ReferencePlugin] FATAL: Schema definition not found for reference: ${this.metadata.$ref}. Dumping parent schemaDefinitions:`, parentHost.getProperty(\"schemaDefinitions\"));\n return;\n }\n\n const parentModel = btn.getModel(modelName) as JSONModel;\n if (!parentModel) {\n Logger.error(`[ReferencePlugin] FATAL: Could not get JSONModel named '${modelName}' from the button.`);\n return;\n }\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 const rawData = parentModel.getProperty(updatePath);\n const nestedData = rawData ? JSON.parse(JSON.stringify(rawData)) : {};\n\n sap.ui.require([\"nz/co/siliconst/ui5/metaui/controls/DynamicHost\"], (DynamicHostModule: unknown) => {\n const DynamicHostClass = DynamicHostModule.default || DynamicHostModule;\n const host = new DynamicHostClass({\n schemaDefinition: subSchema,\n schemaDefinitions: parentHost.getProperty(\"schemaDefinitions\"), // Pass the dictionary down\n data: nestedData,\n editable: this.isEditable,\n useMessageManager: this.useMessageManager\n });\n\n // Event Piping: Bubble validation events up to the parent host\n host.attachEvent(\"validationError\", (e: Event) => {\n parentHost.fireEvent(\"validationError\", e.getParameters());\n });\n host.attachEvent(\"validationSuccess\", (e: Event) => {\n parentHost.fireEvent(\"validationSuccess\", e.getParameters());\n });\n\n if (!!this.isEditable) {\n host.attachSubmit((e: Event) => {\n const payload = (e.getParameter(\"payload\") as unknown);\n parentModel.setProperty(updatePath, payload);\n \n if (this.onChange) {\n this.onChange(true, propKey);\n }\n });\n }\n\n const buttonText = field.ui?.dialogButtonText || (!this.isEditable ? \"Close\" : \"OK\");\n try {\n host.openInDialog(`Nested Link: ${label}`, buttonText, undefined, undefined, btn);\n } catch (e) {\n Logger.error(`[ReferencePlugin] FATAL ERROR CALLING openInDialog:`, (e as Error).message);\n }\n });\n }\n });\n\n return this.control as Control;\n }\n\n /**\n * Headless validation: since child controls are not rendered, we manually validate the nested payload against the lazily resolved schema.\n */\n public validate(): IPluginValidationResult {\n if (!this.metadata?.$ref || !this.control) return { isValid: true };\n \n const parentHost = this.findParentHost(this.control);\n if (!parentHost) return { isValid: true };\n \n const subSchema = parentHost.getSchemaDefinition(this.metadata.$ref);\n if (!subSchema || !subSchema.properties) return { isValid: true };\n \n const parentModel = this.control.getModel(this.modelName) as JSONModel;\n if (!parentModel) return { isValid: true };\n \n let updatePath = this.getAbsoluteBindingPath();\n \n const nestedData = parentModel.getProperty(updatePath) || {};\n \n // Basic headless validation over the subSchema properties\n for (const key of Object.keys(subSchema.properties)) {\n const propMeta = subSchema.properties[key] as IPropertyMetadata;\n const val = nestedData[key];\n \n if (propMeta.required && (val === undefined || val === null || val === \"\")) {\n const errMsg = `Field '${key}' is required in referenced object.`;\n this.setVisualValidationState(false, errMsg);\n return { isValid: false, errorMessage: errMsg };\n }\n \n const validatorsToRun: string[] = [];\n const argsMap: Record<string, unknown> = {};\n\n if (propMeta.minLength !== undefined || propMeta.maxLength !== undefined) {\n validatorsToRun.push(\"length\");\n argsMap[\"length\"] = { min: propMeta.minLength, max: propMeta.maxLength };\n }\n if (propMeta.pattern !== undefined) {\n validatorsToRun.push(\"pattern\");\n argsMap[\"pattern\"] = { regex: propMeta.pattern };\n }\n if (propMeta.minimum !== undefined || propMeta.maximum !== undefined) {\n validatorsToRun.push(\"range\");\n argsMap[\"range\"] = { min: propMeta.minimum, max: propMeta.maximum };\n }\n \n const format = propMeta.ui?.format;\n if (format === \"email\" || format === \"url\" || format === \"iban\") {\n validatorsToRun.push(format);\n }\n \n if (validatorsToRun.length > 0) {\n const res = GlobalPipeline.executeValidation(val, validatorsToRun, argsMap);\n if (!res.isValid) {\n const errMsg = `Field '${key}' in reference: ${res.errorMessage}`;\n this.setVisualValidationState(false, errMsg);\n return { isValid: false, errorMessage: errMsg };\n }\n }\n }\n \n this.setVisualValidationState(true);\n return { isValid: true };\n }\n\n protected getValue(): null {\n return null;\n }\n\n protected applyState(): void {\n if (this.control && this.metadata) {\n (this.control as Button).setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ReferencePlugin.js","names":["BasePlugin","___BasePlugin","GlobalPipeline","____core_PipelineManager","Logger","____utils_Logger","ReferencePlugin","findParentHost","control","parent","getParent","getSchemaDefinition","render","field","bindingPath","modelName","engineScopeId","onChange","this","metadata","propKey","startsWith","substring","label","ui","Button","id","generateStableId","text","isEditable","icon","press","oEvent","btn","getSource","$ref","error","parentHost","subSchema","getProperty","parentModel","getModel","bindingContext","getBindingContext","updatePath","ctxPath","getPath","endsWith","rawData","nestedData","JSON","parse","stringify","sap","require","DynamicHostModule","DynamicHostClass","default","host","schemaDefinition","schemaDefinitions","data","editable","useMessageManager","attachEvent","e","fireEvent","getParameters","payload","getParameter","setProperty","buttonText","dialogButtonText","openInDialog","undefined","message","validate","isValid","properties","getAbsoluteBindingPath","key","Object","keys","propMeta","val","required","errMsg","setVisualValidationState","errorMessage","validatorsToRun","argsMap","minLength","maxLength","push","min","max","pattern","regex","minimum","maximum","format","length","res","executeValidation","getValue","applyState","setEnabled","readOnly","__exports","__esModule"],"sources":["ReferencePlugin.ts"],"sourcesContent":["/**\n * @file ReferencePlugin.ts\n * @description Renders a button that lazily loads a referenced schema definition from the global dictionary\n * and opens it in a nested dialog. Implements headless validation for the deferred schema.\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\";\nimport { GlobalPipeline } from \"../../core/PipelineManager\";\nimport { Logger } from \"../../utils/Logger\";\n\nexport class ReferencePlugin extends BasePlugin {\n /**\n * Finds the closest GeneratorHost in the control hierarchy.\n */\n private findParentHost(control: Control): unknown {\n let parent = control.getParent();\n while (parent) {\n if (typeof (parent as any).getSchemaDefinition === \"function\") {\n return parent;\n }\n parent = parent.getParent();\n }\n return null;\n }\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 const label = field.ui?.label || propKey;\n\n this.control = new Button({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: !this.isEditable ? `View Link: ${label}` : `Edit Link: ${label}`,\n icon: \"sap-icon://chain-link\",\n press: (oEvent: Event) => {\n const btn = oEvent.getSource() as Button;\n if (!this.metadata?.$ref) {\n Logger.error(`[ReferencePlugin] FATAL: this.metadata.$ref is MISSING or UNDEFINED! Cannot resolve child schema.`);\n return;\n }\n \n const parentHost = this.findParentHost(btn) as any;\n if (!parentHost) {\n Logger.error(\"[ReferencePlugin] FATAL: Could not locate parent GeneratorHost via duck typing `getSchemaDefinition`.\");\n return;\n }\n\n const subSchema = parentHost.getSchemaDefinition(this.metadata.$ref);\n if (!subSchema) {\n Logger.error(`[ReferencePlugin] FATAL: Schema definition not found for reference: ${this.metadata.$ref}. Dumping parent schemaDefinitions:`, parentHost.getProperty(\"schemaDefinitions\"));\n return;\n }\n\n const parentModel = btn.getModel(modelName) as JSONModel;\n if (!parentModel) {\n Logger.error(`[ReferencePlugin] FATAL: Could not get JSONModel named '${modelName}' from the button.`);\n return;\n }\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 const rawData = parentModel.getProperty(updatePath);\n const nestedData = rawData ? JSON.parse(JSON.stringify(rawData)) : {};\n\n sap.ui.require([\"nz/co/siliconst/ui5/metaui/controls/DynamicHost\"], (DynamicHostModule: unknown) => {\n const DynamicHostClass = DynamicHostModule.default || DynamicHostModule;\n const host = new DynamicHostClass({\n schemaDefinition: subSchema,\n schemaDefinitions: parentHost.getProperty(\"schemaDefinitions\"), // Pass the dictionary down\n data: nestedData,\n editable: this.isEditable,\n useMessageManager: this.useMessageManager\n });\n\n // Event Piping: Bubble validation events up to the parent host\n host.attachEvent(\"validationError\", (e: Event) => {\n parentHost.fireEvent(\"validationError\", e.getParameters());\n });\n host.attachEvent(\"validationSuccess\", (e: Event) => {\n parentHost.fireEvent(\"validationSuccess\", e.getParameters());\n });\n\n if (!!this.isEditable) {\n host.attachEvent(\"submit\", (e: any) => {\n const payload = (e.getParameter(\"payload\") as unknown);\n parentModel.setProperty(updatePath, payload);\n \n if (this.onChange) {\n this.onChange(true, propKey);\n }\n });\n }\n\n const buttonText = field.ui?.dialogButtonText || (!this.isEditable ? \"Close\" : \"OK\");\n try {\n host.openInDialog(`Nested Link: ${label}`, buttonText, undefined, undefined, btn);\n } catch (e) {\n Logger.error(`[ReferencePlugin] FATAL ERROR CALLING openInDialog:`, (e as Error).message);\n }\n });\n }\n });\n\n return this.control as Control;\n }\n\n /**\n * Headless validation: since child controls are not rendered, we manually validate the nested payload against the lazily resolved schema.\n */\n public validate(): IPluginValidationResult {\n if (!this.metadata?.$ref || !this.control) return { isValid: true };\n \n const parentHost = this.findParentHost(this.control);\n if (!parentHost) return { isValid: true };\n \n const subSchema = parentHost.getSchemaDefinition(this.metadata.$ref);\n if (!subSchema || !subSchema.properties) return { isValid: true };\n \n const parentModel = this.control.getModel(this.modelName) as JSONModel;\n if (!parentModel) return { isValid: true };\n \n let updatePath = this.getAbsoluteBindingPath();\n \n const nestedData = parentModel.getProperty(updatePath) || {};\n \n // Basic headless validation over the subSchema properties\n for (const key of Object.keys(subSchema.properties)) {\n const propMeta = subSchema.properties[key] as IPropertyMetadata;\n const val = nestedData[key];\n \n if (propMeta.required && (val === undefined || val === null || val === \"\")) {\n const errMsg = `Field '${key}' is required in referenced object.`;\n this.setVisualValidationState(false, errMsg);\n return { isValid: false, errorMessage: errMsg };\n }\n \n const validatorsToRun: string[] = [];\n const argsMap: Record<string, unknown> = {};\n\n if (propMeta.minLength !== undefined || propMeta.maxLength !== undefined) {\n validatorsToRun.push(\"length\");\n argsMap[\"length\"] = { min: propMeta.minLength, max: propMeta.maxLength };\n }\n if (propMeta.pattern !== undefined) {\n validatorsToRun.push(\"pattern\");\n argsMap[\"pattern\"] = { regex: propMeta.pattern };\n }\n if (propMeta.minimum !== undefined || propMeta.maximum !== undefined) {\n validatorsToRun.push(\"range\");\n argsMap[\"range\"] = { min: propMeta.minimum, max: propMeta.maximum };\n }\n \n const format = propMeta.ui?.format;\n if (format === \"email\" || format === \"url\" || format === \"iban\") {\n validatorsToRun.push(format);\n }\n \n if (validatorsToRun.length > 0) {\n const res = GlobalPipeline.executeValidation(val, validatorsToRun, argsMap);\n if (!res.isValid) {\n const errMsg = `Field '${key}' in reference: ${res.errorMessage}`;\n this.setVisualValidationState(false, errMsg);\n return { isValid: false, errorMessage: errMsg };\n }\n }\n }\n \n this.setVisualValidationState(true);\n return { isValid: true };\n }\n\n protected getValue(): null {\n return null;\n }\n\n protected applyState(): void {\n if (this.control && this.metadata) {\n (this.control as Button).setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -12,6 +12,7 @@ import Event from "sap/ui/base/Event";
|
|
|
12
12
|
import Button from "sap/m/Button";
|
|
13
13
|
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
14
14
|
import { GlobalPipeline } from "../../core/PipelineManager";
|
|
15
|
+
import { Logger } from "../../utils/Logger";
|
|
15
16
|
|
|
16
17
|
export class ReferencePlugin extends BasePlugin {
|
|
17
18
|
/**
|
|
@@ -45,7 +46,7 @@ export class ReferencePlugin extends BasePlugin {
|
|
|
45
46
|
return;
|
|
46
47
|
}
|
|
47
48
|
|
|
48
|
-
const parentHost = this.findParentHost(btn);
|
|
49
|
+
const parentHost = this.findParentHost(btn) as any;
|
|
49
50
|
if (!parentHost) {
|
|
50
51
|
Logger.error("[ReferencePlugin] FATAL: Could not locate parent GeneratorHost via duck typing `getSchemaDefinition`.");
|
|
51
52
|
return;
|
|
@@ -92,7 +93,7 @@ export class ReferencePlugin extends BasePlugin {
|
|
|
92
93
|
});
|
|
93
94
|
|
|
94
95
|
if (!!this.isEditable) {
|
|
95
|
-
host.
|
|
96
|
+
host.attachEvent("submit", (e: any) => {
|
|
96
97
|
const payload = (e.getParameter("payload") as unknown);
|
|
97
98
|
parentModel.setProperty(updatePath, payload);
|
|
98
99
|
|
|
@@ -41,7 +41,7 @@ sap.ui.define(["../controls/BasePlugin", "../../controls/RichTextControl", "sap/
|
|
|
41
41
|
});
|
|
42
42
|
this.applyCommonDirectives(this.control, metadata, modelName);
|
|
43
43
|
if (isValueAccessor(this.control) && this.control.attachCapture) {
|
|
44
|
-
this.control.
|
|
44
|
+
this.control.attachEvent('capture', () => {
|
|
45
45
|
const result = this.validateAndApplyVisualState();
|
|
46
46
|
if (this.onChange) {
|
|
47
47
|
this.onChange(result.isValid, this.fieldKey);
|
|
@@ -57,7 +57,7 @@ sap.ui.define(["../controls/BasePlugin", "../../controls/RichTextControl", "sap/
|
|
|
57
57
|
*/
|
|
58
58
|
getValue() {
|
|
59
59
|
if (isValueAccessor(this.control)) {
|
|
60
|
-
return this.control.
|
|
60
|
+
return this.control.getProperty('value');
|
|
61
61
|
}
|
|
62
62
|
return null;
|
|
63
63
|
}
|