From ca70310e6de688513ccd81de4756dd76a3f3c1ac Mon Sep 17 00:00:00 2001 From: Dmitriymush Date: Tue, 12 Sep 2023 15:07:33 +0300 Subject: [PATCH 1/7] UI: Liquid level widget implementation --- .../system/widget_bundles/liquid_level.json | 22 + .../horizontal_2_1_elliptical_tank.json | 24 + .../widget_types/horizontal_capsule_tank.json | 24 + .../horizontal_cylinder_tank.json | 24 + .../horizontal_dish_ends_tank.json | 24 + .../widget_types/horizontal_ellipse_tank.json | 24 + .../widget_types/horizontal_oval_tank.json | 24 + .../system/widget_types/rectangle_tank.json | 24 + .../widget_types/vertical_capsule_tank.json | 24 + .../widget_types/vertical_cylinder_tank.json | 24 + .../widget_types/vertical_oval_tank.json | 24 + ui-ngx/src/app/core/http/attribute.service.ts | 10 +- .../basic/basic-widget-config.module.ts | 12 +- ...uid-level-card-basic-config.component.html | 347 +++++++++ ...iquid-level-card-basic-config.component.ts | 671 ++++++++++++++++++ .../config/widget-config.component.models.ts | 1 - .../indicator/liquid-level-widget.models.ts | 442 ++++++++++++ .../lib/indicator/liquid-level-widget.ts | 524 ++++++++++++++ ...-level-card-widget-settings.component.html | 279 ++++++++ ...id-level-card-widget-settings.component.ts | 531 ++++++++++++++ .../common/image-cards-select.component.html | 2 +- .../lib/settings/widget-settings.module.ts | 12 +- .../widget/widget-components.module.ts | 7 +- .../string-autocomplete.component.html | 60 ++ .../string-autocomplete.component.scss | 47 ++ .../string-autocomplete.component.ts | 175 +++++ .../components/unit-input.component.html | 9 +- .../shared/components/unit-input.component.ts | 46 +- ui-ngx/src/app/shared/models/unit.models.ts | 9 + .../shared/models/widget-settings.models.ts | 27 + ui-ngx/src/app/shared/shared.module.ts | 6 + .../lib/indicator/shape_attribute_fn.md | 69 ++ .../assets/locale/locale.constant-en_US.json | 57 +- ui-ngx/src/assets/metadata/units.json | 4 +- .../shapes/horizontal-2_1-elliptical.svg | 50 ++ .../shapes/horizontal-capsule.svg | 49 ++ .../shapes/horizontal-cylinder.svg | 56 ++ .../shapes/horizontal-dish-ends.svg | 50 ++ .../shapes/horizontal-ellipse.svg | 61 ++ .../liquid-level/shapes/horizontal-oval.svg | 61 ++ .../widget/liquid-level/shapes/rectangle.svg | 49 ++ .../liquid-level/shapes/vertical-capsule.svg | 49 ++ .../liquid-level/shapes/vertical-cylinder.svg | 58 ++ .../liquid-level/shapes/vertical-oval.svg | 56 ++ ui-ngx/src/form.scss | 12 +- ui-ngx/src/styles.scss | 13 + 46 files changed, 4139 insertions(+), 34 deletions(-) create mode 100644 application/src/main/data/json/system/widget_bundles/liquid_level.json create mode 100644 application/src/main/data/json/system/widget_types/horizontal_2_1_elliptical_tank.json create mode 100644 application/src/main/data/json/system/widget_types/horizontal_capsule_tank.json create mode 100644 application/src/main/data/json/system/widget_types/horizontal_cylinder_tank.json create mode 100644 application/src/main/data/json/system/widget_types/horizontal_dish_ends_tank.json create mode 100644 application/src/main/data/json/system/widget_types/horizontal_ellipse_tank.json create mode 100644 application/src/main/data/json/system/widget_types/horizontal_oval_tank.json create mode 100644 application/src/main/data/json/system/widget_types/rectangle_tank.json create mode 100644 application/src/main/data/json/system/widget_types/vertical_capsule_tank.json create mode 100644 application/src/main/data/json/system/widget_types/vertical_cylinder_tank.json create mode 100644 application/src/main/data/json/system/widget_types/vertical_oval_tank.json create mode 100644 ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.html create mode 100644 ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.ts create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.html create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.ts create mode 100644 ui-ngx/src/app/shared/components/string-autocomplete.component.html create mode 100644 ui-ngx/src/app/shared/components/string-autocomplete.component.scss create mode 100644 ui-ngx/src/app/shared/components/string-autocomplete.component.ts create mode 100644 ui-ngx/src/assets/help/en_US/widget/lib/indicator/shape_attribute_fn.md create mode 100644 ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-2_1-elliptical.svg create mode 100644 ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-capsule.svg create mode 100644 ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-cylinder.svg create mode 100644 ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-dish-ends.svg create mode 100644 ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-ellipse.svg create mode 100644 ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-oval.svg create mode 100644 ui-ngx/src/assets/widget/liquid-level/shapes/rectangle.svg create mode 100644 ui-ngx/src/assets/widget/liquid-level/shapes/vertical-capsule.svg create mode 100644 ui-ngx/src/assets/widget/liquid-level/shapes/vertical-cylinder.svg create mode 100644 ui-ngx/src/assets/widget/liquid-level/shapes/vertical-oval.svg diff --git a/application/src/main/data/json/system/widget_bundles/liquid_level.json b/application/src/main/data/json/system/widget_bundles/liquid_level.json new file mode 100644 index 0000000000..116d569f60 --- /dev/null +++ b/application/src/main/data/json/system/widget_bundles/liquid_level.json @@ -0,0 +1,22 @@ +{ + "widgetsBundle": { + "alias": "liquid_level_widgets", + "title": "Liquid level widgets", + "image": "data:image/png;base64,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", + "description": "By visually representing the liquid's volume, these widgets help in monitoring, optimizing storage, and ensuring efficient operations. Suitable for a variety of storage setups, they are essential for industries requiring precise liquid management.", + "externalId": null, + "name": "Liquid level widgets" + }, + "widgetTypeFqns": [ + "vertical_oval_tank", + "horizontal_2_1_elliptical", + "horizontal_capsule_tank", + "horizontal_cylinder_tank", + "horizontal_dish_ends", + "horizontal_ellipse_tank", + "horizontal_oval_tank", + "rectangle_tank", + "vertical_capsule_tank", + "vertical_cylinder_tank" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_2_1_elliptical_tank.json b/application/src/main/data/json/system/widget_types/horizontal_2_1_elliptical_tank.json new file mode 100644 index 0000000000..d97129d861 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_2_1_elliptical_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "horizontal_2_1_elliptical", + "name": "Horizontal 2:1 Elliptical tank", + "deprecated": false, + "image": "data:image/png;base64,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BBKBKt5PBwY+iudfeDMOHDgUx44Ox8yzc6FlbXtLHHxub+x7tGehEtsJVFLAN2CVPO3VHfSPpyeir++deP21d2sTaixtRo22a66O9mtbY11nS7S1zf9/xFaS6PDw1/H5Z9/WfeTW1ubYvmNT3TYrBAgQILC4wHz305kjHtm7ev6w9ty583H6zESM//RLnPu5NhvVEpY1DQ3x0MPbYv/+++O6dS1LOEIJgWoJCGDVOt9GOysw+ukP8fJLR+PtI/XTsgMiQIAAAQIEli/Qu31zPP7EfdF9S9fymziSwCoXEMBW+Qk2vMUFhoa+qE3AcSxOvD+6eKG9BAgQIECAwIICm7d0x2P77o2eHq+zL4hkB4FZAQHMpUCgJjATxAYHT8bQ8ZGYmppmQoAAAQIECCQCjU1XxgO9d8SDvRtj69b1SbXdBAhcEhDALkn4SWBW4NCr78XA4RNxauQrJgQIECBAgMAcgdvvvDn27Lk7du+6bc4eqwQILEVAAFuKkppKCvz518UYO/NrjI1PxvjY+Rg/OxmTk74dq+TFYNAECBCoqEBz8xXRvrY52jsao6O9OTo6m+LyNQ0V1TBsAmUEBLAyjroQIECAAAECBAgQIEAgFbgsrVBAgAABAgQIECBAgAABAkUEBLAijJoQIECAAAECBAgQIEAgFxDAciMVBAgQIECAAAECBAgQKCIggBVh1IQAAQIECBAgQIAAAQK5gACWG6kgQIAAAQIECBAgQIBAEQEBrAijJgQIECBAgAABAgQIEMgFBLDcSAUBAgQIECBAgAABAgSKCAhgRRg1IUCAAAECBAgQIECAQC4ggOVGKggQIECAAAECBAgQIFBEQAArwqgJAQIECBAgQIAAAQIEcgEBLDdSQYAAAQIECBAgQIAAgSICAlgRRk0IECBAgAABAgQIECCQCwhguZEKAgQIECBAgAABAgQIFBEQwIowakKAAAECBAgQIECAAIFcQADLjVQQIECAAAECBAgQIECgiIAAVoRREwIECBAgQIAAAQIECOQCAlhupIIAAQIECBAgQIAAAQJFBASwIoyaECBAgAABAgQIECBAIBcQwHIjFQQIECBAgAABAgQIECgiIIAVYdSEAAECBAgQIECAAAECuYAAlhupIECAAAECBAgQIECAQBEBAawIoyYECBAgQIAAAQIECBDIBQSw3EgFAQIECBAgQIAAAQIEiggIYEUYNSFAgAABAgQIECBAgEAuIIDlRioIECBAgAABAgQIECBQREAAK8KoCQECBAgQIECAAAECBHIBASw3UkGAAAECBAgQIECAAIEiAgJYEUZNCBAgQIAAAQIECBAgkAsIYLmRCgIECBAgQIAAAQIECBQREMCKMGpCgAABAgQIECBAgACBXEAAy41UECBAgAABAgQIECBAoIiAAFaEURMCBAgQIECAAAECBAjkAgJYbqSCAAECBAgQIECAAAECRQQEsCKMmhAgQIAAAQIECBAgQCAXEMByIxUECBAgQIAAAQIECBAoIiCAFWHUhAABAgQIECBAgAABArmAAJYbqSBAgAABAgQIECBAgEARAQGsCKMmBAgQIECAAAECBAgQyAUEsNxIBQECBAgQIECAAAECBIoICGBFGDUhQIAAAQIECBAgQIBALiCA5UYqCBAgQIAAAQIECBAgUERAACvCqAkBAgQIECBAgAABAgRygX8AcPGBYpoywJwAAAAASUVORK5CYII=", + "description": "Widget indicates the level of liquid in Horizontal 2:1 Elliptical tank.", + "descriptor": { + "type": "latest", + "sizeX": 7.5, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.onInit();\n }\n}\n\nself.onDataUpdated = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.update();\n }\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"tankSelectionType\":\"Static\",\"selectedShape\":\"Horizontal 2:1 Elliptical\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"function\",\"color\":\"#242770\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#242770\"},{\"from\":0,\"to\":20,\"color\":\"#E73535DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"Static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.18)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"units\":\"%\",\"widgetUnitsSource\":\"Static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#7A8BFF\"},{\"from\":0,\"to\":20,\"color\":\"#E27C7CDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"function\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"rgba(0,0,0,0.87)\"},{\"from\":0,\"to\":20,\"color\":\"#FF0000DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#FFFFFFC2\"},{\"from\":0,\"to\":100,\"color\":\"#FFEFEFDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"tooltipBackgroundColor\":{\"type\":\"constant\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"}},\"title\":\"Horizontal 2:1 Elliptical tank\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":true,\"borderRadius\":null,\"actions\":{}}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_capsule_tank.json b/application/src/main/data/json/system/widget_types/horizontal_capsule_tank.json new file mode 100644 index 0000000000..b15e34a0b0 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_capsule_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "horizontal_capsule_tank", + "name": "Horizontal Capsule tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Horizontal Capsule tank.", + "descriptor": { + "type": "latest", + "sizeX": 7.5, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.onInit();\n }\n}\n\nself.onDataUpdated = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.update();\n }\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"tankSelectionType\":\"Static\",\"selectedShape\":\"Horizontal Capsule\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"function\",\"color\":\"#242770\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#242770\"},{\"from\":0,\"to\":20,\"color\":\"#E73535DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"Static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.18)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"units\":\"%\",\"widgetUnitsSource\":\"Static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#7A8BFF\"},{\"from\":0,\"to\":20,\"color\":\"#E27C7CDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"function\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"rgba(0,0,0,0.87)\"},{\"from\":0,\"to\":20,\"color\":\"#FF0000DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#FFFFFFC2\"},{\"from\":0,\"to\":100,\"color\":\"#FFEFEFDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"tooltipBackgroundColor\":{\"type\":\"constant\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"}},\"title\":\"Horizontal Capsule tank\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":true,\"borderRadius\":null,\"actions\":{}}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_cylinder_tank.json b/application/src/main/data/json/system/widget_types/horizontal_cylinder_tank.json new file mode 100644 index 0000000000..2ca6913435 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_cylinder_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "horizontal_cylinder_tank", + "name": "Horizontal Cylinder tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Horizontal Cylinder tank.", + "descriptor": { + "type": "latest", + "sizeX": 7.5, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.onInit();\n }\n}\n\nself.onDataUpdated = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.update();\n }\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"tankSelectionType\":\"Static\",\"selectedShape\":\"Horizontal Cylinder\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"function\",\"color\":\"#242770\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#242770\"},{\"from\":0,\"to\":20,\"color\":\"#E73535DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"Static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.18)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"units\":\"%\",\"widgetUnitsSource\":\"Static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#7A8BFF\"},{\"from\":0,\"to\":20,\"color\":\"#E27C7CDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"function\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"rgba(0,0,0,0.87)\"},{\"from\":0,\"to\":20,\"color\":\"#FF0000DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#FFFFFFC2\"},{\"from\":0,\"to\":100,\"color\":\"#FFEFEFDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"tooltipBackgroundColor\":{\"type\":\"constant\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"}},\"title\":\"Horizontal Cylinder tank\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":true,\"borderRadius\":null,\"actions\":{}}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_dish_ends_tank.json b/application/src/main/data/json/system/widget_types/horizontal_dish_ends_tank.json new file mode 100644 index 0000000000..b947e3404c --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_dish_ends_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "horizontal_dish_ends", + "name": "Horizontal Dish Ends tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Horizontal Dish Ends tank.", + "descriptor": { + "type": "latest", + "sizeX": 7.5, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.onInit();\n }\n}\n\nself.onDataUpdated = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.update();\n }\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"tankSelectionType\":\"Static\",\"selectedShape\":\"Horizontal Dish Ends\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"function\",\"color\":\"#242770\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#242770\"},{\"from\":0,\"to\":20,\"color\":\"#E73535DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"Static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.18)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"units\":\"%\",\"widgetUnitsSource\":\"Static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#7A8BFF\"},{\"from\":0,\"to\":20,\"color\":\"#E27C7CDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"function\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"rgba(0,0,0,0.87)\"},{\"from\":0,\"to\":20,\"color\":\"#FF0000DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#FFFFFFC2\"},{\"from\":0,\"to\":100,\"color\":\"#FFEFEFDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"tooltipBackgroundColor\":{\"type\":\"constant\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"}},\"title\":\"Horizontal Dish Ends tank\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":true,\"borderRadius\":null,\"actions\":{}}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_ellipse_tank.json b/application/src/main/data/json/system/widget_types/horizontal_ellipse_tank.json new file mode 100644 index 0000000000..869d3be02d --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_ellipse_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "horizontal_ellipse_tank", + "name": "Horizontal Ellipse tank", + "deprecated": false, + "image": "data:image/png;base64,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YeZJKEABClCAAhSgAAUoQAEK2F6AAaDt7wF7QAEKUIACFKAABShAAQpQwCoCDACtwsyTUIACFKAABShAAQpQgAIUsL0AA0Db3wP2gAIUoAAFKEABClCAAhSggFUEGABahZknoQAFKEABClCAAhSgAAUoYHsBBoC2vwfsAQUoQAEKUIACFKAABShAAasIMAC0CjNPQgEKUIACFKAABShAAQpQwPYCDABtfw/YAwpQgAIUoAAFKEABClCAAlYRYABoFWaehAIUoAAFKEABClCAAhSggO0FGADa/h6wBxSgAAUoQAEKUIACFKAABawiwADQKsw8CQUoQAEKUIACFKAABShAAdsLMAC0/T1gDyhAAQpQgAIUoAAFKEABClhFgAGgVZh5EgpQgAIUoAAFKEABClCAArYXYABo+3vAHlCAAhSgAAUoQAEKUIACFLCKAANAqzDzJBSgAAUoQAEKUIACFKAABWwvwADQ9veAPaAABShAAQpQgAIUoAAFKGAVAQaAVmHmSShAAQpQgAIUoAAFKEABCthegAGg7e8Be0ABClCAAhSgAAUoQAEKUMAqAgwArcLMk1CAAhSgAAUoQAEKUIACFLC9AANA298D9oACFKAABShAAQpQgAIUoIBVBBgAWoWZJ6EABShAAQpQgAIUoAAFKGB7AQaAtr8H7AEFKEABClCAAhSgAAUoQAGrCDAAtAozT0IBClCAAhSgAAUoQAEKUMD2AgwAbX8P2AMKUIACFKAABShAAQpQgAJWEWAAaBVmnoQCFKAABShAAQpQgAIUoIDtBRgA2v4esAcUoAAFKEABClCAAhSgAAWsIsAA0CrMPAkFKEABClCAAhSgAAUoQAHbCzAAtP09YA8oQAEKUIACFKAABShAAQpYRYABoFWYeRIKUIACFKAABShAAQpQgAK2F2AAaPt7wB5QgAIUoAAFKEABClCAAhSwigADQKsw8yQUoAAFKEABClCAAhSgAAVsL8AA0Pb3gD2gAAUoQAEKUIACFKAABShgFQEGgFZh5kkoQAEKUIACFKAABShAAQrYXoABoO3vAXtAAQpQgAIUoAAFKEABClDAKgIMAK3CzJNQgAIUoAAFKEABClCAAhSwvQADQNvfA/aAAhSgAAUoQAEKUIACFKCAVQQYAFqFmSehAAUoQAEKUIACFKAABShgewEGgLa/B+wBBShAAQpQgAIUoAAFKEABqwgwALQKM09CAQpQgAIUoAAFKEABClDA9gIMAG1/D9gDClCAAhSgAAUoQAEKUIACVhFgAGgVZp6EAhSgAAUoQAEKUIACFKCA7QUYANr+HrAHFKAABShAAQpQgAIUoAAFrCLAANAqzDwJBShAAQpQgAIUoAAFKEAB2wswALT9PWAPKEABClCAAhSgAAUoQAEKWEWAAaBVmHkSClCAAhSgAAUoQAEKUIACthdgAGj7e8AeUIACFKAABShAAQpQgAIUsIoAA0CrMPMkFKAABShAAQpQgAIUoAAFbC/AAND294A9oAAFKEABClCAAhSgAAUoYBUBBoBWYeZJKEABClCAAhSgAAUoQAEK2F6AAaDt7wF7QAEKUIACFKAABShAAQpQwCoCDACtwsyTUIACFKAABShAAQpQgAIUsL0AA0Db3wP2gAIUoAAFKEABClCAAhSggFUEGABahZknoQAFKEABClCAAhSgAAUoYHuB/wf5OUg8kdckQQAAAABJRU5ErkJggg==", + "description": "Widget indicates the level of liquid in Horizontal Ellipse tank.", + "descriptor": { + "type": "latest", + "sizeX": 7.5, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.onInit();\n }\n}\n\nself.onDataUpdated = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.update();\n }\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"tankSelectionType\":\"Static\",\"selectedShape\":\"Horizontal Ellipse\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"function\",\"color\":\"#242770\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#242770\"},{\"from\":0,\"to\":20,\"color\":\"#E73535DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"Static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.18)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"units\":\"%\",\"widgetUnitsSource\":\"Static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#7A8BFF\"},{\"from\":0,\"to\":20,\"color\":\"#E27C7CDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"function\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"rgba(0,0,0,0.87)\"},{\"from\":0,\"to\":20,\"color\":\"#FF0000DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#FFFFFFC2\"},{\"from\":0,\"to\":100,\"color\":\"#FFEFEFDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"tooltipBackgroundColor\":{\"type\":\"constant\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"}},\"title\":\"Horizontal Ellipse tank\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":true,\"borderRadius\":null,\"actions\":{}}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/horizontal_oval_tank.json b/application/src/main/data/json/system/widget_types/horizontal_oval_tank.json new file mode 100644 index 0000000000..1d452cb8db --- /dev/null +++ b/application/src/main/data/json/system/widget_types/horizontal_oval_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "horizontal_oval_tank", + "name": "Horizontal Oval tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Horizontal Oval tank.", + "descriptor": { + "type": "latest", + "sizeX": 7.5, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.onInit();\n }\n}\n\nself.onDataUpdated = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.update();\n }\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"tankSelectionType\":\"Static\",\"selectedShape\":\"Horizontal Oval\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"function\",\"color\":\"#242770\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#242770\"},{\"from\":0,\"to\":20,\"color\":\"#E73535DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"Static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.18)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"units\":\"%\",\"widgetUnitsSource\":\"Static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#7A8BFF\"},{\"from\":0,\"to\":20,\"color\":\"#E27C7CDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"function\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"rgba(0,0,0,0.87)\"},{\"from\":0,\"to\":20,\"color\":\"#FF0000DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#FFFFFFC2\"},{\"from\":0,\"to\":100,\"color\":\"#FFEFEFDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"tooltipBackgroundColor\":{\"type\":\"constant\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"}},\"title\":\"Horizontal Oval tank\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":true,\"borderRadius\":null,\"actions\":{}}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/rectangle_tank.json b/application/src/main/data/json/system/widget_types/rectangle_tank.json new file mode 100644 index 0000000000..ffe611aab7 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/rectangle_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "rectangle_tank", + "name": "Rectangle tank", + "deprecated": false, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA6MAAAG+CAYAAABmsdJwAAAEDmlDQ1BrQ0dDb2xvclNwYWNlR2VuZXJpY1JHQgAAOI2NVV1oHFUUPpu5syskzoPUpqaSDv41lLRsUtGE2uj+ZbNt3CyTbLRBkMns3Z1pJjPj/KRpKT4UQRDBqOCT4P9bwSchaqvtiy2itFCiBIMo+ND6R6HSFwnruTOzu5O4a73L3PnmnO9+595z7t4LkLgsW5beJQIsGq4t5dPis8fmxMQ6dMF90A190C0rjpUqlSYBG+PCv9rt7yDG3tf2t/f/Z+uuUEcBiN2F2Kw4yiLiZQD+FcWyXYAEQfvICddi+AnEO2ycIOISw7UAVxieD/Cyz5mRMohfRSwoqoz+xNuIB+cj9loEB3Pw2448NaitKSLLRck2q5pOI9O9g/t/tkXda8Tbg0+PszB9FN8DuPaXKnKW4YcQn1Xk3HSIry5ps8UQ/2W5aQnxIwBdu7yFcgrxPsRjVXu8HOh0qao30cArp9SZZxDfg3h1wTzKxu5E/LUxX5wKdX5SnAzmDx4A4OIqLbB69yMesE1pKojLjVdoNsfyiPi45hZmAn3uLWdpOtfQOaVmikEs7ovj8hFWpz7EV6mel0L9Xy23FMYlPYZenAx0yDB1/PX6dledmQjikjkXCxqMJS9WtfFCyH9XtSekEF+2dH+P4tzITduTygGfv58a5VCTH5PtXD7EFZiNyUDBhHnsFTBgE0SQIA9pfFtgo6cKGuhooeilaKH41eDs38Ip+f4At1Rq/sjr6NEwQqb/I/DQqsLvaFUjvAx+eWirddAJZnAj1DFJL0mSg/gcIpPkMBkhoyCSJ8lTZIxk0TpKDjXHliJzZPO50dR5ASNSnzeLvIvod0HG/mdkmOC0z8VKnzcQ2M/Yz2vKldduXjp9bleLu0ZWn7vWc+l0JGcaai10yNrUnXLP/8Jf59ewX+c3Wgz+B34Df+vbVrc16zTMVgp9um9bxEfzPU5kPqUtVWxhs6OiWTVW+gIfywB9uXi7CGcGW/zk98k/kmvJ95IfJn/j3uQ+4c5zn3Kfcd+AyF3gLnJfcl9xH3OfR2rUee80a+6vo7EK5mmXUdyfQlrYLTwoZIU9wsPCZEtP6BWGhAlhL3p2N6sTjRdduwbHsG9kq32sgBepc+xurLPW4T9URpYGJ3ym4+8zA05u44QjST8ZIoVtu3qE7fWmdn5LPdqvgcZz8Ww8BWJ8X3w0PhQ/wnCDGd+LvlHs8dRy6bLLDuKMaZ20tZrqisPJ5ONiCq8yKhYM5cCgKOu66Lsc0aYOtZdo5QCwezI4wm9J/v0X23mlZXOfBjj8Jzv3WrY5D+CsA9D7aMs2gGfjve8ArD6mePZSeCfEYt8CONWDw8FXTxrPqx/r9Vt4biXeANh8vV7/+/16ffMD1N8AuKD/A/8leAvFY9bLAAAAbGVYSWZNTQAqAAAACAAEARoABQAAAAEAAAA+ARsABQAAAAEAAABGASgAAwAAAAEAAgAAh2kABAAAAAEAAABOAAAAAAAEeOIAAA/pAAi71gAAHxMAAqACAAQAAAABAAADo6ADAAQAAAABAAABvgAAAADbncXcAAAACXBIWXMAAAsRAAALEQF/ZF+RAABAAElEQVR4Ae3dB5wcdd0/8G96I5Q0SCH0EnqPNFFpUlREKYo+gIrPH7A9KCJgoYgIiDQLVaWoiIhKlfKANAUeQEoo0gKkGFogkF7/O6ubK7t7d0kuczOz7/F13OxvZuf3+72/h8fnZnam26LSEhYCBAgQIECAAAECBAgQIJCiQPcU+9IVAQIECBAgQIAAAQIECBAoCwijfhAIECBAgAABAgQIECBAIHUBYTR1ch0SIECAAAECBAgQIECAgDDqZ4AAAQIECBAgQIAAAQIEUhcQRlMn1yEBAgQIECBAgAABAgQICKN+BggQIECAAAECBAgQIEAgdQFhNHVyHRIgQIAAAQIECBAgQICAMOpngAABAgQIECBAgAABAgRSFxBGUyfXIQECBAgQIECAAAECBAgIo34GCBAgQIAAAQIECBAgQCB1AWE0dXIdEiBAgAABAgQIECBAgIAw6meAAAECBAgQIECAAAECBFIXEEZTJ9chAQIECBAgQIAAAQIECAijfgYIECBAgAABAgQIECBAIHUBYTR1ch0SIECAAAECBAgQIECAgDDqZ4AAAQIECBAgQIAAAQIEUhcQRlMn1yEBAgQIECBAgAABAgQICKN+BggQIECAAAECBAgQIEAgdQFhNHVyHRIgQIAAAQIECBAgQICAMOpngAABAgQIECBAgAABAgRSFxBGUyfXIQECBAgQIECAAAECBAgIo34GCBAgQIAAAQIECBAgQCB1AWE0dXIdEiBAgAABAgQIECBAgIAw6meAAAECBAgQIECAAAECBFIX6Jl6jzokQIAAAQKdKHDH/z61+Gj33tu0/tBD/1zcXll58vHnK6tL9X3Tzddr8b7tttugxeudd964/Hq3Xf/9vcVGLwgQIECAAIEWAt0WlZYWLV4QIECAAIGMCVQCZxI2KyFzWYNlWlNMAmwltCZhVVBNS14/BAgQIJB1AWE06xUyPgIECDSYQCV4nn32deWZ5yV0LmmZmofUk086cEnfbn8CBAgQIJB7AWE09yU0AQIECORfIAmgSfgsavDsSIUq4dTZ045o2YcAAQIEiiAgjBahiuZAgACBnAkk4bNyyW0jB9B6ZasEU2dM6wlpJ0CAAIEiCAijRaiiORAgQCBHAt876Zq47JIbO3XESXhLlspnM5P1ys2EkvXKsqyf16xcQlw5XvMbJiVty+PzrJ8/Yt8QSivivhMgQIBAkQSE0SJV01wIECCQcYEkzB32X2eUR1k5+5cEuPbOjjYPm5WQuazBMg2qyhngSl8dmWtl3+bfBdLmGtYJECBAoCgCwmhRKmkeBAgQyLhA8yCaDDUJmLfc/J1o60xpUUNYYrGkn5GteGW8zIZHgAABAgQ6LCCMdpjKjgQIECCwrAKtg+evrjiu/NnRjly2WzmTmowhL2dHk9CZLJXPxybr7Z0FTvZpvRQ1lLeep9cECBAg0FgCwmhj1dtsCRAg0OUCe+196lIFsrYG3vwy3tb7VYJrpX1pLu+thMrKMSrfm39mdHl8XjSZ19e/vr9nk1bAfSdAgACBQgkIo4Uqp8kQIEAgHwJJuKsEuY6cFc3HrDpvlEJo51k6EgECBAhkV0AYzW5tjIwAAQKFF6iE0uv//Ld44/WphZ9vRya4517vi1GjhriDbkew7EOAAAECuRYQRnNdPoMnQIBA/gSSALqkN+/J3yw7Z8SfPmT3OPPMz3bOwRyFAAECBAhkTEAYzVhBDIcAAQJFFxg18r+WeYr9+/eLmTNnLfNxlvcBknEmy7KM1SW7y7tKjk+AAAECXSUgjHaVvH4JECDQYAK1zogmQWvEiMFx6y0P1NRItm+33Qbt3j03OXayVD6HWjlY5aZCldfJ96W5m23yvmQsrZdkbJWl+Y2Sat0kqXJJcmX/Jf2srDvqVuR8J0CAAIGiCPQsykTMgwABAgTyJzBy5JAYOXJwuwNPQmbzsNf6DZXwV/neentWXidzSOaShOQk3C5tMM7KfIyDAAECBAgsi4Azo8ui570ECBAgsMQCnfFol8oZ00rnlaDalWG0cnY2GVPlDG3lzOyyhM5krh7vUqm07wQIECBQJAFhtEjVNBcCBAjkQKByueqSXqa6NFNrfWlt88tql/R4lWDZ/H3LEjKbH6fe+nnnfyk+8Ynt6m3WToAAAQIEci0gjOa6fAZPgACB/Aoc/rmfxu23PpjfCaQw8kcfvSCGrbpSCj3pggABAgQIpC/QPf0u9UiAAAECBGoLbLLZepHcqKeRluTsbeszuI00f3MlQIAAgcYVcAOjxq29mRMgQCBzAmPHbhAnn3Rg+SsZ3PdOumbxGJPLZJf3ZbGLO1tOK5XQmXwGNFmaf8a1Mx55s5yG7bAECBAgQGC5CAijy4XVQQkQIECgMwSSYNp6qdwoqHKToGR75fOcXRlWK0EzGU/ls6lZuLFSMh4LAQIECBDIooAwmsWqGBMBAgQI1BWonE2sfK+7Y2lDJbgm+zQPr229p962SrBsvr0jY2i+v3UCBAgQIECgSUAYbbKwRoAAAQIFE2geFpuvF2yapkOAAAECBHIp4AZGuSybQRMgQIAAAQIECBAgQCDfAsJovutn9AQIECBAgAABAgQIEMilgDCay7IZNAECBAgQIECAAAECBPItIIzmu35GT4AAAQIECBAgQIAAgVwKCKO5LJtBEyBAgAABAgQIECBAIN8Cwmi+62f0BAgQIECAAAECBAgQyKWAMJrLshk0AQIECBAgQIAAAQIE8i0gjOa7fkZPgAABAgQIECBAgACBXAoIo7ksm0ETIECAAAECBAgQIEAg3wLCaL7rZ/QECBAgQIAAAQIECBDIpYAwmsuyGTQBAgQIECBAgAABAgTyLSCM5rt+Rk+AAAECBAgQIECAAIFcCgijuSybQRMgQIAAAQIECBAgQCDfAsJovutn9AQIECBAgAABAgQIEMilgDCay7IZNAECBAgQIECAAAECBPItIIzmu35GT4AAAQIECBAgQIAAgVwKCKO5LJtBEyBAgAABAgQIECBAIN8Cwmi+62f0BAgQIECAAAECBAgQyKWAMJrLshk0AQIECBAgQIAAAQIE8i0gjOa7fkZPgAABAgQIECBAgACBXAoIo7ksm0ETIECAAAECBAgQIEAg3wLCaL7rZ/QECBAgQIAAAQIECBDIpYAwmsuyGTQBAgQIECBAgAABAgTyLSCM5rt+Rk+AAAECBAgQIECAAIFcCgijuSybQRMgQIAAAQIECBAgQCDfAsJovutn9AQIECBAgAABAgQIEMilgDCay7IZNAECBAgQIECAAAECBPItIIzmu35GT4AAAQIECBAgQIAAgVwK9MzlqA2aQEYFnnpqYrw0/rV48813Y+bMuRGLOnmg3btF927dolvpK/ke/pzUycAOl6bAjOlz0uwul31d+4cHo2fvHrkcu0ETWBaB6e/Njmnvzoz3Sl/vlr46+9fpgP59Y/jwVWL99YbH9jusHyNK6xYCBNIXEEbTN9djgQT+/sBzceONj8aDDz4bLzz/asyfN79AszMVAstXYMxG6yzfDgpw9PPP/2NMf29GAWZiCgSyLdCjR48YPmJofGi3reLbJ+4f/fv1zvaAjY5AQQSE0YIU0jTSFTj3/JvjD9feG+NfnJRux3ojQIAAAQIEOl1gwYIFMXHClLjilzeXv0aOWjW+dfyB8fH9tu30vhyQAIEmARf5NVlYI9CuwE9/dltsscXX4kdnXC2ItqtlBwIECBAgkE+BSRNfiy8ffUHssMNx8egj4/M5CaMmkAMBYTQHRTLErhd4ctyE2Gff0+L0066KN9+Y2vUDMgICBRW47JIb43snXVPQ2dWe1h3/+1TstfeptTdqJUCgSwVefeVf8dGPfi8OOvicLh2HzgkUVaDbotJS1MmZF4HOEPjV5XfHKSddEXPnzmv3cP0H9IsRI4fG4CErlT5v0idKdxpq9z1LtEPpX9fkX9nk39rSPzv01h49ukfvXq7I7xCWnVIVSG709cj/Pd1mn58/Yt/y9pNPOrDN/fK0MQmf9977VDz00D/jycefb3Po++y7Q8xfsLDNfWwkkBeByZOnxlNPvhALF7b/M13+3dWnd/Tu3Sv6lL53L93ArzOXOXPmxaxZc2LunLkdGk/S9/DS7/d77/lh9O3bqzOH4lgEGlpAGG3o8pt8ewI/OP26+NlP/tTmbuttsEbsvsfW8eE9No+ttlqrzX07c2MSSmfNKv0ynT03Zpe+t/V3pd6lu3EOGjQwevZ0MURn1sCxlk3gvAv+Emf98DdLdJBNN18vtttug/J7dt5549ht142X6P1p7pyEzmSpBM9kvb3wmexTWUavOSL+dv8PKy99J5BrgTPO/HNccN4f2pzDuuuvHrvssnnsvdfWMXZsejc4e/751+KnP7sl7v7rY/HG621f/ZT80fnaP5wYm206us252EiAQMcEhNGOOdmrAQVOOvn3cenFN9Sd+djtN43/d+SHY/ddN627T5ob3n13VrxXuhV+vVCa/JV56NAVBdI0i6KvdgW+cewVcfVv7mh3v/Z2SEJqslSCarKehNXmS2cE10rAbH7cJGwmS3KmM1mWJHCW31DjH6NWX630H8dHxtYp/oGrxjA0EegUgeNP/E1c+au/1D3WtmM3iq9+9WPxgV3G1N0nrQ2vv/5eHP658+Pxf/z73+da/fbq1StuuumU2GjjkbU2ayNAYAkEhNElwLJr4whc8JO/xBmn1z5jM2TYoPjWcQfFwQdvnzmQhQsWxbvTZ5UeBTG75tiSM6TDhq1Uc5tGAl0lcMstj8WFF91SumT3ma4aQrnfJNB2RpBclkkMXHGF+Mxndo/jjvuYPxwtC6T3ZkbgoovuiFNPuaLmeFYfvVp849hPxif2367m9q5sfPyJCfHfX7ygfIfdWuMYsEL/eOqpn/n3tBaONgJLICCMLgGWXRtD4PY7nojDD/1RzcmO3WHTuPiiI2PwoBVqbs9K44yZc+LtqbWfTdivf+/Mjz8rjsaRrsAjj46PP/7pobjzjkcjuWlIoyzJZ+J23PnflyYefPAOpY+ad+5n4xrF0TyzJ3D77U/G4YedVXNgye/TSy85KlZZeUDN7Vlp/K9DLyj9f9L/1RzOyNVXjQcfqD2/mm/QSIBAlYAwWkWiodEFxo49NpJburde9tpn+7jk4iNbN2f29ZzSDZemlgLpgvnVN4pYccV+kXxZCGRV4LnnpsQ99z5duvT1uXjyiZdiwqtTsjrUJR7XCisOiDFj1owtt1yn9NiIMbHrhzYSQJdY0RuyLvD6a9Ni192+XfrD6LSqoR5w0IfinB8fVtWe1YZTTr02Lr7w+prD+9Du28YVv/pyzW0aCRBoX0AYbd/IHg0kcMw3Lo9rfvu/VTP+4K7bxJVXfKWqPesNSSB9o/T5l1rLaqut7PKiWjDaMikwa9bcePbZyfHCi1PipZdei1dffSMmT34rHn342UgeVp/FZczG68TwEYNi9dWHxpprDI111x0e6683PEaOXCWLwzUmAp0q8D/H/Cp+/7s7q465517vi8suPaqqPesN3yvdR+KyGveR6BbdSn84OyvWWntY1qdgfAQyKSCMZrIsBtUVAuPGTYwP73lCVdfrbjA67rz91OjeI5+XztW7ZHfACn0yf3lUVTE0EKgj8M47M2LixLfjX1Pejtden1b6I8y00pUB02Pq29Nj2jvT4913Z5Zu8DUzJk14PebNm1/6av9RTZWuevToET1Lj0caPmJIrFD6nNjAgf1ipdKlhausvEIMGjwwhpS+Vl11pVh12Mr/Dp+jVnGms4Lne0MKjHuq9Pt0j+rfpxtvsm7ceut3c2vy6c+cG/fc9WjV+JO7AP/1rtOq2jUQINC+gIcPtm9kjwYROOfc2pfg/PAHh+U2iCalG9C/T+k/vBdU3dRoxvQ5scKAPtHLM0gb5Ce82NNcuRQOk69NNhm1RBNN/lgzc8bcmFl63uDs0tnX5N+Hvv16lZ4T3LsUPPu5emCJNO1M4N8CZ5/95yqK5I7uP//5/6tqz1PDb676WmyzzTEx5V9vthj2C89NiLvveTZ2ef+GLdq9IECgfQEPHWzfyB4NIDBx4tS49ZYHqmb6qUN2j/e9b92q9rw1rFj6j+paN0V5t85dd/M2P+MlsLQCyR9rhg4dGGuMHhIbbDAi1i5dajdi+CrlYOu5vEur6n2NLPBo6UZkt9/6YBXBoYfvXf73q2pDzhp+dPYRNUf8ve9eWbNdIwECbQsIo2372NogAldc+deqmfbr3ze+feInqtrz2JBcYjxwxb5VQ589q+OXKla9WQMBAgQIEGglcNPN1ZexrrTywDjh+I+32jOfL5NnoW6w4VpVg3/pxUlVbRoIEGhfQBht38geDSBw+22PVc1y34/sGCut1L+qPa8NK5Y+59b67OiiRYtilkCa15IaNwECBDIn8Ne7nqga038dtmf07durqj2vDeeeV312dOHChXHOuTfndUrGTaDLBITRLqPXcVYEppRuP//8cy9XDefgg3aqast7Q/JZuNbL7DlzWzd5TYAAAQIEllhg/PjX45/Pjq963z57bVXVlueGTUufTV9xxYFVU7jxxurLk6t20kCAQAsBYbQFhxeNKPDXu56umvZqI4bG2LHrVLXnvaFf395VU3CpbhWJBgIECBBYCoGbb6m+ymiNtUYs8Y3FlqLr1N+yzXbVNyt6+SWX6qZeCB3mXkAYzX0JTWBZBZ586pWqQ2y2WfGCaDLJfjXOjC5YsDCSy3UtBAgQIEBgWQRefvm1qrfv8oHNq9qK0PDZz36gahpzXGlUZaKBQHsCwmh7QrYXXuCVV16vmuOGGy7Z4yGqDpDRhuQzo7Wel7pggTCa0ZIZFgECBHIj8Prr71SNdfTqQ6vaitCw6wc3qTmNJ5+cULNdIwECtQWE0douWhtI4M03p1XNdo3RxfzlmUy0Z/fqf+0XLlxQZaCBAAECBAgsicDrb1T/Ph0xYuUlOURu9k3+sNujR4+q8T417tWqNg0ECNQXqP6v0vr72kKgkAKzZsyumtegwStUtRWloXvPblVTme/MaJWJBgIECBBYMoG33qw+Mzpi+KAlO0iO9u7Vu2fVaF+d+FZVmwYCBOoLCKP1bWxpEIEFpduxt15696r+BdN6n7y+7tGt+i+5ixa6TDev9TRuAgQIZEVgZo0/7g4dtmJWhtfp4+hZ478VZsyY0+n9OCCBIgsIo0WurrkRIECAAAECBAgQIEAgowLCaEYLY1gECBAgQIAAAQIECBAosoAwWuTqmhsBAgQIECBAgAABAgQyKiCMZrQwhkWAAAECBAgQIECAAIEiCwijRa6uuREgQIAAAQIECBAgQCCjAsJoRgtjWAQIECBAgAABAgQIECiygDBa5OqaGwECBAgQIECAAAECBDIqIIxmtDCGRYAAAQIECBAgQIAAgSILCKNFrq65ESBAgAABAgQIECBAIKMCwmhGC2NYBAgQIECAAAECBAgQKLKAMFrk6pobAQIECBAgQIAAAQIEMiogjGa0MIZFgAABAgQIECBAgACBIgsIo0WurrkRIECAAAECBAgQIEAgowLCaEYLY1gECBAgQIAAAQIECBAosoAwWuTqmhsBAgQIECBAgAABAgQyKiCMZrQwhkWAAAECBAgQIECAAIEiCwijRa6uuREgQIAAAQIECBAgQCCjAsJoRgtjWAQIECBAgAABAgQIECiygDBa5OqaGwECBAgQIECAAAECBDIqIIxmtDCGRYAAAQIECBAgQIAAgSILCKNFrq65ESBAgAABAgQIECBAIKMCwmhGC2NYBAgQIECAAAECBAgQKLKAMFrk6pobAQIECBAgQIAAAQIEMiogjGa0MIZFgAABAgQIECBAgACBIgsIo0WurrkRIECAAAECBAgQIEAgowLCaEYLY1gECBAgQIAAAQIECBAosoAwWuTqmhsBAgQIECBAgAABAgQyKiCMZrQwhkWAAAECBAgQIECAAIEiCwijRa6uuREgQIAAAQIECBAgQCCjAsJoRgtjWAQIECBAgAABAgQIECiygDBa5OqaGwECBAgQIECAAAECBDIqIIxmtDCGRYAAAQIECBAgQIAAgSILCKNFrq65ESBAgAABAgQIECBAIKMCwmhGC2NYBAgQIECAAAECBAgQKLKAMFrk6pobAQIECBAgQIAAAQIEMiogjGa0MIZFgAABAgQIECBAgACBIgsIo0WurrkRIECAAAECBAgQIEAgowLCaEYLY1gECBAgQIAAAQIECBAosoAwWuTqmhsBAgQIECBAgAABAgQyKiCMZrQwhkWAAAECBAgQIECAAIEiCwijRa6uuREgQIAAAQIECBAgQCCjAsJoRgtjWAQIECBAgAABAgQIECiygDBa5OqaGwECBAgQIECAAAECBDIqIIxmtDCGRYAAAQIECBAgQIAAgSILCKNFrq65ESBAgAABAgQIECBAIKMCwmhGC2NYBAgQIECAAAECBAgQKLKAMFrk6pobAQIECBAgQIAAAQIEMiogjGa0MIZFgAABAgQIECBAgACBIgsIo0WurrkRIECAAAECBAgQIEAgowLCaEYLY1gECBAgQIAAAQIECBAosoAwWuTqmhsBAgQIECBAgAABAgQyKiCMZrQwhkWAAAECBAgQIECAAIEiCwijRa6uuREgQIAAAQIECBAgQCCjAsJoRgtjWAQIECBAgAABAgQIECiygDBa5OqaGwECBAgQIECAAAECBDIqIIxmtDCGRYAAAQIECBAgQIAAgSILCKNFrq65ESBAgAABAgQIECBAIKMCwmhGC2NYBAgQIECAAAECBAgQKLKAMFrk6pobAQIECBAgQIAAAQIEMiogjGa0MIZFgAABAgQIECBAgACBIgsIo0WurrkRIECAAAECBAgQIEAgowLCaEYLY1gECBAgQIAAAQIECBAosoAwWuTqmhsBAgQIECBAgAABAgQyKiCMZrQwhkWAAAECBAgQIECAAIEiCwijRa6uuREgQIAAAQIECKQn0C29rvREoAgCwmgRqmgOBAgQIECAAAECBAgQyJmAMJqzghkuAQIECBAgQIAAAQIEiiAgjBahiuZAgAABAgQIECBAgACBnAkIozkrmOESIECAAAECBAgQIECgCALCaBGqaA4ECBAgQIAAAQIECBDImYAwmrOCGS4BAgQIECBAgAABAgSKICCMFqGK5kCAAAECBAgQIECAAIGcCQijOSuY4RIgQIAAAQIECBAgQKAIAsJoEapoDgQIECBAgAABAgQIEMiZgDCas4IZLgECBAgQIECAAAECBIogIIwWoYrmQIAAAQIECBAgQIAAgZwJCKM5K5jhEiBAgAABAgQIECBAoAgCwmgRqmgOBAgQIECAAAECBAgQyJmAMJqzghkuAQIECBAgQIAAAQIEiiAgjBahiuZAgAABAgQIECBAgACBnAkIozkrmOESIECAAAECBAgQIECgCALCaBGqaA4ECBAgQIAAAQIECBDImYAwmrOCGS4BAgQIECBAgAABAgSKICCMFqGK5kCAAAECBAgQIECAAIGcCQijOSuY4RIgQIAAAQIECBAgQKAIAsJoEapoDgQIECBAgAABAgQIEMiZgDCas4IZLgECBAgQIECAAAECBIogIIwWoYrmQIAAAQIECBAgQIAAgZwJCKM5K5jhEiBAgAABAgQIECBAoAgCwmgRqmgOBAgQIECAAAECBAgQyJmAMJqzghkuAQIECBAgQIAAAQIEiiAgjBahiuZAgAABAgQIECBAgACBnAkIozkrmOESIECAAAECBAgQIECgCALCaBGqaA4ECBAgQIAAAQIECBDImYAwmrOCGS4BAgQIECBAgAABAgSKICCMFqGK5kCAAAECBAgQIECAAIGcCQijOSuY4RIgQIAAAQIECBAgQKAIAsJoEapoDgQIECBAgAABAgQIEMiZgDCas4IZLgECBAgQIECAAAECBIogIIwWoYrmQIAAAQIECBAgQIAAgZwJCKM5K5jhEiBAgAABAgQIECBAoAgCwmgRqmgOBAgQIECAAAECBAgQyJmAMJqzghkuAQIECBAgQIAAAQIEiiAgjBahiuZAgAABAgQIECBAgACBnAkIozkrmOESIECAAAECBAgQIECgCALCaBGqaA4ECBAgQIAAAQIECBDImYAwmrOCGS4BAgQIECBAgAABAgSKICCMFqGK5kCAAAECBAgQIECAAIGcCfTM2XgNlwABAgSWo8C0adNi0qRJMWHChJgyZUr0798/Bg0aFIMHD46NN944evXqtRx7d2gCBAgQIECgkQSE0UaqtrkSIECghsATTzwR11xzTfzlL3+JyZMn19jj3029e/eO9ddfP3bcccf4whe+ECNHjqy77/LaMGvWrPjjH/8Yv//97+PJJ5+MZOxJYLYQIECAAAEC+RMQRvNXMyMmQIBApwgkQe5//ud/4plnnunQ8ebOnRvjxo0rf1166aWx6667xplnnhnDhg3r0PuXZad77rknfvOb38Qdd9wRM2fOXHyoRYsWLV63QoAAAQIECORLQBjNV72MlgABAsssMG/evPjBD34QSaBcsGDBUh0ved9tt90WDz74YJx11lmx7777LtVx2nrT888/H1dddVVcf/318dprr7W1q20ECBAgQIBADgWE0RwWzZAJECCwtALJmcTDDz887rzzzqU9RIv3JZ8xPfLII2P+/Pmx3377tdi2NC/eeeed+N3vfhd/+MMfymdgl+YY3kOAAAECBAjkQ0AYzUedjJIAAQKdInD88cd3WhCtDCg5S/q1r30thg8fHmPHjq00d/h7EmRvvvnmcgi97777IjlzayFAgAABAgSKLyCMFr/GZkiAAIGywHXXXRdXXHFFmxo9e/aMrbfeOtZZZ51Ye+21IzlT+dJLL8Wzzz5b/l7vzcnnSZc06D7yyCPlz4EmQTQ5w2ohQIAAAQIEGktAGG2sepstAQINLHDeeee1OfvkrOYZZ5xRvmNurR0vv/zyOP300+Pdd9+ttbkcWK+99tr45Cc/WXN788bvfOc7cdlllzVvsk6AAAECBAg0mED3Bpuv6RIgQKAhBW6//fZIbghUb9lrr73Kj0xJHt1Sbzn00EMjObvao0ePeruUt9fd2GzDe++91+yVVQIECBAgQKARBYTRRqy6ORMg0HACyU2B6i0jRoyIc889t97mFu0bbbRRHHzwwS3amr946KGHyjczat62LOtrrrnmsrzdewkQIECAAIEMCwijGS6OoREgQKCzBF599dW6h0rugjtw4MC621tv+OIXv9i6afHr5BmgbZ2BXbxjGytJAD366KPj7rvvLj/WpY1dbSJAgAABAgRyLOAzozkunqETIECgowKTJk2qu+sWW2xRd1utDWuttVb5Ut16zyhNngk6ZsyYWm+t2zZy5MjYe++946CDDork7GtlefPNNyurvhMgQIAAAQIFExBGC1ZQ0yFAgEAtgRNOOCEWLlxYa1PsvPPONdvrNSZ33F111VVj8uTJNXfpaIBMjrHnnnvGAQccUL6Db82DaSRAgAABAgQKKyCMFra0JkaAAIEmgUMOOaTpRSestXUDoiRktreceOKJHf6canvHsp0AAQIECBDIp4DPjOazbkZNgACBLhP417/+FW2F0U022aTdsQ0dOrTdfexAgAABAgQIFFvAmdFi19fsCBAg0OkCf//73+sec9iwYbHKKqvU3Z7XDY8//nj8/Oc/j+eeey5ef/31GD16dPlzsd/4xjdi+PDheZ2WcRMgQIAAgS4VEEa7lF/nBAgQyJfAtGnT4pRTTqk76LbutFv3TRnfcPrpp8fPfvazaH7DpqlTp8Zjjz0WN954Y5x22mnxyU9+MuOzMDwCBAgQIJA9AZfpZq8mRkSAAIFMCiSPbTnqqKPKZwZrDTD5rOgRRxxRa1Nu26677rq44IILykG0T58+se+++8aRRx4Z73//+6Nbt27ly5WTs6PL+jib3AIZOAECBAgQWAYBYXQZ8LyVAAECjSAwe/bs+MUvfhFjx46Nu+66q+aUkzvsnnnmmdGrV6+a2/PYOHfu3PjOd75THnoSRP/4xz/GxRdfXG67+uqry/NNNib7ffOb36w7xeQztieffHLMmjWr7j42ECBAgACBRhRwmW4jVt2cCRAg0Erg4YcfjnPOOadFa3JJ7oQJEyJ5VMuiRYtabGv+okePHuU74+6+++7Nm3O//sQTT8Tbb79dnsf+++8frZ/Hmtyh+PLLL49x48bFP/7xj7JRcra09XLcccfFHXfcETfccEPcfffdMWDAgNa7eE2AAAECBBpSQBhtyLKbNAECBFoKTJkype5Zz5Z7tnw1cODA+P73vx9JWCvakoTMyrL11ltXVlt833zzzcthNDk7+sILL8R6663XYvstt9xSDqJJ43bbbSeIttDxggABAgQaXcBluo3+E2D+BAgQWAqB5AzgRz/60bj//vvjgAMOWIojZP8tb7zxxuJBDh48ePF685Xmdw5OLsdtviSX5Z5wwgnlppVXXrl8o6Pm260TIECAAIFGFxBGG/0nwPwJECCwFALdu3eP5PLcGTNmLMW78/GW5pfTzps3r+agm7f37t27xT7JXYdfe+21ctuJJ55YyEfetJiwFwQIECBAYAkFhNElBLM7AQIECET57rLJDX123nnn+NKXvhTJnXaLtmy44YaLp/Tiiy8uXm++Mn78+MUvx4wZs3g9+bzpVVddVX69zTbbRPL5UgsBAgQIECDQUkAYbenhFQECBBpWIDnb2fyrIxDz58+P5PEnyXM2ixZIN9tss/LjWxKH3/72t5HMtfmSXJZ77733lpuGDh0aK620Unk9udnTMcccUw7sydnSH//4x83fZp0AAQIECBD4j4Aw6keBAAECBMrPz5w4cWI0/3rqqafi+uuvL99lNzmzlzzepN7y2GOPlW9iVKTHlwwZMiQOPPDA8pRfffXV2G+//eKBBx4o31349ttvbzHfL3/5y4tpLrzwwnj66afLr7/4xS/Guuuuu3ibFQIECBAgQKBJQBhtsrBGgAABAs0EkpvzJJeYHnTQQXHWWWfFfffdFx/+8Ieb7dFyNbk09YILLmjZmPNXyZ2C11xzzfIsHn300XIATc6YHnroofHKK6+U23faaaf4whe+UF5PzpaeffbZ5fXRo0fHscceW173DwIECBAgQKBaQBitNtFCgAABAjUERo4cGb/4xS8iCV/1luS5m0U6O5rcxOjOO+8sh89evXq1mHb//v3j+OOPj9/97neL25NniiaXKyd3G04CfOv3LN7RCgECBAgQIBDCqB8CAgQIEFgigfPOOy+S54vWWt5+++345S9/WWtTbtv69u0bp59+eiQ3Mbrtttvikksuibvvvjuef/75SC7PTYJnsjR/puhHPvKR8s2dcjtpAydAgAABAikICKMpIOuCAAECRRIYPnx4m5frJpezFnHp2bNnbLLJJrHPPvvEeuuttziEJnNt/UzRJLxaCBAgQIAAgbYFhNG2fWwlQIAAgRoCG2ywQY3WfzdNmDCh7raibkg+W+qZokWtrnkRIECAwPIS6Lm8Duy4BAgQIFBcgY022qju5CZPnlx3WxE3JDduuuKKK8pTa/1M0X/84x/lbc8991wklzCvtdZasfnmm5cv7+3Xr18ROcyJAAECBAh0WEAY7TCVHQkQIJBPgYcffjiSR5HUWkaNGhWf/exna21qs61Hjx51t8+dO7futqJtaP1M0cqddJN5nnzyyXHppZeWnzdamffLL78cd911V1xzzTVx/vnnxw477FDZ5DsBAgQIEGg4AWG04UpuwgQINJpAclau3iNXBg0atFRhtPIczVqWySNhGmW5+OKLWzxTNPksabIkNzm66KKLyuvJ81l33HHHGDp0aDz++OPx7LPPRnL2+Igjjig/LqeRvMog/kGAAAECBP4j4DOjfhQIECBQcIHVVlut7gynTp0ab7zxRt3t9TYkAbfeMmTIkHqbCtWePFM0eXxLsjR/puibb74ZZ5xxRrk9efzLDTfcEFdddVWcc8455cfEfP7zny9vSy7b/fa3v11e9w8CBAgQINCIAsJoI1bdnAkQaCiBTTfdNLp3r/9/98nZvSVZkvB68803133L2LFj624r0oZ6zxR94IEHys8aTeaaBM/kDrzNl+9+97ux6qqrlpvuv//+5pusEyBAgACBhhKo/18nDcVgsgQIECiuQHJ56MYbb1x3ghdeeGEknyvt6PL1r389pk2bVnf3fffdt+62omxo65miTz755OJpbr/99ovXKyu9evWKyg2gkmA/Y8aMyibfCRAgQIBAQwkIow1VbpMlQKBRBfbff/+6U1+wYEEceuih8etf/7ruPsmG5LLU5EzfHXfcUXe/5JEvW265Zd3tRdiQPFP0xBNPLE9lpZVWitbPFE0u060slTOgldeV75XPiSY3QJo0aVKl2XcCBAgQINBQAm5g1FDlNlkCBBpVIAmRyeNHxo8fX5Mg+fziscceG5dffnnstttusf7665e/kmCVfD70mWeeiT/96U+RBLF6S7du3eK0006rt7kw7ckzRadMmVKezwknnBCVYFmZYO/evSurMW/evMXrzVfmz5+/+GVbdyZevJMVAgQIECBQQAFhtIBFNSUCBAi0FujZs2f5Zjuf+tSn6gak5D3jxo0rf7V+f0deH3jggYV/VEnrZ4rWeixO5Y66idlLL70Um222WRXfxIkTy21JcF177bWrtmsgQIAAAQKNIOAy3UaosjkSIECgJJA80/KnP/1pLI8zcXvssUf8+Mc/LrxzcnY5uaw5CZHNnynafOLNw2etS5+TgJqE2mRJ7sKbnFG2ECBAgACBRhQQRhux6uZMgEDDCiQ3F0runtv60tKlBUmCVHJ2MHmuZiOEqh/96EeRXKZ7zDHHRPMzoM39ttlmm0i+kiW5W+5XvvKV8nNFk0tzkzvtHnLIIVG5TPfoo49u/lbrBAgQIECgoQRcpttQ5TZZAgQIROy1116x7bbbRnJX3ORmRMlNdJZmSc7q/eAHP4gPfehDS/P23L7nc5/7XLtjP//88yM5Wzx9+vS49tpry1/JGenkrGplSdwOOuigykvfCRAgQIBAwwk4M9pwJTdhAgQIRAwZMqR8s6J77rknPv3pT0fy+JeOLP369YvkcSWXXXZZ+SxfowXRjhgl+6y55prx17/+NXbaaafFb6kE0T59+sQ3v/nNuPLKKxdvs0KAAAECBBpRwJnRRqy6ORMgQOA/Auuss04kl54myyuvvBJ/+9vfyo9wmTp1arz33nuRhM/kkt7BgweXH9my1VZbpXo5bhKaJ0+e/J/R5uvbiBEj4pprril7Jp8RTR6NM2bMmNh0002jf//++ZqM0RIgQIAAgeUgIIwuB1SHJECAQB4F1lhjjUi+LJ0rMHz48Ei+LAQIECBAgEBLAZfptvTwigABAgQIECBAgAABAgRSEBBGU0DWBQECBAgQIECAAAECBAi0FBBGW3p4RYAAAQIECBAgQIAAAQIpCAijKSDrggABAgQIECBAgAABAgRaCgijLT28IkCAAAECBAgQIECAAIEUBITRFJB1QYAAAQIECBAgQIAAAQItBYTRlh5eESBAgAABAgQIECBAgEAKAsJoCsi6IECAAAECBAgQIECAAIGWAsJoSw+vCBAgQIAAAQIECBAgQCAFAWE0BWRdECBAgAABAgQIECBAgEBLAWG0pYdXBAgQIECAAAECBAgQIJCCgDCaArIuCBAgQIAAAQIECBAgQKClgDDa0sMrAgQIECBAgAABAgQIEEhBQBhNAVkXBAgQIECAAAECBAgQINBSQBht6eEVAQIECBAgQIAAAQIECKQgIIymgKwLAgQIECBAgAABAgQIEGgpIIy29PCKAAECBAgQIECAAAECBFIQEEZTQNYFAQIECBAgQIAAAQIECLQUEEZbenhFgAABAgQIECBAgAABAikICKMpIOuCAAECBAgQIECAAAECBFoKCKMtPbwiQIAAAQIECBAgQIAAgRQEhNEUkHVBgAABAgQIECBAgAABAi0FhNGWHl4RIECAAAECBAgQIECAQAoCwmgKyLogQIAAAQIECBAgQIAAgZYCwmhLD68IECBAgAABAgQIECBAIAUBYTQFZF0QIECAAAECBAgQIECAQEsBYbSlh1cECBAgQIAAAQIECBAgkIKAMJoCsi4IECBAgAABAgQIECBAoKWAMNrSwysCBAgQIECAAAECBAgQSEFAGE0BWRcECBAgQIAAAQIECBAg0FJAGG3p4RUBAgQIECBAgAABAgQIpCDQM4U+dEGgEAIXXRnx4ktFmMqA0iSSLwsBAgQIEOg8gVmzqo91xvndYoWB1e15a/nWVyIGrZK3URsvgewLODOa/RoZIQECBAgQIEAgpwILczpuwyZAIA0BZ0bTUNZHIQS6d4uYO7cQUzEJAgQIECDQ+QKLqg85b143vzurWbQQIPAfAWHUjwKBDgr07Rcxe3YHd7YbAQIECBBoMIEaWTTmzInoUYD/2uzTp8GKaboEUhJwmW5K0LohQIAAAQIECBAgQIAAgSYBYbTJwhoBAgQIECBAgAABAgQIpCQgjKYErRsCBAgQIECAAAECBAgQaBIQRpssrBEgQIAAAQIECBAgQIBASgLCaErQuiFAgAABAgQIECBAgACBJgFhtMnCGgECBAgQIECAAAECBAikJCCMpgStGwIECBAgQIAAAQIECBBoEhBGmyysESBAgAABAgQIECBAgEBKAsJoStC6IUCAAAECBAgQIECAAIEmAWG0ycIaAQIECBAgQIAAAQIECKQkIIymBK0bAgQIECBAgAABAgQIEGgSEEabLKwRIECAAAECBAgQIECAQEoCwmhK0LohQIAAAQIECBAgQIAAgSYBYbTJwhoBAgQIECBAgAABAgQIpCQgjKYErRsCBAgQIECAAAECBAgQaBIQRpssrBEgQIAAAQIECBAgQIBASgLCaErQuiFAgAABAgQIECBAgACBJgFhtMnCGgECBAgQIECAAAECBAikJCCMpgStGwIECBAgQIAAAQIECBBoEhBGmyysESBAgAABAgQIECBAgEBKAsJoStC6IUCAAAECBAgQIECAAIEmAWG0ycIaAQIECBAgQIAAAQIECKQkIIymBK0bAgQIECBAgAABAgQIEGgSEEabLKwRIECAAAECBAgQIECAQEoCwmhK0LohQIAAAQIECBAgQIAAgSYBYbTJwhoBAgQIECBAgAABAgQIpCQgjKYErRsCBAgQIECAAAECBAgQaBIQRpssrBEgQIAAAQIECBAgQIBASgLCaErQuiFAgAABAgQIECBAgACBJgFhtMnCGgECBAgQIECAAAECBAikJCCMpgStGwIECBAgQIAAAQIECBBoEhBGmyysESBAgAABAgQIECBAgEBKAsJoStC6IUCAAAECBAgQIECAAIEmAWG0ycIaAQIECBAgQIAAAQIECKQkIIymBK0bAgQIECBAgAABAgQIEGgSEEabLKwRIECAAAECBAgQIECAQEoCwmhK0LohQIAAAQIECBAgQIAAgSYBYbTJwhoBAgQIECBAgAABAgQIpCQgjKYErRsCBAgQ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gAABAgQIZFpAGM10eQyOAAECBAgQIECAAAECxRQQRotZV7MiQIAAAQIECBAgQIBApgWE0UyXx+AIECBAgAABAgQIECBQTAFhtJh1NSsCBAgQIECAAAECBAhkWkAYzXR5DI4AAQIECBAgQIAAAQLFFBBGi1lXsyJAgAABAgQIECBAgECmBYTRTJfH4AgQIECAAAECBAgQIFBMAWG0mHU1KwIECBAgQIAAAQIECGRaQBjNdHkMjgABAgQIECBAgAABAsUUEEaLWVezIkCAAAECBAgQIECAQKYFhNFMl8fgCBAgQIAAAQIECBAgUEwBYbSYdTUrAgQIECBAgAABAgQIZFpAGM10eQyOAAECBAgQIECAAAECxRQQRotZV7MiQIAAAQIECBAgQIBApgWE0UyXx+AIECBAgAABAgQIECBQTAFhtJh1NSsCBAgQIECAAAECBAhkWkAYzXR5DI4AAQIECBAgQIAAAQLFFBBGi1lXsyJAgAABAgQIECBAgECmBYTRTJfH4AgQIECAAAECBAgQIFBMAWG0mHU1KwIECBAgQIAAAQIECGRaQBjNdHkMjgABAgQIECBAgAABAsUUEEaLWVezIkCAAAECBAgQIECAQKYFhNFMl8fgCBAgQIAAAQIECBAgUEwBYbSYdTUrAgQIECBAgAABAgQIZFpAGM10eQyOAAECBAgQIECAAAECxRQQRotZV7MiQIAAAQIECBAgQIBApgWE0UyXx+AIECBAgAABAgQIECBQTAFhtJh1NSsCBAgQIECAAAECBAhkWkAYzXR5DI4AAQIECBAgQIAAAQLFFBBGi1lXsyJAgAABAgQIECBAgECmBYTRTJfH4AgQIECAAAECBAgQIFBMgf8PznqjffXnTmoAAAAASUVORK5CYII=", + "description": "Widget indicates the level of liquid in Rectangle tank.", + "descriptor": { + "type": "latest", + "sizeX": 7.5, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.onInit();\n }\n}\n\nself.onDataUpdated = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.update();\n }\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"tankSelectionType\":\"Static\",\"selectedShape\":\"Rectangle\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"function\",\"color\":\"#242770\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#242770\"},{\"from\":0,\"to\":20,\"color\":\"#E73535DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"Static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.18)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"units\":\"%\",\"widgetUnitsSource\":\"Static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#7A8BFF\"},{\"from\":0,\"to\":20,\"color\":\"#E27C7CDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"function\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"rgba(0,0,0,0.87)\"},{\"from\":0,\"to\":20,\"color\":\"#FF0000DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#FFFFFFC2\"},{\"from\":0,\"to\":100,\"color\":\"#FFEFEFDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"tooltipBackgroundColor\":{\"type\":\"constant\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"}},\"title\":\"Rectangle tank\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":true,\"borderRadius\":null,\"actions\":{}}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/vertical_capsule_tank.json b/application/src/main/data/json/system/widget_types/vertical_capsule_tank.json new file mode 100644 index 0000000000..74d6ae5d73 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/vertical_capsule_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "vertical_capsule_tank", + "name": "Vertical Capsule tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Vertical Capsule tank.", + "descriptor": { + "type": "latest", + "sizeX": 7.5, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.onInit();\n }\n}\n\nself.onDataUpdated = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.update();\n }\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"tankSelectionType\":\"Static\",\"selectedShape\":\"Vertical Capsule\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"function\",\"color\":\"#242770\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#242770\"},{\"from\":0,\"to\":20,\"color\":\"#E73535DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"Static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.18)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"units\":\"%\",\"widgetUnitsSource\":\"Static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#7A8BFF\"},{\"from\":0,\"to\":20,\"color\":\"#E27C7CDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"function\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"rgba(0,0,0,0.87)\"},{\"from\":0,\"to\":20,\"color\":\"#FF0000DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#FFFFFFC2\"},{\"from\":0,\"to\":100,\"color\":\"#FFEFEFDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"tooltipBackgroundColor\":{\"type\":\"constant\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"}},\"title\":\"Vertical Capsule tank\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":true,\"borderRadius\":null,\"actions\":{}}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/vertical_cylinder_tank.json b/application/src/main/data/json/system/widget_types/vertical_cylinder_tank.json new file mode 100644 index 0000000000..e11080654f --- /dev/null +++ b/application/src/main/data/json/system/widget_types/vertical_cylinder_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "vertical_cylinder_tank", + "name": "Vertical Cylinder tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Vertical Cylinder tank.", + "descriptor": { + "type": "latest", + "sizeX": 7.5, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.onInit();\n }\n}\n\nself.onDataUpdated = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.update();\n }\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"tankSelectionType\":\"Static\",\"selectedShape\":\"Vertical Cylinder\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"function\",\"color\":\"#242770\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#242770\"},{\"from\":0,\"to\":20,\"color\":\"#E73535DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"Static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.18)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"units\":\"%\",\"widgetUnitsSource\":\"Static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#7A8BFF\"},{\"from\":0,\"to\":20,\"color\":\"#E27C7CDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"function\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"rgba(0,0,0,0.87)\"},{\"from\":0,\"to\":20,\"color\":\"#FF0000DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#FFFFFFC2\"},{\"from\":0,\"to\":100,\"color\":\"#FFEFEFDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"tooltipBackgroundColor\":{\"type\":\"constant\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"}},\"title\":\"Vertical Cylinder tank\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":true,\"borderRadius\":null,\"actions\":{}}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/vertical_oval_tank.json b/application/src/main/data/json/system/widget_types/vertical_oval_tank.json new file mode 100644 index 0000000000..162c8cf552 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/vertical_oval_tank.json @@ -0,0 +1,24 @@ +{ + "fqn": "vertical_oval_tank", + "name": "Vertical Oval tank", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Widget indicates the level of liquid in Vertical Oval tank.", + "descriptor": { + "type": "latest", + "sizeX": 7.5, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.onInit();\n }\n}\n\nself.onDataUpdated = function() {\n if (self.ctx.$scope.liquidLevelWidget) {\n self.ctx.$scope.liquidLevelWidget.update();\n }\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true\n };\n};\n\nself.onDestroy = function() {\n}\n\nself.actionSources = function() { \n return { \n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false \n } \n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-liquid-level-card-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-liquid-level-card-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"return Math.floor(Math.random() * 101);\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"tankSelectionType\":\"Static\",\"selectedShape\":\"Vertical Oval\",\"shapeAttributeName\":\"tankShape\",\"tankColor\":{\"type\":\"function\",\"color\":\"#242770\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#242770\"},{\"from\":0,\"to\":20,\"color\":\"#E73535DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E73535DE';\\n }\\n}\\nreturn '#242770';\"},\"datasourceUnits\":\"%\",\"layout\":\"percentage\",\"volumeSource\":\"Static\",\"volumeConstant\":500,\"volumeAttributeName\":\"volume\",\"volumeUnits\":\"L\",\"volumeFont\":{\"family\":\"Roboto\",\"size\":14,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"volumeColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.18)\",\"colorFunction\":\"var temperature = value;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\"},\"units\":\"%\",\"widgetUnitsSource\":\"Static\",\"widgetUnitsAttributeName\":\"units\",\"liquidColor\":{\"type\":\"range\",\"color\":\"#7A8BFF\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#7A8BFF\"},{\"from\":0,\"to\":20,\"color\":\"#E27C7CDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":24,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"valueColor\":{\"type\":\"function\",\"color\":\"#000000DE\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"rgba(0,0,0,0.87)\"},{\"from\":0,\"to\":20,\"color\":\"#FF0000DE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FF0000DE';\\n }\\n}\\nreturn '#000000DE';\"},\"showBackgroundOverlay\":true,\"backgroundOverlayColor\":{\"type\":\"range\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[{\"from\":20,\"to\":100,\"color\":\"#FFFFFFC2\"},{\"from\":0,\"to\":100,\"color\":\"#FFEFEFDE\"}],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#FFEFEFDE';\\n }\\n}\\nreturn '#FFFFFFC2';\"},\"showTooltip\":true,\"showTooltipLevel\":true,\"tooltipUnits\":\"%\",\"tooltipLevelDecimals\":0,\"tooltipLevelFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipLevelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"showTooltipDate\":true,\"tooltipDateFormat\":{\"format\":null,\"lastUpdateAgo\":true,\"custom\":false},\"tooltipDateFont\":{\"family\":\"Roboto\",\"size\":13,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"100%\"},\"tooltipDateColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"},\"tooltipBackgroundColor\":{\"type\":\"constant\",\"color\":\"rgba(255, 255, 255, 0.76)\",\"rangeList\":[],\"colorFunction\":\"var percent = value;\\nif (typeof percent !== undefined) {\\n if (percent < 20) {\\n return '#E27C7CDE';\\n }\\n}\\nreturn '#7A8BFF';\"}},\"title\":\"Vertical Oval tank\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"configMode\":\"basic\",\"titleFont\":{\"family\":\"Roboto\",\"size\":16,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"1.5\"},\"titleColor\":\"rgba(0, 0, 0, 0.87)\",\"showTitleIcon\":false,\"titleIcon\":\"water_drop\",\"iconColor\":\"#5469FF\",\"decimals\":0,\"enableDataExport\":false,\"enableFullscreen\":true,\"borderRadius\":null,\"actions\":{}}" + }, + "externalId": null, + "tags": null +} \ No newline at end of file diff --git a/ui-ngx/src/app/core/http/attribute.service.ts b/ui-ngx/src/app/core/http/attribute.service.ts index 9022a47eef..3ca29e425e 100644 --- a/ui-ngx/src/app/core/http/attribute.service.ts +++ b/ui-ngx/src/app/core/http/attribute.service.ts @@ -32,12 +32,18 @@ export class AttributeService { private http: HttpClient ) { } - public getEntityAttributes(entityId: EntityId, attributeScope: AttributeScope, + public getEntityAttributes(entityId: EntityId, attributeScope?: AttributeScope, keys?: Array, config?: RequestConfig): Observable> { - let url = `/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/values/attributes/${attributeScope}`; + let url = `/api/plugins/telemetry/${entityId.entityType}/${entityId.id}/values/attributes`; + + if (attributeScope) { + url += `/${attributeScope}`; + } + if (keys && keys.length) { url += `?keys=${keys.join(',')}`; } + return this.http.get>(url, defaultHttpOptionsFromConfig(config)); } diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/basic-widget-config.module.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/basic-widget-config.module.ts index c26cf43542..f2e90279ee 100644 --- a/ui-ngx/src/app/modules/home/components/widget/config/basic/basic-widget-config.module.ts +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/basic-widget-config.module.ts @@ -70,6 +70,9 @@ import { import { ProgressBarBasicConfigComponent } from '@home/components/widget/config/basic/cards/progress-bar-basic-config.component'; +import { + LiquidLevelCardBasicConfigComponent +} from '@home/components/widget/config/basic/cards/liquid-level-card-basic-config.component'; @NgModule({ declarations: [ @@ -91,7 +94,8 @@ import { WindSpeedDirectionBasicConfigComponent, SignalStrengthBasicConfigComponent, ValueChartCardBasicConfigComponent, - ProgressBarBasicConfigComponent + ProgressBarBasicConfigComponent, + LiquidLevelCardBasicConfigComponent ], imports: [ CommonModule, @@ -117,7 +121,8 @@ import { WindSpeedDirectionBasicConfigComponent, SignalStrengthBasicConfigComponent, ValueChartCardBasicConfigComponent, - ProgressBarBasicConfigComponent + ProgressBarBasicConfigComponent, + LiquidLevelCardBasicConfigComponent ] }) export class BasicWidgetConfigModule { @@ -137,5 +142,6 @@ export const basicWidgetConfigComponentsMap: {[key: string]: Type + + + + + +
+
widget-config.appearance
+
+ + {{ 'widgets.liquid-level-card.title' | translate }} + +
+ + + + + + + +
+
+
+ + {{ 'widgets.liquid-level-card.icon' | translate }} + +
+ + + + + + + + +
+
+
+
+
widgets.liquid-level-card.shape
+ + + {{ 'widgets.liquid-level-card.static' | translate }} + + + {{ 'widgets.liquid-level-card.attribute' | translate }} + + +
+ + + {{ shapesTranslationMap.get(shape) | translate }} + + +
+
widgets.liquid-level-card.shape-attribute-name
+ + +
+
+
widgets.liquid-level-card.shape-by-attribute
+
+
+
+
+ + + {{ levelCardLayoutTranslationMap.get(layout) | translate }} + + +
+
+
widgets.liquid-level-card.units
+
+
widgets.liquid-level-card.datasource-units
+ + +
+
+
widgets.liquid-level-card.widget-units
+
+ + + + {{ option }} + + + + + + + +
+
+
+
widgets.liquid-level-card.total-volume
+
+ + + + {{ option }} + + + + + + + warning + + + + + + +
+
+
+
+
widgets.liquid-level-card.color-and-font
+
+
widgets.liquid-level-card.tank-color
+ + +
+
+
widgets.liquid-level-card.liquid-color
+ + +
+
+
widgets.liquid-level-card.value
+
+ + + + + + + +
+
+
+
widgets.liquid-level-card.total-volume
+
+ + + + +
+
+
+ + {{ 'widgets.liquid-level-card.background-overlay' | translate }} + + + +
+
+
+ + + + + {{ 'widget-config.tooltip' | translate }} + + + + +
+ + {{ 'widgets.liquid-level-card.level' | translate }} + +
+ + + + +
widget-config.decimals-suffix
+
+ + + + +
+
+
+ + {{ 'widgets.value-card.date' | translate }} + +
+ + + + + +
+
+
+
widgets.liquid-level-card.tooltip-background
+ + +
+
+
widgets.liquid-level-card.background-blur
+ + +
px
+
+
+
+
+
+
+
widget-config.card-appearance
+
+
{{ 'widgets.background.background' | translate }}
+ + +
+
+
widget-config.show-card-buttons
+ + {{ 'widget-config.data-export' | translate }} + {{ 'fullscreen.fullscreen' | translate }} + +
+
+
{{ 'widget-config.card-border-radius' | translate }}
+ + + +
+
+ + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.ts new file mode 100644 index 0000000000..47852514e8 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.ts @@ -0,0 +1,671 @@ +/// +/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// +/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// +/// NOTICE: All information contained herein is, and remains +/// the property of ThingsBoard, Inc. and its suppliers, +/// if any. The intellectual and technical concepts contained +/// herein are proprietary to ThingsBoard, Inc. +/// and its suppliers and may be covered by U.S. and Foreign Patents, +/// patents in process, and are protected by trade secret or copyright law. +/// +/// Dissemination of this information or reproduction of this material is strictly forbidden +/// unless prior written permission is obtained from COMPANY. +/// +/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, +/// managers or contractors who have executed Confidentiality and Non-disclosure agreements +/// explicitly covering such access. +/// +/// The copyright notice above does not evidence any actual or intended publication +/// or disclosure of this source code, which includes +/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. +/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, +/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT +/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, +/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. +/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION +/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, +/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// + +import { ChangeDetectorRef, Component, Injector, ViewChild } from '@angular/core'; +import { AbstractControl, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { BasicWidgetConfigComponent } from '@home/components/widget/config/widget-config.component.models'; +import { WidgetConfigComponentData } from '@home/models/widget-component.models'; +import { + DataKey, + Datasource, + datasourcesHasAggregation, + datasourcesHasOnlyComparisonAggregation, + DatasourceType, + WidgetConfig, +} from '@shared/models/widget.models'; +import { WidgetConfigComponent } from '@home/components/widget/widget-config.component'; +import { DataKeyType } from '@shared/models/telemetry/telemetry.models'; +import { + getTimewindowConfig, + setTimewindowConfig +} from '@home/components/widget/config/timewindow-config-panel.component'; +import { formatValue, isDefined, isUndefined } from '@core/utils'; +import { + cssSizeToStrSize, + DateFormatProcessor, + DateFormatSettings, + resolveCssSize +} from '@shared/models/widget-settings.models'; +import { + CapacityUnits, + createAbsoluteLayout, + createPercentLayout, + levelCardDefaultSettings, + LevelCardLayout, + levelCardLayoutTranslations, + LevelCardWidgetSettings, + LevelSelectOptions, + optionsFilter, + Shapes, + shapesTranslations, + svgMapping +} from '@home/components/widget/lib/indicator/liquid-level-widget.models'; +import { UnitsType } from '@shared/models/unit.models'; +import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; +import { ImageCardsSelectComponent } from '@home/components/widget/lib/settings/common/image-cards-select.component'; +import { map, publishReplay, refCount, tap } from 'rxjs/operators'; +import { forkJoin, Observable, of } from 'rxjs'; +import { ResourcesService } from '@core/services/resources.service'; +import { UnitInputComponent } from '@shared/components/unit-input.component'; +import { UtilsService } from '@core/services/utils.service'; + +@Component({ + selector: 'liquid-level-card-basic-config', + templateUrl: './liquid-level-card-basic-config.component.html', + styleUrls: ['../basic-config.scss'] +}) +export class LiquidLevelCardBasicConfigComponent extends BasicWidgetConfigComponent { + + @ViewChild('layoutsImageCardsSelect', { static: false }) layoutsImageCardsSelect: ImageCardsSelectComponent; + + @ViewChild('shapesImageCardsSelect', { static: false }) shapesImageCardsSelect: ImageCardsSelectComponent; + + @ViewChild('widgetUnits', { static: false }) widgetUnits: UnitInputComponent; + + public get datasource(): Datasource { + if (this.widgetConfig.config.datasources && this.widgetConfig.config.datasources) { + return this.widgetConfig.config.datasources[0]; + } else { + return null; + } + } + + public get volumeInput(): boolean { + const datasourceUnits = this.levelCardWidgetConfigForm.get('datasourceUnits').value; + const layout: LevelCardLayout = this.levelCardWidgetConfigForm.get('layout').value; + const units = this.levelCardWidgetConfigForm.get('units').value; + return !(datasourceUnits === CapacityUnits.percent && layout !== LevelCardLayout.absolute + || (datasourceUnits === CapacityUnits.percent && units === CapacityUnits.percent)); + } + + public get widgetUnitsInput(): boolean { + const layout: LevelCardLayout = this.levelCardWidgetConfigForm.get('layout').value; + + if (layout === LevelCardLayout.absolute) { + const datasourceUnits = this.levelCardWidgetConfigForm.get('datasourceUnits').value; + return !(datasourceUnits === CapacityUnits.percent); + } + return false; + } + + public get displayTimewindowConfig(): boolean { + const datasources = this.levelCardWidgetConfigForm.get('datasources').value; + return datasourcesHasAggregation(datasources); + } + + public onlyHistoryTimewindow(): boolean { + const datasources = this.levelCardWidgetConfigForm.get('datasources').value; + return datasourcesHasOnlyComparisonAggregation(datasources); + } + + levelCardLayouts = LevelCardLayout; + + shapes: Shapes[] = []; + + levelOptions = LevelSelectOptions; + + shapeSelectOptions = LevelSelectOptions; + + levelCardLayoutTranslationMap = levelCardLayoutTranslations; + + shapesTranslationMap = shapesTranslations; + shapesImageMap: Map = new Map(); + + unitsType = UnitsType; + + levelCardWidgetConfigForm: UntypedFormGroup; + + valuePreviewFn = this._valuePreviewFn.bind(this); + + tooltipValuePreviewFn = this._tooltipValuePreviewFn.bind(this); + + totalVolumeValuePreviewFn = this._totalVolumeValuePreviewFn.bind(this); + + datePreviewFn = this._datePreviewFn.bind(this); + + keySearchText: string; + + latestKeySearchTextResult: Array; + + datasources: Array; + + functionTypeKeys: Array = []; + + lastKeysId: string; + + lastFetchedKeys: Array; + + constructor(protected store: Store, + protected widgetConfigComponent: WidgetConfigComponent, + private cd: ChangeDetectorRef, + private $injector: Injector, + private fb: UntypedFormBuilder, + private resourcesService: ResourcesService, + private sanitizer: DomSanitizer, + private utils: UtilsService) { + super(store, widgetConfigComponent); + } + + protected configForm(): UntypedFormGroup { + return this.levelCardWidgetConfigForm; + } + + protected setupConfig(widgetConfig: WidgetConfigComponentData) { + this.shapes = Object.values(Shapes); + this.createSvgShapesMapping(); + + for (const type of this.utils.getPredefinedFunctionsList()) { + this.functionTypeKeys.push({ + name: type, + type: DataKeyType.function + }); + } + super.setupConfig(widgetConfig); + } + + protected setupDefaults(configData: WidgetConfigComponentData) { + this.setupDefaultDatasource(configData, [{ name: 'fuelLevel', label: 'Fuel Level', type: DataKeyType.timeseries }]); + } + + protected onConfigSet(configData: WidgetConfigComponentData) { + const settings: LevelCardWidgetSettings = {...configData.config, ...levelCardDefaultSettings(), ...(configData.config.settings || {})}; + const iconSize = resolveCssSize(configData.config.iconSize); + + this.levelCardWidgetConfigForm = this.fb.group({ + timewindowConfig: [getTimewindowConfig(configData.config), []], + datasources: [configData.config.datasources, []], + + tankSelectionType: [settings.tankSelectionType, []], + selectedShape: [settings.selectedShape, [Validators.required]], + shapeAttributeName: [settings.shapeAttributeName, [Validators.required]], + tankColor: [settings.tankColor, []], + datasourceUnits: [settings.datasourceUnits, [Validators.required]], + + layout: [settings.layout, []], + showTitle: [configData.config.showTitle, []], + title: [settings.title, []], + titleFont: [settings.titleFont, []], + titleColor: [settings.titleColor, []], + showTitleIcon: [configData.config.showTitleIcon, []], + iconSize: [iconSize[0], [Validators.min(0)]], + iconSizeUnit: [iconSize[1], []], + titleIcon: [settings.titleIcon, []], + iconColor: [settings.iconColor, []], + volumeSource: [settings.volumeSource, []], + volumeConstant: [settings.volumeConstant, [Validators.required]], + volumeAttributeName: [settings.volumeAttributeName, [Validators.required]], + volumeUnits: [settings.volumeUnits, [Validators.required]], + volumeFont: [settings.volumeFont, []], + volumeColor: [settings.volumeColor, []], + units: [settings.units, [Validators.required]], + widgetUnitsSource: [settings.widgetUnitsSource, [Validators.required]], + widgetUnitsAttributeName: [settings.widgetUnitsAttributeName, [Validators.required]], + decimals: [settings.decimals, []], + liquidColor: [settings.liquidColor, []], + valueFont: [settings.valueFont, []], + valueColor: [settings.valueColor, []], + showBackgroundOverlay: [settings.showBackgroundOverlay, []], + backgroundOverlayColor: [settings.backgroundOverlayColor, []], + + showTooltip: [settings.showTooltip, []], + showTooltipLevel: [settings.showTooltipLevel, []], + tooltipUnits: [settings.tooltipUnits, []], + tooltipLevelDecimals: [settings.tooltipLevelDecimals, []], + tooltipLevelFont: [settings.tooltipLevelFont, []], + tooltipLevelColor: [settings.tooltipLevelColor, []], + showTooltipDate: [settings.showTooltipDate, []], + tooltipDateFormat: [settings.tooltipDateFormat, []], + tooltipDateFont: [settings.tooltipDateFont, []], + tooltipDateColor: [settings.tooltipDateColor, []], + tooltipBackgroundColor: [settings.tooltipBackgroundColor, []], + tooltipBackgroundBlur: [settings.tooltipBackgroundBlur, []], + + backgroundColor: [settings.backgroundColor, []], + cardButtons: [this.getCardButtons(configData.config), []], + borderRadius: [configData.config.borderRadius, []], + + actions: [configData.config.actions || {}, []] + }); + + this.levelCardWidgetConfigForm.get('selectedShape').valueChanges.subscribe((shape) => { + this.cd.detectChanges(); + this.layoutsImageCardsSelect?.imageCardsSelectOptions.notifyOnChanges(); + }); + } + + protected prepareOutputConfig(config: any): WidgetConfigComponentData { + setTimewindowConfig(this.widgetConfig.config, config.timewindowConfig); + this.widgetConfig.config.datasources = config.datasources; + + this.widgetConfig.config.settings = this.widgetConfig.config.settings || {}; + + this.widgetConfig.config.settings.tankSelectionType = config.tankSelectionType; + this.widgetConfig.config.settings.selectedShape = config.selectedShape; + this.widgetConfig.config.settings.shapeAttributeName = config.shapeAttributeName; + this.widgetConfig.config.settings.tankColor = config.tankColor; + this.widgetConfig.config.settings.datasourceUnits = config.datasourceUnits; + + this.widgetConfig.config.settings.layout = config.layout; + this.widgetConfig.config.showTitle = config.showTitle; + this.widgetConfig.config.title = config.title; + this.widgetConfig.config.titleFont = config.titleFont; + this.widgetConfig.config.titleColor = config.titleColor; + this.widgetConfig.config.showTitleIcon = config.showTitleIcon; + this.widgetConfig.config.iconSize = cssSizeToStrSize(config.iconSize, config.iconSizeUnit); + this.widgetConfig.config.titleIcon = config.titleIcon; + this.widgetConfig.config.iconColor = config.iconColor; + this.widgetConfig.config.settings.volumeSource = config.volumeSource; + this.widgetConfig.config.settings.volumeConstant = config.volumeConstant; + this.widgetConfig.config.settings.volumeAttributeName = config.volumeAttributeName; + this.widgetConfig.config.settings.volumeUnits = config.volumeUnits; + this.widgetConfig.config.settings.volumeFont = config.volumeFont; + this.widgetConfig.config.settings.volumeColor = config.volumeColor; + this.widgetConfig.config.settings.units = config.units; + this.widgetConfig.config.settings.widgetUnitsSource = config.widgetUnitsSource; + this.widgetConfig.config.settings.widgetUnitsAttributeName = config.widgetUnitsAttributeName; + this.widgetConfig.config.decimals = config.decimals; + this.widgetConfig.config.settings.liquidColor = config.liquidColor; + this.widgetConfig.config.settings.valueFont = config.valueFont; + this.widgetConfig.config.settings.valueColor = config.valueColor; + this.widgetConfig.config.settings.showBackgroundOverlay = config.showBackgroundOverlay; + this.widgetConfig.config.settings.backgroundOverlayColor = config.backgroundOverlayColor; + + this.widgetConfig.config.settings.showTooltip = config.showTooltip; + this.widgetConfig.config.settings.showTooltipLevel = config.showTooltipLevel; + this.widgetConfig.config.settings.tooltipUnits = config.tooltipUnits; + this.widgetConfig.config.settings.tooltipLevelDecimals = config.tooltipLevelDecimals; + this.widgetConfig.config.settings.tooltipLevelFont = config.tooltipLevelFont; + this.widgetConfig.config.settings.tooltipLevelColor = config.tooltipLevelColor; + this.widgetConfig.config.settings.showTooltipDate = config.showTooltipDate; + this.widgetConfig.config.settings.tooltipDateFormat = config.tooltipDateFormat; + this.widgetConfig.config.settings.tooltipDateFont = config.tooltipDateFont; + this.widgetConfig.config.settings.tooltipDateColor = config.tooltipDateColor; + this.widgetConfig.config.settings.tooltipBackgroundColor = config.tooltipBackgroundColor; + this.widgetConfig.config.settings.tooltipBackgroundBlur = config.tooltipBackgroundBlur; + + this.widgetConfig.config.backgroundColor = config.backgroundColor; + this.setCardButtons(config.cardButtons, this.widgetConfig.config); + this.widgetConfig.config.borderRadius = config.borderRadius; + + this.widgetConfig.config.actions = config.actions; + return this.widgetConfig; + } + + protected validatorTriggers(): string[] { + return [ + 'showBackgroundOverlay', 'showTooltip', 'showTooltipLevel', + 'tankSelectionType', 'datasourceUnits', + 'showTitleIcon', 'volumeSource', + 'showTooltipDate', 'units', + 'layout', 'showTitle', + 'widgetUnitsSource' + ]; + } + + protected updateValidators(emitEvent: boolean, trigger?: string) { + const emitEventFields = []; + + const datasourceUnits: string = this.levelCardWidgetConfigForm.get('datasourceUnits').value; + const layout: LevelCardLayout = this.levelCardWidgetConfigForm.get('layout').value; + const showTitleIcon: AbstractControl = this.levelCardWidgetConfigForm.get('showTitleIcon'); + const volumeSource: AbstractControl = this.levelCardWidgetConfigForm.get('volumeSource'); + const units: AbstractControl = this.levelCardWidgetConfigForm.get('units'); + const tooltipUnits: AbstractControl = this.levelCardWidgetConfigForm.get('tooltipUnits'); + const widgetUnitsSource: AbstractControl = this.levelCardWidgetConfigForm.get('widgetUnitsSource'); + const showTooltipLevel: AbstractControl = this.levelCardWidgetConfigForm.get('showTooltipLevel'); + const showTooltipDate: AbstractControl = this.levelCardWidgetConfigForm.get('showTooltipDate'); + const showTooltip: boolean = this.levelCardWidgetConfigForm.get('showTooltip').value; + + if (trigger === 'tankSelectionType') { + const tankSelectionType: LevelSelectOptions = this.levelCardWidgetConfigForm.get('tankSelectionType').value; + if (tankSelectionType === LevelSelectOptions.static) { + this.levelCardWidgetConfigForm.get('selectedShape').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('shapeAttributeName').disable({emitEvent: false}); + } else { + this.levelCardWidgetConfigForm.get('selectedShape').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('shapeAttributeName').enable({emitEvent: false}); + } + emitEventFields.push('selectedShape', 'shapeAttributeName'); + } + + if (trigger === 'datasourceUnits' || trigger === 'layout' || trigger === 'units') { + if (datasourceUnits === CapacityUnits.percent && (layout !== LevelCardLayout.absolute) + || (datasourceUnits === CapacityUnits.percent && units?.value === CapacityUnits.percent) + ) { + volumeSource.disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('volumeConstant').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('volumeAttributeName').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('volumeUnits').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('volumeFont').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('volumeColor').disable({emitEvent: false}); + } else { + volumeSource.enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('volumeConstant').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('volumeAttributeName').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('volumeUnits').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('volumeFont').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('volumeColor').enable({emitEvent: false}); + } + emitEventFields.push('volumeSource', 'volumeConstant', 'volumeAttributeName', 'volumeFont', 'volumeColor', 'volumeUnits'); + } else if (trigger === 'volumeSource') { + if((datasourceUnits !== CapacityUnits.percent) || + (layout === LevelCardLayout.absolute && units?.value !== CapacityUnits.percent)) { + if (volumeSource.value === LevelSelectOptions.static) { + this.levelCardWidgetConfigForm.get('volumeConstant').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('volumeAttributeName').disable({emitEvent: false}); + } else { + this.levelCardWidgetConfigForm.get('volumeConstant').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('volumeAttributeName').enable({emitEvent: false}); + } + emitEventFields.push('volumeConstant', 'volumeAttributeName'); + } + } + + if (trigger === 'showTitle') { + const showTitle: boolean = this.levelCardWidgetConfigForm.get('showTitle').value; + if (showTitle) { + this.levelCardWidgetConfigForm.get('title').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('titleFont').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('titleColor').enable({emitEvent: false}); + showTitleIcon.enable({emitEvent: false}); + } else { + this.levelCardWidgetConfigForm.get('title').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('titleFont').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('titleColor').disable({emitEvent: false}); + showTitleIcon.disable({emitEvent: false}); + } + emitEventFields.push('title', 'titleFont', 'titleColor', 'showTitleIcon'); + } + + if (showTitleIcon?.value) { + this.levelCardWidgetConfigForm.get('titleIcon').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconColor').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconSize').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconSizeUnit').enable({emitEvent: false}); + } else { + this.levelCardWidgetConfigForm.get('titleIcon').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconColor').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconSize').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('iconSizeUnit').disable({emitEvent: false}); + } + emitEventFields.push('titleIcon', 'iconColor', 'iconSize', 'iconSizeUnit'); + + if (trigger === 'showBackgroundOverlay') { + const showBackgroundOverlay: boolean = this.levelCardWidgetConfigForm.get('showBackgroundOverlay').value; + if (showBackgroundOverlay) { + this.levelCardWidgetConfigForm.get('backgroundOverlayColor').enable({emitEvent: false}); + } else { + this.levelCardWidgetConfigForm.get('backgroundOverlayColor').disable({emitEvent: false}); + } + emitEventFields.push('backgroundOverlayColor'); + } + + if (trigger === 'showTooltip') { + if (showTooltip) { + showTooltipLevel.enable({emitEvent: false}); + showTooltipDate.enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('tooltipBackgroundColor').enable(); + this.levelCardWidgetConfigForm.get('tooltipBackgroundBlur').enable(); + } else { + showTooltipLevel.disable({emitEvent: false}); + showTooltipDate.disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('tooltipBackgroundColor').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('tooltipBackgroundBlur').disable({emitEvent: false}); + } + emitEventFields.push('showTooltipLevel', 'showTooltipDate', 'tooltipBackgroundColor', 'tooltipBackgroundBlur'); + } + + if (trigger === 'showTooltipLevel') { + if (showTooltipLevel?.value && !showTooltipLevel.disabled) { + tooltipUnits.enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('tooltipLevelDecimals').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('tooltipLevelFont').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('tooltipLevelColor').enable({emitEvent: false}); + } else { + tooltipUnits.disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('tooltipLevelDecimals').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('tooltipLevelFont').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('tooltipLevelColor').disable({emitEvent: false}); + } + emitEventFields.push('tooltipUnits', 'tooltipLevelDecimals', 'tooltipLevelFont', 'tooltipLevelColor'); + } + + if (trigger === 'showTooltipDate') { + if (showTooltipDate?.value && !showTooltipDate.disabled) { + this.levelCardWidgetConfigForm.get('tooltipDateFormat').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('tooltipDateFont').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('tooltipDateColor').enable({emitEvent: false}); + } else { + this.levelCardWidgetConfigForm.get('tooltipDateFormat').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('tooltipDateFont').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('tooltipDateColor').disable({emitEvent: false}); + } + emitEventFields.push('tooltipDateFormat', 'tooltipDateFont', 'tooltipDateColor'); + } + + if (trigger === 'layout' || trigger === 'datasourceUnits') { + if (layout === LevelCardLayout.simple) { + units.disable({emitEvent: false}); + tooltipUnits.disable({emitEvent: false}); + widgetUnitsSource.setValue(LevelSelectOptions.static, {emitEvent: false}); + widgetUnitsSource.disable({emitEvent: false}); + + this.levelCardWidgetConfigForm.get('decimals').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('valueFont').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('valueColor').disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('widgetUnitsAttributeName').disable({emitEvent: false}); + } else if (layout === LevelCardLayout.percentage) { + if (units.value !== CapacityUnits.percent) { + units.setValue(CapacityUnits.percent, {emitEvent: false}); + } + widgetUnitsSource.setValue(LevelSelectOptions.static, {emitEvent: false}); + units.disable({emitEvent: false}); + widgetUnitsSource.disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('widgetUnitsAttributeName').disable({emitEvent: false}); + + if (tooltipUnits.value !== CapacityUnits.percent) { + tooltipUnits.setValue(CapacityUnits.percent, {emitEvent: false}); + } + tooltipUnits.disable({emitEvent: false}); + } else { + units.enable({emitEvent: false}); + tooltipUnits.enable({emitEvent: false}); + widgetUnitsSource.enable({emitEvent: false}); + + this.levelCardWidgetConfigForm.get('decimals').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('valueFont').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('valueColor').enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('widgetUnitsAttributeName').enable({emitEvent: false}); + } + emitEventFields.push('units', 'tooltipUnits', 'decimals', 'valueFont', 'valueColor', 'widgetUnitsSource', 'widgetUnitsAttributeName'); + } else if (trigger === 'widgetUnitsSource') { + if (layout !== LevelCardLayout.percentage) { + if (widgetUnitsSource.value === LevelSelectOptions.static) { + units.enable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('widgetUnitsAttributeName').disable({emitEvent: false}); + } else { + units.disable({emitEvent: false}); + this.levelCardWidgetConfigForm.get('widgetUnitsAttributeName').enable({emitEvent: false}); + } + emitEventFields.push('units', 'widgetUnitsAttributeName'); + } + } + + for (const controlKey in this.levelCardWidgetConfigForm.controls) { + if (emitEventFields.includes(controlKey)) { + this.levelCardWidgetConfigForm.controls[controlKey].updateValueAndValidity({emitEvent}); + } + } + } + + private getCardButtons(config: WidgetConfig): string[] { + const buttons: string[] = []; + if (isUndefined(config.enableDataExport) || config.enableDataExport) { + buttons.push('dataExport'); + } + if (isUndefined(config.enableFullscreen) || config.enableFullscreen) { + buttons.push('fullscreen'); + } + return buttons; + } + + private setCardButtons(buttons: string[], config: WidgetConfig) { + config.enableDataExport = buttons.includes('dataExport'); + config.enableFullscreen = buttons.includes('fullscreen'); + } + + private _valuePreviewFn(): string { + const units: string = this.levelCardWidgetConfigForm.get('units').value; + const decimals: number = this.levelCardWidgetConfigForm.get('decimals').value; + return formatValue(22, decimals, units, true); + } + + private _tooltipValuePreviewFn() { + const units: string = this.levelCardWidgetConfigForm.get('tooltipUnits').value; + const decimals: number = this.levelCardWidgetConfigForm.get('tooltipLevelDecimals').value; + return formatValue(32, decimals, units, true); + } + + private _totalVolumeValuePreviewFn() { + const value = this.levelCardWidgetConfigForm.get('volumeConstant').value; + const datasourceUnits = this.levelCardWidgetConfigForm.get('datasourceUnits').value; + const decimals: number = this.widgetConfig.config.decimals; + let units: string = this.widgetConfig.config.units; + + if (datasourceUnits !== CapacityUnits.percent) { + units = datasourceUnits; + } + + return formatValue((isDefined(value) ? value : 500), decimals, units, true); + } + + private _datePreviewFn(): string { + const dateFormat: DateFormatSettings = this.levelCardWidgetConfigForm.get('tooltipDateFormat').value; + const processor = DateFormatProcessor.fromSettings(this.$injector, dateFormat); + processor.update(Date.now()); + return processor.formatted; + } + + private createSvgShapesMapping(): void { + const obsArray: Array> = []; + for (const shape of this.shapes) { + const svgUrl = svgMapping.get(shape).svg; + + const obs = this.resourcesService.loadJsonResource(svgUrl).pipe( + map((svg) => ({svg, shape})) + ); + + obsArray.push(obs); + } + + forkJoin(obsArray).subscribe((svgData) => { + for (const data of svgData) { + this.shapesImageMap.set(data.shape, data.svg); + } + + this.cd.detectChanges(); + this.layoutsImageCardsSelect?.imageCardsSelectOptions.notifyOnChanges(); + this.shapesImageCardsSelect?.imageCardsSelectOptions.notifyOnChanges(); + }); + } + + public createShapeLayout(svg: string, layout: LevelCardLayout): SafeUrl { + if (svg && layout) { + const parser = new DOMParser(); + const svgImage = parser.parseFromString(svg, 'image/svg+xml'); + + if (layout === this.levelCardLayouts.simple) { + svgImage.querySelector('.container-overlay').remove(); + } else if (layout === this.levelCardLayouts.percentage) { + svgImage.querySelector('.absolute-overlay').remove(); + svgImage.querySelector('.percentage-value-container').innerHTML = createPercentLayout(); + } else { + svgImage.querySelector('.absolute-value-container').innerHTML = createAbsoluteLayout(); + svgImage.querySelector('.percentage-overlay').remove(); + } + + const encodedSvg = encodeURIComponent(svgImage.documentElement.outerHTML); + + return this.sanitizer.bypassSecurityTrustResourceUrl(`data:image/svg+xml,${encodedSvg}`); + } + } + + public isRequired(formControlName: string): boolean { + return this.levelCardWidgetConfigForm.get(formControlName)?.hasValidator(Validators.required); + } + + public fetchOptions(searchText: string): Observable> { + if (this.keySearchText !== searchText || !this.lastFetchedKeys) { + this.keySearchText = searchText; + const dataKeyFilter = optionsFilter(this.keySearchText); + return this.getKeys().pipe( + tap(res => this.lastFetchedKeys !== res ? this.lastFetchedKeys = res : []), + map(name => name?.filter(dataKeyFilter).map(key => key.name)), + tap(res => this.latestKeySearchTextResult = res) + ); + } + return of(this.latestKeySearchTextResult); + } + + private getKeys(): Observable> { + let fetchObservable: Observable>; + const callbacks = this.widgetConfigComponent.widgetConfigCallbacks; + if (this.datasource?.type === DatasourceType.function) { + fetchObservable = of(this.functionTypeKeys); + } else if (this.datasource?.type === DatasourceType.entity && this.datasource?.entityAliasId || + this.datasource?.type === DatasourceType.device && this.datasource?.deviceId) { + if (this.datasource?.type === DatasourceType.device) { + if (this.lastKeysId !== this.datasource?.deviceId || !this.lastFetchedKeys) { + this.lastKeysId = this.datasource.deviceId; + fetchObservable = callbacks.fetchEntityKeysForDevice(this.datasource?.deviceId, [DataKeyType.attribute]); + } else { + fetchObservable = of(this.lastFetchedKeys); + } + } else { + if (this.lastKeysId !== this.datasource?.entityAliasId || !this.lastFetchedKeys) { + this.lastKeysId = this.datasource.entityAliasId; + fetchObservable = callbacks.fetchEntityKeys(this.datasource?.entityAliasId, [DataKeyType.attribute]); + } else { + fetchObservable = of(this.lastFetchedKeys); + } + } + } else { + this.lastKeysId = null; + fetchObservable = of([]); + } + return fetchObservable.pipe( + publishReplay(1), + refCount() + ); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/config/widget-config.component.models.ts b/ui-ngx/src/app/modules/home/components/widget/config/widget-config.component.models.ts index cfa0cedbee..160331de3a 100644 --- a/ui-ngx/src/app/modules/home/components/widget/config/widget-config.component.models.ts +++ b/ui-ngx/src/app/modules/home/components/widget/config/widget-config.component.models.ts @@ -25,7 +25,6 @@ import { AppState } from '@core/core.state'; import { AbstractControl, UntypedFormGroup } from '@angular/forms'; import { DataKey, DatasourceType, KeyInfo, WidgetConfigMode } from '@shared/models/widget.models'; import { WidgetConfigComponent } from '@home/components/widget/widget-config.component'; -import { DataKeyType } from '@shared/models/telemetry/telemetry.models'; import { isDefinedAndNotNull } from '@core/utils'; export type WidgetConfigCallbacks = DatasourceCallbacks & WidgetActionCallbacks; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts new file mode 100644 index 0000000000..0c4b34ca6c --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts @@ -0,0 +1,442 @@ +/// +/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// +/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// +/// NOTICE: All information contained herein is, and remains +/// the property of ThingsBoard, Inc. and its suppliers, +/// if any. The intellectual and technical concepts contained +/// herein are proprietary to ThingsBoard, Inc. +/// and its suppliers and may be covered by U.S. and Foreign Patents, +/// patents in process, and are protected by trade secret or copyright law. +/// +/// Dissemination of this information or reproduction of this material is strictly forbidden +/// unless prior written permission is obtained from COMPANY. +/// +/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, +/// managers or contractors who have executed Confidentiality and Non-disclosure agreements +/// explicitly covering such access. +/// +/// The copyright notice above does not evidence any actual or intended publication +/// or disclosure of this source code, which includes +/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. +/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, +/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT +/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, +/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. +/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION +/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, +/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// + +import { + ColorSettings, + constantColor, cssTextFromInlineStyle, + DateFormatSettings, + Font, + lastUpdateAgoDateFormat +} from '@shared/models/widget-settings.models'; +import { DataKey, WidgetConfig } from '@shared/models/widget.models'; +import { DataKeyType } from '@shared/models/telemetry/telemetry.models'; +import { Observable, of } from 'rxjs'; +import { singleEntityFilterFromDeviceId } from '@shared/models/query/query.models'; +import { EntityType } from '@shared/models/entity-type.models'; +import { catchError, mergeMap } from 'rxjs/operators'; +import { EntityService } from '@core/http/entity.service'; +import { IAliasController } from '@core/api/widget-api.models'; + +export interface SvgInfo { + svg: string; + limits: SvgLimits; +} + +export interface SvgLimits { + min: number; + max: number; +} + +export interface LevelCardWidgetSettings extends WidgetConfig { + tankSelectionType: LevelSelectOptions; + selectedShape: Shapes; + shapeAttributeName: string; + tankColor: ColorSettings; + datasourceUnits: CapacityUnits; + layout: LevelCardLayout; + volumeSource: LevelSelectOptions; + volumeConstant: number; + volumeAttributeName: string; + volumeUnits: CapacityUnits; + volumeFont: Font; + volumeColor: ColorSettings; + liquidColor: ColorSettings; + valueFont: Font; + widgetUnitsSource: LevelSelectOptions; + widgetUnitsAttributeName: string; + valueColor: ColorSettings; + showBackgroundOverlay: boolean; + backgroundOverlayColor: ColorSettings; + showTooltip: boolean; + showTooltipLevel: boolean; + tooltipUnits: CapacityUnits; + tooltipLevelDecimals: number; + tooltipLevelFont: Font; + tooltipLevelColor: ColorSettings; + showTooltipDate: boolean; + tooltipDateFormat: DateFormatSettings; + tooltipDateFont: Font; + tooltipDateColor: ColorSettings; + tooltipBackgroundColor: ColorSettings; + tooltipBackgroundBlur: number; +} + +export enum Shapes { + vOval = 'Vertical Oval', + vCylinder = 'Vertical Cylinder', + vCapsule = 'Vertical Capsule', + rectangle = 'Rectangle', + hOval = 'Horizontal Oval', + hEllipse = 'Horizontal Ellipse', + hDishEnds = 'Horizontal Dish Ends', + hCylinder = 'Horizontal Cylinder', + hCapsule = 'Horizontal Capsule', + hElliptical_2_1 = 'Horizontal 2:1 Elliptical' +} + +export enum CapacityUnits { + percent = '%', + liters = 'L', + cubicMillimeter = 'mm³', + cubicCentimeter = 'cm³', + cubicMeter = 'm³', + cubicKilometer = 'km³', + milliliter = 'mL', + hectoliter = 'hl', + cubicInch = 'in³', + cubicFoot = 'ft³', + cubicYard = 'yd³', + fluidOunce = 'fl-oz', + pint = 'pt', + quart = 'qt', + gallon = 'gal', + oilBarrels = 'bbl' +} + +export enum LevelCardLayout { + simple = 'simple', + percentage = 'percentage', + absolute = 'absolute' +} + +export enum LevelSelectOptions { + attribute = 'Attribute', + static = 'Static' +} + +export enum ConversionType { + to = 'to', + from = 'from', +} + +export const svgMapping = new Map( + [ + [ + Shapes.vOval, + { + svg: 'assets/widget/liquid-level/shapes/vertical-oval.svg', + limits: { min: 170, max: 50 } + } + ], + [ + Shapes.vCylinder, + { + svg: 'assets/widget/liquid-level/shapes/vertical-cylinder.svg', + limits: { min: 161, max: 55 } + } + ], + [ + Shapes.vCapsule, + { + svg: 'assets/widget/liquid-level/shapes/vertical-capsule.svg', + limits: { min: 195, max: 25 } + } + ], + [ + Shapes.rectangle, + { + svg: 'assets/widget/liquid-level/shapes/rectangle.svg', + limits: { min: 168, max: 52 } + } + ], + [ + Shapes.hOval, + { + svg: 'assets/widget/liquid-level/shapes/horizontal-oval.svg', + limits: { min: 160, max: 63 } + } + ], + [ + Shapes.hEllipse, + { + svg: 'assets/widget/liquid-level/shapes/horizontal-ellipse.svg', + limits: { min: 160, max: 65 } + } + ], + [ + Shapes.hDishEnds, + { + svg: 'assets/widget/liquid-level/shapes/horizontal-dish-ends.svg', + limits: { min: 172, max: 50 } + } + ], + [ + Shapes.hCylinder, + { + svg: 'assets/widget/liquid-level/shapes/horizontal-cylinder.svg', + limits: { min: 165, max: 55 } + } + ], + [ + Shapes.hCapsule, + { + svg: 'assets/widget/liquid-level/shapes/horizontal-capsule.svg', + limits: { min: 158, max: 52 } + } + ], + [ + Shapes.hElliptical_2_1, + { + svg: 'assets/widget/liquid-level/shapes/horizontal-2_1-elliptical.svg', + limits: { min: 172, max: 50 } + } + ] + ] +); + +export const levelCardLayoutTranslations = new Map( + [ + [LevelCardLayout.simple, 'widgets.liquid-level-card.layout-simple'], + [LevelCardLayout.percentage, 'widgets.liquid-level-card.layout-percentage'], + [LevelCardLayout.absolute, 'widgets.liquid-level-card.layout-absolute'] + ] +); + +export const shapesTranslations = new Map( + [ + [Shapes.vOval, 'widgets.liquid-level-card.v-oval'], + [Shapes.vCylinder, 'widgets.liquid-level-card.v-cylinder'], + [Shapes.vCapsule, 'widgets.liquid-level-card.v-capsule'], + [Shapes.rectangle, 'widgets.liquid-level-card.rectangle'], + [Shapes.hOval, 'widgets.liquid-level-card.h-oval'], + [Shapes.hEllipse, 'widgets.liquid-level-card.h-ellipse'], + [Shapes.hDishEnds, 'widgets.liquid-level-card.h-dish-ends'], + [Shapes.hCylinder, 'widgets.liquid-level-card.h-cylinder'], + [Shapes.hCapsule, 'widgets.liquid-level-card.h-capsule'], + [Shapes.hElliptical_2_1, 'widgets.liquid-level-card.h-elliptical_2_1'] + ] +); + +export const levelCardDefaultSettings = (): LevelCardWidgetSettings => ({ + tankSelectionType: LevelSelectOptions.static, + selectedShape: Shapes.vCylinder, + shapeAttributeName: 'tankShape', + tankColor: constantColor('#242770'), + datasourceUnits: CapacityUnits.percent, + layout: LevelCardLayout.percentage, + showTitle: false, + title: 'Liquid level', + titleFont: { + family: 'Roboto', + size: 16, + sizeUnit: 'px', + style: 'normal', + weight: '500', + lineHeight: '1.5' + }, + titleColor: 'rgba(0, 0, 0, 0.87)', + showTitleIcon: false, + titleIcon: 'water_drop', + iconColor: '#5469FF', + volumeSource: LevelSelectOptions.static, + volumeConstant: 500, + volumeUnits: CapacityUnits.liters, + volumeAttributeName: 'volume', + volumeFont: { + family: 'Roboto', + size: 14, + sizeUnit: 'px', + style: 'normal', + weight: '500', + lineHeight: '100%' + }, + volumeColor: constantColor('rgba(0, 0, 0, 0.18)'), + units: CapacityUnits.percent as string, + widgetUnitsSource: LevelSelectOptions.static, + widgetUnitsAttributeName: 'units', + decimals: 0, + liquidColor: constantColor('#7A8BFF'), + valueFont: { + family: 'Roboto', + size: 24, + sizeUnit: 'px', + style: 'normal', + weight: '500', + lineHeight: '100%' + }, + valueColor: constantColor('rgba(0, 0, 0, 0.87)'), + showBackgroundOverlay: true, + backgroundOverlayColor: constantColor('rgba(255, 255, 255, 0.76)'), + showTooltip: true, + showTooltipLevel: true, + tooltipUnits: CapacityUnits.percent, + tooltipLevelDecimals: 0, + tooltipLevelFont: { + family: 'Roboto', + size: 13, + sizeUnit: 'px', + style: 'normal', + weight: '500', + lineHeight: '100%' + }, + tooltipLevelColor: constantColor('rgba(0, 0, 0, 0.76)'), + showTooltipDate: true, + tooltipDateFormat: lastUpdateAgoDateFormat(), + tooltipDateFont: { + family: 'Roboto', + size: 13, + sizeUnit: 'px', + style: 'normal', + weight: '500', + lineHeight: '100%' + }, + tooltipDateColor: constantColor('rgba(0, 0, 0, 0.76)'), + tooltipBackgroundColor: constantColor('rgba(255, 255, 255, 0.76)'), + tooltipBackgroundBlur: 3 +}); + +export const convertLiters = (value: number, units: CapacityUnits, conversionType: ConversionType): number => { + let factor: number; + + switch (units) { + case CapacityUnits.liters: + return value; + case CapacityUnits.cubicMillimeter: + factor = 1e6; + break; + case CapacityUnits.cubicCentimeter: + case CapacityUnits.milliliter: + factor = 1e3; + break; + case CapacityUnits.cubicMeter: + factor = 1e-3; + break; + case CapacityUnits.cubicKilometer: + factor = 1e-15; + break; + case CapacityUnits.hectoliter: + factor = 0.01; + break; + case CapacityUnits.cubicInch: + factor = 61.0237; + break; + case CapacityUnits.cubicFoot: + factor = 1 / 28.3168; + break; + case CapacityUnits.cubicYard: + factor = 1 / 764.555; + break; + case CapacityUnits.fluidOunce: + factor = 33.814; + break; + case CapacityUnits.pint: + factor = 1 / 0.473176; + break; + case CapacityUnits.quart: + factor = 1 / 0.946353; + break; + case CapacityUnits.gallon: + factor = 1 / 3.78541; + break; + case CapacityUnits.oilBarrels: + factor = 1 / 158.987; + break; + default: + return value; + // throw new Error(`Unknown unit: ${units}`); + } + + return conversionType === ConversionType.to ? value / factor : value * factor; +}; + +export const extractValue = (attributes: any[], attributeName: string, defaultValue: any): any => { + const index = attributes.findIndex(attr => attr.key === attributeName); + return index !== -1 ? attributes[index].value : defaultValue; +}; + +export const valueContainerStyleDefaults = cssTextFromInlineStyle({ + width: '100%', + height: '100%', + display: 'flex', + gap: '8px', + 'text-align': 'center', + 'align-items': 'center', + 'align-content': 'center', + 'justify-content': 'center', +}); + +export const valueTextStyleDefaults = 'letterSpacing: normal; font-style: normal; font-weight: 500; line-height: 100%;' + + ' font-size: 24px; font-family: Roboto; color: #000000DE'; + +export const volumeTextStyleDefaults = 'letterSpacing: normal; font-style: normal; font-weight: 500;' + + ' line-height: 100%; font-size: 14px; font-family: Roboto; color: rgba(0, 0, 0, 0.18)'; + +export const createAbsoluteLayout = (values?: {inputValue: number | string; volume: number | string}, + styles?: {valueStyle: string; volumeStyle: string}, + units?: string): string => { + const inputValue = values?.inputValue ? values?.inputValue : 500; + const valueTextStyle = styles?.valueStyle ? styles?.valueStyle : valueTextStyleDefaults; + const volume = values?.volume ? values?.volume : 1000; + const volumeTextStyle = styles?.volumeStyle ? styles?.volumeStyle : volumeTextStyleDefaults; + const displayUnits = units ? units : CapacityUnits.liters; + + return `
+
+ +
+ +
+ +
`; +}; + +export const createPercentLayout = (value: number | string = 50, valueTextStyle: string = valueTextStyleDefaults): string => + `
+ +
`; + +export const optionsFilter = (searchText: string): ((key: DataKey) => boolean) => + key => key?.name.toUpperCase().includes(searchText?.toUpperCase()); + +export const fetchEntityKeysForDevice = (deviceId: string, dataKeyTypes: Array, + entityService: EntityService): Observable> => { + const entityFilter = singleEntityFilterFromDeviceId(deviceId); + return entityService.getEntityKeysByEntityFilter( + entityFilter, + dataKeyTypes, [EntityType.DEVICE], + {ignoreLoading: true, ignoreErrors: true} + ).pipe( + catchError(() => of([])) + ); +}; + +export const fetchEntityKeys = (entityAliasId: string, dataKeyTypes: Array, + entityService: EntityService, aliasController: IAliasController): Observable> => + aliasController.getAliasInfo(entityAliasId).pipe( + mergeMap((aliasInfo) => entityService.getEntityKeysByEntityFilter( + aliasInfo.entityFilter, + dataKeyTypes, [], + {ignoreLoading: true, ignoreErrors: true} + ).pipe( + catchError(() => of([])) + )), + catchError(() => of([] as Array)) + ); diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts new file mode 100644 index 0000000000..1790495b54 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts @@ -0,0 +1,524 @@ +/// +/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// +/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// +/// NOTICE: All information contained herein is, and remains +/// the property of ThingsBoard, Inc. and its suppliers, +/// if any. The intellectual and technical concepts contained +/// herein are proprietary to ThingsBoard, Inc. +/// and its suppliers and may be covered by U.S. and Foreign Patents, +/// patents in process, and are protected by trade secret or copyright law. +/// +/// Dissemination of this information or reproduction of this material is strictly forbidden +/// unless prior written permission is obtained from COMPANY. +/// +/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, +/// managers or contractors who have executed Confidentiality and Non-disclosure agreements +/// explicitly covering such access. +/// +/// The copyright notice above does not evidence any actual or intended publication +/// or disclosure of this source code, which includes +/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. +/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, +/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT +/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, +/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. +/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION +/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, +/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// + + +import { WidgetContext } from '@home/models/widget-component.models'; +import { isDefined, isDefinedAndNotNull, isNumber, isString } from '@core/utils'; +import { + CapacityUnits, + ConversionType, + convertLiters, createAbsoluteLayout, createPercentLayout, + extractValue, + levelCardDefaultSettings, + LevelCardLayout, + LevelCardWidgetSettings, + LevelSelectOptions, + Shapes, + SvgInfo, + SvgLimits, + svgMapping +} from '@home/components/widget/lib/indicator/liquid-level-widget.models'; +import { Observable, of } from 'rxjs'; +import { map, switchMap } from 'rxjs/operators'; +import { EntityId } from '@shared/models/id/entity-id'; +import { + ColorProcessor, + cssTextFromInlineStyle, + DateFormatProcessor, + inlineTextStyle +} from '@shared/models/widget-settings.models'; +import ITooltipsterInstance = JQueryTooltipster.ITooltipsterInstance; +import { ResourcesService } from '@core/services/resources.service'; +import { NULL_UUID } from '@shared/models/id/has-uuid'; +import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; + +@Component({ + selector: 'tb-liquid-level-widget', + template: '', + styleUrls: [], + encapsulation: ViewEncapsulation.None +}) +export class LiquidLevelWidgetComponent implements OnInit { + + @Input() + ctx: WidgetContext; + + svgParams: SvgInfo; + + svg: JQuery; + + tooltip: ITooltipsterInstance; + + overlayContainer: JQuery; + + shape: Shapes; + + settings: LevelCardWidgetSettings; + + tankColor: ColorProcessor; + + volumeColor: ColorProcessor; + + valueColor: ColorProcessor; + + liquidColor: ColorProcessor; + + backgroundOverlayColor: ColorProcessor; + + tooltipLevelColor: ColorProcessor; + + tooltipDateFormat: DateFormatProcessor; + + tooltipDateColor: ColorProcessor; + + tooltipBackgroundColor: ColorProcessor; + + volume: number; + + tooltipContent: string; + + widgetUnits: string; + + constructor() { + } + + ngOnInit(): void { + this.ctx.$scope.liquidLevelWidget = this; + this.settings = {...levelCardDefaultSettings(), ...this.ctx.widgetConfig, ...this.ctx.settings}; + + this.tankColor = ColorProcessor.fromSettings(this.settings.tankColor); + this.volumeColor = ColorProcessor.fromSettings(this.settings.volumeColor); + this.valueColor = ColorProcessor.fromSettings(this.settings.valueColor); + this.liquidColor = ColorProcessor.fromSettings(this.settings.liquidColor); + this.backgroundOverlayColor = ColorProcessor.fromSettings(this.settings.backgroundOverlayColor); + this.tooltipLevelColor = ColorProcessor.fromSettings(this.settings.tooltipLevelColor); + this.tooltipDateColor = ColorProcessor.fromSettings(this.settings.tooltipDateColor); + this.tooltipBackgroundColor = ColorProcessor.fromSettings(this.settings.tooltipBackgroundColor); + + this.tooltipDateFormat = DateFormatProcessor.fromSettings(this.ctx.$injector, this.settings.tooltipDateFormat); + } + + public onInit() { + this.getData().subscribe(data => { + if (data) { + const { svg, volume, units } = data; + if (svg && isString(svg) && this.ctx.$container) { + this.ctx.$container.html(svg); + this.svg = this.ctx.$container.find('svg'); + this.svg.on('click', this.cardClick.bind(this)); + this.createSVG(); + this.createValueElement(); + + if (this.settings.showTooltip) { + this.createTooltip(); + } + } + + if (isDefined(volume) && isNumber(volume)) { + this.volume = volume; + } + + if (units) { + this.widgetUnits = units; + } + + this.update(); + } + }); + } + + private getData(): Observable<{ svg: string; volume: number; units: string }> { + const entityId: EntityId = { + entityType: this.ctx.datasources[0].entityType, + id: this.ctx.datasources[0].entityId + }; + + return this.getShape(entityId).pipe( + switchMap(shape => { + this.shape = shape; + this.svgParams = svgMapping.get(shape); + if (this.svgParams) { + return this.loadSVG(this.svgParams.svg).pipe( + switchMap( svg => + this.getSecondaryResources(entityId).pipe( + map(({ volume, units }) => + ({ svg, volume, units }) + ) + ) + ) + ); + } + + return of(null); + }) + ); + } + + public update() { + if (this.svg) { + this.updateData(); + } + } + + public destroy() { + + } + + private createSVG() { + if (this.svg) { + this.svg.css('display', 'block') + .css('overflow', 'hidden') + .css('width', '100%') + .css('height', '100%'); + } + } + + private updateData() { + const data = this.ctx.data[0]?.data[0]?.map(value => Number(value)); + if (isDefinedAndNotNull(data) && data.length && typeof Number(data[1]) === 'number') { + const percentage = this.convertInputData(Number(data[1])); + this.updateSvg(percentage); + this.updateValueElement(this.convertOutputData(percentage)); + + if (this.settings.showTooltip) { + this.updateTooltip(data); + } + } + } + + private createTooltip(): void { + this.tooltipContent = this.getTooltipContent(); + + import('tooltipster').then(() => { + if ($.tooltipster && this.tooltip) { + this.tooltip.destroy(); + this.tooltip = null; + } + this.tooltip = this.svg.tooltipster({ + contentAsHTML: true, + theme: 'tooltipster-shadow', + side: 'top', + delay: 10, + distance: -33, + triggerClose: { + click: true, + tap: true, + scroll: true, + mouseleave: true + }, + animation: 'grow', + updateAnimation: null, + trackOrigin: true, + functionBefore: (instance, helper) => { + instance.content(this.tooltipContent); + }, + functionReady: (instance, helper) => { + const tooltipsterBoxStyles: JQuery.PlainObject = { + backgroundColor: this.getTooltipBackground(), + backdropFilter: `blur(${this.settings.tooltipBackgroundBlur}px)`, + width: '100%' + }; + + $(helper.tooltip).css('max-width', this.svg.width() + 'px'); + $(helper.tooltip).find('.tooltipster-box').css(tooltipsterBoxStyles); + $(helper.tooltip).find('.tooltipster-arrow').empty(); + + instance.reposition(); + } + }).tooltipster('instance'); + }); + } + + private createValueElement(): void { + const containerOverlay = this.ctx.$container.find('.container-overlay'); + const percentageOverlay = this.ctx.$container.find('.percentage-overlay'); + const absoluteOverlay = this.ctx.$container.find('.absolute-overlay'); + + if (this.settings.layout === LevelCardLayout.absolute) { + this.overlayContainer = absoluteOverlay; + percentageOverlay.css('visibility', 'hidden'); + if (!this.settings.showBackgroundOverlay) { + absoluteOverlay.css('visibility', 'hidden'); + } + } else if (this.settings.layout === LevelCardLayout.percentage) { + this.overlayContainer = percentageOverlay; + absoluteOverlay.css('visibility', 'hidden'); + if (!this.settings.showBackgroundOverlay) { + percentageOverlay.css('visibility', 'hidden'); + } + } else { + containerOverlay.css('visibility', 'hidden'); + } + + if (this.overlayContainer) { + this.overlayContainer.attr('fill', this.backgroundOverlayColor.color); + this.overlayContainer.removeAttr('fill-opacity'); + } + } + + private loadSVG(url: string): Observable { + const resourcesService = this.ctx.$injector.get(ResourcesService); + return resourcesService.loadJsonResource(url); + } + + private getShape(entityId: EntityId): Observable { + if (this.settings.tankSelectionType === LevelSelectOptions.attribute && entityId.id !== NULL_UUID) { + return this.ctx.attributeService.getEntityAttributes(entityId, null, + [this.settings.shapeAttributeName]).pipe( + map(attributes => + extractValue(attributes, this.settings.shapeAttributeName, this.settings.selectedShape) + ) + ); + } + + return of(this.settings.selectedShape); + } + + private getSecondaryResources(entityId: EntityId): Observable<{ volume: number; units: string }> { + const attributeNames = this.prepareAttributeNames(); + + if (!attributeNames.length || entityId.id === NULL_UUID) { + return of({ + volume: this.settings.volumeConstant, + units: this.settings.units + }); + } + + return this.ctx.attributeService.getEntityAttributes(entityId, null, attributeNames).pipe( + map(attributes => ({ + volume: extractValue(attributes, this.settings.volumeAttributeName, this.settings.volumeConstant), + units: extractValue(attributes, this.settings.widgetUnitsAttributeName, this.settings.units) + })) + ); + } + + private prepareAttributeNames(): string[] { + const names = []; + if (this.settings.volumeSource !== LevelSelectOptions.static) { + names.push(this.settings.volumeAttributeName); + } + if (this.settings.widgetUnitsSource !== LevelSelectOptions.static) { + names.push(this.settings.widgetUnitsAttributeName); + } + return names; + } + + private updateSvg(percentage: number) { + const yLimits: SvgLimits = { + min: this.svgParams.limits.min, + max: this.svgParams.limits.max + }; + + const newYPos = this.calculatePosition(percentage, yLimits); + this.updateShapeColor(percentage); + this.updateLevel(newYPos, percentage); + } + + private calculatePosition(percentage, limits): number { + return limits.min + (percentage / 100) * (limits.max - limits.min); + } + + private updateTooltip(value: number[]): void { + this.tooltipContent = this.getTooltipContent(value); + + if (this.tooltip) { + this.tooltip.content(this.tooltipContent); + } + } + + private updateLevel(newY: number, percentage: number): void { + this.liquidColor.update(percentage); + const fill = this.ctx.$container.find('.tb-liquid-fill'); + const surfaces = this.ctx.$container.find('.tb-liquid-surface'); + const surfacePositionAttr = this.shape !== Shapes.vCylinder ? 'y' : 'cy'; + const animationSpeed = 500; + + if (percentage > 1) { + fill.css('visibility', 'visible'); + fill.animate({y : newY}, animationSpeed); + fill.attr('fill', this.liquidColor.color); + + surfaces.each((index, element) => { + const $element = $(element); + $element.css('visibility', 'visible'); + $element.animate({[surfacePositionAttr]: newY}, animationSpeed); + if ($element.hasClass('tb-liquid')) { + $element.attr('fill', this.liquidColor.color); + } + }); + } else { + fill.css('visibility', 'hidden').stop().clearQueue(); + surfaces.each((index, element) => { + $(element).css('visibility', 'hidden').stop().clearQueue(); + }); + } + } + + private updateShapeColor(value): void { + const shapeStrokes = this.ctx.$container.find('.tb-shape-stroke'); + const shapeFill = this.ctx.$container.find('.tb-shape-fill'); + this.tankColor.update(value); + + shapeStrokes.each((index, element) => { + $(element).attr('stroke', this.tankColor.color); + }); + + shapeFill.each((index, element) => { + $(element).attr('fill', this.tankColor.color); + }); + } + + private updateValueElement(data: number): void { + let content: string; + let container: JQuery; + + const value = convertLiters(data, this.widgetUnits as CapacityUnits, ConversionType.from) + .toFixed(this.settings.decimals || 0); + const valueTextStyle = cssTextFromInlineStyle({...inlineTextStyle(this.settings.valueFont), + color: this.valueColor.color}); + this.backgroundOverlayColor.update(data); + if (this.overlayContainer) { + this.overlayContainer.attr('fill', this.backgroundOverlayColor.color); + } + + if (this.settings.layout === LevelCardLayout.absolute) { + this.volumeColor.update(data); + + const volumeInLiters: number = convertLiters(this.volume, this.settings.volumeUnits as CapacityUnits, ConversionType.to); + const volume = convertLiters(volumeInLiters, this.widgetUnits as CapacityUnits, ConversionType.from) + .toFixed(this.settings.decimals || 0); + const volumeTextStyle = cssTextFromInlineStyle({...inlineTextStyle(this.settings.volumeFont), + color: this.volumeColor.color}); + + container = this.ctx.$container.find('.absolute-value-container'); + content = createAbsoluteLayout({inputValue: value, volume}, + {valueStyle: valueTextStyle, volumeStyle: volumeTextStyle}, this.widgetUnits); + + } else if (this.settings.layout === LevelCardLayout.percentage) { + container = this.ctx.$container.find('.percentage-value-container'); + content = createPercentLayout(value, valueTextStyle); + } + + if (content && container) { + container.html(content); + } + } + + private getTooltipContent(value?: number[]): string { + const contentValue = value || [0, 0]; + + if (contentValue[1]) { + contentValue[1] = this.convertTooltipData(contentValue[1]); + } + + this.tooltipLevelColor.update(contentValue[1]); + this.tooltipDateColor.update(contentValue[0]); + this.tooltipDateFormat.update(contentValue[0]); + this.tooltipBackgroundColor.update(contentValue); + + const levelTextStyle = cssTextFromInlineStyle({...inlineTextStyle(this.settings.tooltipLevelFont), + color: this.tooltipLevelColor.color}); + + const dateTextStyle = cssTextFromInlineStyle({...inlineTextStyle(this.settings.tooltipDateFont), + color: this.tooltipDateColor.color, overflow: 'hidden', 'text-overflow': 'ellipsis', 'white-space': 'nowrap'}); + + let content = `
`; + + if (this.settings.showTooltipLevel) { + const levelValue = contentValue[1]?.toFixed(this.settings.tooltipLevelDecimals) + this.settings.tooltipUnits; + content += this.createTooltipContent( + this.ctx.translate.instant('widgets.liquid-level-card.level'), + levelValue, + levelTextStyle + ); + } + + if (this.settings.showTooltipDate) { + content += this.createTooltipContent( + this.ctx.translate.instant('widgets.liquid-level-card.last-update'), + this.tooltipDateFormat.formatted, + dateTextStyle + ); + } + + content += '
'; + + return content; + } + + private createTooltipContent(labelText: string, contentValue: string, textStyle: string): string { + return `
+ + +
`; + } + + private getTooltipBackground(): string { + return this.tooltipBackgroundColor.color; + } + + private convertInputData(value: number): number { + if (this.settings.datasourceUnits !== CapacityUnits.percent) { + return (convertLiters(value, this.settings.datasourceUnits, ConversionType.to) / + convertLiters(this.volume, this.settings.volumeUnits, ConversionType.to)) * 100; + } + + return value; + } + + private convertOutputData(value: number): number { + if (this.widgetUnits !== CapacityUnits.percent) { + return convertLiters(this.volume * (value / 100), this.settings.volumeUnits, ConversionType.to); + } + + return value; + } + + private convertTooltipData(value: number): number { + const percentage = this.convertInputData(value); + if (this.settings.tooltipUnits !== CapacityUnits.percent) { + const liters = this.convertOutputData(percentage); + + return convertLiters(liters, this.settings.tooltipUnits, ConversionType.from); + } else { + return percentage; + } + } + + public cardClick($event) { + this.ctx.actionsApi.cardClick($event); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.html new file mode 100644 index 0000000000..1d54765bcc --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.html @@ -0,0 +1,279 @@ + + +
+
+
+
+
widgets.liquid-level-card.shape
+ + + {{ 'widgets.liquid-level-card.static' | translate }} + + + {{ 'widgets.liquid-level-card.attribute' | translate }} + + +
+ + + {{ shapesTranslationMap.get(shape) | translate }} + + +
+
widgets.liquid-level-card.shape-attribute-name
+ + +
+
+
widgets.liquid-level-card.shape-by-attribute
+
+
+
+
+
+
+
widgets.liquid-level-card.layout
+ + + {{ levelCardLayoutTranslationMap.get(layout) | translate }} + + +
+
+
widgets.liquid-level-card.units
+
+
widgets.liquid-level-card.datasource-units
+ + +
+
+
widgets.liquid-level-card.widget-units
+
+ + + + {{ option }} + + + + + + + +
+
+
+
widgets.liquid-level-card.total-volume
+
+ + + + {{ option }} + + + + + + + warning + + + + + + +
+
+
+
+
widgets.liquid-level-card.color-and-font
+
+
widgets.liquid-level-card.tank-color
+ + +
+
+
widgets.liquid-level-card.liquid-color
+ + +
+
+
widgets.liquid-level-card.value
+
+ + + + +
+
+
+
widgets.liquid-level-card.total-volume
+
+ + + + +
+
+
+ + {{ 'widgets.liquid-level-card.background-overlay' | translate }} + + + +
+
+
+ + + + + {{ 'widget-config.tooltip' | translate }} + + + + +
+ + {{ 'widgets.liquid-level-card.level' | translate }} + +
+ + + + +
widget-config.decimals-suffix
+
+ + + + +
+
+
+ + {{ 'widgets.value-card.date' | translate }} + +
+ + + + + +
+
+
+
widgets.liquid-level-card.tooltip-background
+ + +
+
+
widgets.liquid-level-card.background-blur
+ + +
px
+
+
+
+
+
+
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.ts new file mode 100644 index 0000000000..1565fa5a92 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.ts @@ -0,0 +1,531 @@ +/// +/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// +/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// +/// NOTICE: All information contained herein is, and remains +/// the property of ThingsBoard, Inc. and its suppliers, +/// if any. The intellectual and technical concepts contained +/// herein are proprietary to ThingsBoard, Inc. +/// and its suppliers and may be covered by U.S. and Foreign Patents, +/// patents in process, and are protected by trade secret or copyright law. +/// +/// Dissemination of this information or reproduction of this material is strictly forbidden +/// unless prior written permission is obtained from COMPANY. +/// +/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, +/// managers or contractors who have executed Confidentiality and Non-disclosure agreements +/// explicitly covering such access. +/// +/// The copyright notice above does not evidence any actual or intended publication +/// or disclosure of this source code, which includes +/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. +/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, +/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT +/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, +/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. +/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION +/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, +/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// + +import { ChangeDetectorRef, Component, Injector, ViewChild } from '@angular/core'; +import { + DataKey, + Datasource, + DatasourceType, + WidgetSettings, + WidgetSettingsComponent +} from '@shared/models/widget.models'; +import { AbstractControl, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { formatValue, isDefined } from '@core/utils'; +import { WidgetConfigComponentData } from '@home/models/widget-component.models'; +import { + DateFormatProcessor, + DateFormatSettings +} from '@shared/models/widget-settings.models'; +import { + levelCardDefaultSettings, + LevelCardLayout, + levelCardLayoutTranslations, + Shapes, + shapesTranslations, + svgMapping, + CapacityUnits, + LevelSelectOptions, + createPercentLayout, + createAbsoluteLayout, + optionsFilter, + fetchEntityKeysForDevice, + fetchEntityKeys +} from '@home/components/widget/lib/indicator/liquid-level-widget.models'; +import { UnitsType } from '@shared/models/unit.models'; +import { ImageCardsSelectComponent } from '@home/components/widget/lib/settings/common/image-cards-select.component'; +import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; +import { forkJoin, Observable, of } from 'rxjs'; +import { map, publishReplay, refCount, tap } from 'rxjs/operators'; +import { ResourcesService } from '@core/services/resources.service'; +import { DataKeyType } from '@shared/models/telemetry/telemetry.models'; +import { UtilsService } from '@core/services/utils.service'; +import { EntityService } from '@core/http/entity.service'; + +@Component({ + selector: 'liquid-level-card-widget-settings', + templateUrl: './liquid-level-card-widget-settings.component.html', + styleUrls: [] +}) +export class LiquidLevelCardWidgetSettingsComponent extends WidgetSettingsComponent { + + @ViewChild('layoutsImageCardsSelect', { static: false }) layoutsImageCardsSelect: ImageCardsSelectComponent; + + @ViewChild('shapesImageCardsSelect', { static: false }) shapesImageCardsSelect: ImageCardsSelectComponent; + + public get volumeInput(): boolean { + const datasourceUnits = this.levelCardWidgetSettingsForm.get('datasourceUnits').value; + const layout: LevelCardLayout = this.levelCardWidgetSettingsForm.get('layout').value; + const widgetUnits = this.levelCardWidgetSettingsForm.get('units').value; + return !(datasourceUnits === CapacityUnits.percent && layout !== LevelCardLayout.absolute + || (datasourceUnits === CapacityUnits.percent && widgetUnits === CapacityUnits.percent)); + } + + public get widgetUnitsInput(): boolean { + const layout: LevelCardLayout = this.levelCardWidgetSettingsForm.get('layout').value; + + if (layout === LevelCardLayout.absolute) { + const datasourceUnits = this.levelCardWidgetSettingsForm.get('datasourceUnits').value; + return !(datasourceUnits === CapacityUnits.percent); + } + return false; + } + + public get datasource(): Datasource { + if (this.widgetConfig.config.datasources && this.widgetConfig.config.datasources) { + return this.widgetConfig.config.datasources[0]; + } else { + return null; + } + } + + shapeSelectOptions = LevelSelectOptions; + + shapes: Shapes[] = []; + + shapesTranslationMap = shapesTranslations; + + unitsType = UnitsType; + + levelCardLayouts = LevelCardLayout; + + levelCardLayoutTranslationMap = levelCardLayoutTranslations; + shapesImageMap: Map = new Map(); + + volumeOptions = LevelSelectOptions; + + levelCardWidgetSettingsForm: UntypedFormGroup; + + valuePreviewFn = this._valuePreviewFn.bind(this); + + tooltipValuePreviewFn = this._tooltipValuePreviewFn.bind(this); + + totalVolumeValuePreviewFn = this._totalVolumeValuePreviewFn.bind(this); + + datePreviewFn = this._datePreviewFn.bind(this); + + keySearchText: string; + + latestKeySearchTextResult: Array; + + datasources: Array; + + functionTypeKeys: Array = []; + + lastKeysId: string; + + lastFetchedKeys: Array; + + constructor(protected store: Store, + private $injector: Injector, + private fb: UntypedFormBuilder, + private resourcesService: ResourcesService, + private sanitizer: DomSanitizer, + private cd: ChangeDetectorRef, + private utils: UtilsService, + private entityService: EntityService) { + super(store); + } + + protected settingsForm(): UntypedFormGroup { + return this.levelCardWidgetSettingsForm; + } + + protected onWidgetConfigSet(widgetConfig: WidgetConfigComponentData) { + this.shapes = Object.values(Shapes); + this.createSvgShapesMapping(); + + for (const type of this.utils.getPredefinedFunctionsList()) { + this.functionTypeKeys.push({ + name: type, + type: DataKeyType.function + }); + } + } + + protected defaultSettings(): WidgetSettings { + return levelCardDefaultSettings(); + } + + protected onSettingsSet(settings: WidgetSettings) { + this.levelCardWidgetSettingsForm = this.fb.group({ + tankSelectionType: [settings.tankSelectionType, []], + selectedShape: [settings.selectedShape, [Validators.required]], + shapeAttributeName: [settings.shapeAttributeName, [Validators.required]], + tankColor: [settings.tankColor, []], + datasourceUnits: [settings.datasourceUnits, [Validators.required]], + + layout: [settings.layout, []], + + volumeSource: [settings.volumeSource, []], + volumeConstant: [settings.volumeConstant, [Validators.required]], + volumeAttributeName: [settings.volumeAttributeName, [Validators.required]], + volumeUnits: [settings.volumeUnits, [Validators.required]], + volumeFont: [settings.volumeFont, []], + volumeColor: [settings.volumeColor, []], + valueFont: [settings.valueFont, []], + valueColor: [settings.valueColor, []], + units: [settings.units, [Validators.required]], + widgetUnitsSource: [settings.widgetUnitsSource, [Validators.required]], + widgetUnitsAttributeName: [settings.widgetUnitsAttributeName, [Validators.required]], + showBackgroundOverlay: [settings.showBackgroundOverlay, []], + backgroundOverlayColor: [settings.backgroundOverlayColor, []], + + liquidColor: [settings.liquidColor, []], + + showTooltip: [settings.showTooltip, []], + showTooltipLevel: [settings.showTooltipLevel, []], + tooltipUnits: [settings.tooltipUnits, []], + tooltipLevelDecimals: [settings.tooltipLevelDecimals, []], + tooltipLevelFont: [settings.tooltipLevelFont, []], + tooltipLevelColor: [settings.tooltipLevelColor, []], + showTooltipDate: [settings.showTooltipDate, []], + tooltipDateFormat: [settings.tooltipDateFormat, []], + tooltipDateFont: [settings.tooltipDateFont, []], + tooltipDateColor: [settings.tooltipDateColor, []], + tooltipBackgroundColor: [settings.tooltipBackgroundColor, []], + tooltipBackgroundBlur: [settings.tooltipBackgroundBlur, []], + }); + + this.levelCardWidgetSettingsForm.get('selectedShape').valueChanges.subscribe((shape) => { + this.cd.detectChanges(); + this.layoutsImageCardsSelect?.imageCardsSelectOptions.notifyOnChanges(); + }); + } + + protected validatorTriggers(): string[] { + return [ + 'showBackgroundOverlay', 'showTooltip', 'showTooltipLevel', + 'tankSelectionType', 'datasourceUnits', + 'showTooltipDate', 'units', + 'layout', 'volumeSource', + 'widgetUnitsSource' + ]; + } + + protected updateValidators(emitEvent: boolean, trigger?: string) { + const emitEventFields = []; + + const datasourceUnits: string = this.levelCardWidgetSettingsForm.get('datasourceUnits').value; + const layout: LevelCardLayout = this.levelCardWidgetSettingsForm.get('layout').value; + const volumeSource: AbstractControl = this.levelCardWidgetSettingsForm.get('volumeSource'); + const widgetUnits: AbstractControl = this.levelCardWidgetSettingsForm.get('units'); + const tooltipUnits: AbstractControl = this.levelCardWidgetSettingsForm.get('tooltipUnits'); + const widgetUnitsSource: AbstractControl = this.levelCardWidgetSettingsForm.get('widgetUnitsSource'); + const showTooltipLevel: AbstractControl = this.levelCardWidgetSettingsForm.get('showTooltipLevel'); + const showTooltipDate: AbstractControl = this.levelCardWidgetSettingsForm.get('showTooltipDate'); + const showTooltip: boolean = this.levelCardWidgetSettingsForm.get('showTooltip').value; + + if (trigger === 'tankSelectionType') { + const tankSelectionType: LevelSelectOptions = this.levelCardWidgetSettingsForm.get('tankSelectionType').value; + if (tankSelectionType === LevelSelectOptions.static) { + this.levelCardWidgetSettingsForm.get('selectedShape').enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('shapeAttributeName').disable({emitEvent: false}); + } else { + this.levelCardWidgetSettingsForm.get('selectedShape').disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('shapeAttributeName').enable({emitEvent: false}); + } + emitEventFields.push('selectedShape', 'shapeAttributeName'); + } + + if (trigger === 'datasourceUnits' || trigger === 'layout' || trigger === 'units') { + if (datasourceUnits === CapacityUnits.percent && (layout !== LevelCardLayout.absolute) + || (datasourceUnits === CapacityUnits.percent && widgetUnits?.value === CapacityUnits.percent) + ) { + volumeSource.disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('volumeConstant').disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('volumeAttributeName').disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('volumeUnits').disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('volumeFont').disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('volumeColor').disable({emitEvent: false}); + } else { + volumeSource.enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('volumeConstant').enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('volumeAttributeName').enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('volumeUnits').enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('volumeFont').enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('volumeColor').enable({emitEvent: false}); + } + + if (layout === LevelCardLayout.simple && datasourceUnits === CapacityUnits.percent) { + this.levelCardWidgetSettingsForm.get('valueFont').disable(); + this.levelCardWidgetSettingsForm.get('valueColor').disable(); + } else { + this.levelCardWidgetSettingsForm.get('valueFont').enable(); + this.levelCardWidgetSettingsForm.get('valueColor').enable(); + } + emitEventFields.push('volumeSource', 'volumeConstant', 'volumeAttributeName', 'volumeFont', 'volumeColor', 'volumeUnits'); + } else if (trigger === 'volumeSource') { + if((datasourceUnits !== CapacityUnits.percent) || + (layout === LevelCardLayout.absolute && widgetUnits?.value !== CapacityUnits.percent)) { + if (volumeSource.value === LevelSelectOptions.static) { + this.levelCardWidgetSettingsForm.get('volumeConstant').enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('volumeAttributeName').disable({emitEvent: false}); + } else { + this.levelCardWidgetSettingsForm.get('volumeConstant').disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('volumeAttributeName').enable({emitEvent: false}); + } + emitEventFields.push('volumeConstant', 'volumeAttributeName'); + } + } + + if (trigger === 'showBackgroundOverlay') { + const showBackgroundOverlay: boolean = this.levelCardWidgetSettingsForm.get('showBackgroundOverlay').value; + if (showBackgroundOverlay) { + this.levelCardWidgetSettingsForm.get('backgroundOverlayColor').enable({emitEvent: false}); + } else { + this.levelCardWidgetSettingsForm.get('backgroundOverlayColor').disable({emitEvent: false}); + } + emitEventFields.push('backgroundOverlayColor'); + } + + if (trigger === 'showTooltip') { + if (showTooltip) { + showTooltipLevel.enable({emitEvent: false}); + showTooltipDate.enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('tooltipBackgroundColor').enable(); + this.levelCardWidgetSettingsForm.get('tooltipBackgroundBlur').enable(); + } else { + showTooltipLevel.disable({emitEvent: false}); + showTooltipDate.disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('tooltipBackgroundColor').disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('tooltipBackgroundBlur').disable({emitEvent: false}); + } + emitEventFields.push('showTooltipLevel', 'showTooltipDate', 'tooltipBackgroundColor', 'tooltipBackgroundBlur'); + } + + if (trigger === 'showTooltipLevel') { + if (showTooltipLevel?.value && !showTooltipLevel.disabled) { + this.levelCardWidgetSettingsForm.get('tooltipUnits').enable(); + this.levelCardWidgetSettingsForm.get('tooltipLevelDecimals').enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('tooltipLevelFont').enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('tooltipLevelColor').enable({emitEvent: false}); + } else { + this.levelCardWidgetSettingsForm.get('tooltipUnits').disable(); + this.levelCardWidgetSettingsForm.get('tooltipLevelDecimals').disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('tooltipLevelFont').disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('tooltipLevelColor').disable({emitEvent: false}); + } + emitEventFields.push('tooltipUnits', 'tooltipLevelDecimals', 'tooltipLevelFont', 'tooltipLevelColor'); + } + + if (trigger === 'showTooltipDate') { + if (showTooltipDate?.value && !showTooltipDate.disabled) { + this.levelCardWidgetSettingsForm.get('tooltipDateFormat').enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('tooltipDateFont').enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('tooltipDateColor').enable({emitEvent: false}); + } else { + this.levelCardWidgetSettingsForm.get('tooltipDateFormat').disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('tooltipDateFont').disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('tooltipDateColor').disable({emitEvent: false}); + } + emitEventFields.push('tooltipDateFormat', 'tooltipDateFont', 'tooltipDateColor'); + } + + if (trigger === 'layout' || trigger === 'datasourceUnits') { + if (layout === LevelCardLayout.simple) { + widgetUnits.disable({emitEvent: false}); + tooltipUnits.disable({emitEvent: false}); + widgetUnitsSource.setValue(LevelSelectOptions.static, {emitEvent: false}); + widgetUnitsSource.disable({emitEvent: false}); + + this.levelCardWidgetSettingsForm.get('valueFont').disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('valueColor').disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('widgetUnitsAttributeName').disable({emitEvent: false}); + } else if (layout === LevelCardLayout.percentage) { + if (widgetUnits.value !== CapacityUnits.percent) { + widgetUnits.setValue(CapacityUnits.percent, {emitEvent: false}); + widgetUnitsSource.setValue(LevelSelectOptions.static, {emitEvent: false}); + } + widgetUnits.disable({emitEvent: false}); + widgetUnitsSource.disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('widgetUnitsAttributeName').disable({emitEvent: false}); + + if (tooltipUnits.value !== CapacityUnits.percent) { + tooltipUnits.setValue(CapacityUnits.percent, {emitEvent: false}); + } + tooltipUnits.disable({emitEvent: false}); + } else { + widgetUnits.enable({emitEvent: false}); + tooltipUnits.enable({emitEvent: false}); + widgetUnitsSource.enable({emitEvent: false}); + + this.levelCardWidgetSettingsForm.get('valueFont').enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('valueColor').enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('widgetUnitsAttributeName').enable({emitEvent: false}); + } + emitEventFields.push('units', 'tooltipUnits', 'valueFont', 'valueColor', 'widgetUnitsSource', 'widgetUnitsAttributeName'); + } else if (trigger === 'widgetUnitsSource') { + if (layout !== LevelCardLayout.percentage) { + if (widgetUnitsSource.value === LevelSelectOptions.static) { + widgetUnits.enable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('widgetUnitsAttributeName').disable({emitEvent: false}); + } else { + widgetUnits.disable({emitEvent: false}); + this.levelCardWidgetSettingsForm.get('widgetUnitsAttributeName').enable({emitEvent: false}); + } + emitEventFields.push('units', 'widgetUnitsAttributeName'); + } + } + + for (const controlKey in this.levelCardWidgetSettingsForm.controls) { + if (emitEventFields.includes(controlKey)) { + this.levelCardWidgetSettingsForm.controls[controlKey].updateValueAndValidity({emitEvent}); + } + } + } + + private createSvgShapesMapping(): void { + const obsArray: Array> = []; + for (const shape of this.shapes) { + const svgUrl = svgMapping.get(shape).svg; + + const obs = this.resourcesService.loadJsonResource(svgUrl).pipe( + map((svg) => ({svg, shape})) + ); + + obsArray.push(obs); + } + + forkJoin(obsArray).subscribe((svgData) => { + for (const data of svgData) { + this.shapesImageMap.set(data.shape, data.svg); + } + + this.cd.detectChanges(); + this.layoutsImageCardsSelect?.imageCardsSelectOptions.notifyOnChanges(); + this.shapesImageCardsSelect?.imageCardsSelectOptions.notifyOnChanges(); + }); + } + + public createShapeLayout(svg: string, layout: LevelCardLayout): SafeUrl { + if (svg && layout) { + const parser = new DOMParser(); + const svgImage = parser.parseFromString(svg, 'image/svg+xml'); + + if (layout === this.levelCardLayouts.simple) { + svgImage.querySelector('.container-overlay').remove(); + } else if (layout === this.levelCardLayouts.percentage) { + svgImage.querySelector('.absolute-overlay').remove(); + svgImage.querySelector('.percentage-value-container').innerHTML = createPercentLayout(); + } else { + svgImage.querySelector('.absolute-value-container').innerHTML = createAbsoluteLayout(); + svgImage.querySelector('.percentage-overlay').remove(); + } + + const encodedSvg = encodeURIComponent(svgImage.documentElement.outerHTML); + + return this.sanitizer.bypassSecurityTrustResourceUrl(`data:image/svg+xml,${encodedSvg}`); + } + } + + public isRequired(formControlName: string): boolean { + return this.levelCardWidgetSettingsForm.get(formControlName)?.hasValidator(Validators.required); + } + + private _valuePreviewFn(): string { + const units: string = this.widgetConfig.config.units; + const decimals: number = this.widgetConfig.config.decimals; + return formatValue(32, decimals, units, true); + } + + private _tooltipValuePreviewFn() { + const units: string = this.levelCardWidgetSettingsForm.get('tooltipUnits').value; + const decimals: number = this.levelCardWidgetSettingsForm.get('tooltipLevelDecimals').value; + return formatValue(32, decimals, units, true); + } + + private _totalVolumeValuePreviewFn() { + const value = this.levelCardWidgetSettingsForm.get('volumeConstant').value; + const datasourceUnits = this.levelCardWidgetSettingsForm.get('datasourceUnits').value; + const decimals: number = this.widgetConfig.config.decimals; + let units: string = this.widgetConfig.config.units; + + if (datasourceUnits !== CapacityUnits.percent) { + units = datasourceUnits; + } + + return formatValue((isDefined(value) ? value : 500), decimals, units, true); + } + + private _datePreviewFn(): string { + const dateFormat: DateFormatSettings = this.levelCardWidgetSettingsForm.get('tooltipDateFormat').value; + const processor = DateFormatProcessor.fromSettings(this.$injector, dateFormat); + processor.update(Date.now()); + return processor.formatted; + } + + public fetchOptions(searchText: string): Observable> { + if (this.keySearchText !== searchText) { + this.keySearchText = searchText; + const dataKeyFilter = optionsFilter(this.keySearchText); + return this.getKeys().pipe( + tap(res => this.lastFetchedKeys !== res ? this.lastFetchedKeys = res : []), + map(name => name?.filter(dataKeyFilter).map(key => key.name)), + tap(res => this.latestKeySearchTextResult = res) + ); + } + return of(this.latestKeySearchTextResult); + } + + private getKeys(): Observable> { + let fetchObservable: Observable>; + if (this.datasource?.type === DatasourceType.function) { + fetchObservable = of(this.functionTypeKeys); + } else if (this.datasource?.type === DatasourceType.entity && this.datasource?.entityAliasId || + this.datasource?.type === DatasourceType.device && this.datasource?.deviceId) { + if (this.datasource?.type === DatasourceType.device) { + if (this.lastKeysId !== this.datasource?.deviceId || !this.lastFetchedKeys) { + this.lastKeysId = this.datasource.deviceId; + fetchObservable = fetchEntityKeysForDevice(this.datasource?.deviceId, [DataKeyType.attribute], + this.entityService); + } else { + fetchObservable = of(this.lastFetchedKeys); + } + } else { + if (this.lastKeysId !== this.datasource?.entityAliasId || !this.lastFetchedKeys) { + this.lastKeysId = this.datasource.entityAliasId; + fetchObservable = fetchEntityKeys(this.datasource?.entityAliasId, [DataKeyType.attribute], + this.entityService, this.aliasController); + } else { + fetchObservable = of(this.lastFetchedKeys); + } + } + } else { + fetchObservable = of([]); + } + return fetchObservable.pipe( + publishReplay(1), + refCount() + ); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.html index 52bd5907bd..35d7157fb4 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/image-cards-select.component.html @@ -33,7 +33,7 @@
{{ option.name }}
- +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts index 33b4323fdf..7048c15c86 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts @@ -300,6 +300,9 @@ import { import { ProgressBarWidgetSettingsComponent } from '@home/components/widget/lib/settings/cards/progress-bar-widget-settings.component'; +import { + LiquidLevelCardWidgetSettingsComponent +} from '@home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component'; @NgModule({ declarations: [ @@ -410,7 +413,8 @@ import { WindSpeedDirectionWidgetSettingsComponent, SignalStrengthWidgetSettingsComponent, ValueChartCardWidgetSettingsComponent, - ProgressBarWidgetSettingsComponent + ProgressBarWidgetSettingsComponent, + LiquidLevelCardWidgetSettingsComponent ], imports: [ CommonModule, @@ -526,7 +530,8 @@ import { WindSpeedDirectionWidgetSettingsComponent, SignalStrengthWidgetSettingsComponent, ValueChartCardWidgetSettingsComponent, - ProgressBarWidgetSettingsComponent + ProgressBarWidgetSettingsComponent, + LiquidLevelCardWidgetSettingsComponent, ] }) export class WidgetSettingsModule { @@ -607,5 +612,6 @@ export const widgetSettingsComponentsMap: {[key: string]: Type + + + + + warning + + + + + + + diff --git a/ui-ngx/src/app/shared/components/string-autocomplete.component.scss b/ui-ngx/src/app/shared/components/string-autocomplete.component.scss new file mode 100644 index 0000000000..a514186a25 --- /dev/null +++ b/ui-ngx/src/app/shared/components/string-autocomplete.component.scss @@ -0,0 +1,47 @@ +/** + * ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL + * + * Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains + * the property of ThingsBoard, Inc. and its suppliers, + * if any. The intellectual and technical concepts contained + * herein are proprietary to ThingsBoard, Inc. + * and its suppliers and may be covered by U.S. and Foreign Patents, + * patents in process, and are protected by trade secret or copyright law. + * + * Dissemination of this information or reproduction of this material is strictly forbidden + * unless prior written permission is obtained from COMPANY. + * + * Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, + * managers or contractors who have executed Confidentiality and Non-disclosure agreements + * explicitly covering such access. + * + * The copyright notice above does not evidence any actual or intended publication + * or disclosure of this source code, which includes + * information that is confidential and/or proprietary, and is a trade secret, of COMPANY. + * ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, + * OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT + * THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, + * AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. + * THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION + * DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, + * OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. + */ +.tb-autocomplete.tb-option-input-autocomplete { + .mat-mdc-option { + border-bottom: none; + .mdc-list-item__primary-text { + flex: 1; + display: flex; + flex-direction: row; + gap: 8px; + .tb-option { + font-size: 14px; + font-weight: 400; + line-height: 20px; + letter-spacing: 0.2px; + } + } + } +} diff --git a/ui-ngx/src/app/shared/components/string-autocomplete.component.ts b/ui-ngx/src/app/shared/components/string-autocomplete.component.ts new file mode 100644 index 0000000000..91a9ee2652 --- /dev/null +++ b/ui-ngx/src/app/shared/components/string-autocomplete.component.ts @@ -0,0 +1,175 @@ +/// +/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// +/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// +/// NOTICE: All information contained herein is, and remains +/// the property of ThingsBoard, Inc. and its suppliers, +/// if any. The intellectual and technical concepts contained +/// herein are proprietary to ThingsBoard, Inc. +/// and its suppliers and may be covered by U.S. and Foreign Patents, +/// patents in process, and are protected by trade secret or copyright law. +/// +/// Dissemination of this information or reproduction of this material is strictly forbidden +/// unless prior written permission is obtained from COMPANY. +/// +/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, +/// managers or contractors who have executed Confidentiality and Non-disclosure agreements +/// explicitly covering such access. +/// +/// The copyright notice above does not evidence any actual or intended publication +/// or disclosure of this source code, which includes +/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. +/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, +/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT +/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, +/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. +/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION +/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, +/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// + +import { + Component, + Input, + forwardRef, + OnInit, + AfterViewInit, + HostBinding, + ViewChild, + ElementRef, + Injector +} from '@angular/core'; +import { + ControlValueAccessor, + NG_VALUE_ACCESSOR, + FormControl, + Validators, + FormBuilder +} from '@angular/forms'; +import { Observable, of } from 'rxjs'; +import { tap, map, switchMap } from 'rxjs/operators'; + +@Component({ + selector: 'tb-string-autocomplete', + templateUrl: './string-autocomplete.component.html', + styleUrls: ['./string-autocomplete.component.scss'], + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => StringAutocompleteComponent), + multi: true + } + ] +}) +export class StringAutocompleteComponent implements ControlValueAccessor, OnInit, AfterViewInit { + + @HostBinding('style.display') get hostDisplay() {return 'flex';}; + + @Input() + disabled: boolean; + + @Input() + required: boolean; + + @Input() fetchOptionsFn: (searchText?: string) => Observable>; + + @ViewChild('nameInput', {static: true}) nameInput: ElementRef; + + selectionFormControl: FormControl; + + modelValue: string | null; + + filteredOptions: Observable>; + + searchText = ''; + + private dirty = false; + + private propagateChange = (_val: any) => {}; + + constructor(private injector: Injector, + private fb: FormBuilder) { + } + + ngOnInit() { + this.selectionFormControl = this.fb.control('', []); + this.filteredOptions = this.selectionFormControl.valueChanges + .pipe( + tap(value => this.updateView(value)), + map(value => value ? value : ''), + switchMap(value => this.fetchOptionsFn ? this.fetchOptionsFn(value) : of([])) + ); + } + + ngAfterViewInit() { + if (this.required) { + this.selectionFormControl.setValidators([Validators.required]); + } + } + + writeValue(option?: string): void { + this.searchText = ''; + this.modelValue = option ? option : null; + + if (this.fetchOptionsFn) { + this.fetchOptionsFn(option) + .pipe( + map(options => { + if (options) { + const foundOption = options.find(opt => opt === option); + return foundOption ? foundOption : option; + } + + return option; + }) + ) + .subscribe(result => { + this.selectionFormControl.patchValue(result, { emitEvent: false }); + this.dirty = true; + }); + } else { + this.selectionFormControl.patchValue(null, { emitEvent: false }); + this.dirty = true; + } + } + + onFocus() { + if (this.dirty) { + this.selectionFormControl.updateValueAndValidity({onlySelf: true, emitEvent: true}); + this.dirty = false; + } + } + + updateView(value: string) { + this.searchText = value ? value : ''; + if (this.modelValue !== value) { + this.modelValue = value; + this.propagateChange(this.modelValue); + } + } + + registerOnChange(fn: any): void { + this.propagateChange = fn; + } + + registerOnTouched(fn: any): void { + } + + setDisabledState(isDisabled: boolean): void { + this.disabled = isDisabled; + if (this.disabled) { + this.selectionFormControl.disable({emitEvent: false}); + } else { + this.selectionFormControl.enable({emitEvent: false}); + } + } + + clear() { + this.selectionFormControl.patchValue(null, {emitEvent: true}); + setTimeout(() => { + this.nameInput.nativeElement.blur(); + this.nameInput.nativeElement.focus(); + }, 0); + } +} diff --git a/ui-ngx/src/app/shared/components/unit-input.component.html b/ui-ngx/src/app/shared/components/unit-input.component.html index c15b232444..b0f3625eb0 100644 --- a/ui-ngx/src/app/shared/components/unit-input.component.html +++ b/ui-ngx/src/app/shared/components/unit-input.component.html @@ -20,13 +20,20 @@ placeholder="{{ 'widget-config.set' | translate }}" (focusin)="onFocus()" [matAutocomplete]="unitsAutocomplete"> - + + warning + >; @@ -67,7 +81,8 @@ export class UnitInputComponent implements ControlValueAccessor, OnInit { private propagateChange = (_val: any) => {}; - constructor(private fb: FormBuilder, + constructor(private injector: Injector, + private fb: FormBuilder, private resourcesService: ResourcesService, private translate: TranslateService) { } @@ -84,6 +99,12 @@ export class UnitInputComponent implements ControlValueAccessor, OnInit { ); } + ngAfterViewInit() { + if (this.required) { + this.unitsFormControl.setValidators([Validators.required]); + } + } + writeValue(symbol?: string): void { this.searchText = ''; this.modelValue = symbol; @@ -157,11 +178,16 @@ export class UnitInputComponent implements ControlValueAccessor, OnInit { private unitsConstant(): Observable> { if (this.fetchUnits$ === null) { this.fetchUnits$ = getUnits(this.resourcesService).pipe( - map(units => units.map(u => ({ - symbol: u.symbol, - name: this.translate.instant(u.name), - tags: u.tags - }))), + map((units) => { + if (this.tagFilter) { + units = units.filter(u => u.tags.includes(this.tagFilter)); + } + return units.map(u => ({ + symbol: u.symbol, + name: this.translate.instant(u.name), + tags: u.tags + })); + }), shareReplay(1) ); } diff --git a/ui-ngx/src/app/shared/models/unit.models.ts b/ui-ngx/src/app/shared/models/unit.models.ts index 7d9f88a068..408c0b23b9 100644 --- a/ui-ngx/src/app/shared/models/unit.models.ts +++ b/ui-ngx/src/app/shared/models/unit.models.ts @@ -23,6 +23,15 @@ export interface Unit { tags: string[]; } +export enum UnitsType { + capacity = 'capacity' +} + +export enum Units { + percent = '%', + liters = 'L' +} + export const unitBySymbol = (_units: Array, symbol: string): Unit => _units.find(u => u.symbol === symbol); const searchUnitTags = (unit: Unit, searchText: string): boolean => diff --git a/ui-ngx/src/app/shared/models/widget-settings.models.ts b/ui-ngx/src/app/shared/models/widget-settings.models.ts index 056738f396..71c47f1cd2 100644 --- a/ui-ngx/src/app/shared/models/widget-settings.models.ts +++ b/ui-ngx/src/app/shared/models/widget-settings.models.ts @@ -393,6 +393,33 @@ export const textStyle = (font?: Font, letterSpacing = 'normal'): ComponentStyle return style; }; +export const inlineTextStyle = (font?: Font, letterSpacing = 'normal'): ComponentStyle => { + const style: ComponentStyle = { + letterSpacing + }; + if (font?.style) { + style['font-style'] = font.style; + } + if (font?.weight) { + style['font-weight'] = font.weight; + } + if (font?.lineHeight) { + style['line-height'] = font.lineHeight; + } + if (font?.size) { + style['font-size'] = (font.size + (font.sizeUnit || 'px')); + } + if (font?.family) { + style['font-family'] = font.family + + (font.family !== 'Roboto' ? ', Roboto' : ''); + } + return style; +}; + +export const cssTextFromInlineStyle = (styleObj: { [key: string]: string | number }): string => Object.entries(styleObj) + .map(([key, value]) => `${key}: ${value}`) + .join('; '); + export const isFontSet = (font: Font): boolean => (!!font && !!font.style && !!font.weight && !!font.size && !!font.family); export const isFontPartiallySet = (font: Font): boolean => (!!font && (!!font.style || !!font.weight || !!font.size || !!font.family)); diff --git a/ui-ngx/src/app/shared/shared.module.ts b/ui-ngx/src/app/shared/shared.module.ts index 2211f2e0e1..fb6a1a086e 100644 --- a/ui-ngx/src/app/shared/shared.module.ts +++ b/ui-ngx/src/app/shared/shared.module.ts @@ -199,6 +199,8 @@ import { MaterialIconsComponent } from '@shared/components/material-icons.compon import { ColorPickerPanelComponent } from '@shared/components/color-picker/color-picker-panel.component'; import { TbIconComponent } from '@shared/components/icon.component'; import { HintTooltipIconComponent } from '@shared/components/hint-tooltip-icon.component'; +import { StringAutocompleteComponent } from '@shared/components/string-autocomplete.component'; +import { MatFormFieldModule } from '@angular/material/form-field'; export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) { return markedOptionsService; @@ -374,6 +376,7 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) ToggleOption, ToggleSelectComponent, UnitInputComponent, + StringAutocompleteComponent, MaterialIconsComponent, RuleChainSelectComponent, TbIconComponent, @@ -398,6 +401,7 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) MatGridListModule, MatDialogModule, MatSelectModule, + MatFormFieldModule, MatTooltipModule, MatTableModule, MatPaginatorModule, @@ -513,6 +517,7 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) MatGridListModule, MatDialogModule, MatSelectModule, + MatFormFieldModule, MatTooltipModule, MatTableModule, MatPaginatorModule, @@ -609,6 +614,7 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) ToggleOption, ToggleSelectComponent, UnitInputComponent, + StringAutocompleteComponent, MaterialIconsComponent, RuleChainSelectComponent, TbIconComponent, diff --git a/ui-ngx/src/assets/help/en_US/widget/lib/indicator/shape_attribute_fn.md b/ui-ngx/src/assets/help/en_US/widget/lib/indicator/shape_attribute_fn.md new file mode 100644 index 0000000000..94ef69521e --- /dev/null +++ b/ui-ngx/src/assets/help/en_US/widget/lib/indicator/shape_attribute_fn.md @@ -0,0 +1,69 @@ +#### Shape attribute name + +A string expression value that allows you dynamically select shape image depending on attribute name. + +**Attribute values that could be used to add the image:** + +Alt text + +``` +Vertical Oval +{:copy-code} +``` +Alt text + +``` +Vertical Cylinder +{:copy-code} +``` +Alt text + +``` +Vertical Capsule +{:copy-code} +``` +Alt text + +``` +Rectangle +{:copy-code} +``` +Alt text + +``` +Horizontal Oval +{:copy-code} +``` +Alt text + +``` +Horizontal Ellipse +{:copy-code} +``` +Alt text + +``` +Horizontal Dish Ends +{:copy-code} +``` +Alt text + +``` +Horizontal Cylinder +{:copy-code} +``` +Alt text + +``` +Horizontal Capsule +{:copy-code} +``` +Alt text + +``` +Horizontal 2:1 Elliptical +{:copy-code} +``` + +
+
diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index b4c0f07c85..2a2cb4f147 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -4229,20 +4229,20 @@ "carat": "Carat", "cubic-millimeter": "Cubic Millimeter", "cubic-centimeter": "Cubic Centimeter", - "cubic-meter": "Cubic Meter/s", - "cubic-kilometer": "Cubic Kilometers", + "cubic-meter": "Cubic Meter", + "cubic-kilometer": "Cubic Kilometer", "microliter": "Microliter", "milliliter": "Milliliter", "liter": "Liter", "hectoliter": "Hectolitre", "cubic-inch": "Cubic Inch", "cubic-foot": "Cubic Foot", - "cubic-yard": "Cubic Yards", + "cubic-yard": "Cubic Yard", "fluid-ounce": "Fluid Ounce", "pint": "Pint", "quart": "Quart", "gallon": "Gallon", - "oil-barrels": "Oil Barrels", + "oil-barrels": "Oil Barrel", "cubic-meter-per-kilogram": "Cubic Meter per Kilogram", "gill": "Gill", "hogshead": "Hogshead", @@ -4286,7 +4286,6 @@ "ton-force-per-square-inch": "Ton-force per Square Inch", "kilonewton-per-square-meter": "Kilonewton per Square Meter", "newton-per-square-millimeter": "Newton per Square Millimeter", - "microjoule": "Microjoule", "millijoule": "Millijoule", "joule": "Joule", @@ -5031,7 +5030,9 @@ "show-card-buttons": "Show card buttons", "card-border-radius": "Card border radius", "card-appearance": "Card appearance", - "color": "Color" + "color": "Color", + "tooltip": "Tooltip", + "units-required": "Unit is required." }, "widget-type": { "import": "Import widget type", @@ -6069,6 +6070,50 @@ "value-card-style": "Value card style", "auto-scale": "Auto scale" }, + "liquid-level-card": { + "layout-simple": "Simple", + "layout-percentage": "Percentage", + "layout-absolute": "Absolute", + "layout": "Layout", + "background-overlay": "Value background overlay", + "total-volume": "Total volume", + "tank": "Tank", + "shape": "Shape", + "datasource-units": "Source units", + "widget-units": "Widget units", + "decimals": "Decimals", + "liquid": "Liquid", + "liquid-color": "Liquid color", + "value": "Value", + "value-font": "Value font", + "level": "Level", + "last-update": "Last update", + "shape-by-attribute": "Set tank shape by attribute name", + "tooltip-background": "Background color", + "background-blur": "Background blur", + "tank-color": "Tank color", + "static": "Static", + "see-examples": "See examples", + "attribute": "Attribute", + "shape-type": "Type", + "v-oval": "Vertical Oval", + "v-cylinder": "Vertical Cylinder", + "v-capsule": "Vertical Capsule", + "rectangle": "Rectangle", + "h-oval": "Horizontal Oval", + "h-ellipse": "Horizontal Ellipse", + "h-dish-ends": "Horizontal Dish Ends", + "h-cylinder": "Horizontal Cylinder", + "h-capsule": "Horizontal Capsule", + "h-elliptical_2_1": "Horizontal 2:1 Elliptical", + "icon": "Card icon", + "title": "Card title", + "units": "Units", + "color-and-font": "Color and font", + "shape-attribute-name": "Attribute name", + "total-volume-required": "Total volume is required.", + "attribute-name-required": "Attribute name is required." + }, "aggregated-value-card": { "subtitle": "Subtitle", "chart": "Chart", diff --git a/ui-ngx/src/assets/metadata/units.json b/ui-ngx/src/assets/metadata/units.json index 988c3f34ce..5e1b0839e8 100644 --- a/ui-ngx/src/assets/metadata/units.json +++ b/ui-ngx/src/assets/metadata/units.json @@ -249,7 +249,7 @@ }, { "name": "unit.liter", - "symbol": "l", + "symbol": "L", "tags": ["volume","capacity","extent","liter","liters","l"] }, { @@ -1108,7 +1108,7 @@ "symbol": "%", "tags": ["power source","state of charge (SoC)","battery","battery level","level","humidity","moisture","percentage", "relative humidity","water content","soil moisture","irrigation","water in soil","soil water content","VWC", - "Volumetric Water Content","Total Harmonic Distortion","THD","power quality","UV Transmittance","%"] + "Volumetric Water Content","Total Harmonic Distortion","THD","power quality","UV Transmittance","%", "capacity"] }, { "name": "unit.rssi", diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-2_1-elliptical.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-2_1-elliptical.svg new file mode 100644 index 0000000000..ee436787ce --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-2_1-elliptical.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-capsule.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-capsule.svg new file mode 100644 index 0000000000..3f587b065d --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-capsule.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-cylinder.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-cylinder.svg new file mode 100644 index 0000000000..b766e3e619 --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-cylinder.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-dish-ends.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-dish-ends.svg new file mode 100644 index 0000000000..d0366e4d64 --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-dish-ends.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-ellipse.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-ellipse.svg new file mode 100644 index 0000000000..40f76dc505 --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-ellipse.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-oval.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-oval.svg new file mode 100644 index 0000000000..81430aa60a --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/horizontal-oval.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/rectangle.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/rectangle.svg new file mode 100644 index 0000000000..8be992be46 --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/rectangle.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-capsule.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-capsule.svg new file mode 100644 index 0000000000..92af4943cd --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-capsule.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-cylinder.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-cylinder.svg new file mode 100644 index 0000000000..a62467e02a --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-cylinder.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-oval.svg b/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-oval.svg new file mode 100644 index 0000000000..ec8176a51f --- /dev/null +++ b/ui-ngx/src/assets/widget/liquid-level/shapes/vertical-oval.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui-ngx/src/form.scss b/ui-ngx/src/form.scss index 93272af3ca..3b29fe986c 100644 --- a/ui-ngx/src/form.scss +++ b/ui-ngx/src/form.scss @@ -368,14 +368,20 @@ .mat-mdc-text-field-wrapper { .mat-mdc-form-field-icon-suffix { padding: 0; - display: none; + display: flex; + align-items: center; + + > *:not(.tb-suffix-show-always) { + display: none; + } } } &:hover { .mat-mdc-text-field-wrapper { .mat-mdc-form-field-icon-suffix { - display: flex; - align-items: center; + > * { + display: block; + } } } } diff --git a/ui-ngx/src/styles.scss b/ui-ngx/src/styles.scss index 0ee154cf7d..ee6f6374cf 100644 --- a/ui-ngx/src/styles.scss +++ b/ui-ngx/src/styles.scss @@ -342,6 +342,12 @@ mat-label { } } +mat-icon { + &.tb-error { + color: rgb(221, 44, 0); + } +} + .tb-error-messages { height: 24px; //30px margin-top: -6px; @@ -356,6 +362,13 @@ mat-label { color: rgb(221, 44, 0); } +.mat-mdc-tooltip.tb-error-tooltip { + .mdc-tooltip__surface { + background-color: rgba(209, 39, 48, 0.12); + color: rgba(209, 39, 48, 1); + } +} + .tb-autocomplete { .mat-mdc-option { border-bottom: 1px solid #eee; From d3db5ad024d0fafa72116f132a1cc3f19ff4ba53 Mon Sep 17 00:00:00 2001 From: Dmitriymush Date: Thu, 19 Oct 2023 17:30:02 +0300 Subject: [PATCH 2/7] merging w/ master --- ...uid-level-card-basic-config.component.html | 35 ++++++------------- ...iquid-level-card-basic-config.component.ts | 35 ++++++------------- .../indicator/liquid-level-widget.models.ts | 35 ++++++------------- .../lib/indicator/liquid-level-widget.ts | 35 ++++++------------- ...-level-card-widget-settings.component.html | 35 ++++++------------- ...id-level-card-widget-settings.component.ts | 35 ++++++------------- .../string-autocomplete.component.html | 35 ++++++------------- .../string-autocomplete.component.scss | 35 ++++++------------- .../string-autocomplete.component.ts | 35 ++++++------------- 9 files changed, 90 insertions(+), 225 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.html b/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.html index b23f14e9ae..03cc7894c6 100644 --- a/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.html @@ -1,33 +1,18 @@ diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.ts index 47852514e8..abbc0d5102 100644 --- a/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.ts @@ -1,32 +1,17 @@ /// -/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// Copyright © 2016-2023 The Thingsboard Authors /// -/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at /// -/// NOTICE: All information contained herein is, and remains -/// the property of ThingsBoard, Inc. and its suppliers, -/// if any. The intellectual and technical concepts contained -/// herein are proprietary to ThingsBoard, Inc. -/// and its suppliers and may be covered by U.S. and Foreign Patents, -/// patents in process, and are protected by trade secret or copyright law. +/// http://www.apache.org/licenses/LICENSE-2.0 /// -/// Dissemination of this information or reproduction of this material is strictly forbidden -/// unless prior written permission is obtained from COMPANY. -/// -/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, -/// managers or contractors who have executed Confidentiality and Non-disclosure agreements -/// explicitly covering such access. -/// -/// The copyright notice above does not evidence any actual or intended publication -/// or disclosure of this source code, which includes -/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. -/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, -/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT -/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, -/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. -/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION -/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, -/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. /// import { ChangeDetectorRef, Component, Injector, ViewChild } from '@angular/core'; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts index 0c4b34ca6c..fabe986b9f 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts @@ -1,32 +1,17 @@ /// -/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// Copyright © 2016-2023 The Thingsboard Authors /// -/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at /// -/// NOTICE: All information contained herein is, and remains -/// the property of ThingsBoard, Inc. and its suppliers, -/// if any. The intellectual and technical concepts contained -/// herein are proprietary to ThingsBoard, Inc. -/// and its suppliers and may be covered by U.S. and Foreign Patents, -/// patents in process, and are protected by trade secret or copyright law. +/// http://www.apache.org/licenses/LICENSE-2.0 /// -/// Dissemination of this information or reproduction of this material is strictly forbidden -/// unless prior written permission is obtained from COMPANY. -/// -/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, -/// managers or contractors who have executed Confidentiality and Non-disclosure agreements -/// explicitly covering such access. -/// -/// The copyright notice above does not evidence any actual or intended publication -/// or disclosure of this source code, which includes -/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. -/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, -/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT -/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, -/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. -/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION -/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, -/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. /// import { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts index 1790495b54..7c86989f31 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts @@ -1,32 +1,17 @@ /// -/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// Copyright © 2016-2023 The Thingsboard Authors /// -/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at /// -/// NOTICE: All information contained herein is, and remains -/// the property of ThingsBoard, Inc. and its suppliers, -/// if any. The intellectual and technical concepts contained -/// herein are proprietary to ThingsBoard, Inc. -/// and its suppliers and may be covered by U.S. and Foreign Patents, -/// patents in process, and are protected by trade secret or copyright law. +/// http://www.apache.org/licenses/LICENSE-2.0 /// -/// Dissemination of this information or reproduction of this material is strictly forbidden -/// unless prior written permission is obtained from COMPANY. -/// -/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, -/// managers or contractors who have executed Confidentiality and Non-disclosure agreements -/// explicitly covering such access. -/// -/// The copyright notice above does not evidence any actual or intended publication -/// or disclosure of this source code, which includes -/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. -/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, -/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT -/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, -/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. -/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION -/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, -/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. /// diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.html index 1d54765bcc..7137226fdc 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.html @@ -1,33 +1,18 @@ diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.ts index 1565fa5a92..50a1bec81f 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.ts @@ -1,32 +1,17 @@ /// -/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// Copyright © 2016-2023 The Thingsboard Authors /// -/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at /// -/// NOTICE: All information contained herein is, and remains -/// the property of ThingsBoard, Inc. and its suppliers, -/// if any. The intellectual and technical concepts contained -/// herein are proprietary to ThingsBoard, Inc. -/// and its suppliers and may be covered by U.S. and Foreign Patents, -/// patents in process, and are protected by trade secret or copyright law. +/// http://www.apache.org/licenses/LICENSE-2.0 /// -/// Dissemination of this information or reproduction of this material is strictly forbidden -/// unless prior written permission is obtained from COMPANY. -/// -/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, -/// managers or contractors who have executed Confidentiality and Non-disclosure agreements -/// explicitly covering such access. -/// -/// The copyright notice above does not evidence any actual or intended publication -/// or disclosure of this source code, which includes -/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. -/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, -/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT -/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, -/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. -/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION -/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, -/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. /// import { ChangeDetectorRef, Component, Injector, ViewChild } from '@angular/core'; diff --git a/ui-ngx/src/app/shared/components/string-autocomplete.component.html b/ui-ngx/src/app/shared/components/string-autocomplete.component.html index 49a9f716e3..f021b57618 100644 --- a/ui-ngx/src/app/shared/components/string-autocomplete.component.html +++ b/ui-ngx/src/app/shared/components/string-autocomplete.component.html @@ -1,33 +1,18 @@ diff --git a/ui-ngx/src/app/shared/components/string-autocomplete.component.scss b/ui-ngx/src/app/shared/components/string-autocomplete.component.scss index a514186a25..950fca110d 100644 --- a/ui-ngx/src/app/shared/components/string-autocomplete.component.scss +++ b/ui-ngx/src/app/shared/components/string-autocomplete.component.scss @@ -1,32 +1,17 @@ /** - * ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL + * Copyright © 2016-2023 The Thingsboard Authors * - * Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * NOTICE: All information contained herein is, and remains - * the property of ThingsBoard, Inc. and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to ThingsBoard, Inc. - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. + * http://www.apache.org/licenses/LICENSE-2.0 * - * Dissemination of this information or reproduction of this material is strictly forbidden - * unless prior written permission is obtained from COMPANY. - * - * Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, - * managers or contractors who have executed Confidentiality and Non-disclosure agreements - * explicitly covering such access. - * - * The copyright notice above does not evidence any actual or intended publication - * or disclosure of this source code, which includes - * information that is confidential and/or proprietary, and is a trade secret, of COMPANY. - * ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, - * OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT - * THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, - * AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. - * THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION - * DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, - * OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ .tb-autocomplete.tb-option-input-autocomplete { .mat-mdc-option { diff --git a/ui-ngx/src/app/shared/components/string-autocomplete.component.ts b/ui-ngx/src/app/shared/components/string-autocomplete.component.ts index 91a9ee2652..b2e03db797 100644 --- a/ui-ngx/src/app/shared/components/string-autocomplete.component.ts +++ b/ui-ngx/src/app/shared/components/string-autocomplete.component.ts @@ -1,32 +1,17 @@ /// -/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// Copyright © 2016-2023 The Thingsboard Authors /// -/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at /// -/// NOTICE: All information contained herein is, and remains -/// the property of ThingsBoard, Inc. and its suppliers, -/// if any. The intellectual and technical concepts contained -/// herein are proprietary to ThingsBoard, Inc. -/// and its suppliers and may be covered by U.S. and Foreign Patents, -/// patents in process, and are protected by trade secret or copyright law. +/// http://www.apache.org/licenses/LICENSE-2.0 /// -/// Dissemination of this information or reproduction of this material is strictly forbidden -/// unless prior written permission is obtained from COMPANY. -/// -/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, -/// managers or contractors who have executed Confidentiality and Non-disclosure agreements -/// explicitly covering such access. -/// -/// The copyright notice above does not evidence any actual or intended publication -/// or disclosure of this source code, which includes -/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. -/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, -/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT -/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, -/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. -/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION -/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, -/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. /// import { From c20098088d0c58d5cf0dc20754a040b5104d1bb1 Mon Sep 17 00:00:00 2001 From: Dmitriymush Date: Fri, 20 Oct 2023 15:09:40 +0300 Subject: [PATCH 3/7] UI: Liquid level widget improvements, string autocomplete improvements --- .../app/core/services/resources.service.ts | 4 +- ...uid-level-card-basic-config.component.html | 4 +- .../indicator/liquid-level-widget.models.ts | 3 +- .../lib/indicator/liquid-level-widget.ts | 31 +++++----- ...-level-card-widget-settings.component.html | 3 + .../string-autocomplete.component.html | 22 ++++--- .../string-autocomplete.component.scss | 33 ++++++----- .../string-autocomplete.component.ts | 58 ++++++++++++------- ui-ngx/src/app/shared/shared.module.ts | 3 - 9 files changed, 99 insertions(+), 62 deletions(-) diff --git a/ui-ngx/src/app/core/services/resources.service.ts b/ui-ngx/src/app/core/services/resources.service.ts index 29d86fc2fb..f7a34c9ef5 100644 --- a/ui-ngx/src/app/core/services/resources.service.ts +++ b/ui-ngx/src/app/core/services/resources.service.ts @@ -68,7 +68,9 @@ export class ResourcesService { } const subject = new ReplaySubject(); this.loadedJsonResources[url] = subject; - this.http.get(url).subscribe( + const req$ = (url.endsWith('.raw') || url.endsWith('.svg') ? + this.http.get(url, {responseType: 'text'}) : this.http.get(url)) as Observable; + req$.subscribe( { next: (o) => { if (postProcess) { diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.html b/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.html index 03cc7894c6..82dcb21c81 100644 --- a/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/cards/liquid-level-card-basic-config.component.html @@ -93,6 +93,7 @@
widgets.liquid-level-card.shape-attribute-name
@@ -151,6 +152,7 @@ @@ -183,6 +185,7 @@
widget-config.show-card-buttons
- {{ 'widget-config.data-export' | translate }} {{ 'fullscreen.fullscreen' | translate }} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts index fabe986b9f..7602a97dfe 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.models.ts @@ -16,7 +16,8 @@ import { ColorSettings, - constantColor, cssTextFromInlineStyle, + constantColor, + cssTextFromInlineStyle, DateFormatSettings, Font, lastUpdateAgoDateFormat diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts index 7c86989f31..eab8c16bef 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts @@ -43,13 +43,11 @@ import { import ITooltipsterInstance = JQueryTooltipster.ITooltipsterInstance; import { ResourcesService } from '@core/services/resources.service'; import { NULL_UUID } from '@shared/models/id/has-uuid'; -import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; @Component({ selector: 'tb-liquid-level-widget', - template: '', - styleUrls: [], - encapsulation: ViewEncapsulation.None + template: '' }) export class LiquidLevelWidgetComponent implements OnInit { @@ -98,17 +96,7 @@ export class LiquidLevelWidgetComponent implements OnInit { ngOnInit(): void { this.ctx.$scope.liquidLevelWidget = this; this.settings = {...levelCardDefaultSettings(), ...this.ctx.widgetConfig, ...this.ctx.settings}; - - this.tankColor = ColorProcessor.fromSettings(this.settings.tankColor); - this.volumeColor = ColorProcessor.fromSettings(this.settings.volumeColor); - this.valueColor = ColorProcessor.fromSettings(this.settings.valueColor); - this.liquidColor = ColorProcessor.fromSettings(this.settings.liquidColor); - this.backgroundOverlayColor = ColorProcessor.fromSettings(this.settings.backgroundOverlayColor); - this.tooltipLevelColor = ColorProcessor.fromSettings(this.settings.tooltipLevelColor); - this.tooltipDateColor = ColorProcessor.fromSettings(this.settings.tooltipDateColor); - this.tooltipBackgroundColor = ColorProcessor.fromSettings(this.settings.tooltipBackgroundColor); - - this.tooltipDateFormat = DateFormatProcessor.fromSettings(this.ctx.$injector, this.settings.tooltipDateFormat); + this.declareStyles(); } public onInit() { @@ -140,6 +128,19 @@ export class LiquidLevelWidgetComponent implements OnInit { }); } + private declareStyles():void { + this.tankColor = ColorProcessor.fromSettings(this.settings.tankColor); + this.volumeColor = ColorProcessor.fromSettings(this.settings.volumeColor); + this.valueColor = ColorProcessor.fromSettings(this.settings.valueColor); + this.liquidColor = ColorProcessor.fromSettings(this.settings.liquidColor); + this.backgroundOverlayColor = ColorProcessor.fromSettings(this.settings.backgroundOverlayColor); + this.tooltipLevelColor = ColorProcessor.fromSettings(this.settings.tooltipLevelColor); + this.tooltipDateColor = ColorProcessor.fromSettings(this.settings.tooltipDateColor); + this.tooltipBackgroundColor = ColorProcessor.fromSettings(this.settings.tooltipBackgroundColor); + + this.tooltipDateFormat = DateFormatProcessor.fromSettings(this.ctx.$injector, this.settings.tooltipDateFormat); + } + private getData(): Observable<{ svg: string; volume: number; units: string }> { const entityId: EntityId = { entityType: this.ctx.datasources[0].entityType, diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.html index 7137226fdc..0f3f943cc4 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/liquid-level-card-widget-settings.component.html @@ -48,6 +48,7 @@
widgets.liquid-level-card.shape-attribute-name
@@ -110,6 +111,7 @@ @@ -143,6 +145,7 @@ [fxShow]="levelCardWidgetSettingsForm.get('volumeSource')?.value === volumeOptions.attribute" [fetchOptionsFn]="fetchOptions.bind(this)" [required]="isRequired('volumeAttributeName')" + [errorText]="'widgets.liquid-level-card.attribute-name-required' | translate" style="flex: 1; width: auto;" asBoxInput colorClearButton class="flex" formControlName="volumeAttributeName"> diff --git a/ui-ngx/src/app/shared/components/string-autocomplete.component.html b/ui-ngx/src/app/shared/components/string-autocomplete.component.html index f021b57618..b2380ba239 100644 --- a/ui-ngx/src/app/shared/components/string-autocomplete.component.html +++ b/ui-ngx/src/app/shared/components/string-autocomplete.component.html @@ -15,30 +15,36 @@ limitations under the License. --> - + + {{label}} - - + [matTooltipClass]="tooltipClass" + class="material-icons tb-suffix-show-always tb-error"> warning + + {{errorText}} + - + diff --git a/ui-ngx/src/app/shared/components/string-autocomplete.component.scss b/ui-ngx/src/app/shared/components/string-autocomplete.component.scss index 950fca110d..d97c3f8987 100644 --- a/ui-ngx/src/app/shared/components/string-autocomplete.component.scss +++ b/ui-ngx/src/app/shared/components/string-autocomplete.component.scss @@ -13,19 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -.tb-autocomplete.tb-option-input-autocomplete { - .mat-mdc-option { - border-bottom: none; - .mdc-list-item__primary-text { - flex: 1; - display: flex; - flex-direction: row; - gap: 8px; - .tb-option { - font-size: 14px; - font-weight: 400; - line-height: 20px; - letter-spacing: 0.2px; +:host { + display: flex; + flex: 1 1 0%; + max-width: 100%; + box-sizing: border-box; + + .tb-autocomplete.tb-option-input-autocomplete { + .mat-mdc-option { + border-bottom: none; + .mdc-list-item__primary-text { + flex: 1; + display: flex; + flex-direction: row; + gap: 8px; + .tb-option { + font-size: 14px; + font-weight: 400; + line-height: 20px; + letter-spacing: 0.2px; + } } } } diff --git a/ui-ngx/src/app/shared/components/string-autocomplete.component.ts b/ui-ngx/src/app/shared/components/string-autocomplete.component.ts index b2e03db797..9f6d238d3e 100644 --- a/ui-ngx/src/app/shared/components/string-autocomplete.component.ts +++ b/ui-ngx/src/app/shared/components/string-autocomplete.component.ts @@ -19,11 +19,8 @@ import { Input, forwardRef, OnInit, - AfterViewInit, - HostBinding, ViewChild, - ElementRef, - Injector + ElementRef } from '@angular/core'; import { ControlValueAccessor, @@ -33,7 +30,9 @@ import { FormBuilder } from '@angular/forms'; import { Observable, of } from 'rxjs'; -import { tap, map, switchMap } from 'rxjs/operators'; +import { tap, map, switchMap, take } from 'rxjs/operators'; +import { TranslateService } from '@ngx-translate/core'; +import { coerceBoolean } from '@shared/decorators/coercion'; @Component({ selector: 'tb-string-autocomplete', @@ -47,13 +46,12 @@ import { tap, map, switchMap } from 'rxjs/operators'; } ] }) -export class StringAutocompleteComponent implements ControlValueAccessor, OnInit, AfterViewInit { - - @HostBinding('style.display') get hostDisplay() {return 'flex';}; +export class StringAutocompleteComponent implements ControlValueAccessor, OnInit { @Input() disabled: boolean; + @coerceBoolean() @Input() required: boolean; @@ -61,11 +59,36 @@ export class StringAutocompleteComponent implements ControlValueAccessor, OnInit @ViewChild('nameInput', {static: true}) nameInput: ElementRef; + @Input() + placeholderText: string = this.translate.instant('widget-config.set'); + + @Input() + subscriptSizing: string = 'dynamic'; + + @Input() + ngClass: string | string[] | Set | { [klass: string]: any; } = 'tb-inline-field tb-suffix-show-on-hover'; + + @Input() + appearance: string = 'outline'; + + @Input() + label: string; + + @Input() + tooltipClass: string = 'tb-error-tooltip'; + + @Input() + errorText: string; + + @coerceBoolean() + @Input() + showInlineError: boolean = false; + selectionFormControl: FormControl; modelValue: string | null; - filteredOptions: Observable>; + filteredOptions$: Observable>; searchText = ''; @@ -73,13 +96,13 @@ export class StringAutocompleteComponent implements ControlValueAccessor, OnInit private propagateChange = (_val: any) => {}; - constructor(private injector: Injector, - private fb: FormBuilder) { + constructor(private fb: FormBuilder, + private translate: TranslateService) { } ngOnInit() { - this.selectionFormControl = this.fb.control('', []); - this.filteredOptions = this.selectionFormControl.valueChanges + this.selectionFormControl = this.fb.control('', this.required ? [Validators.required] : []); + this.filteredOptions$ = this.selectionFormControl.valueChanges .pipe( tap(value => this.updateView(value)), map(value => value ? value : ''), @@ -87,12 +110,6 @@ export class StringAutocompleteComponent implements ControlValueAccessor, OnInit ); } - ngAfterViewInit() { - if (this.required) { - this.selectionFormControl.setValidators([Validators.required]); - } - } - writeValue(option?: string): void { this.searchText = ''; this.modelValue = option ? option : null; @@ -107,7 +124,8 @@ export class StringAutocompleteComponent implements ControlValueAccessor, OnInit } return option; - }) + }), + take(1) ) .subscribe(result => { this.selectionFormControl.patchValue(result, { emitEvent: false }); diff --git a/ui-ngx/src/app/shared/shared.module.ts b/ui-ngx/src/app/shared/shared.module.ts index fb6a1a086e..042e453fe1 100644 --- a/ui-ngx/src/app/shared/shared.module.ts +++ b/ui-ngx/src/app/shared/shared.module.ts @@ -200,7 +200,6 @@ import { ColorPickerPanelComponent } from '@shared/components/color-picker/color import { TbIconComponent } from '@shared/components/icon.component'; import { HintTooltipIconComponent } from '@shared/components/hint-tooltip-icon.component'; import { StringAutocompleteComponent } from '@shared/components/string-autocomplete.component'; -import { MatFormFieldModule } from '@angular/material/form-field'; export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) { return markedOptionsService; @@ -401,7 +400,6 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) MatGridListModule, MatDialogModule, MatSelectModule, - MatFormFieldModule, MatTooltipModule, MatTableModule, MatPaginatorModule, @@ -517,7 +515,6 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) MatGridListModule, MatDialogModule, MatSelectModule, - MatFormFieldModule, MatTooltipModule, MatTableModule, MatPaginatorModule, From 23e0df065ed62fabddffc690e2e6f4e24c91dbb8 Mon Sep 17 00:00:00 2001 From: Dmitriymush Date: Fri, 20 Oct 2023 15:16:51 +0300 Subject: [PATCH 4/7] UI: Liquid level widget minor improvement --- .../app/shared/components/unit-input.component.ts | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/ui-ngx/src/app/shared/components/unit-input.component.ts b/ui-ngx/src/app/shared/components/unit-input.component.ts index 35ec683cc6..533df34cc9 100644 --- a/ui-ngx/src/app/shared/components/unit-input.component.ts +++ b/ui-ngx/src/app/shared/components/unit-input.component.ts @@ -23,8 +23,7 @@ import { OnInit, ViewChild, ViewEncapsulation, - Injector, - AfterViewInit + Injector } from '@angular/core'; import { ControlValueAccessor, @@ -52,7 +51,7 @@ import { ResourcesService } from '@core/services/resources.service'; ], encapsulation: ViewEncapsulation.None }) -export class UnitInputComponent implements ControlValueAccessor, OnInit, AfterViewInit { +export class UnitInputComponent implements ControlValueAccessor, OnInit { @HostBinding('style.display') get hostDisplay() {return 'flex';}; @@ -88,7 +87,7 @@ export class UnitInputComponent implements ControlValueAccessor, OnInit, AfterVi } ngOnInit() { - this.unitsFormControl = this.fb.control('', []); + this.unitsFormControl = this.fb.control('', this.required ? [Validators.required] : []); this.filteredUnits = this.unitsFormControl.valueChanges .pipe( tap(value => { @@ -99,12 +98,6 @@ export class UnitInputComponent implements ControlValueAccessor, OnInit, AfterVi ); } - ngAfterViewInit() { - if (this.required) { - this.unitsFormControl.setValidators([Validators.required]); - } - } - writeValue(symbol?: string): void { this.searchText = ''; this.modelValue = symbol; From 8b9f9cc4f9e474beb4264fa5f7c21ee80da5358d Mon Sep 17 00:00:00 2001 From: Dmitriymush Date: Fri, 20 Oct 2023 15:19:10 +0300 Subject: [PATCH 5/7] UI: Liquid level widget minor edition --- ui-ngx/src/app/shared/components/unit-input.component.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ui-ngx/src/app/shared/components/unit-input.component.ts b/ui-ngx/src/app/shared/components/unit-input.component.ts index 533df34cc9..cbdd1a3799 100644 --- a/ui-ngx/src/app/shared/components/unit-input.component.ts +++ b/ui-ngx/src/app/shared/components/unit-input.component.ts @@ -22,8 +22,7 @@ import { Input, OnInit, ViewChild, - ViewEncapsulation, - Injector + ViewEncapsulation } from '@angular/core'; import { ControlValueAccessor, @@ -80,8 +79,7 @@ export class UnitInputComponent implements ControlValueAccessor, OnInit { private propagateChange = (_val: any) => {}; - constructor(private injector: Injector, - private fb: FormBuilder, + constructor(private fb: FormBuilder, private resourcesService: ResourcesService, private translate: TranslateService) { } From c9e684ef6456c640ca9f0d74b9ac4f267d7e51cf Mon Sep 17 00:00:00 2001 From: Dmitriymush Date: Mon, 23 Oct 2023 12:47:43 +0300 Subject: [PATCH 6/7] UI: string autocomplete style addition and liquid level widget minor improvement --- .../lib/indicator/liquid-level-widget.ts | 8 ++-- .../string-autocomplete.component.scss | 38 ++++++++++--------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts index eab8c16bef..de106810f0 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/liquid-level-widget.ts @@ -192,7 +192,7 @@ export class LiquidLevelWidgetComponent implements OnInit { if (isDefinedAndNotNull(data) && data.length && typeof Number(data[1]) === 'number') { const percentage = this.convertInputData(Number(data[1])); this.updateSvg(percentage); - this.updateValueElement(this.convertOutputData(percentage)); + this.updateValueElement(this.convertOutputData(percentage), percentage); if (this.settings.showTooltip) { this.updateTooltip(data); @@ -382,7 +382,7 @@ export class LiquidLevelWidgetComponent implements OnInit { }); } - private updateValueElement(data: number): void { + private updateValueElement(data: number, percentage: number): void { let content: string; let container: JQuery; @@ -390,13 +390,13 @@ export class LiquidLevelWidgetComponent implements OnInit { .toFixed(this.settings.decimals || 0); const valueTextStyle = cssTextFromInlineStyle({...inlineTextStyle(this.settings.valueFont), color: this.valueColor.color}); - this.backgroundOverlayColor.update(data); + this.backgroundOverlayColor.update(percentage); if (this.overlayContainer) { this.overlayContainer.attr('fill', this.backgroundOverlayColor.color); } if (this.settings.layout === LevelCardLayout.absolute) { - this.volumeColor.update(data); + this.volumeColor.update(percentage); const volumeInLiters: number = convertLiters(this.volume, this.settings.volumeUnits as CapacityUnits, ConversionType.to); const volume = convertLiters(volumeInLiters, this.widgetUnits as CapacityUnits, ConversionType.from) diff --git a/ui-ngx/src/app/shared/components/string-autocomplete.component.scss b/ui-ngx/src/app/shared/components/string-autocomplete.component.scss index d97c3f8987..db7a08fac8 100644 --- a/ui-ngx/src/app/shared/components/string-autocomplete.component.scss +++ b/ui-ngx/src/app/shared/components/string-autocomplete.component.scss @@ -14,24 +14,28 @@ * limitations under the License. */ :host { - display: flex; - flex: 1 1 0%; - max-width: 100%; - box-sizing: border-box; + mat-form-field { + display: flex; + flex: 1 1 0%; + max-width: 100%; + box-sizing: border-box; - .tb-autocomplete.tb-option-input-autocomplete { - .mat-mdc-option { - border-bottom: none; - .mdc-list-item__primary-text { - flex: 1; - display: flex; - flex-direction: row; - gap: 8px; - .tb-option { - font-size: 14px; - font-weight: 400; - line-height: 20px; - letter-spacing: 0.2px; + .tb-autocomplete.tb-option-input-autocomplete { + .mat-mdc-option { + border-bottom: none; + + .mdc-list-item__primary-text { + flex: 1; + display: flex; + flex-direction: row; + gap: 8px; + + .tb-option { + font-size: 14px; + font-weight: 400; + line-height: 20px; + letter-spacing: 0.2px; + } } } } From 052c87f8bde80a57cb3f130158308cec765caa95 Mon Sep 17 00:00:00 2001 From: Dmitriymush Date: Mon, 23 Oct 2023 12:56:19 +0300 Subject: [PATCH 7/7] UI: additions to units and string autocomplete generic components --- .../app/shared/components/string-autocomplete.component.ts | 2 +- ui-ngx/src/app/shared/components/unit-input.component.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ui-ngx/src/app/shared/components/string-autocomplete.component.ts b/ui-ngx/src/app/shared/components/string-autocomplete.component.ts index 9f6d238d3e..cf0e2b6253 100644 --- a/ui-ngx/src/app/shared/components/string-autocomplete.component.ts +++ b/ui-ngx/src/app/shared/components/string-autocomplete.component.ts @@ -53,7 +53,7 @@ export class StringAutocompleteComponent implements ControlValueAccessor, OnInit @coerceBoolean() @Input() - required: boolean; + required: boolean = false; @Input() fetchOptionsFn: (searchText?: string) => Observable>; diff --git a/ui-ngx/src/app/shared/components/unit-input.component.ts b/ui-ngx/src/app/shared/components/unit-input.component.ts index cbdd1a3799..a0779b490f 100644 --- a/ui-ngx/src/app/shared/components/unit-input.component.ts +++ b/ui-ngx/src/app/shared/components/unit-input.component.ts @@ -36,6 +36,7 @@ import { getUnits, searchUnits, Unit, unitBySymbol, UnitsType } from '@shared/mo import { map, mergeMap, tap } from 'rxjs/operators'; import { TranslateService } from '@ngx-translate/core'; import { ResourcesService } from '@core/services/resources.service'; +import { coerceBoolean } from '@shared/decorators/coercion'; @Component({ selector: 'tb-unit-input', @@ -61,8 +62,9 @@ export class UnitInputComponent implements ControlValueAccessor, OnInit { @Input() disabled: boolean; + @coerceBoolean() @Input() - required: boolean; + required: boolean = false; @Input() tagFilter: UnitsType;