diff --git a/README.md b/README.md index 581e71977d..d479296869 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ ThingsBoard documentation is hosted on [thingsboard.io](https://thingsboard.io/d [![Smart farming](https://user-images.githubusercontent.com/8308069/152984443-a98b7d3d-ff7a-4037-9011-e71e1e6f755f.gif "Smart farming")](https://thingsboard.io/smart-farming/) [**IoT Rule Engine**](https://thingsboard.io/docs/user-guide/rule-engine-2-0/re-getting-started/) -[![IoT Rule Engine](https://thingsboard.io/images/demo/send-email-rule-chain.gif "IoT Rule Engine")](https://thingsboard.io/docs/user-guide/rule-engine-2-0/re-getting-started/) +[![IoT Rule Engine](https://img.thingsboard.io/demo/send-email-rule-chain.gif "IoT Rule Engine")](https://thingsboard.io/docs/user-guide/rule-engine-2-0/re-getting-started/) [**Smart metering**](https://thingsboard.io/smart-metering/) [![Smart metering](https://user-images.githubusercontent.com/8308069/31455788-6888a948-aec1-11e7-9819-410e0ba785e0.gif "Smart metering")](https://thingsboard.io/smart-metering/) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway.json similarity index 93% rename from application/src/main/data/json/demo/dashboards/gateway_list.json rename to application/src/main/data/json/demo/dashboards/gateway.json index 7abee6cbe4..b35b480ef2 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway.json @@ -7,13 +7,7 @@ "description": "", "widgets": { "23b9adc5-b3bd-040f-e5eb-a45925c73257": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -50,7 +44,8 @@ "enableSearch": true, "enableSelectColumnDisplay": false, "enableStickyHeader": true, - "enableStickyAction": true, + "enableStickyAction": false, + "showCellActionsMenu": true, "reserveSpaceForHiddenAction": "true", "displayEntityName": false, "displayEntityLabel": false, @@ -82,15 +77,33 @@ "type": "entityField", "label": "Created time", "color": "#2196f3", - "settings": {}, - "_hash": 0.4570900758216545 + "settings": { + "columnWidth": "140px", + "useCellStyleFunction": false, + "useCellContentFunction": false, + "defaultColumnVisibility": "visible", + "columnSelectionToDisplay": "enabled" + }, + "_hash": 0.4570900758216545, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": null, + "postFuncBody": null }, { "name": "name", "type": "entityField", "label": "Gateway name", "color": "#4caf50", - "settings": {}, + "settings": { + "columnWidth": "20%", + "useCellStyleFunction": false, + "useCellContentFunction": false, + "defaultColumnVisibility": "visible", + "columnSelectionToDisplay": "enabled" + }, "_hash": 0.45934623767875316, "aggregationType": null, "units": null, @@ -105,7 +118,7 @@ "label": "Status", "color": "#f44336", "settings": { - "columnWidth": "0px", + "columnWidth": "20%", "useCellStyleFunction": false, "useCellContentFunction": true, "cellContentFunction": "var newValue = value == 'true' ? \"Active\" : \"Inactive\";\r\nvar bgColor = value == 'true' ? 'rgba(25,128,56, .06)': 'rgba(203,37,48, .06)',\r\ncolor = value == 'true' ? 'rgb(25,128,56)': 'rgb(203,37,48)';\r\nreturn `
${newValue}
`", @@ -126,7 +139,7 @@ "label": "Active Connectors", "color": "#3f51b5", "settings": { - "columnWidth": "0px", + "columnWidth": "20%", "useCellStyleFunction": false, "useCellContentFunction": true, "cellContentFunction": "return value?JSON.parse(value).length:0;", @@ -146,8 +159,20 @@ "type": "attribute", "label": "Version", "color": "#8bc34a", - "settings": {}, - "_hash": 0.4705163811361781 + "settings": { + "columnWidth": "40%", + "useCellStyleFunction": false, + "useCellContentFunction": false, + "defaultColumnVisibility": "visible", + "columnSelectionToDisplay": "enabled" + }, + "_hash": 0.4705163811361781, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": null, + "postFuncBody": null } ] } @@ -168,7 +193,7 @@ "dialogTitle": "Docker commands", "dialogHideDashboardToolbar": true, "dialogWidth": null, - "dialogHeight": 45, + "dialogHeight": 55, "openInSeparateDialog": true, "openInPopover": false, "id": "ae2e5995-505f-a241-5fb2-6cbaf08b1b55" @@ -178,18 +203,14 @@ "icon": "settings", "useShowWidgetActionFunction": null, "showWidgetActionFunction": "return true;", - "type": "openDashboardState", - "targetDashboardStateId": "configuration", - "setEntityId": true, - "stateEntityParamName": null, - "openRightLayout": false, - "dialogTitle": "Gateway configuration", - "dialogHideDashboardToolbar": true, - "dialogWidth": null, - "dialogHeight": null, - "openInSeparateDialog": true, + "type": "customPretty", + "customHtml": "\n

gateway.gateway-configuration

\n \n \n
\n\n\n
\n\n", + "customCss": ".gateway-config {\n width: 800px !important;\n padding: 0 !important;\n min-height: 75vh;\n max-width: 100%;\n display: grid !important;\n}\n\n@media screen and (max-width: 599px) {\n .mat-mdc-dialog-content {\n max-height: calc(100% - 60px) !important;\n }\n}", + "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\n\nopenAddEntityDialog();\n\nfunction openAddEntityDialog() {\n customDialog.customDialog(htmlTemplate, AddEntityDialogController).subscribe();\n}\n\nfunction AddEntityDialogController(instance) {\n let vm = instance;\n \n vm.device = additionalParams.entity.id;\n\n vm.cancel = function() {\n vm.dialogRef.close(null);\n };\n}\n", + "customResources": [], + "openInSeparateDialog": false, "openInPopover": false, - "id": "c0c8eb55-48c6-8a4e-ad9a-427507e86916" + "id": "a54acd30-5c5f-d709-b892-5fc14f780e34" }, { "name": "Connectors", @@ -245,20 +266,21 @@ "widgetStyle": {}, "widgetCss": "", "pageSize": 1024, - "noDataDisplayMessage": "" + "noDataDisplayMessage": "", + "configMode": "advanced", + "titleFont": null, + "titleColor": null, + "titleIcon": null, + "iconColor": null, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "23b9adc5-b3bd-040f-e5eb-a45925c73257" + "id": "23b9adc5-b3bd-040f-e5eb-a45925c73257", + "typeFullFqn": "system.cards.entities_table" }, "d4a1ffc4-c9f6-7b15-bca0-17feb58bac99": { - "isSystemType": true, - "bundleAlias": "gateway_widgets", - "typeAlias": "gateway_configuration2", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 9.5, "sizeY": 6, "config": { @@ -298,7 +320,7 @@ "showTitle": false, "backgroundColor": "#fff", "color": "rgba(0, 0, 0, 0.87)", - "padding": "8px", + "padding": "0px", "settings": {}, "title": "New Gateway configuration", "showTitleIcon": false, @@ -315,20 +337,16 @@ "pageSize": 1024, "noDataDisplayMessage": "", "showLegend": false, - "useDashboardTimewindow": true + "useDashboardTimewindow": true, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "d4a1ffc4-c9f6-7b15-bca0-17feb58bac99" + "id": "d4a1ffc4-c9f6-7b15-bca0-17feb58bac99", + "typeFullFqn": "system.gateway_widgets.gateway_general_configuration" }, "02a05113-d878-b086-328e-75bd6f02b2bb": { - "isSystemType": true, - "bundleAlias": "gateway_widgets", - "typeAlias": "gateway_connector", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 11, "sizeY": 8, "config": { @@ -375,14 +393,14 @@ } }, "showTitle": false, - "backgroundColor": "#fff", + "backgroundColor": "#FFFFFF01", "color": "rgba(0, 0, 0, 0.87)", - "padding": "8px", + "padding": "0px", "settings": {}, "title": "New Gateway connector", "showTitleIcon": false, "titleTooltip": "", - "dropShadow": true, + "dropShadow": false, "enableFullscreen": false, "enableDataExport": false, "widgetStyle": {}, @@ -398,16 +416,11 @@ }, "row": 0, "col": 0, - "id": "02a05113-d878-b086-328e-75bd6f02b2bb" + "id": "02a05113-d878-b086-328e-75bd6f02b2bb", + "typeFullFqn": "system.gateway_widgets.gateway_connectors" }, "79f59106-758f-c428-8b93-4341faea705d": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "markdown_card", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 5, "sizeY": 3.5, "config": { @@ -558,9 +571,9 @@ "padding": "8px", "settings": { "useMarkdownTextFunction": true, - "markdownTextFunction": "var blockData = '';\nfunction createDataBlock(value, label, dividerStyle, mobile) {\n blockData += `\n \n
\n \n \n ${label}\n \n ${value}\n
`;\n}\ncreateDataBlock(data[0].Status, \"Status\", data[0].Status === \"Active\"? 'divider-green' : 'divider-red');\ncreateDataBlock(data[0].Name, \"Gateway Name\", '', ctx.isMobile);\ncreateDataBlock(data[0].Type, \"Gateway Type\", '');\ncreateDataBlock(\n `${(data[1]?data[1].count:0)} `\n + \" | \" + \n `${(data[2]?data[2][\"count 2\"]:0)} `\n , \"Devices\", '');\ncreateDataBlock(\n `${(data[0].active_connectors?JSON.parse(data[0].active_connectors).length:0)} `\n + \" | \" + \n `${(data[0].inactive_connectors?JSON.parse(data[0].inactive_connectors).length:0)} `\n , \"Connectors\", '');\ncreateDataBlock(data[0].ALL_ERRORS_COUNT || 0, \"Errors\", (data[0].ALL_ERRORS_COUNT || 0) === 0 ? 'divider-green' : 'divider-red');\nreturn `
${blockData}
`;", + "markdownTextFunction": "var blockData = '';\nvar connectorsIndex = ctx.actionsApi.getActionDescriptors('elementClick').findIndex(action=>action.name==\"Connecotrs\");\nvar logsIndex = ctx.actionsApi.getActionDescriptors('elementClick').findIndex(action=>action.name==\"Logs\");\nfunction generateMatHeader(index) {\n if( index !== undefined && index > -1) {\n return ``\n } else {\n return \"\" \n }\n}\nfunction createDataBlock(value, label, dividerStyle, mobile, index) {\n blockData += `\n \n
\n \n ${generateMatHeader(index)}\n ${label}\n
\n ${value}\n `;\n}\ncreateDataBlock(data[0].Status, \"Status\", data[0].Status === \"Active\"? 'divider-green' : 'divider-red');\ncreateDataBlock(data[0].Name, \"Gateway Name\", '', ctx.isMobile);\ncreateDataBlock(data[0].Type, \"Gateway Type\", '');\ncreateDataBlock(\n `${(data[1]?data[1].count:0)} `\n + \" | \" + \n `${(data[2]?data[2][\"count 2\"]:0)} `\n , \"Devices (Active | Inactive)\", '');\ncreateDataBlock(\n `${(data[0].active_connectors?JSON.parse(data[0].active_connectors).length:0)} `\n + \" | \" + \n `${(data[0].inactive_connectors?JSON.parse(data[0].inactive_connectors).length:0)} `\n , \"Connectors (Active | Inactive)\", '', '', connectorsIndex);\ncreateDataBlock(data[0].ALL_ERRORS_COUNT || 0, \"Errors\", (data[0].ALL_ERRORS_COUNT || 0) === 0 ? 'divider-green' : 'divider-red', '', logsIndex);\nreturn `
${blockData}
`;", "applyDefaultMarkdownStyle": false, - "markdownCss": ".divider {\n position: absolute;\n width: 3px;\n top: 8px;\n border-radius: 2px;\n bottom: 8px;\n border: 1px solid rgba(31, 70, 144, 1);\n background-color: rgba(31, 70, 144, 1);\n left: 10px;\n}\n.divider-green .divider {\n border: 1px solid rgb(25,128,56);\n background-color: rgb(25,128,56);\n}\n\n.divider-green .mat-mdc-card-content {\n color: rgb(25,128,56);\n}\n\n.divider-red .divider {\n border: 1px solid rgb(203,37,48);\n background-color: rgb(203,37,48);\n}\n\n.divider-red .mat-mdc-card-content {\n color: rgb(203,37,48);\n}\n\n.mdc-card {\n position: relative;\n padding-left: 10px;\n margin-bottom: 1px;\n}\n\n.mat-mdc-card-subtitle {\n font-weight: 400;\n font-size: 12px;\n}\n\n.mat-mdc-card-header {\n padding: 8px 16px 0;\n}\n\n.mat-mdc-card-content:last-child {\n padding-bottom: 8px;\n font-size: 16px;\n}\n\n.cards-container {\n height: calc(100% - 1px);\n justify-content: stretch;\n align-items: center;\n margin-bottom: 1px;\n}" + "markdownCss": ".divider {\n position: absolute;\n width: 3px;\n top: 8px;\n border-radius: 2px;\n bottom: 8px;\n border: 1px solid rgba(31, 70, 144, 1);\n background-color: rgba(31, 70, 144, 1);\n left: 10px;\n}\n.divider-green .divider {\n border: 1px solid rgb(25,128,56);\n background-color: rgb(25,128,56);\n}\n\n.divider-green .mat-mdc-card-content {\n color: rgb(25,128,56);\n}\n\n.divider-red .divider {\n border: 1px solid rgb(203,37,48);\n background-color: rgb(203,37,48);\n}\n\n.divider-red .mat-mdc-card-content {\n color: rgb(203,37,48);\n}\n\n.mdc-card {\n position: relative;\n padding-left: 10px;\n margin-bottom: 1px;\n}\n\n.mat-mdc-card-subtitle {\n font-weight: 400;\n font-size: 12px;\n}\n\n.mat-mdc-card-header {\n padding: 8px 16px 0;\n}\n\n.mat-mdc-card-content:last-child {\n padding-bottom: 8px;\n font-size: 16px;\n}\n\n.cards-container {\n height: calc(100% - 1px);\n justify-content: stretch;\n align-items: center;\n margin-bottom: 1px;\n}\n\n::ng-deep.tb-home-widget-link > div {\n flex-grow: 1;\n cursor: pointer;\n}\n\n .tb-home-widget-link {\n width: 100%;\n }\n\n .tb-home-widget-link:hover::after{\n color: inherit;\n }\n \n .tb-home-widget-link::after{\n content: 'arrow_forward';\n display: inline-block;\n transform: rotate(315deg);\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 18px;\n color: rgba(0, 0, 0, 0.12);\n vertical-align: bottom;\n margin-left: 6px;\n}" }, "title": "New Markdown/HTML Card", "showTitleIcon": false, @@ -569,9 +582,7 @@ "titleTooltip": "", "dropShadow": true, "enableFullscreen": false, - "widgetStyle": { - "borderRadius": "10px" - }, + "widgetStyle": {}, "titleStyle": { "fontSize": "16px", "fontWeight": 400 @@ -583,20 +594,48 @@ "pageSize": 1024, "noDataDisplayMessage": "", "enableDataExport": false, - "displayTimewindow": true + "displayTimewindow": true, + "borderRadius": "4px", + "actions": { + "elementClick": [ + { + "name": "Connecotrs", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "openDashboardState", + "targetDashboardStateId": "connectors", + "setEntityId": true, + "stateEntityParamName": null, + "openRightLayout": false, + "openInSeparateDialog": false, + "openInPopover": false, + "id": "ee7216d8-ad7a-20db-1abc-2531e221f24c" + }, + { + "name": "Logs", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "openDashboardState", + "targetDashboardStateId": "logs", + "setEntityId": true, + "stateEntityParamName": null, + "openRightLayout": false, + "openInSeparateDialog": false, + "openInPopover": false, + "id": "ceec0446-c25f-2b9b-b1b1-58ed751476ff" + } + ] + } }, "row": 0, "col": 0, - "id": "79f59106-758f-c428-8b93-4341faea705d" + "id": "79f59106-758f-c428-8b93-4341faea705d", + "typeFullFqn": "system.cards.markdown_card" }, "60dcf518-8fc3-3539-8ff8-ce94bda39f3a": { - "isSystemType": true, - "bundleAlias": "alarm_widgets", - "typeAlias": "alarms_table", "type": "alarm", - "title": "New widget", - "image": null, - "description": null, "sizeX": 10.5, "sizeY": 6.5, "config": { @@ -718,9 +757,7 @@ "iconColor": "rgba(0, 0, 0, 0.87)", "iconSize": "24px", "titleTooltip": "", - "widgetStyle": { - "borderRadius": "10px" - }, + "widgetStyle": {}, "displayTimewindow": false, "actions": {}, "datasources": [], @@ -733,20 +770,16 @@ "typeList": [], "searchPropagatedAlarms": false }, - "enableDataExport": false + "enableDataExport": false, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "60dcf518-8fc3-3539-8ff8-ce94bda39f3a" + "id": "60dcf518-8fc3-3539-8ff8-ce94bda39f3a", + "typeFullFqn": "system.alarm_widgets.alarms_table" }, "27e6b37c-085e-824d-fb13-69651a545ec1": { - "isSystemType": true, - "bundleAlias": "gateway_widgets", - "typeAlias": "gateway_logs", "type": "timeseries", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 3, "config": { @@ -784,13 +817,11 @@ "color": "rgba(0, 0, 0, 0.87)", "padding": "8px", "settings": {}, - "title": "Gateway Logs", + "title": "Logs", "showTitleIcon": false, - "dropShadow": false, + "dropShadow": true, "enableFullscreen": true, - "widgetStyle": { - "border-radius": "10px" - }, + "widgetStyle": {}, "widgetCss": "", "pageSize": 1024, "noDataDisplayMessage": "", @@ -802,20 +833,16 @@ "titleStyle": { "fontSize": "16px", "fontWeight": 400 - } + }, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "27e6b37c-085e-824d-fb13-69651a545ec1" + "id": "27e6b37c-085e-824d-fb13-69651a545ec1", + "typeFullFqn": "system.gateway_widgets.gateway_logs" }, "bcd04dbf-c82a-ca13-6e88-a74f32b4348a": { - "isSystemType": true, - "bundleAlias": "gateway_widgets", - "typeAlias": "gateway_logs", "type": "timeseries", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 3, "config": { @@ -858,11 +885,9 @@ }, "title": "Gateway Logs", "showTitleIcon": false, - "dropShadow": false, + "dropShadow": true, "enableFullscreen": true, - "widgetStyle": { - "border-radius": "10px" - }, + "widgetStyle": {}, "widgetCss": "", "pageSize": 1024, "noDataDisplayMessage": "", @@ -874,20 +899,16 @@ "titleStyle": { "fontSize": "16px", "fontWeight": 400 - } + }, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "bcd04dbf-c82a-ca13-6e88-a74f32b4348a" + "id": "bcd04dbf-c82a-ca13-6e88-a74f32b4348a", + "typeFullFqn": "system.gateway_widgets.gateway_logs" }, "9b88dc51-b186-90ef-5afb-9648e6e2ac9a": { - "isSystemType": true, - "bundleAlias": "gateway_widgets", - "typeAlias": "gateway_statistics", "type": "timeseries", - "title": "New widget", - "image": null, - "description": null, "sizeX": 8, "sizeY": 5, "config": { @@ -973,7 +994,7 @@ "customLegendEnabled": false, "dataKeysListForLabels": [] }, - "title": "Statistics", + "title": "Gateway Custom Statistics", "dropShadow": true, "enableFullscreen": true, "titleStyle": { @@ -984,9 +1005,7 @@ "displayTimewindow": false, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "border-radius": "10px" - }, + "widgetStyle": {}, "widgetCss": "", "pageSize": 1024, "noDataDisplayMessage": "", @@ -1001,20 +1020,16 @@ "showAvg": true, "showTotal": false, "showLatest": false - } + }, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "9b88dc51-b186-90ef-5afb-9648e6e2ac9a" + "id": "9b88dc51-b186-90ef-5afb-9648e6e2ac9a", + "typeFullFqn": "system.gateway_widgets.gateway_custom_statistics" }, "2a318e56-5c83-4f82-bf23-df72dd7e3edf": { - "isSystemType": true, - "bundleAlias": "control_widgets", - "typeAlias": "rpc_remote_shell", "type": "rpc", - "title": "New widget", - "image": null, - "description": null, "sizeX": 9.5, "sizeY": 5.5, "config": { @@ -1083,16 +1098,11 @@ }, "row": 0, "col": 0, - "id": "2a318e56-5c83-4f82-bf23-df72dd7e3edf" + "id": "2a318e56-5c83-4f82-bf23-df72dd7e3edf", + "typeFullFqn": "system.control_widgets.rpc_remote_shell" }, "c50e294a-265a-d13c-c772-b56c4df953fe": { - "isSystemType": true, - "bundleAlias": "gateway_widgets", - "typeAlias": "gateway_general_statistics", "type": "timeseries", - "title": "New widget", - "image": null, - "description": null, "sizeX": 8, "sizeY": 5, "config": { @@ -1272,7 +1282,7 @@ "customLegendEnabled": false, "dataKeysListForLabels": [] }, - "title": "General Statistics", + "title": "Gateway General Chart Statistics", "dropShadow": true, "enableFullscreen": true, "titleStyle": { @@ -1283,9 +1293,7 @@ "displayTimewindow": false, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "border-radius": "10px" - }, + "widgetStyle": {}, "widgetCss": "", "pageSize": 1024, "noDataDisplayMessage": "", @@ -1300,20 +1308,16 @@ "showAvg": false, "showTotal": false, "showLatest": false - } + }, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "c50e294a-265a-d13c-c772-b56c4df953fe" + "id": "c50e294a-265a-d13c-c772-b56c4df953fe", + "typeFullFqn": "system.gateway_widgets.gateway_general_chart_statistics" }, "da01e13f-c108-39fd-2a74-b40da088769a": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "timeseries_table", "type": "timeseries", - "title": "New widget", - "image": null, - "description": null, "sizeX": 8, "sizeY": 6.5, "config": { @@ -1417,32 +1421,26 @@ }, "useDashboardTimewindow": false, "showLegend": false, - "widgetStyle": { - "borderRadius": "10px" - }, + "widgetStyle": {}, "actions": {}, "showTitleIcon": false, "iconColor": "rgba(0, 0, 0, 0.87)", "iconSize": "24px", "displayTimewindow": true, "titleTooltip": "", - "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-debug {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-warning {\r\n color: orange;\r\n background: rgba(255, 165, 0, 0.1);\r\n }\r\n\r\n .status-error {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n\r\n .status-info {\r\n color: blue;\r\n background: rgba(0, 0, 128, 0.1);\r\n }\r\n \r\n .msg-status-exception {\r\n color: red;\r\n }", + "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n}\r\n\r\n.status-debug {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n}\r\n\r\n.status-warning {\r\n color: orange;\r\n background: rgba(255, 165, 0, 0.1);\r\n}\r\n\r\n.status-error {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n}\r\n\r\n.status-info {\r\n color: blue;\r\n background: rgba(0, 0, 128, 0.1);\r\n}\r\n\r\n.msg-status-exception {\r\n color: red;\r\n}", "pageSize": 1024, "noDataDisplayMessage": "", - "enableDataExport": false + "enableDataExport": false, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "da01e13f-c108-39fd-2a74-b40da088769a" + "id": "da01e13f-c108-39fd-2a74-b40da088769a", + "typeFullFqn": "system.cards.timeseries_table" }, "ce3065bf-d898-2c03-6236-ce1b6cdf1f3f": { - "isSystemType": true, - "bundleAlias": "control_widgets", - "typeAlias": "rpc_debug_terminal", "type": "rpc", - "title": "New widget", - "image": null, - "description": null, "sizeX": 9.5, "sizeY": 5.5, "config": { @@ -1490,9 +1488,7 @@ "title": "New RPC debug terminal", "dropShadow": true, "enableFullscreen": true, - "widgetStyle": { - "borderRadius": "10px" - }, + "widgetStyle": {}, "titleStyle": { "fontSize": "16px", "fontWeight": 400 @@ -1508,20 +1504,16 @@ "titleTooltip": "", "widgetCss": "", "pageSize": 1024, - "noDataDisplayMessage": "" + "noDataDisplayMessage": "", + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "ce3065bf-d898-2c03-6236-ce1b6cdf1f3f" + "id": "ce3065bf-d898-2c03-6236-ce1b6cdf1f3f", + "typeFullFqn": "system.control_widgets.rpc_debug_terminal" }, "46b68eb5-7e2d-bca1-c2ef-061b64575218": { - "isSystemType": true, - "bundleAlias": "gateway_widgets", - "typeAlias": "service_rpc", "type": "rpc", - "title": "New widget", - "image": null, - "description": null, "sizeX": 4, "sizeY": 2, "config": { @@ -1575,9 +1567,7 @@ "titleTooltip": "", "dropShadow": true, "enableFullscreen": true, - "widgetStyle": { - "borderRadius": "10px" - }, + "widgetStyle": {}, "widgetCss": "", "titleStyle": { "fontSize": "16px", @@ -1586,20 +1576,16 @@ "pageSize": 1024, "noDataDisplayMessage": "", "enableDataExport": false, - "showLegend": false + "showLegend": false, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "46b68eb5-7e2d-bca1-c2ef-061b64575218" + "id": "46b68eb5-7e2d-bca1-c2ef-061b64575218", + "typeFullFqn": "system.gateway_widgets.service_rpc" }, "878c68fd-71cb-21d4-684a-b5b5a4526b43": { - "isSystemType": true, - "bundleAlias": "gateway_widgets", - "typeAlias": "service_rpc", "type": "rpc", - "title": "New widget", - "image": null, - "description": null, "sizeX": 4, "sizeY": 2, "config": { @@ -1620,9 +1606,7 @@ "titleTooltip": "", "dropShadow": true, "enableFullscreen": true, - "widgetStyle": { - "borderRadius": "10px" - }, + "widgetStyle": {}, "widgetCss": "", "titleStyle": { "fontSize": "16px", @@ -1631,20 +1615,16 @@ "pageSize": 1024, "noDataDisplayMessage": "", "enableDataExport": false, - "showLegend": false + "showLegend": false, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "878c68fd-71cb-21d4-684a-b5b5a4526b43" + "id": "878c68fd-71cb-21d4-684a-b5b5a4526b43", + "typeFullFqn": "system.gateway_widgets.service_rpc" }, "0fc7dcf3-32a2-0159-738e-96956bf0d450": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "timeseries_table", "type": "timeseries", - "title": "New widget", - "image": null, - "description": null, "sizeX": 8, "sizeY": 6.5, "config": { @@ -1749,32 +1729,26 @@ }, "useDashboardTimewindow": false, "showLegend": false, - "widgetStyle": { - "borderRadius": "10px" - }, + "widgetStyle": {}, "actions": {}, "showTitleIcon": false, "iconColor": "rgba(0, 0, 0, 0.87)", "iconSize": "24px", "displayTimewindow": true, "titleTooltip": "", - "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-debug {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-warning {\r\n color: orange;\r\n background: rgba(255, 165, 0, 0.1);\r\n }\r\n\r\n .status-error {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n\r\n .status-info {\r\n color: blue;\r\n background: rgba(0, 0, 128, 0.1);\r\n }\r\n \r\n .msg-status-exception {\r\n color: red;\r\n }", + "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n}\r\n\r\n.status-debug {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n}\r\n\r\n.status-warning {\r\n color: orange;\r\n background: rgba(255, 165, 0, 0.1);\r\n}\r\n\r\n.status-error {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n}\r\n\r\n.status-info {\r\n color: blue;\r\n background: rgba(0, 0, 128, 0.1);\r\n}\r\n\r\n.msg-status-exception {\r\n color: red;\r\n}", "pageSize": 1024, "noDataDisplayMessage": "", - "enableDataExport": false + "enableDataExport": false, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "0fc7dcf3-32a2-0159-738e-96956bf0d450" + "id": "0fc7dcf3-32a2-0159-738e-96956bf0d450", + "typeFullFqn": "system.cards.timeseries_table" }, "6e136fbc-545b-4926-c0a9-79348f35628a": { - "isSystemType": true, - "bundleAlias": "control_widgets", - "typeAlias": "rpc_debug_terminal", "type": "rpc", - "title": "New widget", - "image": null, - "description": null, "sizeX": 9.5, "sizeY": 5.5, "config": { @@ -1822,9 +1796,7 @@ "title": "New RPC debug terminal", "dropShadow": true, "enableFullscreen": true, - "widgetStyle": { - "borderRadius": "10px" - }, + "widgetStyle": {}, "titleStyle": { "fontSize": "16px", "fontWeight": 400 @@ -1840,20 +1812,16 @@ "titleTooltip": "", "widgetCss": "", "pageSize": 1024, - "noDataDisplayMessage": "" + "noDataDisplayMessage": "", + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "6e136fbc-545b-4926-c0a9-79348f35628a" + "id": "6e136fbc-545b-4926-c0a9-79348f35628a", + "typeFullFqn": "system.control_widgets.rpc_debug_terminal" }, "fb9df382-6ef3-4aa6-bc13-8bf8e300ba19": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "markdown_card", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 5, "sizeY": 3.5, "config": { @@ -1896,7 +1864,7 @@ "padding": "8px", "settings": { "useMarkdownTextFunction": false, - "markdownTextPattern": "
\r\n\r\n
", + "markdownTextPattern": "
\r\n \r\n
", "applyDefaultMarkdownStyle": false, "markdownCss": ".action-buttons-container {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex-direction: row;\r\n height: 100%;\r\n width: 100%;\r\n align-content: center;\r\n}\r\n\r\nbutton {\r\n flex-grow: 1;\r\n margin: 10px;\r\n min-width: 150px;\r\n height: auto;\r\n}" }, @@ -1907,9 +1875,7 @@ "titleTooltip": "", "dropShadow": true, "enableFullscreen": false, - "widgetStyle": { - "borderRadius": "10px" - }, + "widgetStyle": {}, "titleStyle": { "fontSize": "16px", "fontWeight": 400 @@ -1931,7 +1897,7 @@ "dialogTitle": "Launch command", "dialogHideDashboardToolbar": true, "dialogWidth": null, - "dialogHeight": 45, + "dialogHeight": 55, "openInSeparateDialog": true, "openInPopover": false, "id": "337c767b-3217-d3d3-b955-7b0bd0858a1d" @@ -1941,20 +1907,16 @@ "widgetCss": "", "pageSize": 1024, "noDataDisplayMessage": "", - "enableDataExport": false + "enableDataExport": false, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "fb9df382-6ef3-4aa6-bc13-8bf8e300ba19" + "id": "fb9df382-6ef3-4aa6-bc13-8bf8e300ba19", + "typeFullFqn": "system.cards.markdown_card" }, "61d149e8-b249-5526-e5d7-6ad58413982e": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "markdown_card", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 5, "sizeY": 3.5, "config": { @@ -2025,9 +1987,7 @@ "titleTooltip": "", "dropShadow": true, "enableFullscreen": false, - "widgetStyle": { - "borderRadius": "10px" - }, + "widgetStyle": {}, "titleStyle": { "fontSize": "16px", "fontWeight": 400 @@ -2125,20 +2085,16 @@ "widgetCss": "", "pageSize": 1024, "noDataDisplayMessage": "", - "enableDataExport": false + "enableDataExport": false, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "61d149e8-b249-5526-e5d7-6ad58413982e" + "id": "61d149e8-b249-5526-e5d7-6ad58413982e", + "typeFullFqn": "system.cards.markdown_card" }, "3d661190-7463-ba61-6793-503c85af67ec": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "markdown_card", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 5, "sizeY": 3.5, "config": { @@ -2196,9 +2152,7 @@ "titleTooltip": "", "dropShadow": true, "enableFullscreen": false, - "widgetStyle": { - "borderRadius": "10px" - }, + "widgetStyle": {}, "titleStyle": { "fontSize": "16px", "fontWeight": 400 @@ -2209,20 +2163,16 @@ "widgetCss": "", "pageSize": 1024, "noDataDisplayMessage": "", - "enableDataExport": false + "enableDataExport": false, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "3d661190-7463-ba61-6793-503c85af67ec" + "id": "3d661190-7463-ba61-6793-503c85af67ec", + "typeFullFqn": "system.cards.markdown_card" }, "1615bd4e-c0a4-c32c-3706-3c83214cb8d7": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -2361,26 +2311,20 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", - "enableDataExport": false + "enableDataExport": false, + "borderRadius": "" }, "row": 0, "col": 0, - "id": "1615bd4e-c0a4-c32c-3706-3c83214cb8d7" + "id": "1615bd4e-c0a4-c32c-3706-3c83214cb8d7", + "typeFullFqn": "system.cards.entities_table" }, "aafba3d8-a381-21c0-ecbe-446da3cdc041": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -2519,26 +2463,20 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", - "enableDataExport": false + "enableDataExport": false, + "borderRadius": "4px" }, "row": 0, "col": 0, - "id": "aafba3d8-a381-21c0-ecbe-446da3cdc041" + "id": "aafba3d8-a381-21c0-ecbe-446da3cdc041", + "typeFullFqn": "system.cards.entities_table" }, "7f676bb2-bde2-10e7-80d8-25dd734e8e22": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -2677,9 +2615,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -2687,16 +2623,11 @@ }, "row": 0, "col": 0, - "id": "7f676bb2-bde2-10e7-80d8-25dd734e8e22" + "id": "7f676bb2-bde2-10e7-80d8-25dd734e8e22", + "typeFullFqn": "system.cards.entities_table" }, "d64482d8-001a-6f33-9b56-665530098fe5": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -2835,9 +2766,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -2845,16 +2774,11 @@ }, "row": 0, "col": 0, - "id": "d64482d8-001a-6f33-9b56-665530098fe5" + "id": "d64482d8-001a-6f33-9b56-665530098fe5", + "typeFullFqn": "system.cards.entities_table" }, "bb27723a-989c-2327-5808-b56d490b93ab": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -2993,9 +2917,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -3003,16 +2925,11 @@ }, "row": 0, "col": 0, - "id": "bb27723a-989c-2327-5808-b56d490b93ab" + "id": "bb27723a-989c-2327-5808-b56d490b93ab", + "typeFullFqn": "system.cards.entities_table" }, "e3a9539d-2ccb-96e0-2afa-36f93e40233d": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -3151,9 +3068,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -3161,16 +3076,11 @@ }, "row": 0, "col": 0, - "id": "e3a9539d-2ccb-96e0-2afa-36f93e40233d" + "id": "e3a9539d-2ccb-96e0-2afa-36f93e40233d", + "typeFullFqn": "system.cards.entities_table" }, "cf2eba6b-44f6-9cc2-6089-35c735f54898": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -3309,9 +3219,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -3319,16 +3227,11 @@ }, "row": 0, "col": 0, - "id": "cf2eba6b-44f6-9cc2-6089-35c735f54898" + "id": "cf2eba6b-44f6-9cc2-6089-35c735f54898", + "typeFullFqn": "system.cards.entities_table" }, "3f6ed61b-f5af-13e3-7505-f69fd53f8211": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -3467,9 +3370,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -3477,16 +3378,11 @@ }, "row": 0, "col": 0, - "id": "3f6ed61b-f5af-13e3-7505-f69fd53f8211" + "id": "3f6ed61b-f5af-13e3-7505-f69fd53f8211", + "typeFullFqn": "system.cards.entities_table" }, "b06cecaa-2806-65a9-782d-4f2d8cf95a6c": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -3625,9 +3521,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -3635,16 +3529,11 @@ }, "row": 0, "col": 0, - "id": "b06cecaa-2806-65a9-782d-4f2d8cf95a6c" + "id": "b06cecaa-2806-65a9-782d-4f2d8cf95a6c", + "typeFullFqn": "system.cards.entities_table" }, "c3d39b60-a668-7f5e-e6f4-cae27151f4aa": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -3783,9 +3672,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -3793,16 +3680,11 @@ }, "row": 0, "col": 0, - "id": "c3d39b60-a668-7f5e-e6f4-cae27151f4aa" + "id": "c3d39b60-a668-7f5e-e6f4-cae27151f4aa", + "typeFullFqn": "system.cards.entities_table" }, "f78a0d66-60cb-188f-857f-9acd4d24bd5a": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -3941,9 +3823,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -3951,16 +3831,11 @@ }, "row": 0, "col": 0, - "id": "f78a0d66-60cb-188f-857f-9acd4d24bd5a" + "id": "f78a0d66-60cb-188f-857f-9acd4d24bd5a", + "typeFullFqn": "system.cards.entities_table" }, "b81a171c-77c0-b857-21d2-cff02a1cb733": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -4099,9 +3974,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -4109,16 +3982,11 @@ }, "row": 0, "col": 0, - "id": "b81a171c-77c0-b857-21d2-cff02a1cb733" + "id": "b81a171c-77c0-b857-21d2-cff02a1cb733", + "typeFullFqn": "system.cards.entities_table" }, "0e399bef-01d2-4e4e-02d2-e254ebe91e56": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -4257,9 +4125,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -4267,16 +4133,11 @@ }, "row": 0, "col": 0, - "id": "0e399bef-01d2-4e4e-02d2-e254ebe91e56" + "id": "0e399bef-01d2-4e4e-02d2-e254ebe91e56", + "typeFullFqn": "system.cards.entities_table" }, "819c1d39-de7c-8ac3-858e-0040d286823e": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -4415,9 +4276,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -4425,16 +4284,11 @@ }, "row": 0, "col": 0, - "id": "819c1d39-de7c-8ac3-858e-0040d286823e" + "id": "819c1d39-de7c-8ac3-858e-0040d286823e", + "typeFullFqn": "system.cards.entities_table" }, "d4f73f32-f719-98bb-d427-b5c8957e8f47": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -4573,9 +4427,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -4583,16 +4435,11 @@ }, "row": 0, "col": 0, - "id": "d4f73f32-f719-98bb-d427-b5c8957e8f47" + "id": "d4f73f32-f719-98bb-d427-b5c8957e8f47", + "typeFullFqn": "system.cards.entities_table" }, "f16a258c-3f6c-9317-fda7-48b33d8fe8b9": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -4731,9 +4578,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -4741,16 +4586,11 @@ }, "row": 0, "col": 0, - "id": "f16a258c-3f6c-9317-fda7-48b33d8fe8b9" + "id": "f16a258c-3f6c-9317-fda7-48b33d8fe8b9", + "typeFullFqn": "system.cards.entities_table" }, "d1951ec7-ab13-87e4-bc05-ce2318dca353": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -4889,9 +4729,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -4899,16 +4737,11 @@ }, "row": 0, "col": 0, - "id": "d1951ec7-ab13-87e4-bc05-ce2318dca353" + "id": "d1951ec7-ab13-87e4-bc05-ce2318dca353", + "typeFullFqn": "system.cards.entities_table" }, "75b6372d-4def-42b4-8774-4edf413a8b83": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "entities_table", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 7.5, "sizeY": 6.5, "config": { @@ -5047,9 +4880,7 @@ "displayTimewindow": true, "showTitleIcon": false, "titleTooltip": "", - "widgetStyle": { - "borderRadius": " 0 0 10px 10px" - }, + "widgetStyle": {}, "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n", "pageSize": 1024, "noDataDisplayMessage": "", @@ -5057,16 +4888,11 @@ }, "row": 0, "col": 0, - "id": "75b6372d-4def-42b4-8774-4edf413a8b83" + "id": "75b6372d-4def-42b4-8774-4edf413a8b83", + "typeFullFqn": "system.cards.entities_table" }, "dfda1a57-6c04-3482-2054-84954bbef626": { - "isSystemType": true, - "bundleAlias": "cards", - "typeAlias": "markdown_card", "type": "latest", - "title": "New widget", - "image": null, - "description": null, "sizeX": 5, "sizeY": 3.5, "config": { @@ -5106,7 +4932,7 @@ "showTitle": false, "backgroundColor": "#fff", "color": "rgba(0, 0, 0, 0.87)", - "padding": "8px", + "padding": "0px", "settings": { "useMarkdownTextFunction": true, "markdownTextFunction": "return `
\n\n
`;", @@ -5152,7 +4978,8 @@ }, "row": 0, "col": 0, - "id": "dfda1a57-6c04-3482-2054-84954bbef626" + "id": "dfda1a57-6c04-3482-2054-84954bbef626", + "typeFullFqn": "system.cards.markdown_card" } }, "states": { @@ -5172,11 +4999,11 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 48, - "margin": 5, + "margin": 12, "backgroundSizeMode": "100%", "autoFillHeight": true, "backgroundImageUrl": null, - "mobileAutoFillHeight": false, + "mobileAutoFillHeight": true, "mobileRowHeight": 70, "outerMargin": true } @@ -5200,7 +5027,7 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 0, + "margin": 12, "backgroundSizeMode": "100%", "autoFillHeight": true, "backgroundImageUrl": null, @@ -5227,7 +5054,7 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "backgroundSizeMode": "100%", "autoFillHeight": true, "backgroundImageUrl": null, @@ -5245,7 +5072,7 @@ "main": { "widgets": { "79f59106-758f-c428-8b93-4341faea705d": { - "sizeX": 41, + "sizeX": 40, "sizeY": 3, "row": 0, "col": 0, @@ -5253,29 +5080,29 @@ "mobileOrder": 2 }, "60dcf518-8fc3-3539-8ff8-ce94bda39f3a": { - "sizeX": 41, + "sizeX": 40, "sizeY": 10, "row": 12, "col": 0 }, "fb9df382-6ef3-4aa6-bc13-8bf8e300ba19": { - "sizeX": 7, + "sizeX": 8, "sizeY": 3, "row": 0, - "col": 41, + "col": 40, "mobileOrder": 0, "mobileHeight": 1 }, "61d149e8-b249-5526-e5d7-6ad58413982e": { - "sizeX": 7, + "sizeX": 8, "sizeY": 19, "row": 3, - "col": 41, + "col": 40, "mobileOrder": 1, "mobileHeight": 3 }, "3d661190-7463-ba61-6793-503c85af67ec": { - "sizeX": 41, + "sizeX": 40, "sizeY": 9, "row": 3, "col": 0 @@ -5311,7 +5138,7 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 48, - "margin": 10, + "margin": 12, "backgroundSizeMode": "100%", "autoFillHeight": true, "backgroundImageUrl": null, @@ -5338,7 +5165,7 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 12, "backgroundSizeMode": "100%", "autoFillHeight": true, "backgroundImageUrl": null, @@ -5372,7 +5199,7 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 48, - "margin": 5, + "margin": 12, "backgroundSizeMode": "100%", "autoFillHeight": true, "backgroundImageUrl": null, @@ -5442,7 +5269,7 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 45, - "margin": 5, + "margin": 12, "backgroundSizeMode": "100%", "autoFillHeight": true, "backgroundImageUrl": null, @@ -5486,9 +5313,9 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 48, - "margin": 5, + "margin": 12, "backgroundSizeMode": "100%", - "autoFillHeight": false, + "autoFillHeight": true, "backgroundImageUrl": null, "mobileAutoFillHeight": false, "mobileRowHeight": 70, @@ -6769,4 +6596,4 @@ }, "externalId": null, "name": "Gateway" -} \ No newline at end of file +} diff --git a/application/src/main/data/json/edge/install_instructions/centos/instructions.md b/application/src/main/data/json/edge/install_instructions/centos/instructions.md new file mode 100644 index 0000000000..126c79b641 --- /dev/null +++ b/application/src/main/data/json/edge/install_instructions/centos/instructions.md @@ -0,0 +1,231 @@ +Here is the list of commands, that can be used to quickly install ThingsBoard Edge on RHEL/CentOS 7/8 and connect to the cloud. + +#### Prerequisites +Before continue to installation execute the following commands in order to install necessary tools: + +```bash +sudo yum install -y nano wget +sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm +``` + +#### Install Java 11 (OpenJDK) +ThingsBoard service is running on Java 11. Follow these instructions to install OpenJDK 11: + +```bash +sudo yum install java-11-openjdk +{:copy-code} +``` + +Please don't forget to configure your operating system to use OpenJDK 11 by default. +You can configure which version is the default using the following command: + +```bash +sudo update-alternatives --config java +{:copy-code} +``` + +You can check the installation using the following command: + +```bash +java -version +{:copy-code} +``` + +Expected command output is: + +```text +openjdk version "11.0.xx" +OpenJDK Runtime Environment (...) +OpenJDK 64-Bit Server VM (build ...) +``` + +#### Configure PostgreSQL +ThingsBoard Edge uses PostgreSQL database as a local storage. +Instructions listed below will help you to install PostgreSQL. + +```bash +# Update your system +sudo yum update +{:copy-code} +``` + +**For CentOS 7:** + +```bash +# Install the repository RPM (for CentOS 7): +sudo yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm +# Install packages +sudo yum -y install epel-release yum-utils +sudo yum-config-manager --enable pgdg12 +sudo yum install postgresql12-server postgresql12 +# Initialize your PostgreSQL DB +sudo /usr/pgsql-12/bin/postgresql-12-setup initdb +sudo systemctl start postgresql-12 +# Optional: Configure PostgreSQL to start on boot +sudo systemctl enable --now postgresql-12 + +{:copy-code} +``` + +**For CentOS 8:** + +```bash +# Install the repository RPM (for CentOS 8): +sudo yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm +# Install packages +sudo dnf -qy module disable postgresql +sudo dnf -y install postgresql12 postgresql12-server +# Initialize your PostgreSQL DB +sudo /usr/pgsql-12/bin/postgresql-12-setup initdb +sudo systemctl start postgresql-12 +# Optional: Configure PostgreSQL to start on boot +sudo systemctl enable --now postgresql-12 + +{:copy-code} +``` + +Once PostgreSQL is installed you may want to create a new user or set the password for the main user. +The instructions below will help to set the password for main PostgreSQL user: + +```text +sudo su - postgres +psql +\password +\q +``` + +Then, press "Ctrl+D" to return to main user console. + +After configuring the password, edit the pg_hba.conf to use MD5 authentication with the postgres user. + +Edit pg_hba.conf file: + +```bash +sudo nano /var/lib/pgsql/12/data/pg_hba.conf +{:copy-code} +``` + +Locate the following lines: + +```text +# IPv4 local connections: +host all all 127.0.0.1/32 ident +``` + +Replace `ident` with `md5`: + +```text +host all all 127.0.0.1/32 md5 +``` + +Finally, you should restart the PostgreSQL service to initialize the new configuration: + +```bash +sudo systemctl restart postgresql-12.service +{:copy-code} +``` + +Connect to the database to create ThingsBoard Edge DB: + +```bash +psql -U postgres -d postgres -h 127.0.0.1 -W +{:copy-code} +``` + +Execute create database statement: + +```bash +CREATE DATABASE tb_edge; +\q +{:copy-code} +``` + +#### ThingsBoard Edge service installation +Download installation package: + +```bash +wget https://github.com/thingsboard/thingsboard-edge/releases/download/v${TB_EDGE_VERSION}/tb-edge-${TB_EDGE_VERSION}.rpm +{:copy-code} +``` + +Go to the download repository and install ThingsBoard Edge service: + +```bash +sudo rpm -Uvh tb-edge-${TB_EDGE_VERSION}.rpm +{:copy-code} +``` + +#### Configure ThingsBoard Edge +To configure ThingsBoard Edge, you can use the following command to automatically update the configuration file with specific values: + +```bash +sudo sh -c 'cat <> /etc/tb-edge/conf/tb-edge.conf +export CLOUD_ROUTING_KEY=${CLOUD_ROUTING_KEY} +export CLOUD_ROUTING_SECRET=${CLOUD_ROUTING_SECRET} +export CLOUD_RPC_HOST=${BASE_URL} +export CLOUD_RPC_PORT=${CLOUD_RPC_PORT} +export CLOUD_RPC_SSL_ENABLED=${CLOUD_RPC_SSL_ENABLED} +EOL' +{:copy-code} +``` + +##### [Optional] Database Configuration +In case you changed default PostgreSQL datasource settings (**postgres**/**postgres**) please update the configuration file (**/etc/tb-edge/conf/tb-edge.conf**) with your actual values: + +```bash +sudo nano /etc/tb-edge/conf/tb-edge.conf +{:copy-code} +``` + +Please update the following lines in your configuration file. Make sure **to replace**: +- Replace 'postgres' with your actual PostgreSQL username; +- Replace 'PUT_YOUR_POSTGRESQL_PASSWORD_HERE' with your actual PostgreSQL password. + +```bash +export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/tb_edge +export SPRING_DATASOURCE_USERNAME=postgres +export SPRING_DATASOURCE_PASSWORD=PUT_YOUR_POSTGRESQL_PASSWORD_HERE +{:copy-code} +``` + +##### [Optional] Update bind ports +If ThingsBoard Edge is going to be running on the same machine where ThingsBoard server (cloud) is running, you'll need to update configuration parameters to avoid port collision between ThingsBoard server and ThingsBoard Edge. + +Please execute the following command to update ThingsBoard Edge configuration file (**/etc/tb-edge/conf/tb-edge.conf**): + +```bash +sudo sh -c 'cat <> /etc/tb-edge/conf/tb-edge.conf +export HTTP_BIND_PORT=18080 +export MQTT_BIND_PORT=11883 +export COAP_BIND_PORT=15683 +export LWM2M_ENABLED=false +export SNMP_ENABLED=false +EOL' +{:copy-code} +``` + +Make sure that ports above (18080, 11883, 15683) are not used by any other application. + +#### Run installation script +Once ThingsBoard Edge is installed and configured please execute the following install script: + +```bash +sudo /usr/share/tb-edge/bin/install/install.sh +{:copy-code} +``` + +#### Restart ThingsBoard Edge service + +```bash +sudo service tb-edge restart +{:copy-code} +``` + +#### Open ThingsBoard Edge UI + +Once started, you will be able to open **ThingsBoard Edge UI** using the following link http://localhost:8080. + +###### NOTE: Edge HTTP bind port update + +Use next **ThingsBoard Edge UI** link **http://localhost:18080** if you updated HTTP 8080 bind port to **18080**. + diff --git a/application/src/main/data/json/edge/install_instructions/docker/instructions.md b/application/src/main/data/json/edge/install_instructions/docker/instructions.md index 6b93447851..e308a38076 100644 --- a/application/src/main/data/json/edge/install_instructions/docker/instructions.md +++ b/application/src/main/data/json/edge/install_instructions/docker/instructions.md @@ -1,12 +1,10 @@ -## Install ThingsBoard Edge and connect to cloud instructions +Here is the list of commands, that can be used to quickly install ThingsBoard Edge using docker compose and connect to the cloud. -Here is the list of commands, that can be used to quickly install and connect ThingsBoard Edge to the cloud using docker compose. - -### Prerequisites +#### Prerequisites Install Docker CE and Docker Compose. -### Create data and logs folders +#### Create data and logs folders Run following commands, before starting docker container(s), to create folders for storing data and logs. These commands additionally will change owner of newly created folders to docker container user. @@ -18,7 +16,7 @@ mkdir -p ~/.mytb-edge-logs && sudo chown -R 799:799 ~/.mytb-edge-logs {:copy-code} ``` -### Running ThingsBoard Edge as docker service +#### Running ThingsBoard Edge as docker service ${LOCALHOST_WARNING} @@ -64,12 +62,12 @@ services: {:copy-code} ``` -#### [Optional] Update bind ports +##### [Optional] Update bind ports If ThingsBoard Edge is going to be running on the same machine where ThingsBoard server (cloud) is running, you'll need to update docker compose port mapping to avoid port collision between ThingsBoard server and ThingsBoard Edge. Please update next lines of `docker-compose.yml` file: -```bash +```text ports: - "18080:8080" - "11883:1883" diff --git a/application/src/main/data/json/edge/install_instructions/ubuntu/instructions.md b/application/src/main/data/json/edge/install_instructions/ubuntu/instructions.md new file mode 100644 index 0000000000..425c08662b --- /dev/null +++ b/application/src/main/data/json/edge/install_instructions/ubuntu/instructions.md @@ -0,0 +1,164 @@ +Here is the list of commands, that can be used to quickly install ThingsBoard Edge on Ubuntu Server and connect to the cloud. + +#### Install Java 11 (OpenJDK) +ThingsBoard service is running on Java 11. Follow these instructions to install OpenJDK 11: + +```bash +sudo apt update +sudo apt install openjdk-11-jdk +{:copy-code} +``` + +Please don't forget to configure your operating system to use OpenJDK 11 by default. +You can configure which version is the default using the following command: + +```bash +sudo update-alternatives --config java +{:copy-code} +``` + +You can check the installation using the following command: + +```bash +java -version +{:copy-code} +``` + +Expected command output is: + +```text +openjdk version "11.0.xx" +OpenJDK Runtime Environment (...) +OpenJDK 64-Bit Server VM (build ...) +``` + +#### Configure PostgreSQL +ThingsBoard Edge uses PostgreSQL database as a local storage. +Instructions listed below will help you to install PostgreSQL. + +```bash +# install **wget** if not already installed: +sudo apt install -y wget + +# import the repository signing key: +wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - + +# add repository contents to your system: +RELEASE=$(lsb_release -cs) +echo "deb http://apt.postgresql.org/pub/repos/apt/ ${RELEASE}"-pgdg main | sudo tee /etc/apt/sources.list.d/pgdg.list + +# install and launch the postgresql service: +sudo apt update +sudo apt -y install postgresql-12 +sudo service postgresql start +{:copy-code} +``` + +Once PostgreSQL is installed you may want to create a new user or set the password for the main user. +The instructions below will help to set the password for main PostgreSQL user: + +```text +sudo su - postgres +psql +\password +\q +``` + +Then, press “Ctrl+D” to return to main user console and connect to the database to create ThingsBoard Edge DB: + +```text +psql -U postgres -d postgres -h 127.0.0.1 -W +CREATE DATABASE tb_edge; +\q +``` + +#### Thingsboard Edge service installation +Download installation package: + +```bash +wget https://github.com/thingsboard/thingsboard-edge/releases/download/v${TB_EDGE_VERSION}/tb-edge-${TB_EDGE_VERSION}.deb +{:copy-code} +``` + +Go to the download repository and install ThingsBoard Edge service: + +```bash +sudo dpkg -i tb-edge-${TB_EDGE_VERSION}.deb +{:copy-code} +``` + +#### Configure ThingsBoard Edge +To configure ThingsBoard Edge, you can use the following command to automatically update the configuration file with specific values: + +```bash +sudo sh -c 'cat <> /etc/tb-edge/conf/tb-edge.conf +export CLOUD_ROUTING_KEY=${CLOUD_ROUTING_KEY} +export CLOUD_ROUTING_SECRET=${CLOUD_ROUTING_SECRET} +export CLOUD_RPC_HOST=${BASE_URL} +export CLOUD_RPC_PORT=${CLOUD_RPC_PORT} +export CLOUD_RPC_SSL_ENABLED=${CLOUD_RPC_SSL_ENABLED} +EOL' +{:copy-code} +``` + +##### [Optional] Database Configuration +In case you changed default PostgreSQL datasource settings (**postgres**/**postgres**) please update the configuration file (**/etc/tb-edge/conf/tb-edge.conf**) with your actual values: + +```bash +sudo nano /etc/tb-edge/conf/tb-edge.conf +{:copy-code} +``` + +Please update the following lines in your configuration file. Make sure **to replace**: +- Replace 'postgres' with your actual PostgreSQL username; +- Replace 'PUT_YOUR_POSTGRESQL_PASSWORD_HERE' with your actual PostgreSQL password. + +```bash +export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/tb_edge +export SPRING_DATASOURCE_USERNAME=postgres +export SPRING_DATASOURCE_PASSWORD=PUT_YOUR_POSTGRESQL_PASSWORD_HERE +{:copy-code} +``` + +##### [Optional] Update bind ports +If ThingsBoard Edge is going to be running on the same machine where ThingsBoard server (cloud) is running, you'll need to update configuration parameters to avoid port collision between ThingsBoard server and ThingsBoard Edge. + +Please execute the following command to update ThingsBoard Edge configuration file (**/etc/tb-edge/conf/tb-edge.conf**): + +```bash +sudo sh -c 'cat <> /etc/tb-edge/conf/tb-edge.conf +export HTTP_BIND_PORT=18080 +export MQTT_BIND_PORT=11883 +export COAP_BIND_PORT=15683 +export LWM2M_ENABLED=false +export SNMP_ENABLED=false +EOL' +{:copy-code} +``` + +Make sure that ports above (18080, 11883, 15683) are not used by any other application. + +#### Run installation script + +Once ThingsBoard Edge is installed and configured please execute the following install script: + +```bash +sudo /usr/share/tb-edge/bin/install/install.sh +{:copy-code} +``` + +#### Restart ThingsBoard Edge service + +```bash +sudo service tb-edge restart +{:copy-code} +``` + +#### Open ThingsBoard Edge UI + +Once started, you will be able to open **ThingsBoard Edge UI** using the following link http://localhost:8080. + +###### NOTE: Edge HTTP bind port update + +Use next **ThingsBoard Edge UI** link **http://localhost:18080** if you updated HTTP 8080 bind port to **18080**. + diff --git a/application/src/main/data/json/system/widget_bundles/alarm_widgets.json b/application/src/main/data/json/system/widget_bundles/alarm_widgets.json index 42cbd9b262..314b962089 100644 --- a/application/src/main/data/json/system/widget_bundles/alarm_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/alarm_widgets.json @@ -2,12 +2,13 @@ "widgetsBundle": { "alias": "alarm_widgets", "title": "Alarm widgets", - "image": "data:image/png;base64,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", - "description": "Visualization of alarms for devices, assets and other entities.", + "image": "data:image/png;base64,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", + "description": "Visualization of alarms for devices, assets, and other entities.", "externalId": null, "name": "Alarm widgets" }, "widgetTypeFqns": [ - "alarm_widgets.alarms_table" + "alarm_widgets.alarms_table", + "alarm_count" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_bundles/analogue_gauges.json b/application/src/main/data/json/system/widget_bundles/analogue_gauges.json index 04231563fd..d7e5f4d9fc 100644 --- a/application/src/main/data/json/system/widget_bundles/analogue_gauges.json +++ b/application/src/main/data/json/system/widget_bundles/analogue_gauges.json @@ -3,7 +3,7 @@ "alias": "analogue_gauges", "title": "Analogue gauges", "image": "data:image/png;base64,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", - "description": "Display temperature, humidity, speed, and other latest values on various analog gauge widgets.", + "description": "Display temperature, humidity, speed, pressure, direction, and other values on analog-style gauges.", "externalId": null, "name": "Analogue gauges" }, diff --git a/application/src/main/data/json/system/widget_bundles/cards.json b/application/src/main/data/json/system/widget_bundles/cards.json index 8c92636cb2..45f7659c51 100644 --- a/application/src/main/data/json/system/widget_bundles/cards.json +++ b/application/src/main/data/json/system/widget_bundles/cards.json @@ -3,7 +3,7 @@ "alias": "cards", "title": "Cards", "image": "data:image/png;base64,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", - "description": "Cards to display latest and historical values for multiple entities simultaneously.", + "description": "Includes cards that display dynamic content based on data from one or more entities. It also includes static HTML cards.", "externalId": null, "name": "Cards" }, @@ -11,6 +11,7 @@ "cards.value_card", "cards.horizontal_value_card", "cards.aggregated_value_card", + "battery_level", "cards.label_widget", "cards.dashboard_state_widget", "cards.qr_code", diff --git a/application/src/main/data/json/system/widget_bundles/charts.json b/application/src/main/data/json/system/widget_bundles/charts.json index 694eaef0e0..4270cede84 100644 --- a/application/src/main/data/json/system/widget_bundles/charts.json +++ b/application/src/main/data/json/system/widget_bundles/charts.json @@ -3,7 +3,7 @@ "alias": "charts", "title": "Charts", "image": "data:image/png;base64,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", - "description": "Display timeseries data using customizable line and bar charts. Use various pie charts to display latest values.", + "description": "Display time series data using customizable line and bar charts. Use various pie charts to display the latest values.", "externalId": null, "name": "Charts" }, diff --git a/application/src/main/data/json/system/widget_bundles/control_widgets.json b/application/src/main/data/json/system/widget_bundles/control_widgets.json index 249c0dc439..59a6d6b39d 100644 --- a/application/src/main/data/json/system/widget_bundles/control_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/control_widgets.json @@ -3,7 +3,7 @@ "alias": "control_widgets", "title": "Control widgets", "image": "data:image/png;base64,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", - "description": "Send commands to devices.", + "description": "Various interactive widgets to control the behavior and state of the IoT devices.", "externalId": null, "name": "Control widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/count_widgets.json b/application/src/main/data/json/system/widget_bundles/count_widgets.json new file mode 100644 index 0000000000..1ee5567770 --- /dev/null +++ b/application/src/main/data/json/system/widget_bundles/count_widgets.json @@ -0,0 +1,14 @@ +{ + "widgetsBundle": { + "alias": "count_widgets", + "title": "Count widgets", + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAABaFBMVEXj4+Pj4+Pt7e0AAADi4uLi4uLt7e3m5ubi4uL////39/f6+vrh4eHxjRf5+fnRJzD+/f38/Pz19fX7+/vzxcj74cHdYWf1q1UhISHylSb62bKbm5vz8/PGxsb+9/CZmZn4ypP2s2MkJCTx8fHa2tqrq6vn5+dcXFzBwcG5ubmKiorv7+/r6+vQ0NDNzc2/v7+fn59FRUU/Pz/T09Ozs7Onp6czMzP55ebX19fIyMi8vLzZSlEvLy/k5OS2trakpKSHh4eBgYFgYGBQUFDVNT05OTkrKysoKCji4uL43N31z9HKysqoqKiSkpLidnx5eXlzc3Nra2vbVVxXV1fxjRj//Pv+8uTf39/97t3c3NzDw8Otra3aUVlLS0v0o0TxkBz88PH76+zj4+PwuLvvtrntqa361KfqnqLqmp74yI74woPje4HhcnfgbHL2tWj1q1LXREz++vX85sz85cn73bv2uG7bV17TMjvdKyySAAAACXRSTlPztSoA8bArH+7/EoV4AAAFjUlEQVR42u3dZ1PbMADG8XT3scGVrA63JNCGJJBBFnvvPQt07733+vpVHEpDrZjm2osln/6B3EHe+He+vLKfc+TYySORFsWLHDl6LHLyeCeF4tHO40cjRzoRgjqPRCLKn49KNBJpQShq0RDJ0hDZ0hDZ0hDZ0hDZ0hDZ0hDZ0hDZ0hDZ0hDZCiOEVKKUMsZMyeOHSCkllbyQioILLMswDFPy+CFaFvdULAIIMw3ucDOkzqrGD5cJIJRZ5h7Atg2pX/z43PgBM+qBmAZ3QKm4xDA9EMMyFHMABj9oD4Q7bCiWzSUeCHcQKBbhEi/EJupBiO2FcIdyV0oolwggdB+y/Pa8oLfLkCxKBZAooQx73T0j7C5qWi0UCgnUNoFmxyiJeiCkBnKmTqgpm1vPRUEI0M09lABtaHYcQv4ZAnQAicn+fLZj0syvFZckh3z86AcpMv7Oz0ju1khaGggVQTYI2fCBtPGfCiTZm58IBEL/EjL3EHg4Vx8Sm+juQ76P9cf6+6SGPAPvWR3IOIBUC0ASlCWyKf530/KHMPNPyF3ifrK9D5Esk/0lZAUYHARWVIdsANjeBrChNuTHIwCjowAezSkNeQHemzfgvVAZMnoN+5FRLyS1WZpdN9BIwUDOotLTp6h01gOx58cyW84WGikQyDu4jY7C7d2fkFj5DtC1SNBAgUCW4bayArdl4Xdkdh6NFAhkEAca9EJurM8spNFQQUC+Pzlb05NtLyR2b6GcRyMFABGHP7JnBxgaSEpIb0cKmHIeo4GkhAw7m0aqNEYRXIdD5sSOOdQ2FY87YwUE2OGQl2LISxxoKd3diYDyhzD8avCsoEHIFhNDKINiMaohciWGEBUhRAwxoVRmfYhSElMMsQnlEtmvTNdeo+YOKrw+QihTR2JyBxNf6KmeEtO0lMg0qydECOES+e9D+RWrODgkxHcHqZ2GyJaGyJaGyJaGyJaGyJaGyJaGyJaGyFYFotzuomZ1IYAQdXYXtasLIoBQRXYXNasLKoK4DMPNlnt4YRtuLsULMS1Tsb1ChWIJZhempdpcweYSwexCOYcr0bMLqRLPLmwVZxe27b8fuX5O0HXI1qH7kVe7rYJ2L0OyKCW278XQi63CLh68qSbZx7BfGgF06FqhtU6oqSeG3hEYhTy5FUUPf5HhbgPZkQTqJyuEtqF/vHt16HY0iTake1qStC2XTKFpiSG0YYhRxFSyP00mYwm08ReQyySLvWhajNL/ASGFGDpM1om+IuGMtSwbtoskasKnICAXX13+3QcP5NbkWoygpT+ZQuo2MIFsMjmO/NodGz41BcIOQp6TL+f2+1aFSBbzu/FsH3Lpa2tNUkLMv4Ncaq12/3p7e/vnEECu4PXr5wgFhP+GGZIt3I6CZ8S6bbjZvTn4JSekf9FxFgrAjZLjDPQAsKYXnD74JSXkRnwmlxgoAzsDQ4/L9whwNT6VMOBXIJBL1661u125gvb2Tx5IXzlWOXYadaaBojOEYacDhxQI5Cb2uvIBvHbRl52W7yHlZIARJ43peNvOThp+BQJ5cHGvB63uuwiScbpB5ks22XQm0OWUpkrOMHwKAOJNAEk66wDuxAfmB5xVzI5FkYpfhV9yQkbim6g0VBzJLEbRNQ+gvAOf5ISsLl6lqLY0sAVk4kvILm7Bp6ZDdsWOXdQ0PhafzmQyeWByZqHUCeTGSh2z8V741HTIfTHkPmoa6nJLA9NdHVH3PzPlmWH41mzIzfcXBL2/Ccky9exCskIOCdPsAooV7v1I1B0rSH1d+mDVuUK0zn7EtExDiSzL9NmPUKbK6uKXg+jZhaxpiGxpiGxpiGxpiGxpiGxpiGxpiGxpiGxpiGxpiGyFCBKaBwSH5JHNJyJHQ/EQ7dOnIseOhuCx5idOHfsJzoAQyrcRdLoAAAAASUVORK5CYII=", + "description": "Cards to display the number of alarms or entities based on the selected filter.", + "externalId": null, + "name": "Count widgets" + }, + "widgetTypeFqns": [ + "alarm_count", + "entity_count" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_bundles/digital_gauges.json b/application/src/main/data/json/system/widget_bundles/digital_gauges.json index 2113a7c508..a423877265 100644 --- a/application/src/main/data/json/system/widget_bundles/digital_gauges.json +++ b/application/src/main/data/json/system/widget_bundles/digital_gauges.json @@ -3,7 +3,7 @@ "alias": "digital_gauges", "title": "Digital gauges", "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAC5VBMVEUAAAC6urKjo5xERET///8LGwwBAwECBQIFDQUKGQsJFwkHEggDCAMIFAgECgSe9KL/3JYGEAYWGRsEBAQPERL92pURExUJERFHR0YFBgYMDQ4HCQgJCgsVFxmH/P8QDgmqk2QUIBUfGxINDxAIBwSrq6T31ZFeUTcgMSATEAtMQi0TFRf62JPnx4hKSkpvX0EXFA0KCQZsy82SflZRUVCzs6yT5JejjWCAbkt4Z0ZoWj0yKx0pIxiRkYztzIu6oG1dXVtPelEKEArYun94eHUjHhQMEw2c8aDwz43qyorUt32WlpBmZmVTU1M/NiW4uLDz0Y6IiITIrXaymmlpaWdYiVs/YkFZTTQqQSsQGRG1ta6a7p7fwIN0dHE2ZmeNelOIdVAuKBuY6pyZmZOGz4mFhYF8fHi+pG9tbWtil2SahVs0LR8ZFg9jubu5ubGDg3/Bp3JfkmFGbUgZJxoXIxi/v7exsarMsHjFqXNWVlVNTUxEOyclOSY5MSEODAhz19qvr6mS4ZX105CNjYh7vX4/dndwcG5ooWu1nGqtlWZiYmFZWVeEck4sRS1HPSk8NCMmIRcbFxBlvb+np6CenpiL1o7iw4V/f3vQs3pxr3RvrHJrpm5ra2mgil6Xg1lNeE8nSEl0ZEQhP0A6WzxUSDEWKioIDQlx1NdfsbNlnWgwWlsODg739/bi4uLa2tq8vLyurqdYpaetraZ9wIB2t3ksUlNEaUZFRUVQRS9BOCYiNiMRISEdHR0XFxdmv8Gbm5iByIWnkGJVVVNLdE18a0kvSTBSRzAJDA3R0c5htbdcrK6W6JmQ3pRKi41+w4Jzs3Zcjl5fX11SflRiVTozTzQpKSkhISEdLR2F+fx44OPPz8vExMSnp6ctVVYqUFEpTE03VDgcNTYNGRnj4+N23eCfn59Ef4GCgn47b3BWhVg4ODh+6+5aqKpTmpwkREU1UjYkJCRoxMalpZ6Y7J00YWI+Pj4pPyoeOO2IAAAVm0lEQVR42syae0xbVRzHv4n23Edv21suRUvBQmkKBRpaMfIMxCFPFQlEHhluQIgoYAKyhJkBhkUDMxOYyZY53eZ0TqdRY6bLNt/x/TY+4vsZNb6N0fi3v3PaIbix2+KqfrJ7d1ru7b2f+/v9zrm3PTjz/kvSkTzSz3vgTCL5B8H9qUguqfeTR/IPgkuQbK4988x/4SBIR7K578wz/4WD4F/gzDMRN5LVDrtFxjOv3In20ffgwf+I+EQYJMUGzWIVIhc4fsFBxwR2bd+AA/ifEJeIqgAWBczCZWS85ejEw446vNpnsFevl/C/wFREszHYLBItDIoKyeLEd4489E+jy/EGjjluQfauTvz3mIgwyBZZ5JNs0UgGTIhko+9hPOd4hrLsTgrQXnT953E5pQhTbWAip3goZFgtjItc5jiwxjGKvVQmh347wLavrcMb/dlYJckXkQCVcsoqQsFABSLTSxJ5sx5jjsO4tc+oq78VN5HTMUe/xMawGpIvYrfYqbRtFAqraNsUaOSkWDE6jU7HTdj+Bu6k/mvGMYZdjufQvrYdpwdvGBj2ni4RElD+KnOSkXle2aFacVU/GWSvoRI52OdZs3YX3nM8jDXT9Xn4h9QyDLYytLQAegiR1mIYvn8oYld4mVtFODReHdFwUItEDl6PZ/pYp2OCvXoQh6kvvpUcRqnkmWLHatkWQbW+gFY9jB0BGHoTFvRqVOhbeIBWL+K0qLEKoUVVyUISFk7YrJjZhTdfJxfjGGXUU09hrP4q5NU/RRtSAa2Sra4OrNc7sFuvwM5CRPQRHNWLUa6XotxVtloRGZRPMiSyYaJCJCgyV7DaYLXi1oPYdRAzb+CC87U86n9n+rLZobXvUQhtfN+EWcgqRb6+m5YelOn5GHBhiiLRoZdjj96MNlrWl/hWIWIlCaZSJslUE05u4YRVhSz+OW249TK8vhf9e/H6KN581b2h/i20U8Follg+JkYFthWGDKOqkXld1ThCZ5+lG0F9kJyOojXgN1pCzF8VCKMiYRFJIQFJURhUWhSqc14hTLNQ6UC2YdcFePUdT/1EXX2n+/y9ODh9YM306xJTSNluUSQkRHWhD09TGAYpp8arUKlvpaY/TMEp1oeNwAA26evRQV69ri2JiVglbqItdr00eDASozq2aJKFi9xyWKofm+jT7pyWPu+ry65vx+jaMdhEd00ekjX+Cl+g674HQ5RIc/qzVCQ+o3A3evSpbXoZtjSgVy+lNycp2SrJthyV4fhFZHEuiiJRS+YWUEVtOK2wybAwuw0P39lVrx1+AzNv4o1RjPZLefXX8K3FbrSiVnxUNIzA300h2VgYZqFWKpIjqKkmN6+Pzrq1FblUHk3d8LlmUemqMdh4VaW5yHITynfRY9lUnlUSJZYC2QpV0kjkuWP9uGovm57Irh/rWvscO3Q9bWEDo0ByDyfiwgujVc+lky3G8/o+FLuCXlcptjThbT1cq+/Hjt0oDvh9lGul+iaUUPoV6RsZ88YlYnfSIkxE/6uC8THdyYOhSJoKmyapuP7YO7vw1MTEdlxAHfHDaO/bAJVvHvWwA047TJkPUaoEQl6MB4ZZdxPm9Q6Mt2FrFWkNV+qbWGEZRgZQrveyHTtRWziCYNXmWuzrHopHRLHYGLTjJcJEocfi4ZRB0SFFjHnGOtlT2lvfYXtnV1/emunDsPK7ALGXooHZLApMmQwEelFG4Wimai6iQuguwfodFKDIUd3Xq1eEKQQNpWirwRzFbdA1hN2Ub0OFgYp4ROgc1MVit9JiF8OHE6omaVjOO2OdT+Gygxh9WIz6Tlqixa5aVAYTysJ0yk1+NuLqRdvmcKRqED2NLF8PV+i1vXpthe6jxoLe7G95Fk+HDF9hCSZdA4jU0MBpvGAmYpd4iVg0MYpEn0IUxhSJUVQYTqQrr246O++VbKbIYszRyIBWvNilUydXkd4aQTGFo7ZlIyoLe9DTEqnQh7yuuYireZteOaRP5RcaHQH/nL4QDDyLPQEf29ngQwlVDCtIyTi1iCROQVSr6EzttFhtsKvQsAKeTnaonQfNLra3ib5CE5dDwikwZvVZZgzoR0gpF3tagtsKc1FTivFnsaMjovfOF6K8CT0DWN+Kos3B4UCP2DBXr2ZIS0k1jYjCE4tZeaE4xZlJUGXIDCtzYC9kFZLY2gqIfSm5Tnn7uOdt+Ado/Ah2V/nYQKM3SLVQMoLSVqzPQvU+BCqaQ9hKzVLU7MPOYhQ3esMNbRS+Gi9yUtKAjJxTiDCQgwiKTCkickWmtDLNd9pCUsTzMDWju1usDFhxv4pCVzkiI3oRejePsNqWYpQ1eCtclZWuYH43iosRGtpUg92laGz2uXz0h/Dmcuxu2Ga0NlQinTxolWKsLKKqdohK5fWqxGokqmGqIkefwxS+r+gvoKkqVmJTg2sfplpdz+N5F7+7rfB3P4uBrdiZ6y0MlmehaXJuI6o7fAF/0QiK27C+xpjnd8eufGREPTLdK0eEOiyLTRL5JQNOWonrHJeIiF00t2SRVWTDc+xk9FaHUdmtl8I7HpjEVtdRzG5EbtVUfsgoK8H40eaNGGnOb0NT7/MDmC33VzUHW/LZzjbMucrgjnkYYGnGysVuEznBrFxIU6yQKEbxYacgWMlAUmOfwD/i5LTp3RUYHtd7EGxqXGBtO7zbqt7GeBmryfdVsdL93v2onfLWItefu8/fEu4Yx9YRFDWGw41Pw8gsYLxIGNyZKaknF9FkFlVximKVKUIqYwzxQVuqFAFZdBbOqAaTNZwEf7ErkIvILA2D4Zru4FTTFrzd6G1ujJRvQXkEy/C+jYEOb9VQuGE/q94ZYcKDDCjDUnJWSC0eDYlUrBZFBuw822UV8aNy9eiuQkPiUcEJ5HcAR6pcPYwV63vYtu6N/oWGcmwpRltRZBInodkoLUFJCcoafSgQHjkiuTxk4z6ZCJMVOrImei7KKMaLhCF+GBlYGTRVXA+NrosisxPDEdKzgghX69VeFLlKDN+OLDa3uXe4cai2EivQu20+FBza3Iw08kilwZClUXLxdcEKNaLRRVRlxIpEomYiyNEei2SoYuianLy8mpv0xv1AUWFNJfYHSozaUA/KmvxH5nEKNs1FasqRk2mQh4cKJSUd8GSmFJwsIqrNzgBGp6A4ydYpahaJIGrcyURoVVl8mE3FcoanYBQ18KBMdrccwWTjFmMhVI6nc2FC0R6kk0caLRlcgKWmUGjA2N9FmGKJXUTJqVBykIqiITE0ugS0u0Wx8j3tlFz8oWYZWVVlBoZLXKHn4c2iIcRXM+vvbTxiwBTDwz0KDCqPVBGOVAZkZOacmFqSrNKRY+fAi4WBqDt0vqC/C4KJV6OvZyRwnqEmpz0WE03Ul0hSnqUSlsN2F+o1R4CjTfpuL3JbZr3BkerIUD7iwGOwtDQgjddIKgWFa6SknCAiRcc1q8Kvp6h8Vbx1VfZ2B/FK3mXiZWf7c/UO4lDXBSCuee87B+fNvDtBSKqob018SnQk/btK7WChPjLE8yuUj4WdNZX+p6sRJ2k5MArSDAoHycCdRhrGCTVCae3UYoGJumgMxNpbsvOI7KscEoibHNds4K83PHULiMtemcjj/PHKNSCYxjNzyUfZFAVL8BXX8lXA9bSP51eW17++ag69iBNSoCpnOTyrjFTSYIBBq2UiNsVC2GQpFhjFKUGIODaA6HIcF+kHp90RFXFcBs6tDi4iLEQohISFUGxYwlbdtWUeCJc2FBZ7qf+ioOSHJhE37kw3hYOXerrQEFFJP2Ec0WSrImQ0cSLaKkQ0WRJrUedWWWNYRnhfja63dhgIljZUlfkpvwangkgAxnIyM8Swns5LvSAlpSBjeUQkjS3aqJZobiQuEksnioO8+HkSFmEAKgZb9FBpEFNlVTtyKb/GkRAFOYxikkkaTJS6++81YqUrqFpluwQOt1FXJaKqFIeYgt3J89WKRfYMlAcB//5qV8tgJSJFodZ5BJEQjLIpM52XRkpKWgZAPmn3LRWxW22qRbCoExOp7wJRV39c5HVw7jwu8hY4MySyiGTnURWoNqsdizTpeuFsrhfwlXW72jYhsi+0FQkiUsudmpKZbgiLFBI68QlR0uyy06Yq/Aw0CF55B4J3fouKbN8ADhuNiuzygNP1ekxEs6k8tjanbNckhr9RWVZdqAfacqfANpUEduYa/lokiAF46JndA/E/1Ui6G8siwo/LlipJEHTe2ecg1h7uZCDGNow6ONuPdYKY2HBIvHx4wzEIpKWnz/iV+SsiwwaA4P7BHdwlgmBRE1VJwmRkivr2UPebmUotgi0RsURRVEoGp8wvJ2IcXusg6veOecA5MOPgTHfmgXhvrF+8PJT9HqLwoMpOSlQeVwGOM7t5Y88mfywwDSX5BoaakTAeg6fWYijc6RSfJSJ0cMIaxUaoiyZ12UTXsek6RMnmrLnmehAXHPSIlwduvSDmodoIaxQnIctL7rN0Xd9c/ey8AQQ7djc27pnHKnDnZGbmeFhMgsjMWRQxx93nECICUfRREV7souhJxJzh/NK2bpIRkWFDz65HlLMEBj+OaL0Awoi+C+IF0XJDkJNuLEpkpqVnGEB8ERF4HMtFPj8uchU4VznMIzJcEQHHO19U0uQKCJkY975/zjnn/HoXgC/uptb7t4Nwv3QOse5L4MtP+N/PFXqISggHD4u9ZiY1kpCIaY0U6XqoerBoU62wObqvpKnFhxg/r1u37t6XANz9CbXugMDz+7p1jzx0L3D71Z/Ru2QkMFIKUmPPuMydkZ5G42KGSa+VkIhpr7W/bTzk0omqjYP78msZEGFYwhM3A/jgJyzjrnO4yDlfnPh0kp5DYeFkFqR6TMaRBEXMxxEY2yb3F/WUDNRs1gM7s97GqkQyUgv4AJKWmp7hEVllMrIvg8046tZs3/4LYnT1R0XWvrOGc1PfBaYj+9G5Cp8Xx/FWzuU+v0qRDLeBRZjh9rjN77UWYVfV1Tkc7ThO3SiIa5477ODsnTC/12rVCVdjzcbZkuLSotz8yYUpLOU1IfI7lnHWV1zkK6qP5aeekZGek5qWVkAFQqSZ3P0uhx2YmenEIpJYtTuitEumd7/rs/5OB5bxGYBPXzv33HNfehScG6j5xGdfUFhuv5qa37DF1Po76WbPI+YcWBPlAMyeR8z5lC/fXH311T/+fBf3WkfNe3gLj75MzRsewcqc+ISoLXlCTAiTJ0RzRGpdt46f9w+8A77nNSzjhruxAubP7Ilg8sxuzhNC5CEAd5wjRM7FMh4yETH5FiVuTL5FSaaI+fdaiWH+vVbyRZL/TaM5t98D4NxPbrjhhk9euuPbcz59ed23N9xwLwQ/07uP/IpTkPzvfuPnSz4AnstvGh85695z73hU3DR+K/ozftN4911YgeR/G58gprfxK5P830eSyX/xi1XySf5viMkn+b/qJpX//nf208X/YebD6eD/MBfln5OM2UFM/mt2kHPJ7CAZyeS0z9eCBtVuMl8rCZzuGXRM/EVhJjPokoz5nEbnqec00jsqnHxScLxzGh+/+OIb3Tg9fH/xxWeL9Rmrn2UqgaRUyE4oGrNIFI8ls0wtp5hlesXlF15xLU4Dtz2Gry+88KLH+frJ1FXP+xWzmClEYqK808b7hPjm/X78PS68GKeBBx/DA8BHj/P1h6mrnoktbKxyLB4WjVvENRP743dx5WkRufQxvEg6j/P1R6mrnhtvszMx2d/qFAXELeS45sb/2c75gzYRxXH8ffsLpjVaqIoe6nrrDZIbAxmyncdxkCmQKSRkMZ0MNIuBQIZk00KWDC6iYLQxIBmsFLpYCw4dLFgVB/9U1KEI7r73cm1KoGmb9NUk3ofc5Vpo3/vwe7/32sv93lvGLvKjH18+8psPnx6u33pwl7Eb7AAuXBa/a/mSOG9ePX61QjAoBKRQsFOEMSuiNS1id5RqhdIyozjry8NH7Nu75+vs+xtucYcdgLvDPjAWWRbn1MuB60e4iCzCEKOqk+hneM3oEepHvv5g5Szry41nL+6uP7/z5sb9n79+HSiCHfa0mykDV/Tw5D87LV8hNjcjq175mnOEip6VP5uVQ0Tu3L/17dHz1y9eXekXkZUd9n5z88OyOBdfDlpjxV/e9bSwmBUFo6Kw7PAaq7fm0teXh4ic+fLiER9arK/IteusurRUvsaiS0vZa4NWvcnUP8u7zS28GSskpWXVmwKU1SGGpAV3E/kji5Gl8bSsQ1SAsspQLjLLv5CzlSxy9xaRIFOAylrdkHd1Xnzfm3rPyWsFKKieDu1WT8/x7PDCIUeelyEKAqK4nn2Ov3laZ7nhDD/E59kKULjDQLAjwrztH+T/w/JWngKU7/kwJ0Ix001zfn/y3zPILhwyOHJMMeE2GgyyL8r07lw1ExyBMTX4TjVSZDZ0jOyenL2Dwkw1fDenU2iEPb3E1HL5cyBwCo2wwJOFx0wdjxe4R+AUGmGBCWGCRBpbtzHm3N5qBFhj7DWkSoNtYSJYYxMREB4ShgnBFzkijokOJlSiWiRR1igc4RdugYxtqEO1SLJdS1W035hq30zVyYIyVIvEYsAiuUjTFHTKQCEMqnEpBYtK/HChDPUi5SjV+FtSq2p1B8pQL5IpG9E8igt20g7rUAiDahZpG7G2jqKWhTJUi5RrQJFiqGsOUKhAGapF4pq7WKcUXEouZqgGZagWyceJCi6/yBikJcc62Z0iJLmmUg3/j8bRwxcZNSZOhIZl6l/hi/giHXwRX8QX6Y8v4ov4Iv3xRf43kbHHFxk1fJFRY5+IiXHBzPV2eZ/IfIGMDEYZx4q74Fg2aXWukIsZVJiHpCsSoahboTRGl2SBSHT7nhZOl6kObFMlHaUIBF2RitZEwqhiKPQEkC+iZYIfjm6K4OuOo+dMXXcAFIv8gpPXc0Azj2NRKMekSIZSQFQzsWok0KKbPSJhm582NAyFxpuIxbFa4i2lddlGne5NUSKi2eJmfDZZssNt204ZKeQNC8fCQUSKxCnPW6GpnFaR/e4R0aL8dJOKJyjSNpowDU2KhFGs1rgIsKgByGygFs3heHgiG8R/sEZWk+IAqlqPCHVEWsOJlHS93I1IfR5ufFcEJbsrYhaswgoGE4l6Iq2OSLs3IlUpkh9OpGDbRlfEqiJq0a6IZXRFMK/xcTdoRBwhkirKoVs1enMkfHI5siBEXJ2a4VI4vyfiVveJJMgaVKS+lyMbot+rvbMWtbxZa3iReBktY4WL1IyM6YnkftvpfSJorwwqkiGrM2st9MxavevI8CJ61DAy4CI63fNEiMLbGF6ku45kgTRV3N51hJM+yZU9kYMCLMOVb6ukZU3IT1gLaXgw7JHPYUwwnd0uY4/JeaZxYp4ynZjnfgONtbFXub3WCPwFAwIwe8wd4wAAAAAASUVORK5CYII=", - "description": "Display temperature, humidity, speed, and other latest values on various digital gauge widgets.", + "description": "Display temperature, humidity, speed, pressure, and other values on digital-style gauges.", "externalId": null, "name": "Digital gauges" }, diff --git a/application/src/main/data/json/system/widget_bundles/edge_widgets.json b/application/src/main/data/json/system/widget_bundles/edge_widgets.json index 590e5936cb..e22c4fabdb 100644 --- a/application/src/main/data/json/system/widget_bundles/edge_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/edge_widgets.json @@ -3,7 +3,7 @@ "alias": "edge_widgets", "title": "Edge widgets", "image": "data:image/png;base64,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", - "description": "Widgets to manage ThingsBoard Edge.", + "description": "Widgets to manage ThingsBoard Edge instances and navigate through their entities.", "externalId": null, "name": "Edge widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/entity_widgets.json b/application/src/main/data/json/system/widget_bundles/entity_widgets.json index 865d2e11ec..97bb12aa7d 100644 --- a/application/src/main/data/json/system/widget_bundles/entity_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/entity_widgets.json @@ -3,12 +3,13 @@ "alias": "entity_widgets", "title": "Entity widgets", "image": "data:image/png;base64,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", - "description": "Contains entity hierarchy and entity tables.", + "description": "Visualize entity properties and hierarchy using table and tree widgets.", "externalId": null, "name": "Entity widgets" }, "widgetTypeFqns": [ "cards.entities_table", + "entity_count", "cards.entities_hierarchy" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json index 1f7278892b..140d4845f9 100644 --- a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json @@ -3,20 +3,19 @@ "alias": "gateway_widgets", "title": "Gateway widgets", "image": "data:image/png;base64,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", - "description": "Widgets to manage ThingsBoard IoT Gateway.", + "description": "Widgets to manage ThingsBoard IoT Gateway instances.", "externalId": null, "name": "Gateway widgets" }, "widgetTypeFqns": [ "gateway_widgets.gateway_configuration", "gateway_widgets.attributes_card", - "gateway_widgets.gateway_configuration2", + "gateway_widgets.gateway_general_configuration", "gateway_widgets.config_form_latest", - "gateway_widgets.gateway_events", - "gateway_widgets.gateway_connector", + "gateway_widgets.gateway_connectors", "gateway_widgets.gateway_logs", - "gateway_widgets.gateway_statistics", - "gateway_widgets.gateway_general_statistics", + "gateway_widgets.gateway_custom_statistics", + "gateway_widgets.gateway_general_chart_statistics", "gateway_widgets.service_rpc" ] -} \ No newline at end of file +} diff --git a/application/src/main/data/json/system/widget_bundles/gpio_widgets.json b/application/src/main/data/json/system/widget_bundles/gpio_widgets.json index ffe5d3449a..a2f0b39def 100644 --- a/application/src/main/data/json/system/widget_bundles/gpio_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/gpio_widgets.json @@ -3,7 +3,7 @@ "alias": "gpio_widgets", "title": "GPIO widgets", "image": "data:image/png;base64,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", - "description": "Visualization and control of GPIO state for target devices.", + "description": "Visualization and control of the state of the GPIO devices.", "externalId": null, "name": "GPIO widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/html_widgets.json b/application/src/main/data/json/system/widget_bundles/html_widgets.json index ad6b861857..e7f9a6d254 100644 --- a/application/src/main/data/json/system/widget_bundles/html_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/html_widgets.json @@ -3,7 +3,7 @@ "alias": "html_widgets", "title": "HTML widgets", "image": "data:image/png;base64,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", - "description": "Visualize HTML with configurable pattern or function, HTML with attribute values and static card for custom HTML code.", + "description": "Visualize HTML based on a configurable template or function and device attributes or time-series values.", "externalId": null, "name": "HTML widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/input_widgets.json b/application/src/main/data/json/system/widget_bundles/input_widgets.json index 4187bd63ff..5118c245c5 100644 --- a/application/src/main/data/json/system/widget_bundles/input_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/input_widgets.json @@ -3,7 +3,7 @@ "alias": "input_widgets", "title": "Input widgets", "image": "data:image/png;base64,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", - "description": "Various input forms that allow users to set location, image and other configuration parameters of the target entity", + "description": "Various input forms to set the location, image, and other configuration parameters of the device, asset, or other entity.", "externalId": null, "name": "Input widgets" }, diff --git a/application/src/main/data/json/system/widget_bundles/maps.json b/application/src/main/data/json/system/widget_bundles/maps.json index 329ae06821..aa92068c3a 100644 --- a/application/src/main/data/json/system/widget_bundles/maps.json +++ b/application/src/main/data/json/system/widget_bundles/maps.json @@ -3,7 +3,7 @@ "alias": "maps_v2", "title": "Maps", "image": "data:image/png;base64,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", - "description": "Visualize latest location or trip animation of the devices or other entities on the indoor or outdoor maps.", + "description": "Visualize the latest location or trip of the devices or other entities on the indoor or outdoor maps.", "externalId": null, "name": "Maps" }, diff --git a/application/src/main/data/json/system/widget_bundles/navigation_widgets.json b/application/src/main/data/json/system/widget_bundles/navigation_widgets.json index 7994730172..9df7d221d9 100644 --- a/application/src/main/data/json/system/widget_bundles/navigation_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/navigation_widgets.json @@ -3,12 +3,15 @@ "alias": "navigation_widgets", "title": "Navigation widgets", "image": "data:image/png;base64,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", - "description": "Useful to define home dashboard of the user. Contains widgets that enable navigation to other dashboards and menu items.", + "description": "Contains widgets that enable navigation to other dashboards and menu items. Useful to define the home page or dashboard.", "externalId": null, "name": "Navigation widgets" }, "widgetTypeFqns": [ "navigation_widgets.navigation_cards", - "navigation_widgets.navigation_card" + "navigation_widgets.navigation_card", + "home_page_widgets.quick_links", + "home_page_widgets.documentation_links", + "home_page_widgets.dashboards" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_bundles/tables.json b/application/src/main/data/json/system/widget_bundles/tables.json index 65f0775d2a..ce46218178 100644 --- a/application/src/main/data/json/system/widget_bundles/tables.json +++ b/application/src/main/data/json/system/widget_bundles/tables.json @@ -3,7 +3,7 @@ "alias": "tables", "title": "Tables", "image": "data:image/png;base64,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", - "description": "Contains entity, timeseries or alarm tables.", + "description": "Contains tables to display alarms, entities, and their telemetry.", "externalId": null, "name": "Tables" }, diff --git a/application/src/main/data/json/system/widget_types/alarm_count.json b/application/src/main/data/json/system/widget_types/alarm_count.json new file mode 100644 index 0000000000..d1a41be9e6 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/alarm_count.json @@ -0,0 +1,23 @@ +{ + "fqn": "alarm_count", + "name": "Alarm count", + "deprecated": false, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAolBMVEXg4ODf39/g4OAAAADg4ODf39/////g4OD8/Pz+/v7RJzD29vb6+vr7+/v09PTt7e3z8/P4+Pjx8fHv7+/ok5fXQkqXl5chISHk5OTIyMi6urqpqamgoKDDw8P55OXurrI8PDzc3NyxsbF0dHRYWFjlhYrUND3V1dXroKT88fLR0dHzycvwu76QkJDieH7eY2pKSkovLy/219jieH1mZmbTND12Tj45AAAABnRSTlPvIL8Ar7DvmsykAAAEx0lEQVR42u2aiXLaMBBATdMuUmU5yEBJgEDanL3v//+1rpDI2khA087U63RfjGRJa4k3a5sMpjgZPCuGfef54KQYFGMFPUfVqPG8hifAGE+r3ufDo4piCE+CoYgwQ0S4ISLcEBFuiAg3RIQbIsINEeGGiHBDRLghItwQEW6ICDdEhBsiwg0R4YaIcENEuCEi3BARbogIN0SEGyLCDRHhhohwQ0S48X+IaDiKBibsiGit/hit/i06J0IatkRsaWPZxoZR3OIgheKYjUHbkoLj/jawOWOjsDQ3rUfTUXcIQ5c9IqhROlPlMf5lwm6saYx2KC4dJSg6BhsKzMZTBK3hSqV0XsQ6p9ic9EexximtMyJaOdMfDURjTnIiyrqe/d5fOauyIgb6ha4wJRmRsoKekRXRyvVPxKUiGkVGEFnfvswwXQMzRiiik4xYEpm+zHILDS4Wy8UFeE7jtfUK/i15Ea2seRB5uQeI0Bs/ew1mcWGw7kKkNjYrUj9aZP7m4o1Zzg1W512IOKVSEZUVufm+XyRu89dwOl/OmWQEdFbkHuD+gMgSNy+yNK+7EcllxLpUZEqXflbk3QIv+HdLc7FYvOlCxFkNuiWitc5dIx8AeU8iKSa8DHRBnd61NOREPoXm5wcRZmBGVJIRlRFZAawxKatbriK/efud+AtkisWkRyKZUwsVosjbKVMR91sZWQMyuW9c77vz1NAVlBGAY3etT9Dgcypy/mU2uz6DzsiLQCqyAs/NDXhWicjZ7Mt88fUaOoJOrWMZmQDEa2TDZFfk7uoO4GoGHUGf7PpIRlbQ4m32Yr+8hI4gETgi8g1arFKR8+uvl3fQFXT7PfKBOJ00uZlmRK5+zD5CJ1BGNBw+tfLALlezGjrgkZ8jKe18nAF8nGHRDfTf79+KzK7Pz7u+2J2Fg9fIbd5jCk2Wlyw+EA/etdbTnMfPNbQ56/5fFLVHpGf4jMDTEMl+r+VGvXqqsO8LOq1c1bPHCuWe736t6VdKdGXKVkbo3KpGJfQFbUeVs9mMqBJNxuPT8SnRbKS940MhcaOOXCgu9whoYTyw3nikIt7EOlONPNWorkeBUFe176lDGxuhDANYhMjQsymo8qMRf1gaQathSZ3bmCqO163p8LlufKybnlooosrSObMX95iBdOR4jHtEqEOPRIRyosLjfB/msLKhahYIFiECxzF486IOfPliU1Fo+ENiUSI0l2/EJeKiYeUQZ2NJK/mmRQ0EMiJqg03xevinwm4Thd1xI9R2YBtfKhqIsc3jFM2llI8uYwD2UMAGmlQhwSMRQVSfCBqpCOgNyuuEDaEq9oYOKg9BR+5O125ovTtCA1TRHKEH0EOnIqTixx8ARaXC2pcB5RsQ+o6zEwR4dLuNTZoqzrpdAFqRcS6gfJAIETUASIl2qBGrGA5JCNAOJKPUBiROQiHxXcBma8ydLpKIJMSc6WYrzkz7YY94eAeNYJonjEWzzHK0FwV20Nsh/T//FLBPiAg3RIQbIsINEeGGiHBDRLghItwQEW6ICDdEhBsiwg0R4YaIcENEuCEi3BARbogIN0SEGyLCDRHhhohwQ0S4ISLcGBZFz37Zn0cNi2djeALUL4pBUfc+J2qMGieD58O+UzwbnPwC9rQ9R9RHLAMAAAAASUVORK5CYII=", + "description": "Displays the number of alarms based on the selected filter.", + "descriptor": { + "type": "latest", + "sizeX": 3.5, + "sizeY": 1.5, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.countWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.countWidget.onDataUpdated();\n};\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '220px',\n previewHeight: '100px',\n embedTitlePanel: true,\n hideDataSettings: true\n };\n};\n\nself.actionSources = function() {\n return {\n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false\n }\n };\n}\n\nself.onDestroy = function() {\n};\n", + "settingsSchema": "", + "dataKeySettingsSchema": "", + "settingsDirective": "tb-alarm-count-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-alarm-count-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"count\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.2392660816082064,\"funcBody\":\"var value = Number((prevValue + Math.random() * 4 - 2).toFixed(0));\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 25) {\\n\\tvalue = 25;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"],\"assignedToCurrentUser\":false,\"assigneeId\":null}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"showLabel\":true,\"label\":\"Total\",\"labelFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"400\",\"lineHeight\":\"16px\"},\"labelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.54)\",\"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';\"},\"showIcon\":true,\"iconSize\":20,\"iconSizeUnit\":\"px\",\"icon\":\"warning\",\"iconColor\":{\"type\":\"constant\",\"color\":\"rgba(255, 255, 255, 1)\",\"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';\"},\"showIconBackground\":true,\"iconBackgroundSize\":36,\"iconBackgroundSizeUnit\":\"px\",\"iconBackgroundColor\":{\"type\":\"range\",\"color\":\"rgba(0, 105, 92, 1)\",\"rangeList\":[{\"from\":0,\"to\":0,\"color\":\"rgba(0, 105, 92, 1)\"},{\"from\":1,\"to\":null,\"color\":\"rgba(209, 39, 48, 1)\"}],\"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';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":20,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"24px\"},\"valueColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"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';\"},\"showChevron\":false,\"chevronSize\":24,\"chevronSizeUnit\":\"px\",\"chevronColor\":\"rgba(0, 0, 0, 0.38)\",\"layout\":\"column\"},\"title\":\"Alarm count\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"units\":\"\",\"decimals\":null,\"useDashboardTimewindow\":true,\"showLegend\":false,\"widgetStyle\":{},\"actions\":{},\"configMode\":\"basic\",\"displayTimewindow\":true,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"titleFont\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"titleIcon\":\"\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"14px\",\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"14px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"color\":null},\"titleColor\":\"rgba(0, 0, 0, 0.54)\"}" + }, + "externalId": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/alarms_table.json b/application/src/main/data/json/system/widget_types/alarms_table.json index 3d3213935f..964f478179 100644 --- a/application/src/main/data/json/system/widget_types/alarms_table.json +++ b/application/src/main/data/json/system/widget_types/alarms_table.json @@ -3,7 +3,7 @@ "name": "Alarms table", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays alarms based on defined time window and other filters.", + "description": "Displays alarms based on the defined time window and other filters. Allows the display of alarm fields, entity fields, attributes, and telemetry. Highly customizable via cell content functions and row style functions.", "descriptor": { "type": "alarm", "sizeX": 10.5, diff --git a/application/src/main/data/json/system/widget_types/attributes_card.json b/application/src/main/data/json/system/widget_types/attributes_card.json index 5f84ec3b8a..067360a6cc 100644 --- a/application/src/main/data/json/system/widget_types/attributes_card.json +++ b/application/src/main/data/json/system/widget_types/attributes_card.json @@ -3,7 +3,7 @@ "name": "Attributes card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays one or more latest values of the entity. Supports multiple entities.", + "description": "Displays one or more attributes or the latest telemetry values of the entity. Supports multiple entities as separate bars.", "descriptor": { "type": "latest", "sizeX": 7.5, diff --git a/application/src/main/data/json/system/widget_types/battery_level.json b/application/src/main/data/json/system/widget_types/battery_level.json new file mode 100644 index 0000000000..41daab9274 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/battery_level.json @@ -0,0 +1,23 @@ +{ + "fqn": "battery_level", + "name": "Battery level", + "deprecated": false, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAilBMVEXg4ODf39/g4OAAAADg4ODf39////9c35Dg4ODL9dz5/vzX9+QhISHl+u3f+enB89XC89XHx8c9PT2QkJCu8MiF56x0dHRw453j4+Px8fFYWFisrKz0/fcvLy/S9uDq+/GCgoK6uro8PDzV1dVKSkpw457O9t6enp7i+etmZmarq6tm4ZeZ67p65aQon2vGAAAABnRSTlPvIL8Ar7DvmsykAAAEcklEQVR42u3dbVebMBjG8Tq3Sym3zARlSSA8ax+2ff+vtyCds666oOsSuvxf5CCnL/o7gUIRThfnZx8Wl3Pv49n54mwhMfukYXw8AYeRmM0KJ9HiVCCXAeJZAeJbAeJbAeJbAeJbAeJb/wOkzky5wDx6BcJJKU1cPqHxDmh4Aw97DcLNkFEO06jJiAH5uAaPQD++Yf4JsqKVGTRRJqA06bo2gwJYb1ZJMF5z6ngNs5TCQXYQIRjXAoz6JqUNGkUpYxllDQS1eU01GJHKoLVETQwOsoLQUAp0uRhYTzetjMwqpQ0kA5Ca9byFg+xnZEMNwLKe0x6kJ6WUJsEGqOHUwogcZL+PCNogp75h+zPCKRuSIwRKr9xsWfYQZiAZdc83rc2wChI7SEq6hYMsITpNa05bpFQ3NRlITTVDQ4oZAG8apX5CJDnasux3drUF5IZI9SQhWsog28G0bYn6boSYFHVwl/25lhQYE3I3mFHgV6rFm/LspLGraYuJeQlRpJyfp/wViOjgvP/h+8i8ChDfChDfChDfChDfChDfChDfChDfejekiKOnxUvY5RtkGT3r3lLiGySJnreGVZ5BzIR4MiXvgxRl9HtlAYs8gBTruBy7jw53X47Fycsm55BlYt5obJeBJhYbmhPIsoziwn7ykqi0kLiAlNEVplRZSFxArgZH/O3WsmsjsZA7gJQlcHNh341hH/48dgspogrVxZTM66MKB3ILqaIC8STINZaHj/VuIVdvgiQ4kGvIMkCeFSABEiABEiABEiAm95BqEiT2F4JvExy38BiCm+9fLLspvIZMKUD+BSS5sa3yGnI95eKDx5Di7mJChb+QkzkgBsh+ARIgARIgM4KINMdQrnifwiRTzlU+M4hcKaL0wUE6aykzSxnpTUv5vCAp6X6EcBKQLTEwamEGjbEmFXOAMIb0AdKRMmNNq+HvnWuo7jMuwbyHmMY3zh4gOdW7508VMQz1DJyJVhwZkkyCxBaQ7BlEpVJ3fIsjQ3A7wXGHN0C6Vqd5hqNDim/WjttqKmSX6MUsvrM/7uy75ZpW+5AsTTXfzgUiSZtxQ83DrACaJMbyVpJo+LEhxWfLoupVCBSlXUOthNSUi9podnEhNNixIcnXC9u+Xr8KES0R6cYsbbVZevzAlQxos74+MuTO2mEkxUGIYAIPNatcjmuaFdt/SdPM4IA4dBJnv6YACZAACZAACZAAMQVIgLzv4kPkL2TaxQeP/xmK6vuEiw8+Qwwltqvy/IaBk7nzAUlsmd+Q6s5+X098hky6+HAydz54fBw5mSN7gOwXIAESIAESIAEyZ8iJPBlaRdXkiw+FxXPgDp6eXk87jb8rkJhZPJBTyPhw+tpe8nWNZVniUI4hRRQvDeezXcNcJBaPszuA4GqQ2LeMLZ5mdwIxkigpiqVV1fr+xY8s5xBUZWRfWeGF3EOAorqyqyrwYj5AvCxAfCtAfCtAfCtAfCtAfOtyscBJdLn44PyHKv5G8tPp/Ij2+dnHy7m3+HB2/gO3i0/vBj05fgAAAABJRU5ErkJggg==", + "description": "Displays the current battery level of the device.", + "descriptor": { + "type": "latest", + "sizeX": 2.5, + "sizeY": 2.5, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.batteryLevelWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.batteryLevelWidget.onDataUpdated();\n};\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '200px',\n previewHeight: '200px',\n embedTitlePanel: true\n };\n};\n\nself.actionSources = function() {\n return {\n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false\n }\n };\n}\n\nself.onDestroy = function() {\n};\n", + "settingsSchema": "", + "dataKeySettingsSchema": "", + "settingsDirective": "tb-battery-level-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-battery-level-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"batteryLevel\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.2392660816082064,\"funcBody\":\"var value = prevValue + Math.random() * 7;\\nif (value < 0) {\\n\\tvalue = 0;\\n} else if (value > 100) {\\n\\tvalue = 0;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"]}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"layout\":\"vertical_solid\",\"showValue\":true,\"autoScaleValueSize\":true,\"valueFont\":{\"family\":\"Roboto\",\"size\":20,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"24px\"},\"valueColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"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';\"},\"batteryLevelColor\":{\"color\":\"rgba(92, 223, 144, 1)\",\"type\":\"range\",\"rangeList\":[{\"from\":0,\"to\":25,\"color\":\"rgba(227, 71, 71, 1)\"},{\"from\":25,\"to\":50,\"color\":\"rgba(246, 206, 67, 1)\"},{\"from\":50,\"to\":100,\"color\":\"rgba(92, 223, 144, 1)\"}],\"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';\"},\"batteryShapeColor\":{\"color\":\"rgba(92, 223, 144, 0.32)\",\"type\":\"range\",\"rangeList\":[{\"from\":0,\"to\":25,\"color\":\"rgba(227, 71, 71, 0.32)\"},{\"from\":25,\"to\":50,\"color\":\"rgba(246, 206, 67, 0.32)\"},{\"from\":50,\"to\":100,\"color\":\"rgba(92, 223, 144, 0.32)\"}],\"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';\"}},\"title\":\"Battery level\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"units\":\"%\",\"decimals\":0,\"useDashboardTimewindow\":true,\"showLegend\":false,\"widgetStyle\":{},\"actions\":{},\"configMode\":\"basic\",\"displayTimewindow\":true,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"titleFont\":{\"size\":16,\"sizeUnit\":\"px\",\"family\":\"Roboto\",\"weight\":\"500\",\"style\":\"normal\",\"lineHeight\":\"24px\"},\"titleIcon\":\"\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"14px\",\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"14px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"color\":null},\"titleColor\":\"rgba(0, 0, 0, 0.87)\"}" + }, + "externalId": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/dashboards.json b/application/src/main/data/json/system/widget_types/dashboards.json index 05529a856f..03c22199b8 100644 --- a/application/src/main/data/json/system/widget_types/dashboards.json +++ b/application/src/main/data/json/system/widget_types/dashboards.json @@ -3,7 +3,7 @@ "name": "Dashboards", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAByFBMVEXj4+Pj4+Pk5OTh4eHh4eHg4ODg4OAAAAD////w8PD7+/vk5OT9/v4wVoD3+vr5+vry8vL19fXz8/MuVX/8/Pzq6urp7vGdr8LY2Nji4uLu8/VHaI7g5OjV1dXn5+jd3d3b29vGxsbf39/4+PiXl5f39/fv7+/u7u7MzMzIyMilpaXt7e3Q0NCgoKDm5ua6urqcnJzs7Oy1tbWenp7p6enh4eHU1NTBwcGUlJSSkpLX19fLy8u4uLjOzs6tra3T09OampqNjY2ioqLKysrPz8/Dw8OQkJDExMSvr6+9vb2np6fa2tqxsbG3t7eZmZmJiYmrq6upqanFxcW+vr764gTS0tKGhoa/v7+zs7OLi4v0+Pi4xtOmtsd9fX3AwMCRkZHy9fe0tLStvc2brsFhfp75/PuYq794eHjJ1N28ydWDg4OJoLfc5OnN1t7G0NuqusvR2+Oywc+EnLR9la9rhqRmgqHCztmitMaTp711j6twiqft8fPl7O/Z4Ob//vn//e6No7k9YYgzWIJpaWn75iT98o398YHh6Oz++9n99aZXdphRcZT873JwcHD++95Ja49HaY776Tz64w7++c387WD861Lh4uL++MX7dhrIAAAACHRSTlP289i6skRBAFblPJYAABQbSURBVHja7NZNb9owGMDx9P1xbMnYSiQ4AA0hBQwGN4EVt4xCtlKKBGyreOlliO//JeZOSCBV6mGHKdD+D48UyTn8pOSRrYuzEwvveUen5xfW+TGi9n7nUHR8Zp0iOIDQiXVE4QCiloUdOIBsbGEbDqBPSNJ6D+JTM6gPbyNB4vC7kMI69HZWsRN6ZnqhA2+iw9rOA7p6jRP4f70P8ebjWJWAIgrgp2wnDlkAY4mYQXEziBmEsYCw6uQXBKnNe75rwoVcgiDtAA0emyM1qtaF7LqiHcnrxlSqPG1MVNZeqKiWkmqR7cm5h4Uc8s2HRgir42aCIJo78bLwlF55C51uFIRorSoNjUfi6yC/KF4/z4aT3HydUet83wt76Y4Lm4J66SpREEZVJzMaTm9yQoVV0SHRTUOAp5aSZF5a4x+yjft5vsraPa8VqzHfOghKEmSA7/qXyyijn7/cpfsV0XEMpFhaC0/nPD2bpjsav1z6k6fc4LH2/X6a3TogSZDyVPe+kVk7bj/cKiFx97fzs/Kgo+It6xaLZRQrpXCvAGUd6fK9iqW7dQBK0M9u9igDIKUqDyDVZMACYL7Pq1cEqGsGczm3uW1OlDgFZE78Db06wE/Q+v3HCIEE9CGuKHvVJ+QPu+X2kzYUBvDnKnRKpQVUbsaikWA0cyY458MkxswneFjSnhDWW9q09E5vQAK8kMCD/skrOJeg2NEuLnvwl/bradqH75fvnO+c/413kX9GCw2iFSASe3tCeMjMdhCM/IpIbG3/ZGdVsnhiIwqbe1sr14NBgmFaS0W2Em1AY6vCYUIWisb+ilVBH5B4EMg2ukxkLQtovtfNrAjap7h2RJPN1UzQ7SgiWx85sgWHos/xkU3eTCS2AUg4LJLTj2jyIawIgjxFPwSJrLWxWT3QMQH/hmg9JSy9cBiTGT9aAFqkVMwnIRx6QfFs8T0RCynysD3LfNqJIyPzHgkQ2QRtPzFWG8xEMn5otWDV7s5kCIIkWSLjP/2rRTx+5T3U/7HL7UALXJ8XvlfK6xB+AkF4CceP5iOodFCGFtkKJzIk7VE8PjLAaDTUOgEisRO6NxOhdD9RRadRXhR5cWqxGVviKVJAMZ1sUxI2tiVB51BVN0wU9lHkjYWCNHdLqd0vhexFvZws3ORvCpWD2m6pfH76XORDKBGEka37uAkEMHRAO1Bkh+4+iaC01hFEEVikN4YJETgKhikeZZIGNSFduUN5QMeURxGSXBCBco1aPtnIV8rV0+Lpt/SPdLmZ+pxqpGvXz1twuIo4ImYMLY8GrsbIwSLYLxGY7YkOQ/KiYVmuvw4E15UwzGEGomoYojuwJqJOuarqLhMprSfzx2e1dLp2eFc8zlaaeP30sF6uJy7LkUXmGfOUoE3loWs73OgPU4t7nFqmJggdhaFsxeDkjgrDPcYgaEzzKKXrMO0pJZlAUQcDeunUOqpd5Y5zterVbeoud5xdb5Q+NXPV4m3+9nlF9kKJuILpyaYgKoonGAFTy2cf8LCPStN2n6JtVcVsCcVkGCZInuX5jOYIhCpkNAnmOdCTMFvLLFvs6xeFKp6/zl5+vazsniRT+NHVYapULVwU/2qxdxgk7k0mjm4OjYF+jwS2X3rebFmWnUX4FdjFkQWgEERvvwji33Pmj8ANMRFlQ+Qib4jvR5QVDo0/2bWzF6eBOIDjr79JBiYJGUweJpOrTdpm06b3ld62unXXs+4uuoooCIKvPuqD66Kg4oH675quV1VwXWGlrv22CW1TAp9Ck5mQ8vVT90/AoBFAlY4yjL99+5oh/fEw/lghgAX5REyslm+q++DOq19Pdf+Diw//ZivIsrWCLFsryLL170Kwgo8CwXj+/Jth/OsPhM9vZSt1FEh5CqKCVcAq/ksmuQIAAoCKCcWQPBBKXuO5CNRkxaPP36sdCaJfplokTiOxWdW4UzElOO6UKgBthkizRUsBUQnDsqGFIbKRYWhGWsvQuSlNEoiDfh8iNtmI2gFrhoHR5ZnAhuNOYYD1bhwG3GMCiNq0YvqzgGsWs4fdoEqbB5Cqj2qepR0BUjHa4ajJNI8hxkdiGo47ZaQoMzOmdkwZAdkKRTOwabpmn/aCCtXELoUk4k82tgLh9yESwhXF1oxIpg6Vda7AcUdMTkVTlPh7okuADSIhz6RCmApVz8zJpinDPNJaj4UTcfglIjkZ55ETc0JcQZa8FWTZWkGWrRVk2TrBkEcP4V/sJ8jD/Q9/6UZZfLyQp3vP4YfsJmANwTxnuMExfGnWFXU1BQfhmAN436afmCmEwOc0DxaS/fkGtYbgILWqwGKUNSl8KWXgP4Q8ubL3FL4Lu1dTOMjJXgrw9uB0nREHK5hQBOe2dR6vSzI4DpB7fQHOPc7hnIcFJZJxQM+0MaHJxjQKohSKVJCpIgCA/1gDkMRGKKdzDpXVGMkoWvh5Ah0lvBQiKQk7hupIMgBgRVJBkGQBUkg4DPL2yf7zvStX3u3vP3sEXwvdHsMdXhhPAfUpbF2w8mTNaBc29WLRv5y9m1lTbo2A9Hdteecurbmuz3YGbvpMfO887RQKRv5erWNn18Y3vN5anwOo64MzYDdKd7m7tuMWeumLeq80zsDncGvEHQDxUjAZWSaqpk8HVgKLfH8qBPFkijJ+QA6DvL7yqTdPFv7x+c7WOimwmwEG2pdgOGh3nL4+nNzcKha3NrprTs9yDXDc0rlRr282DM2tuVKdlXgnHxRI8daZW6Sg9ap+4XI2tdkFEBusj84VpfH0vNjelMaay8+bly5+hei2zwDsrnCJRi0aRxkhsAEQ16xyS9UY43gUHgKBl+8OHHvPFhypnb67a5RYnQOgvpG48h3SNws3NhPIjTbLQu1eFoNTbzUa1pg1ZNq4PFB7o5LdOTvMwqSzPcEFrWSzQvEcDBLIxm7pbuZCTXW1vldbV+tsk/dp6ytE9SBqYahoOJNODxNIDN0EYnZtK/TBZDMdZpVDIIlkbw7Zh4W0Qk5an2S1ng0A7V7xKg/GG7vmePt8Pt8+nbd3wuhFBsBxKxfP00aYPZPdbmWF0mygbxT0et6dFS08MAeV5ppZz+9WIdVjij/w68k+6t7kgrCplXid+p2vkJkWTwF0DbcQ8qMgF2BWAWA+m0iZ6YQZQzOjHAp5egB5DgvRMFlEXbFlACDB2fEMdy3mVGqBUS5HZSEOqZsDwFzOiapJlGHspHVsI132hrIxaWIjBxVFlyU7ZbWvmkBMNVmcqsUUTiIR82TP3EmL8CVZD4VkrWCPkDRBBAGSAYhoUMHglgm0guBQyMf2zmy3YSIKoOzcsUcae2RL9oN3J/ESx4mdPWn2fU8rujy0VZ8q9SPgASGBBEggPhgnQEsKKjtqqx5HXuIbe46sOJOrm8lX33/3xQ/ff/fZk3kVOIRsphj+DNykN7HgHyBo2SP6526/X3z9JXz61Q/fwl8AcwL8OVJpBv4RmGfgaZHD/slnn8GL4xV3Gl8obyLPjTeR58abyHPjTeS58YpFrJc5cM1vRHCRg0NwBmH4HXCGwtMw4sELBQIJRMUHNRgpAo8QBACLCnAPYf6GCM8enh1IlLeP4ZB5EYDcxHkXnsSPedijyZAw9HZnEmMCe9B0v9LQ9xv6w3d2Q4ZC38k+NEv1/6IIFgQiIpEygvAgI97lcgvWaB73z3P4aNEmR1Nl3SPA3hXlc1PHip+dNjPJHt06DrV9HPtT3MkndsHh5MjIVG0KQOy7pIXLSa1gNCvOuUZdNIzOrLLsL0M12t63SB1oILPWmALOSYos6YyIfF0pAoCv6ITRJJPwc4l/QoTP5UQf86LKFh4ubCqIXeScupeb86C4mF7Ipy3WXmDgg7jPV2aMXe6G2227Nq1Jl5XxPi4utsIL83Si13obsRbax55HAKReswneJBpJp85pEK7ka+1yXP1kM2zF0djYwD26BhiKDgHcr0vTnKtKstIoGcm2LvdLssNeoUFJy+InrghSeQzA+EXyqwjUjr3jAHeUUlVttS61rgqbBgBB2U5rOhOqbTst2rO7zbVjk8bPcZvWrTIqZr75htVvt9VheAYAs9FmXRz54kqJYdtP29pIs4WFsa2Ug61pTg5EgDo+AD5CyMWSvJuIkQJsKsa8LGOn2GcsN/XUe4RXCQASBXiA9fx5dxowK8WsjmvSnZ6IbK8AdA+V19O4eFquSY18aJtZ0071f4o7TuLKXbVw0fLMdbmeWUYA6W50te7bbaWm5PG2X7D1rm4zE2M2dcotT/uVyFwD2pAJTkTSaRfXdyIl65iH1FgcSJJCx77ri33ylIhQJERACH4FWQZ5VzoRmnIxYoPYNhdpcILkqFHQMTJBYJsXQV7iNsF5cUnm032cGgQrbZHmltyNXom3qhL7YIYAWaOe703kEI91bqku1KXg1oflbBAPMlm4J6cCa5QVBFijVMKsuJtInQCWnL5MB0chVbMDEZ4SSakFVRQLGH4NpYAZIBgTIJQIBP9856Q87J6gKzZZEbgk5CBuvyIwmKYA80KyBoAJ8DyTBDHJvt0EjMAIwFMAfFjsRgjBuzUsAN4Dwm4PETDV6oYFhMCTIohFTKqYE+AvwCgp+B9hZD39x58jvLXzpi+w0/KK+1ovlDeR58abyHPjTeS58Sby3HjFIs9jJLZ/LoKRBX+ZZzCI3W9ECJuBAwoa5GQoifud5OHsigmA+ntr5hd3LHFwD+denRnp3x2zlvQrRzz8AjvEwNCHgBwCplQX4R6f+xsiSCwS+DVmh/RsEiiMyMO0KWCfQgrxIFysGYg+98FHYLQEnCwIop9kLM7HwBeoAHSwGg04vsBg3ucApzOY4X1eOK8ApE+nmxnBfhoDJ+K2XaSkcN8i6UwDtiEbKQDCU4amEhHhpyFgBY5PRCnBmPL4CRGLQxnVyogHwxhwVblaK1Vz50Es1y7EMM6Xtt0sCPallupeikYnX87fqW6cN5frRmR6Qc3wV3FX21exgOjFTbkbj3LZvO1Io95KO7UtyHQRqUqNwP5EtvMn7dvYzvkPv9+eJyJHopsCnHVd9xODM1XtuJHFgPWs6yN3cMyXjhryEyJEZVEKM1SU0YMI7i1mk0VMK+P1YBqJl2f2xB5iYOLeYmCP9LtmsHW33GkYb7zFrvam3fCmHr9q/yQyqVXWjQsUj6VKL+jnadWcVCARyUDgKoY9c0aNdnaE8kbmIIuCKobDAHbEwpiUZUmu6/xxIpYrubqkE7fgUuQ+lXxgCmkMYIkUwwMnt0b2NkqvjGvnrMlehqHUKSehnXH1ejiSLm9Cpb9Bl1GozCo4r1RNxYsi6P0s4tWupuWqMDuZnG8CdwN5c3G8E0Gpa8Vbxh469rZHHSEYHorMdabh77Mov6SDLIMH4piDXTqoIfZJ6ul0EKMSgHQafo32TS5zWy5ehKeOYefi5YkZKwBCXN+e7otopnq5xnqLUN8McU/qlOrb+ujkMnGF6QIce3g8XzGbK2/WiRstHMjNngXodOltqb2wZ40gsp2Y8Yz0r0RMkBumSwFnEWpgiZ2zc3mXx7IMaSzlXD1E7bqi4KdESJH3KToUsepE0FNYGX9SoG6mMDziSxwANjlfZnRC3T61nCLn9nm2ACVq8hzLn0R3+k/1OIIyZKmGWT9TcTSfhRKfcXkgWVexQDweyFa2onImln0C91AecLGEADAiJIMpv5uwLwAgU+WIKV3xRGYJPCVC2WK6kFMx/CNQK5hY8B9By05d+MPbLyoQwFRk4J+RyjDwn0F4DH8oIuD9/AX2Ul5xp/GF8iby3HgTeW68iTw33kSeG69Y5PUU1dBHEQQEBgjze9kQ/LgjmhLgAYIo3INVAoB8eEwawSMESgCAp3DAPy+q0SKoNGFahwRVfmiYtwBQLtDPGaOfwEYBHgirvci6P26cATi7gcdEZ3AIKTsOApDncMDfLKrBDzJqDdXW6ao2jxxqX6dzTSNVDnUQurcIOp/7fjhEwXq3SOlNJSuWjWURN5rDDIDXTOcNYjRLOHktd70MUThqfoILzRMkHN2UiXOSk8JRCIekTKGsA5RcScYAVJ/zmJVM3tKk9J8W4dVfimp84T7CWh118o4tnldGZS9ftEN7aHdYYOILV71Ys/FNsGxdF5LFmdc1g/poMdt8MnJPFYBZBQxPay2r6uhkq11EXjRdu9d6EC626mS6lteT9rV70YRHMPq4kIiM2QoH2DSzimjkjlmlXjJSf/qKoByPAQRfteCByXV0NdqmosWpcxXmbmfVMF8GYPJRELWupVuvc+O00K1n3yQNzyvVkuLdROC19yJDL7eZnRYWcajavrOZTmB2XuUzNbM1udRs3/CgFcIhmFEbMux/mpQBLLfdgS6BYroU99N//j3CF5MN7vCrrvN5vfT5MNfVas5JS1235+ouacWsjuxLqat1GxLb8NIXTp31rvbpoLJX6aWriasXFVb95mywlsf1rmMX+pswj2y3qrU7w6p0p9sFyc7km3AIrVvSPBGp70QEV54P5CPrSB6wnEHhgL9YVAOFPMcHLN+LV5Jus5XOVg5LSWRTbpzTCXICT1M7Zj/wSsMyDuWoKF+lg96tAnBi96aM1ol7hVZ+pi453fikE7QsJwikYie/YpeITPKrLBwiKE6WAogslihgs+FIVjt7lksPBjL+8yIp1VfFwmFRDSYYkofFEQFTBjh+twXJDAu7NUoBeAKUB0YABu+eTkfRdRFgl7YF4JOdAiK7eEYgSADgf07gEgxCclB4BLaE3TzZuT8Ng1NzzUDAEDjgj4tq+F1RzT+CZEMd/j2wqj/6SHgrqnkBvIk8N95EnhuvRkRg33nndfxB8LvvvP86/rL5g3c+fA8RgXnZEPTeR+98/NEH77IvnHfe//DjHwHFYi6vFg5rGAAAAABJRU5ErkJggg==", - "description": "Display and manage the 'last viewed' or 'starred' dashboards.", + "description": "Display and manage the 'last viewed' or 'starred' dashboard lists.", "descriptor": { "type": "static", "sizeX": 7.5, diff --git a/application/src/main/data/json/system/widget_types/date_range_navigator.json b/application/src/main/data/json/system/widget_types/date_range_navigator.json index 005fc0818a..df1b8668da 100644 --- a/application/src/main/data/json/system/widget_types/date_range_navigator.json +++ b/application/src/main/data/json/system/widget_types/date_range_navigator.json @@ -3,7 +3,7 @@ "name": "Date-range-navigator", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Allows to change the data range for other widgets on the dashboard.", + "description": "The date-time stepper to change the time window of the dashboard. The change affects all widgets that use the dashboard time window.", "descriptor": { "type": "static", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/digital_horizontal_bar.json b/application/src/main/data/json/system/widget_types/digital_horizontal_bar.json index d1eeacf49c..dbf54258f2 100644 --- a/application/src/main/data/json/system/widget_types/digital_horizontal_bar.json +++ b/application/src/main/data/json/system/widget_types/digital_horizontal_bar.json @@ -3,7 +3,7 @@ "name": "Digital horizontal bar", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Preconfigured gauge to display any value reading as a horizontal bar. Allows to configure value range, gradient colors and other settings.", + "description": "Preconfigured gauge to display any value reading as a horizontal bar. Allows to configure value range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 6, diff --git a/application/src/main/data/json/system/widget_types/digital_speedometer.json b/application/src/main/data/json/system/widget_types/digital_speedometer.json index 3c5dded442..c691064b3e 100644 --- a/application/src/main/data/json/system/widget_types/digital_speedometer.json +++ b/application/src/main/data/json/system/widget_types/digital_speedometer.json @@ -3,7 +3,7 @@ "name": "Digital speedometer", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAB4FBMVEUAAAD/3JYXGhyH/P8EBAQHBgQQDgn+25UGBwcICQoVFxkWGRv21JH///8RFBUPERMMDQ4MCgb72ZTdv4J+6+4NDxA/dncKCwwaFw9/bktwYEETFheXl5fnx4ejjF/51pIWEw3Zu4CzmmmJdlBOQy1DOicUEQvvzo14Z0YbMzRUSDEeGhFBensrJRkhHBMIEBBsysyMjIxeUTc3LyAzLB4lHxXszIvz0Y5IhoiahVqQfFXWuX2vl2enj2IoIhc1Y2RtXkA8NCMhISFz2NvDqHNKQCzd3d3gwYPXuX5XSzMWKSp23OBoxMbIrXWqk2RRRi+Tf1ZWVlbNsXi/pXCVgVhqWz5mWDxmZmZ1ZEQvKRxVoKJQlpi2nWuGdE57akhbTjUuLi4uV1ghPj9y1dhBQUFiVTlFPCk5MSJKiozkxIbUtnzQs3rLr3e5oG2XglnqyYlFgIIqTk9fUjgdHR2fiV1HPSqE9/p54uW8om+MeVKDcU0LFRVjurw5amsRISFv0NK4uLhbq60mSEkUJSUYGBiA7/IsUlMPHBxZp6k8cXJtbW0YLi/29vbj4+NfsrQ7Ozvy8vLa2tqZmZlNkJKNjY1NTU3p6el7e3sSEhKlpaWEhIRycnItLS0oKCikpKQ1NTWt6eNAAAATE0lEQVR42uzSQQkAMAwEwTMQiLUIy6OPQuQW6iLHjoOFVXSllst7Qj0yMK2ShdL6rz6XDAAAAAB41JbPTxpxEMW/L9nle+HCcgGTRagFjAQOFjSlSCCRrD34I4qJJlRPYGpREyOJ8a/vc9+k/gUgfYf9sMsqMzvzZvafws5i+s7jpP70zqd6cvzO6aITuv9ELUdVAB+I+47aBypE4EndtOba7cVokF+AlMdA1lFZ4JhoAPiSMu49uzVVIcPDGYBTcov8Rk6AyFERMCHuAGyRp+QZmSm4NVNje+4vyR0Ab+SU3CFLgHeUBw7s6yn5Zl9f+vl2w62TRtYzNU/aox9YhQJ6g+jydOOjUL5sHbhwa6LRFQ/BHpAN+eEeiImM9VCR5OWQKFrHZcgYuCfCLLAX8MPVyH22NvLYrJHfAcysBGWFWrIS5JzLERvqtJgom0UW5CNZ20R+w32uDizEKtk1F4zIC+CC2FUJasTux9WRWaRLVpUuLfRpavV5aENd4n4DR2aSG3IMVCzkskow0loZEzdmEZ7GAfnHrNP8jPVS3tqcvPMQQNuebkcm6REDIGumL3A0E3daJwOip+RbVsVv5KGjHqLSylPJ1e0p7pBjC/lSJskTM/VUn2hoEbJ+GTNSXn8ysH/xSJ5aQvWcW7F+2cAN8vbrCc+VmK8p9Cbrpjp1CF5sqj4ZL4tMlHNYJwMbxr/cCtUe8pCLAd82p96SWxrAZS8D7wMzvVz1WRi9es305lWVRcKs4r61nXPtgacMPwzbbhUKi1EltMY4sSZ7Ja9tuf0Arog58Kx8mmkp6tr3c+IK+GGD4FqjbD9D9qw5w6Oou4oGO4fmUsCIfVOl8B3ySNYda5SWdFfCYNMkE02rEnEgi5wpn5bX7uyTR4HuYr7Lljoh27I3vxJZiLS2i5q4PxmPwhkr7XZq43O5+kYZ/9TwLeq9K2ooPXwlG1n16lIVOuoEmrDuFYg6CiEh+jI2TeJzaZo93XOXjrQHNc8pe9GnFulokrlEFexE6bJUh/X0Y0vTbVLgsfYEYGTufLGlONNeG8gkwzStubLmyVDBnqehD9VSA1VpYTP4xWbHDMAe83TlZOqWo7ALXATWU/lQpYha5KHi3AYmMgnzCSLE6qYq55T6LEYUMAOdTDQUTrQMG5H6NKxAs9k98MJyPF/9S6vV9aQRRUFuc5etZVPZJUbAICgIBIMPBTR+1GiiQR5UotVoYutTaxQ/EmOTtr++58ysYB/aCq7nQe5uqr2zZ2bO3FVpgKkyYJHsaU9CH5F5Ojtc4/kQyQOUEFiMm2947L+AbYfPvgPzdReQF80+Q6c3T6ExdlVl4c7FXqFoJ8GFkisHvcOw8vPU7QYPttsQSY9cT8Nqt+G0JwKU5O9BItvsxAaHYToP64LS78pK1zyeWvRlHzuRUssvhYKML4rlcjs9zsYuRBI46EUDo6OElgnhGxiATgCJdIEduuLVImcJG+TP4H+Ivo52fSXwAYag1DT0zmwoz91fxLgoBCZFkTSR4PcBoYbcUsLXD7CGT8hbbloumG8KSJNU/sPjz+9BIe8nIwNBws5a7fyd4cCOX1LvVp7cT3KsS7NtQSTHeP4bsKgOZs+moEaPjnFnnXGgy5TyEz8NSs9pY+7VuhCEx9+8SUaHo2YYuGVfQl1vXV3SxTijzsHxRQebzEIkt4iGnxFOztGduqJ14/CxNFj4VfMihmF5iYTKhH1uyXUAoU+8kRqLCAbJgi0yYR04oc2E1vuLXOjI5vPmBiLZxVFrWhBiw1+x+WlzCUdYhbkGZXRqmkl6N1T6supxFzFSalJxTESHg0dyd58rkinephobLiJfk7P7DAZ8azwrPFPyOKDZMV5BHOoN62m7fA+Z/wfIFq8Y94Ixvh0H0Ygv9lZxjEeFAdu3aljehQp+SyCVwrGyTSvLIMO688Ih3OuASV1MDU8T7ZHxYNJdcK0D2zvHFDwkoz5S6e43/XSlQdp0m+jjiIBdv8wykOyp/loaHUTnd2nwDQpdEHn42FoGT7oLkXzQ3S+BYBuqiEtE+iNATev3enEgKKEh+RaUDsMo5ETx+vPtuz6OiZcr/kgnrdVO6Pltp6xkyoNG8PoMmVDFJG8jcaSwXkEukc1eqbZOdMzEkVZW0KeU2cPXGc7ZIvuS8kmwfCMmNSU43hOHrF7mwtRdiORMVlsO3vEwJm260Ht8ES05wj5ryIW3OrXTWB4qyqpSqI5ebJlbmG8NSKVF/p2plKF0d5OnLvMVAwQ4aMFYvqwcFYeZdbQDh8hBdP+gwTcnaxzoWQxFUaizpOsOWFVRZGvmiz70Nc21Fdzs6HcsOaquio+dZ9mIn4wmNPrxAY6IJJ9RJGdAsmXotfYHo4qzKiTHVMxpJgHvp80NRNJSo70Xl1P6ZVRo9+qxLbTlRjHHPSSWnCgNSt9xSNct7X9ygOPlFuwwfGYDI/ndV8u9Do/V5TYNshFgFzXcTef1a8nkfRVJR2Kusqqo0H+pCr5o+uioRPy82VYuBmkMphqU7m5yHLXL6lKy+akYGdYXyNuRh4dbxGfJU3XEFcCVkEot8tTrvzrJYCpeOrqLa7zOLqlIiqqMrnzRVVEhfTInurpVsBX55wf6LGzb7LLtn6k+r6lbTjzFkaD5To7al3NNiAhujZzO87J6o5Bp6VSni8xB9cwr0Tum4jFOjKcCXzNhRwlWUmWcp7L6qltQrynCG8X/SZlWR848xixc8MyVg2jidsIBMmUfcbxjJ8ZHDStO20j1EN0WVh+RpFPi8vOMFdeObD4ws3RdKw5F122rY+WkfyWBOqhWSX5ATiXShg+rk1n68KwJpBHONfqCAfKuj4OIrJix3B3t7e6ZIlmEUOLqWKtpDUSC7ypOmynyJUgJU/GDtADJMaeu23D+8ngaar45G3NAwXvMwpJ4CAfSjeUAIY7BJHn7DhZsR/3lhx7Tgio2MK3zUJG0cmJiVhR7ZVyRrNOD3lfMjNW0WBOi15z/9LomoDs6DO2Oeq6TMj0HgXonDg4Rh50aJBTh2ovyfCNlpB6cRxtuK9HW7xhS1ysmVxBy5VXvZcyHI9jDs6roHomAMAszQixEk8o6x3iIg7aLW5TKCOUfHOMzjnm4m9b1fSBIlPX1RYaSbdecKULo/UTTub8ee3at+2F+aXl4k3EmDWZyT1gKJbRd+54Tkb0ZZsKTrmsFrD4sGZE3ws9cRVZ1Hb8VuksVQ9lem1nlh1ePDVl1L+Wo2A4sBnwVA2SAI4EeAFECkEC7oTy4qTPwrob1gsatPOJPvS131Xwvlkx+ExE+UPF6qttmYQQ/aWKC1hFN1jBAuH0aF+VBlWMNyQ+j+M0Zg7BYxiPJuLJetmq+PbGxpv4DzyyuwzBnfOkM9D5aOSmdk/6O6fnYfx8HbTfJgNKfJHJ/KK3YrDLK5PZxNZfT0V5Q7YglVy70lmdSBbyNkNxh1zqxkauzZiUU8F3D1AAHtcCB+MSBE0NbV3raaO2V+yPlUlth5Tjl6Wj5njfXPt5GRPDmvMN3De+BAwFlgvIgrehckLwdyrL4MbeKppRwcZIXABBN1TWexq39AK+INpB8X1JIwBukzliIY7Ivj2TYDrJquF5UVuJP+bWHq4bIxsVv+Gqeye/rZ4ATRKb+8o7UM3zmxBGmxMkBrSb+YFUSNvD/uhVBV50n/GrPoU/Lei5RUBd3JtDm3Lt4kBHVWB8Hdg9pj7MdU31WwbqeZcGITVIzNV5tq3+5XR+tqMj9uqaUGRPc4497gtOocFjyaWww19EYtoOsGoBK2Oe0+cagDpvkb8aTi9QmMG5JiFfNlHeN+1WVk4muI0nggF2hL1Q51UFWccgPkR5P91xF4u4tDPjlLvvhSHGLPMq72VjkNQY2UR4ThPeEVXYihPF8zdenA4WSD1U/t8OmcKTwtJXB73qirclw++NQOYk0YFUyMYIDE0pf9Y76l7ui6/JseNo6DjKxiCspMiF/yJ0kWRVqfDgYJ7MX4ar1EED1+wN+rTZ4SuFpCzqPtixFwc3zPGIJgxqfeIRhx//3wi5lzMEHy/X8iocQv9nnV1DUpjRncNp6nRp7tN/JBAg20HiCoBTr+/+eereNVirr87JQ9KD6FvklF1fqZf4DXp68RiUpd9pvcqBxdoNKIsn+oXgmEVSlOB9Cyeh0D5bL5NdjU85xLnmFsu/G2A6wihp/CsPikieUf1Y5e0UowcdmeCdTGai+lBKpn77unyWQSgREjQ9giJ+hpiafc6r6za75/yQRxnH8uZ4T7g52kEGoTMyLEgyjUZpfSuagVZjmrPjBsqauktYXdQU1EJdMsbn5S/9wnM/z4Z47uAdtg2zz9Yv4Hs578XnePM84JseIC5TlYkQPHiZgf3RHRNQu6DhcfmMfd3mZapCySCc9jQ5/d5KyRBxEpa+/3vqbGtw4bhMesqpoxxXQkIN0O5RRS248EBGlJ3JJ0Lk7eYOq5Gq/aaNkfT1GbURWJLKMGA3RSxqueEUESCLnLvTY52sIuBZyH5dl/jYZUzYHre9C7QU6rgSgGi6ypGTDwq9w7v18PN7MJ2YQxZFdFHTSw+KxSmJQEIYindCQFUND8lj6DfNRkQ09ToGQm6y7jFwdY3YWcWuw9vgOaifw2YOMTHu6ZFgcJ7zPU66/0NwCZap3ut58rZspS3jRfQW1GxfVgJdebmLh8gS493auLhouo6bmD9CyjKC2A8d2l6nfYkAFC8UPbhxuZufvgkukh4YzE24oC8vuZYMohCtMWEFAhkn3uSFUw7xlyGDhUgPmq+APZoqoONN9V6D5aSiLQXEHA08kWNXlAgaWkMESBgpleKopNLU9aOq37DnFKLYWhq83G0x3OuuA5n/Rv9NgMlnDhJ34ZoxEpUoFTEoiu14OaOo7rByQ6PI2EyIGkZxLwMLVdBSyjZSmv+ATiZ4mg3FriYu0+cvITHWcUF3Jb5Ak5YsekmzD/I/EGImjh4UnJInhjXpo2UbgTyViYR2F5FVtb1r3CwSQMQZDXPj3bzbzGETwXhXxKPtwXQT/QvaABYyClSB2TTsuACBjHcxQKGzfshg2RHAG8VjFjMi6vYVfgVE0SHB3kp5wr3bJLHMDAdN9nwZqWX+iUyKyAqOwkVBUvywiWxwzfaEpp1UGBvNIeNoxERhFEwnF45VYB75NdzOZ6YsdW1pigwQ4oNPRNZKYTLtBJpQFmQ6JNEoEPYGTOHQNalff3nZYUhFsQKaTIrKfSriaOkiy1xNEDYzSTx0WQ5HwzUabZ2RzvI3sWGFEZouIR2aPEVmxXVrEoVmlpZqiYve29U1gGJia7x2+02U2fbz8iXdPJ5kHkdkK4hP1gUg+iWxRVK/VQZQCftV1gaFxUG+dgpXuR/eWE7DaWrNPjyg/i+WjW4QN0xFlnKZH1cwBiX7tMyHiIerrCBQYZNSI40442zuhLQ5ZfIbSE7Da+Ej0R9SHgSPmUkoY8GXgqaYQAQ1VUC6YcSmqxx+QW70HO0bebb1+rn3sd7I6c18j4etcj016WEGX85iQOozvQsOL0Vma5pljCRta6yJb15F++V64fA6thxRG9sRLL8mDJ+uoEiXEqzsxqNBaNU7TMmIwwvWUxYP78vPhD2lBG0W2FG9hENEfEDKzuC6CU2VuCZZwypL83eXPDc69ur/Q25d48H76yl/IJ7EhgldpuI4ZEbyEOGQwiLRGlCQ54PV7VDWoIis5gcXdP5XWQpM1r/DMiOOfi4hw6R41CMW3O8iPCfa4cx+e3fv6I/KmYyJQdr9+5VB4gC8yILQm11mR4IXWuBrrfBLOSEdOwdkuu4mOiIwfixzWdon/R0Q6MkQOpDjlli5S0B2SuJAJkFBELBDGzogIEpdA5Ddax4SkXKqLpCrRPZKWJGSwWg+319DZQKTHql00jin5XXmVikSL4GFaY2y4i84Y2746Bf1Iu5JM1nQqKSOGdwBLeM455/xp72xaE4bBAPxCetglsEO2HdY/MBi0/gKhhx10l56EeVHsD5gUukN1VamdOjc/6gf7/qtLBCXsYmpAupDnkL6QHJ6HknM0Go1GozqGecMwDcgPBu8l6vjudeiZjreG3PCz5r1EHc1xTFd/WoC84E8Xf7zM6eV+RxM7dK3h/IR84gXvxc06RIy8hMxO6Rqv8hMSrxa8l6jjKAaGUwEZInIPlJCQZo9Q7KFxQe42OzZkg7nwXqKO/u4rQxk9GPQzRKjeRN3z81eUWqi72WlAZnzeS9Sx8AGMkSkXQlBv82NYSJtOdhAeGMJceC9RxwL+Yq1YMqRVHgBcoeo2ZIAeDw3x8Zz32s0O3hNSY4dkQ26vAwtSkrCQoRUm/chCxKYEmUMcFsJ7sfloIfYTahskrbMQRlSyULlK6f+zkAa07AQ9F1lINemVALaX/WghnYnrupM36ZA6imwobu+IRIjxPee9RB09b4wpS0825ISgtkwI78R77ebxHke3wnBBNgTSIMwYIuLFzYo8HKjRaDQajUZlFHlZ9wyWoAQuzFR5RFuJZ83dF/wLF0Yq8mo/acEAAAAASUVORK5CYII=", - "description": "Preconfigured gauge to display speed. Allows to configure speed range, gradient colors and other settings.", + "description": "Preconfigured gauge to display speed. Allows to configure speed range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/digital_thermometer.json b/application/src/main/data/json/system/widget_types/digital_thermometer.json index e8009a602d..17d7523511 100644 --- a/application/src/main/data/json/system/widget_types/digital_thermometer.json +++ b/application/src/main/data/json/system/widget_types/digital_thermometer.json @@ -3,7 +3,7 @@ "name": "Digital thermometer", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Preconfigured gauge to display temperature. Allows to configure temperature range, gradient colors and other settings.", + "description": "Preconfigured gauge to display temperature. Allows to configure temperature range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/digital_vertical_bar.json b/application/src/main/data/json/system/widget_types/digital_vertical_bar.json index d21916864c..4a22feeae6 100644 --- a/application/src/main/data/json/system/widget_types/digital_vertical_bar.json +++ b/application/src/main/data/json/system/widget_types/digital_vertical_bar.json @@ -3,7 +3,7 @@ "name": "Digital vertical bar", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Preconfigured gauge to display any value reading as a vertical bar. Allows to configure value range, gradient colors and other settings.", + "description": "Preconfigured gauge to display any value reading as a vertical bar. Allows to configure value range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 2.5, diff --git a/application/src/main/data/json/system/widget_types/documentation_links.json b/application/src/main/data/json/system/widget_types/documentation_links.json index d27d167171..b021441201 100644 --- a/application/src/main/data/json/system/widget_types/documentation_links.json +++ b/application/src/main/data/json/system/widget_types/documentation_links.json @@ -3,7 +3,7 @@ "name": "Documentation links", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Configure and display links to documentation and any other resources.", + "description": "Configure and display links to documentation or any other resources.", "descriptor": { "type": "static", "sizeX": 7.5, diff --git a/application/src/main/data/json/system/widget_types/doughnut.json b/application/src/main/data/json/system/widget_types/doughnut.json index 38ef1c6b71..33fdf77f61 100644 --- a/application/src/main/data/json/system/widget_types/doughnut.json +++ b/application/src/main/data/json/system/widget_types/doughnut.json @@ -3,7 +3,7 @@ "name": "Doughnut", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays latest values of the attributes or timeseries data for multiple entities in a doughnut chart. Supports numeric values only.", + "description": "Displays the latest values of the attributes or time-series data for multiple entities in a doughnut chart. Supports numeric values only.", "descriptor": { "type": "latest", "sizeX": 7, diff --git a/application/src/main/data/json/system/widget_types/edge_quick_overview.json b/application/src/main/data/json/system/widget_types/edge_quick_overview.json index 9ff5a56693..15d67914dd 100644 --- a/application/src/main/data/json/system/widget_types/edge_quick_overview.json +++ b/application/src/main/data/json/system/widget_types/edge_quick_overview.json @@ -3,7 +3,7 @@ "name": "Edge Quick Overview", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Overview of entities related to ThingsBoard Edge.", + "description": "Overview of entities related to the specified ThingsBoard Edge instance.", "descriptor": { "type": "latest", "sizeX": 7.5, diff --git a/application/src/main/data/json/system/widget_types/entities_hierarchy.json b/application/src/main/data/json/system/widget_types/entities_hierarchy.json index b272cde176..a324ba6eae 100644 --- a/application/src/main/data/json/system/widget_types/entities_hierarchy.json +++ b/application/src/main/data/json/system/widget_types/entities_hierarchy.json @@ -3,7 +3,7 @@ "name": "Entities hierarchy", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays hierarchy of entities based on their relations. The root of the hierarchy is defined using entity alias. By default, displays entities related using \"Contains\" relation. You may change the behaviour using advanced settings.", + "description": "Displays the hierarchy of entities based on their relations. The root of the hierarchy is defined using entity alias. By default, displays entities related using \"Contains\" relation. You may change the behavior using advanced settings.", "descriptor": { "type": "latest", "sizeX": 7.5, diff --git a/application/src/main/data/json/system/widget_types/entities_table.json b/application/src/main/data/json/system/widget_types/entities_table.json index 69bd1475dd..f7dbf57972 100644 --- a/application/src/main/data/json/system/widget_types/entities_table.json +++ b/application/src/main/data/json/system/widget_types/entities_table.json @@ -3,7 +3,7 @@ "name": "Entities table", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays list of entities that match selected alias and filter with ability of additional full text search and pagination. Highly customizable using widget styles, data source keys and widget actions.", + "description": "Displays a list of entities that match the selected alias and optional filter. Provides the ability for full-text search and pagination, except for columns with post-processing or cell content functions. Highly customizable using widget styles, data source keys, and widget actions.", "descriptor": { "type": "latest", "sizeX": 7.5, diff --git a/application/src/main/data/json/system/widget_types/entity_count.json b/application/src/main/data/json/system/widget_types/entity_count.json new file mode 100644 index 0000000000..76aba779d7 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/entity_count.json @@ -0,0 +1,23 @@ +{ + "fqn": "entity_count", + "name": "Entity count", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Displays the number of entities based on the selected alias and optional filter. The number of entities refreshes periodically and not in real-time.", + "descriptor": { + "type": "latest", + "sizeX": 3.5, + "sizeY": 1.5, + "resources": [], + "templateHtml": "\n", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.countWidget.onInit();\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.countWidget.onDataUpdated();\n};\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\n maxDataKeys: 1,\n singleEntity: true,\n previewWidth: '220px',\n previewHeight: '100px',\n embedTitlePanel: true,\n hideDataSettings: true\n };\n};\n\nself.actionSources = function() {\n return {\n 'cardClick': {\n name: 'widget-action.card-click',\n multiple: false\n }\n };\n}\n\nself.onDestroy = function() {\n};\n", + "settingsSchema": "", + "dataKeySettingsSchema": "", + "settingsDirective": "tb-entity-count-widget-settings", + "hasBasicMode": true, + "basicModeDirective": "tb-entity-count-basic-config", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"count\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.2392660816082064,\"funcBody\":\"return 150;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"alarmFilterConfig\":{\"statusList\":[\"ACTIVE\"],\"assignedToCurrentUser\":false,\"assigneeId\":null}}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"showLabel\":true,\"label\":\"Devices\",\"labelFont\":{\"family\":\"Roboto\",\"size\":12,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"400\",\"lineHeight\":\"16px\"},\"labelColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.54)\",\"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';\"},\"showIcon\":true,\"iconSize\":20,\"iconSizeUnit\":\"px\",\"icon\":\"devices\",\"iconColor\":{\"type\":\"constant\",\"color\":\"rgba(255, 255, 255, 1)\",\"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';\"},\"showIconBackground\":true,\"iconBackgroundSize\":36,\"iconBackgroundSizeUnit\":\"px\",\"iconBackgroundColor\":{\"type\":\"constant\",\"color\":\"rgb(241, 141, 23)\",\"rangeList\":[],\"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';\"},\"valueFont\":{\"family\":\"Roboto\",\"size\":20,\"sizeUnit\":\"px\",\"style\":\"normal\",\"weight\":\"500\",\"lineHeight\":\"24px\"},\"valueColor\":{\"type\":\"constant\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"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';\"},\"showChevron\":false,\"chevronSize\":24,\"chevronSizeUnit\":\"px\",\"chevronColor\":\"rgba(0, 0, 0, 0.38)\",\"layout\":\"column\"},\"title\":\"Entity count\",\"dropShadow\":true,\"enableFullscreen\":false,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"units\":\"\",\"decimals\":null,\"useDashboardTimewindow\":true,\"showLegend\":false,\"widgetStyle\":{},\"actions\":{},\"configMode\":\"basic\",\"displayTimewindow\":true,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"titleFont\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"titleIcon\":\"\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"14px\",\"timewindowStyle\":{\"showIcon\":true,\"iconSize\":\"14px\",\"icon\":\"query_builder\",\"iconPosition\":\"left\",\"font\":{\"size\":12,\"sizeUnit\":\"px\",\"family\":null,\"weight\":null,\"style\":null,\"lineHeight\":\"1\"},\"color\":null},\"titleColor\":\"rgba(0, 0, 0, 0.54)\"}" + }, + "externalId": null +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/gateway_configuration.json b/application/src/main/data/json/system/widget_types/gateway_configuration.json index 6e94a2f6ce..dc286e4486 100644 --- a/application/src/main/data/json/system/widget_types/gateway_configuration.json +++ b/application/src/main/data/json/system/widget_types/gateway_configuration.json @@ -3,7 +3,7 @@ "name": "Gateway Configuration", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Allows to define gateway configuration for a single selected device.", + "description": "Allows to define configuration for a single gateway.", "descriptor": { "type": "static", "sizeX": 8, diff --git a/application/src/main/data/json/system/widget_types/gateway_configuration2.json b/application/src/main/data/json/system/widget_types/gateway_configuration2.json deleted file mode 100644 index 45eb8f10ad..0000000000 --- a/application/src/main/data/json/system/widget_types/gateway_configuration2.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "fqn": "gateway_widgets.gateway_configuration2", - "name": "Gateway configuration (New)", - "deprecated": false, - "image": "data:image/jpeg;base64,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ii3bMj5ytRKUXRfXI+nX7lP95c2MS6LR7nIvE14C9kW6GU4nLsXkYCIm5VnZTleH1fVnWyF/wX95ejZo6ShCqymG/tu8Elrxk1meelEtkETXy0kFCPJR7A2kGdGclcdgy1UpJ+5Qj2Tt8dxWPimMdaz1OQgGDgn7u6M7W56sYqWBxeHmuuY9s3ibzTRlJCXt9vfTRgsrPMoG5qCPa1Ys0Wtf78EanZWpf77hs3eInbO2sdGsG1WbBGGhm7ZVk2M1afGWc0ThYVu3XZNncbGv8c71GPYN6t6tv3kladrTLrNl3FvQLvBM6vKyFbsWT6Hta312UYwfUpSlOn7xZFFwkdBdrFxbBudowVg4RVq3ZK4jb46LkGhojJM9DmzaO51KVdHjYxR8nJqfvHTRo+bqNXxIqLSZ0j0lGjNdX46ySKaCREUDxMSd6WTP+8ctmrxBRq8TjItBiaNQXhYRcqBVTx7A6rVYy8NDOmabBwvHx61WlVlIyMVarMVFomKcsyRzhJFJBIiKH7xCLimjld2zUiopVRwserZp8RwqVGGhm7ZVk2/YQRqdlal/9Tp19m4I1OytSgyhymqUZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScGdH6V6eLj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/FsKXkVitufxzeHpSjg9KdBknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScJnMf7x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am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq5xJ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AXzHXy1t/wDd1/s/vv8A1rb/AO7r/Z/ff+tbf/d15AX3/rW3/wB3XkDfP+vbP/d15A3z96vWzG6VUVmysEqaT/LjJloPSgAgq2JL7yqSJ1U2otCqkqqqkZmS5IzJdZGS61Vdar5tS9GKwqdFNb0prelNb0prelNb0prelNb0prelNb0prelYSv4r5ualRf2dNDvSmt6U1vSmt6U1vSmt6U1vSmt6U1vSmt6VhOvzpWCToprelNb0prelNb0prelNb0prelNb0prelNb0prelNb0prelBjHSq0uVTo8+r99N/Cmt6U1vSmt6U1vSmt6U1vSmt6UO9KVETp8+pejFYVOimt6U1vSmt6U1vSmt6U1vSmt6U1vSmt6UO9KVETp/xb0o5+KepzqTv1S8/W5+dfvI6Uc/FPU51J36pefrc/Ov3kdKOfinqc6k79UvP1ufnXz6sU5upzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3Uuscfxz5lxqzTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFOb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qb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41LZkNo4oKbLguIioiZTI5wuvzXaGw+GjpNuvgBjkUVMiq9VX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NT48lG9DT5B0HNHSzjOiq4zjzXOJHcVtDQHngAsKqpnBLzaqv1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV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", - "description": "Allows to create or edit gateway configuration.", - "descriptor": { - "type": "latest", - "sizeX": 11, - "sizeY": 8, - "resources": [], - "templateHtml": "", - "templateCss": "", - "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources && self.ctx.datasources.length) {\n self.ctx.$scope.entityId = self.ctx.datasources[0].entity.id;\n }\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", - "settingsSchema": "{}", - "dataKeySettingsSchema": "{}\n", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway configuration\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":500},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" - } -} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/gateway_configuration__single_device_.json b/application/src/main/data/json/system/widget_types/gateway_configuration__single_device_.json index ce1cb04a66..466e40c91f 100644 --- a/application/src/main/data/json/system/widget_types/gateway_configuration__single_device_.json +++ b/application/src/main/data/json/system/widget_types/gateway_configuration__single_device_.json @@ -3,7 +3,7 @@ "name": "Gateway configuration (Single device)", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Allows to create or choose the gateway device and edit the configuration.", + "description": "Allows to create or choose the gateway and edit its configuration.", "descriptor": { "type": "latest", "sizeX": 7.5, diff --git a/application/src/main/data/json/system/widget_types/gateway_connector.json b/application/src/main/data/json/system/widget_types/gateway_connector.json deleted file mode 100644 index 00084dde76..0000000000 --- a/application/src/main/data/json/system/widget_types/gateway_connector.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "fqn": "gateway_widgets.gateway_connector", - "name": "Gateway connector", - "deprecated": false, - "image": "data:image/jpeg;base64,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iikAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/AK4J/wChPV6qP/MxN/1wT/0J6vUAFFFFAEN9/wAer/SmaN/yB7X/AK4p/wCgin33/Hq/0pmjf8ge1/64p/6CKALNFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/64J/6E9Xqo/8AMxN/1wT/ANCer1ABRRRQBDff8er/AEpmjf8AIHtf+uKf+gin33/Hq/0qPRW3aPa4/wCeSj9BQBaooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArw7/gpb8YfEf7P/7Avxa8beEdR/snxN4Z8N3V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j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16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7+3SvePC/wDyD3/66H+QoA0qKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/AMzE3/XBP/Qnq9VH/mYm/wCuCf8AoT1eoAKKKKAIb7/j1f6UzRv+QPa/9cU/9BFPvv8Aj1f6UzRv+QPa/wDXFP8A0EUAWaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigClrtib2y+X78fzD39a5yuwrK1fQPPZpYfvHll9fpQB8faT/wS603w9rVxeab8RPHOmrdXZvJYLS4WGN3LZ5CgZ9Oe1e8fGn4Vf8Lj+G934d/trVtB+1GM/btOk8u4j2MG+VvfGD7Guwmge3fa6srehFNoA8E/Z+/YL034C/Ft/GS+LPEviLVJLN7JjqbrJlG28lsbuNoA5r6Z8L/8g9/+uh/kKx7WwmvWxGjN79h+NdDpVh/Z1r5e7czHcT70AWaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf9cE/9Cer1Uf8AmYm/64J/6E9XqACiiigCG+/49X+lM0b/AJA9r/1xT/0EU++/49X+lM0b/kD2v/XFP/QRQBZooooAK5P44Xs9h8Nb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f7GvP+fW5/79N/hR/Y15/wA+tz/36b/CgCtRVn+xrz/n1uf+/Tf4Uf2Nef8APrc/9+m/woArUVZ/sa8/59bn/v03+FH9jXn/AD63P/fpv8KAK1FWf7GvP+fW5/79N/hR/Y15/wA+tz/36b/CgCtRVn+xrz/n1uf+/Tf4Uf2Nef8APrc/9+m/woArUVZ/sa8/59bn/v03+FH9jXn/AD63P/fpv8KAK1FWf7GvP+fW5/79N/hR/Y15/wA+tz/36b/CgCtRVn+xrz/n1uf+/Tf4Uf2Nef8APrc/9+m/woArV1vgP/kDyf8AXY/+grXN/wBjXn/Prc/9+m/wrp/BVtJa6VIssckbGUnDqVOMCgDYooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/MxN/wBcE/8AQnq9VH/mYm/64J/6E9XqACiiigCG+/49X+lM0b/kD2v/AFxT/wBBFPvv+PV/pTNG/wCQPa/9cU/9BFAFmiiigArmPi//AMiT/wBxCw/9LIa6euY+L/8AyJP/AHELD/0shoAyqKKKACiiigAooooAKv8Ahn/kOQf8C/8AQTVCr/hn/kOQf8C/9BNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/rgn/oT1eqj/wAzE3/XBP8A0J6vUAFFFFAEN9/x6v8ASmaN/wAge1/64p/6CKfff8er/SmaN/yB7X/rin/oIoAs0UUUAFcx8X/+RJ/7iFh/6WQ109cx8X/+RJ/7iFh/6WQ0AZVFFFABRRRQAUUUUAFX/DP/ACHIP+Bf+gmqFX/DP/Icg/4F/wCgmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/ADMTf9cE/wDQnq9VH/mYm/64J/6E9XqACiiigCG+/wCPV/pTNG/5A9r/ANcU/wDQRT77/j1f6UzRv+QPa/8AXFP/AEEUAWaKKKACuY+L/wDyJP8A3ELD/wBLIa6euY+L/wDyJP8A3ELD/wBLIaAMqiiigAooooAKKKKACr/hn/kOQf8AAv8A0E1Qq/4Z/wCQ5B/wL/0E0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv+uCf+hPV6qP8AzMTf9cE/9Cer1ABRRRQBDff8er/SmaN/yB7X/rin/oIp99/x6v8ASmaN/wAge1/64p/6CKALNFFFABXMfF//AJEn/uIWH/pZDXT1zHxf/wCRJ/7iFh/6WQ0AZVFFFABRRRQAUUUUAFX/AAz/AMhyD/gX/oJqhV/wz/yHIP8AgX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/AMzE3/XBP/Qnq9VH/mYm/wCuCf8AoT1eoAKKKKAIb7/j1f6UzRv+QPa/9cU/9BFPvv8Aj1f6UzRv+QPa/wDXFP8A0EUAWaKKKACuY+L/APyJP/cQsP8A0shrp65j4v8A/Ik/9xCw/wDSyGgDKooooAKKKKACiiigAq/4Z/5DkH/Av/QTVCr/AIZ/5DkH/Av/AEE0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv8Argn/AKE9Xqo/8zE3/XBP/Qnq9QAUUUUAQ33/AB6v9KZo3/IHtf8Arin/AKCKfff8er/SmaN/yB7X/rin/oIoAs0UUUAFcx8X/wDkSf8AuIWH/pZDXT1zHxf/AORJ/wC4hYf+lkNAGVRRRQAUUUUAFFFFABV/wz/yHIP+Bf8AoJqhV/wz/wAhyD/gX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf9cE/9Cer1Uf8AmYm/64J/6E9XqACiiigCG+/49X+lM0b/AJA9r/1xT/0EU++/49X+lM0b/kD2v/XFP/QRQBZooooAK5j4v/8AIk/9xCw/9LIa6euY+L//ACJP/cQsP/SyGgDKooooAKKKKACiiigAq/4Z/wCQ5B/wL/0E1Qq/4Z/5DkH/AAL/ANBNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf8AmYm/64J/6E9Xqo/8zE3/AFwT/wBCer1ABRRRQBDff8er/SmaN/yB7X/rin/oIp99/wAer/SmaN/yB7X/AK4p/wCgigCzRRRQAVzHxf8A+RJ/7iFh/wClkNdPXMfF/wD5En/uIWH/AKWQ0AZVFFFABRRRQAUUUUAFX/DP/Icg/wCBf+gmqFX/AAz/AMhyD/gX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf8AXBP/AEJ6vVR/5mJv+uCf+hPV6gAooooAhvv+PV/pTNG/5A9r/wBcU/8AQRT77/j1f6UzRv8AkD2v/XFP/QRQBZooooAK5j4v/wDIk/8AcQsP/SyGunrmPi//AMiT/wBxCw/9LIaAMqiiigAooooAKKKKACr/AIZ/5DkH/Av/AEE1Qq/4Z/5DkH/Av/QTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/64J/6E9Xqo/8AMxN/1wT/ANCer1ABRRRQBDff8er/AEpmjf8AIHtf+uKf+gin33/Hq/0pmjf8ge1/64p/6CKALNFFFABXMfF//kSf+4hYf+lkNdPXMfF//kSf+4hYf+lkNAGVRRRQAUUUUAFFFFABV/wz/wAhyD/gX/oJqhV/wz/yHIP+Bf8AoJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/wAzE3/XBP8A0J6vVR/5mJv+uCf+hPV6gAooooAhvv8Aj1f6UzRv+QPa/wDXFP8A0EU++/49X+lM0b/kD2v/AFxT/wBBFAFmiiigArmPi/8A8iT/ANxCw/8ASyGunrmPi/8A8iT/ANxCw/8ASyGgDKooooAKKKKACiiigAq/4Z/5DkH/AAL/ANBNUKv+Gf8AkOQf8C/9BNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/rgn/oT1eqj/AMzE3/XBP/Qnq9QAUUUUAQ33/Hq/0pmjf8ge1/64p/6CKfff8er/AEpmjf8AIHtf+uKf+gigCzRRRQAVzHxf/wCRJ/7iFh/6WQ109cx8X/8AkSf+4hYf+lkNAGVRRRQAUUUUAFFFFABV/wAM/wDIcg/4F/6CaoVf8M/8hyD/AIF/6CaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/wDMxN/1wT/0J6vVR/5mJv8Argn/AKE9XqACiiigCG+/49X+lM0b/kD2v/XFP/QRT77/AI9X+lM0b/kD2v8A1xT/ANBFAFmiiigArmPi/wD8iT/3ELD/ANLIa6euY+L/APyJP/cQsP8A0shoAyqKKKACiiigAooooAKv+Gf+Q5B/wL/0E1Qq/wCGf+Q5B/wL/wBBNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/AK4J/wChPV6qP/MxN/1wT/0J6vUAFFFFAEN9/wAer/SmaN/yB7X/AK4p/wCgin33/Hq/0pmjf8ge1/64p/6CKALNFFFABXMfF/8A5En/ALiFh/6WQ109cx8X/wDkSf8AuIWH/pZDQBlUUUUAFFFFABRRRQAVf8M/8hyD/gX/AKCaoVf8M/8AIcg/4F/6CaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/8zE3/XBP/Qnq9VH/AJmJv+uCf+hPV6gAooooAhvv+PV/pTNG/wCQPa/9cU/9BFPvv+PV/pTNG/5A9r/1xT/0EUAWaKKKACuY+L//ACJP/cQsP/SyGunrmPi//wAiT/3ELD/0shoAyqKKKACiiigAooooAKv+Gf8AkOQf8C/9BNUKv+Gf+Q5B/wAC/wDQTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/AJmJv+uCf+hPV6qP/MxN/wBcE/8AQnq9QAUUUUAQ33/Hq/0pmjf8ge1/64p/6CKfff8AHq/0pmjf8ge1/wCuKf8AoIoAs0UUUAFcx8X/APkSf+4hYf8ApZDXT1zHxf8A+RJ/7iFh/wClkNAGVRRRQAUUUUAFFFFABV/wz/yHIP8AgX/oJqhV/wAM/wDIcg/4F/6CaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/8zE3/AFwT/wBCer1Uf+Zib/rgn/oT1eoAKKKKAIb7/j1f6UzRv+QPa/8AXFP/AEEU++/49X+lM0b/AJA9r/1xT/0EUAWaKKKACuY+L/8AyJP/AHELD/0shrp65j4v/wDIk/8AcQsP/SyGgDKooooAKKKKACiiigAq/wCGf+Q5B/wL/wBBNUKv+Gf+Q5B/wL/0E0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv+uCf+hPV6qP/ADMTf9cE/wDQnq9QAUUUUAQ33/Hq/wBKZo3/ACB7X/rin/oIp99/x6v9KZo3/IHtf+uKf+gigCzRRRQAVzHxf/5En/uIWH/pZDXT1zHxf/5En/uIWH/pZDQBlUUUUAFFFFABRRRQAVf8M/8AIcg/4F/6CaoVf8M/8hyD/gX/AKCaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/8AMxN/1wT/ANCer1Uf+Zib/rgn/oT1eoAKKKKAIb7/AI9X+lM0b/kD2v8A1xT/ANBFPvv+PV/pTNG/5A9r/wBcU/8AQRQBZooooAK5j4v/APIk/wDcQsP/AEshrp65j4v/APIk/wDcQsP/AEshoAyqKKKACiiigAooooAKv+Gf+Q5B/wAC/wDQTVCr/hn/AJDkH/Av/QTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/64J/6E9Xqo/wDMxN/1wT/0J6vUAFFFFAEN9/x6v9KZo3/IHtf+uKf+gin33/Hq/wBKZo3/ACB7X/rin/oIoAs0UUUAFcx8X/8AkSf+4hYf+lkNdPXMfF//AJEn/uIWH/pZDQBlUUUUAFFFFABRRRQAVf8ADP8AyHIP+Bf+gmqFX/DP/Icg/wCBf+gmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP8AzMTf9cE/9Cer1Uf+Zib/AK4J/wChPV6gAooooAhvv+PV/pTNG/5A9r/1xT/0EU++/wCPV/pTNG/5A9r/ANcU/wDQRQBZooooAK5j4v8A/Ik/9xCw/wDSyGunrmPi/wD8iT/3ELD/ANLIaAMqiiigAooooAKKKKACr/hn/kOQf8C/9BNUKv8Ahn/kOQf8C/8AQTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/wCuCf8AoT1eqj/zMTf9cE/9Cer1ABRRRQBDff8AHq/0pmjf8ge1/wCuKf8AoIp99/x6v9KZo3/IHtf+uKf+gigCzRRRQAVzHxf/AORJ/wC4hYf+lkNdPXMfF/8A5En/ALiFh/6WQ0AZVFFFABRRRQAUUUUAFX/DP/Icg/4F/wCgmqFX/DP/ACHIP+Bf+gmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/MxN/1wT/0J6vVR/wCZib/rgn/oT1eoAKKKKAIb7/j1f6UzRv8AkD2v/XFP/QRT77/j1f6UzRv+QPa/9cU/9BFAFmiiigArmPi//wAiT/3ELD/0shrp65j4v/8AIk/9xCw/9LIaAMqiiigAooooAKKKKACr/hn/AJDkH/Av/QTVCr/hn/kOQf8AAv8A0E0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/wCZib/rgn/oT1eqj/zMTf8AXBP/AEJ6vUAFFFFAEN9/x6v9KZo3/IHtf+uKf+gin33/AB6v9KZo3/IHtf8Arin/AKCKALNFFFABXMfF/wD5En/uIWH/AKWQ109cx8X/APkSf+4hYf8ApZDQBlUUUUAFFFFABRRRQAVf8M/8hyD/AIF/6CaoVf8ADP8AyHIP+Bf+gmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/MxN/wBcE/8AQnq9VH/mYm/64J/6E9XqACiiigCG+/49X+lM0b/kD2v/AFxT/wBBFPvv+PV/pTNG/wCQPa/9cU/9BFAFmiiigArmPi//AMiT/wBxCw/9LIa6euY+L/8AyJP/AHELD/0shoAyqKKKACiiigAooooAKv8Ahn/kOQf8C/8AQTVCr/hn/kOQf8C/9BNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/rgn/oT1eqj/wAzE3/XBP8A0J6vUAFFFFAEN9/x6v8ASmaN/wAge1/64p/6CKfff8er/SmaN/yB7X/rin/oIoAs0UUUAFcx8X/+RJ/7iFh/6WQ109cx8X/+RJ/7iFh/6WQ0AZVFFFABRRRQAUUUUAFX/DP/ACHIP+Bf+gmqFX/DP/Icg/4F/wCgmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/ADMTf9cE/wDQnq9VH/mYm/64J/6E9XqACiiigCG+/wCPV/pTNG/5A9r/ANcU/wDQRT77/j1f6UzRv+QPa/8AXFP/AEEUAWaKKKACuY+L/wDyJP8A3ELD/wBLIa6euY+L/wDyJP8A3ELD/wBLIaAMqiiigAooooAKKKKACr/hn/kOQf8AAv8A0E1Qq/4Z/wCQ5B/wL/0E0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv+uCf+hPV6qP8AzMTf9cE/9Cer1ABRRRQBDff8er/SmaN/yB7X/rin/oIp99/x6v8ASmaN/wAge1/64p/6CKALNFFFABXMfF//AJEn/uIWH/pZDXT1zHxf/wCRJ/7iFh/6WQ0AZVFFFABRRRQAUUUUAFX/AAz/AMhyD/gX/oJqhV/wz/yHIP8AgX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/AMzE3/XBP/Qnq9VH/mYm/wCuCf8AoT1eoAKKKKAIb7/j1f6UzRv+QPa/9cU/9BFPvv8Aj1f6UzRv+QPa/wDXFP8A0EUAWaKKKACuY+L/APyJP/cQsP8A0shrp65j4v8A/Ik/9xCw/wDSyGgDKooooAKKKKACiiigAq/4Z/5DkH/Av/QTVCr/AIZ/5DkH/Av/AEE0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv8Argn/AKE9Xqo/8zE3/XBP/Qnq9QAUUUUAQ33/AB6v9KZo3/IHtf8Arin/AKCKfff8er/SmaN/yB7X/rin/oIoAs0UUUAFcx8X/wDkSf8AuIWH/pZDXT1zHxf/AORJ/wC4hYf+lkNAGVRRRQAUUUUAFFFFABV/wz/yHIP+Bf8AoJqhV/wz/wAhyD/gX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf9cE/9Cer1Uf8AmYm/64J/6E9XqACiiigCG+/49X+lM0b/AJA9r/1xT/0EU++/49X+lM0b/kD2v/XFP/QRQBZooooAK5j4v/8AIk/9xCw/9LIa6euY+L//ACJP/cQsP/SyGgDKooooAKKKKACiiigAq/4Z/wCQ5B/wL/0E1Qq/4Z/5DkH/AAL/ANBNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf8AmYm/64J/6E9Xqo/8zE3/AFwT/wBCer1ABRRRQBDff8er/SmaN/yB7X/rin/oIp99/wAer/SmaN/yB7X/AK4p/wCgigCzRRRQAVzHxf8A+RJ/7iFh/wClkNdPXMfF/wD5En/uIWH/AKWQ0AZVFFFABRRRQAUUUUAFX/DP/Icg/wCBf+gmqFX/AAz/AMhyD/gX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf8AXBP/AEJ6vVR/5mJv+uCf+hPV6gAooooAhvv+PV/pTNG/5A9r/wBcU/8AQRT77/j1f6UzRv8AkD2v/XFP/QRQBZooooAK5j4v/wDIk/8AcQsP/SyGunrmPi//AMiT/wBxCw/9LIaAMqiiigAooooAKKKKACr/AIZ/5DkH/Av/AEE1Qq/4Z/5DkH/Av/QTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/64J/6E9Xqo/8AMxN/1wT/ANCer1ABRRRQBDff8er/AEpmjf8AIHtf+uKf+gin33/Hq/0pmjf8ge1/64p/6CKALNFFFABXMfF//kSf+4hYf+lkNdPXMfF//kSf+4hYf+lkNAGVRRRQAUUUUAFFFFABV/wz/wAhyD/gX/oJqhV/wz/yHIP+Bf8AoJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/wAzE3/XBP8A0J6vVR/5mJv+uCf+hPV6gAooooAhvv8Aj1f6UzRv+QPa/wDXFP8A0EU++/49X+lM0b/kD2v/AFxT/wBBFAFmiiigArmPi/8A8iT/ANxCw/8ASyGunrmPi/8A8iT/ANxCw/8ASyGgDKooooAKKKKACiiigAq/4Z/5DkH/AAL/ANBNUKv+Gf8AkOQf8C/9BNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/rgn/oT1eqj/AMzE3/XBP/Qnq9QAUUUUAQ33/Hq/0pmjf8ge1/64p/6CKfff8er/AEpmjf8AIHtf+uKf+gigCzRRRQAVzHxf/wCRJ/7iFh/6WQ109cx8X/8AkSf+4hYf+lkNAGVRRRQAUUUUAFFFFABV/wAM/wDIcg/4F/6CaoVf8M/8hyD/AIF/6CaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/wDMxN/1wT/0J6vUUUAFFFFAEN9/x6v9KZo3/IHtf+uKf+giiigCzRRRQAVzHxf/AORJ/wC4hYf+lkNFFAGVRRRQAUUUUAFFFFABV/wz/wAhyD/gX/oJoooA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9k=", - "description": "Allows to create or edit gateway connectors.", - "descriptor": { - "type": "latest", - "sizeX": 11, - "sizeY": 8, - "resources": [], - "templateHtml": "", - "templateCss": "", - "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources && self.ctx.datasources.length) {\n self.ctx.$scope.entityId = self.ctx.datasources[0].entity.id;\n }\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", - "settingsSchema": "{}", - "dataKeySettingsSchema": "{}\n", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway connector\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":500},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" - } -} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/gateway_connectors.json b/application/src/main/data/json/system/widget_types/gateway_connectors.json new file mode 100644 index 0000000000..2e6d62866c --- /dev/null +++ b/application/src/main/data/json/system/widget_types/gateway_connectors.json @@ -0,0 +1,19 @@ +{ + "fqn": "gateway_widgets.gateway_connectors", + "name": "Gateway connectors", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "Allows to create and manage gateway connectors.", + "descriptor": { + "type": "latest", + "sizeX": 11, + "sizeY": 8, + "resources": [], + "templateHtml": "", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources && self.ctx.datasources.length) {\n self.ctx.$scope.entityId = self.ctx.datasources[0].entity.id;\n }\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway connectors\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":500},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" + } +} diff --git a/application/src/main/data/json/system/widget_types/gateway_custom_statistics.json b/application/src/main/data/json/system/widget_types/gateway_custom_statistics.json new file mode 100644 index 0000000000..51fb71f4a9 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/gateway_custom_statistics.json @@ -0,0 +1,23 @@ +{ + "fqn": "gateway_widgets.gateway_custom_statistics", + "name": "Gateway custom statistics", + "deprecated": false, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMYAAACfCAYAAACiGqZiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABQaSURBVHgB7Z1pjJVVmsdPiYVgFaaKUajSAZtFHUpjYQuOTSEtLrjMqBFH/dKuX9RuNTrTZoKmI90TdSbTk7gMLX5wQY2Je1wmIjiDg4BG2aPQKlUkoFL4gSKRCrWw9Pk98Nx+63Kq7q2FpYr/j1zuu5z3nPOe8/zPec6t+z63ZG8kCCE6cEwQQhyAhCFEAglDiAQShhAJJAwhEkgYQiSQMIRIcGwxidrad4f23XuC/uIh+jMlJSGUDhoUBpcWng8KCgNRtO3aE4To7zCwt+3abduFxFFQOswUQgwk2nfvLpimoDDkPomBRjE2rcW3EAmKWnx3RVNTU/h02VLbrqisDGN+Nia0tLaEMWPGdki3cWNDqK4+OezcudMWQRUVlR3Or1+/LkyYUBNWrVwRzvn5uUGIw0mvhbF9e1MYMmRIuOjiS8KWLT+E9evWhZaWFjN8FwznVq1cGbaPaTLxDBkyNDQ0rAiNW7ZEsVSHqiiYlStWmJgQmosNEf3DP15l+QtxKOm1MDDmlmjA//e/H4XK4cNtH7FURgFUVFTE7e0mmJ/FmWTM2LGhob4hptt3LecRBeLghQBIv7GhwWaNysqKKLKdEoY45PR6jYELVBEtfUrdVDNoh23EMWbMGBNOPpz7+bmT4gzz1QHnhg4dYoJo2tYUZ42WIMShptfCYF3AjLBs6ZLoMl0cqk+uNleI2WFndKl4IRz2EQvn980mldF9Wh4m1NRYPrhYuGDsT6g50/LYty6pDkIcakoKPcG3Y2d7EGKgUT60tMvz+rhWiAS9XnwLcbjYHt3tfHDJ+wIJQ/RbVq5aaZ+GOvxZ4KKLLg59gVwp0W9BBIjBtvtQFHBQFt8LPpwfxo8fHzZs2GDvZWXlYc2a1XauvLzcPtrtC5bGT8Ia6uvDjBmXhZFVVd26dseOHfZJWpZx48aHcbG+WbY2NubqXhXLOLt2YigGrtu6tbHo9KLn8Oll/jctCnFYFt9bt26Nhtece2+MBrJ27ZpovNXRyNaYcFI88Nt/DsXy9ltvxI9/601kTz89J6zdb7yFwMhfenGebVOf5ubmsHDhh7ZdPqz8gPTU3c9Td8othrI4APASB5/uiqIY+mSNMfvh38X/S+JsUBZ++8C/JtOMHFkVamtr40i6JZSUlJiBMUIzonL9lCl1NsIyinMcYyfP8ePHhl/ddGs05hfMiBvjSPxALKOxcWsc3cfFtOPCXb/+jc1EjNIvvTTPtjl+9tkTw+9n/y6MjfmR9+zZ/xYWLvjQtuvq6qw+IewN9fUb9m+HDuXcdddvOtSd1wP/cn+4duY/WT0XxLyam3dYurfi/dx1192B6XdurPulcRarjzMm9+LtU1U1MtwZ0+ZfS/3EkUWvZwxckptuviUa569Dc9zG6FIsW7Yk/PE//yO8/PKL0WBrTRDLli0148GQZ1x2uRkgMwBGwzt5Ll2y1PL99NNl4dprr7OydjTvK3NtHMExujWrV5u7hkHiVl0787poqG9ZubhYiBWR1Ee3C4NlO2WMzCbMchgvebz99pud3vfLUYAI8k4TxZtR2BdYvcmjdr/7hMBw99if/fs/mEhoH7/2VzfdYteKI49ezxgYLa7JlClTTSSdwXmMmVF97tw54eE4er/UOM9crBkzLu+QFuNhNCWtr0cenv2HOMu8aaM7Iz8ujs9OT/9pjo3ClI+7E/8zgQCC6Q6IE6rie1f3syMa/YIPP7RtDP/sOJv81x/nW3nMAhtiPfe1T3POpbp0f52y1zJTiiOPPpkxGPFrJ9Z2OluAGXo8/9Z+FwowqIUL5ptR5dLF/HzEnXHZZdHQysw9QXw+2q9Zu8ZEgjvmIuK77MxCuHMz42iPK5WiPBquXZMweuq1du1qE9+CWK+/jvz76v70n/473ue+Y2PHjouirbMXdaQNRoyosvfs2mJkdJ/W2kzUGGfMf7dys9eWax1yRDJodqSrBIWe9x4+fLi5DLgp06dfFAYPHmzHcGHodHuPxrh582ZLM2rUqeamwODSwXbtpMnn2X55NDAM6MKYD9+VYvSvqTkzjBo92vJZtnSpfTJ04YXTbSb5LuZJmrq4PWnyZDNkjn3xxRdmwBgo9eH6krDPrWIbd4m68W1gjrPNcdKSx8eLFsVyqk2InN+2rcnqPnny3+dGfb7TRTrqWTd1au6+x0dxZfN1cS2Pdaqru8DKyV47+bzz7FpxaBlcOqjL84ftu1K4SSyw8bXdfRHiUFHo49rDJ4w4M5jbUSZXQhx6jlhhCHE40bdrhegBEoYQCQr+HaNVUQjFAKTQyragMHbtVsQ1MfBoad8ThnQRprNEP04pxIFojSFEAglDiAQShhAJJAwhEkgYQiSQMIRIUNSDSnviJ7rt7YV/hUaIIxkeqS499hh7L5i20N8xdu/eE/8Yslu/rCQGDEOPOzYMOqZrcRR0pVrb9WutYmDR1t4Hv8G3R6oQA4zdewrbtBbfQiSQMIRIIGEIkUDCECKBhCFEAglDiAQShhAJ+kQYbW1t9sP3hKLsKt7roaJp2zYLFi1ET+kTYfz/okVh+N8Mt/CTny5dakI5nFC+xbMVoof0Otr5tjg6W4za/WE2iSHbHg2TEJz82hFxWfld77+rqQn/8/57YXjlcItCOGLkSPsy146fdoRfTp8eln/xuV3f3t4eyo4vs/dtTdvCpEmTLQYt54eVDwutba0Wt5bo5pRL/NeRI0Za/ss//zy072oPra2tFkdWiJ7S6xkDEZSVl+X2CWiMIf95/Xoz+F/U1VkQZUAk7P9iyr4o37xXDq/MRR6fMKEm/PLC6aFpe5OlQxSIyIMt/+2oUeaqefpRo0Zb+s3fbTaBIibyHKcfYhG9pNfCKI1Gmw2pz0xh+5kvL+6N/zpzrzD6tva23HYKW8OsX2fpjht8XIdrO9altMt8hCiWXgsDl6WtrT1s3rTJRMGvHCGWkdFV+nNckHNsVxzJe2OsTdGlsuv37nPdUphbta3JFt7URYje0CdBnRnRv9u8yd5xY0r3i6ChfkOHY7hFrEVscRxnFdwuDBmj37F/f3An6Tyvsv3rGa7z9Jtj2bhVpOVHXzhvaxutM0QnKNq5EAkU7VyIHiBhCJFAwhAigYQhRAIJQ4gEEoYQCSQMIRJIGEIkkDCESFDwa+eN21uDEAONqpKSUD6kc/PXb/AJkUCulBAJJAwhEkgYQiSQMIRIIGEIkUDCECKBhCFEAglDiAQShhAJJAwhEkgYQiSQMIRIIGEIkUDCECKBhCFEgm79PsaqVatCY2Njh2MTJ04MGzZsCBdccEE4UiEQdH/7vYwtW7aE1atXW7sSsBo++eQT2z7nnHOCOLh0a8Yg8DLCeOqpp6zT2LYff+mDnxd78MEHreP7mldffTU88cQT4Ycffgj9Cdr2scceC6+//rrt08YPPfRQeOGFF4I4+HRrxmD04vXBBx+EK664wmYLjBmRVFVVheeffz40NzeHn376KYwfP95mkuuvv95e9957r/2ATF1dnW0jBNLyACHnyYP0jIieT21traW94YYbLD/SXH755WHJkiVWNnn4Oa595JFHwmmnnZarL6KAk08+Obz22muWlu3+AvdCW992223WzrSxk9+ejz76qO3T9k8++aTd75o1a2yfduH6N954w9p31qxZ9o7QHK5fvHixpYH8tjza6PUaw2cRYPZ49tlnrdExwnvuuceMmc7l2OOPP277/rr11lstHR2AcWMAbCO6u+++O8yfP9/y5nX77bebgOh8Oj17DoFwLjuaIgrcpxkzZthPnd1yyy12XX+aORg0EAMurA9G4DOrtyfnaQ/aE5HQJxi479Mvp59+uvUH7cw5XrT1c889l5vxaT9EQ1u6QI5WDsri231i3l04vOg8Zhw6mxGKfUY3Tw/41rgP/vNkqTxT5dHhWZeOci699NLcvoujP601uB8GC9qDbZ8xaEv2vT25fwzc25NZwvd5p00ZFBARIvG8mXWzZfEiTf65o5FD8qkUjUxj04HffvutvTPKe+PjBlVXV9vIt2H/zxDTucWuXXC9eE2dOjV3LOUyIY4hQ4aE/gSjOsbKKO5k2xOjHzZsWK49Oc6gwj6DBWl8YPL0ngdthuj8HMc4r/gYwabrbhOn8r2xAW2bd/ajIds7RAO349lj7Ed3wM51te/X+Ct7PIoql96PxRHT0rGfIn4itTe6VXv7G6n29LaGYtszte95xFnEtqOLlutPb0vKP5rp9+Fzpk2bZovGrmhpael3M8XBhpmBT72YYXDHcNnEX1FcKSES6C/fQiSQMIRIIGEIkUDCECKBhCFEAglDiAQFv0S4a9euIMRA49hjuzb9gsLYvn17EGKgceKJJ3Z5Xn/gEyKB1hhCJJAwhEggYQiRQMIQIoGEIUQCCUOIBBKGEAkGzY5054Lly5db+JqdO3fac9W8L1q0KHz11VfhpJNOCkOHDrXtjz/+uMs0qTxhxIgR9l5fX2/HRo8eHUpLSzukX7BgQYe8vv/+e3vwn3J4rjub3tPyF/xs3jzB5vvF3FuqHuTT1NRkARYK3WNPoD7k19DQkAviQLSQr7/+utO2Tt1Ptl1FcXRrxvjyyy+tIwg6QAgXjOvdd98Nxx9/vHUKD9YTnoZjpKFj6NRsmhdffLFDni4A0pOODqaM9957L4wbNy4pIv4aP2nSpPDMM89Yesrl8UzKXrFiRS4tdeSxVtJ63u+8805YuHChleFwvKt7Q2xc42lh7ty5VkfuDzhPBA7KIsBbX0CeY8eOtRftwD4CoR3ff//9ZFtn29Xvx+9dFE+3hHHKKaeEq6++Ojcy8Rw1I+aZZ55pBkEoTDrwzjvvtDRu1DfeeGM499xzLX2+odO5XE96hIBBYpgYA51LnlnofE8PlE9sKqKM0PnZZ7vJz+NKUS6va665xurqUAYGl7030pGPl0V6jMxFCNwj5xyuxQjz69AbEDXlco/kycvbw9syv62z7cRxXty/RwcRxdGtSIQ0MOCenHXWWbn9ztKwjYEDHcwLA0YMzBJ0Gp2fD4bgxoshYnBc63lljYBtysGdwhgQoePiIZBYVgxZEA8vh3qzT56ImdE2K6ybb745dAblM3JnBdNTENhVV11l9+DB4xAvIqb9vI5e52xbi97T7cU3nYDhejAzN1I60rcxjnXr1tkoCrgpGAsBz3B16Gyu5xgd6tO8vzMa0vE+C7FNesSYHTV9dGYfATF6puqLQWVjThV7b8w2XIfBFQrtycxDOu7RR/ne4OslyuW+yZ+ZFOFTBm0M+W3t0C5Z96kv1jxHE91afNM5GCCG5j46HfDZZ5/ZuVNPPdU6E9+fxeo333xjnUPwNGYIFo0cP+OMM3IjMOk/+uij8OOPP9qISwezUCZP0iMKT89XhXnh2zNqUh7n58yZE0444QQ7hkFSBmA05E1AMurrLoenQ5i+xiHf/Htjwcr1xICdOXOmHaOs888/37bdp6cOXEO0P/IlJM306dNDb3nllVes7RhYrrzyytw9UWfuhQV4fluTljoQPI374l43bdqUC+8piqNb367F7ckfhXydkf1UJDtaehqPGZsaecnXQ/W7f56fZ5auygN3MTqrr7tvXpbvd3ZvWZeR+/By8/Ppqs49BREgVi8jvx3z29pn7my/ZNtVFIe+di5EAv2BT4gEEoYQCSQMIRJIGEIkkDCESCBhCJFAwhAiQcHvSvXFTxULcaSR+i3HLIpEKEQC/eVbiARaYwiRQMIQIoGEIUQCCUOIBBKGEAkkDCESSBhCJOhWlBAgYMDGjRst2gfPZ/NIKs9g85inR7XgoX0e0K+oqLA0PF7paQgukB9Fw/MkmIAHIvBgY1yffbSUvHi2OptXtjyu9+Bk2brV1NRY7CmuJ29iQOUHSMi/N56nznLHHXd02Pf8Scufg7q6x57g9+XtQiQUnkHvqq2zQQ9S7SqKo9sB1wh2hoHw7DGxigjnQjQPOgrD4BllOoM0HheJh/KJuEH8J8LRdJanP8jvoiAiRn6IHs5hEJ4Xhk7+RM4gLUbicJxABYS8oZ6kxZAIYuDPTnOM7dS9sc2Le/N6ZAO1kSf368cRA2Xl32NPoD7ejh7xkAEB47/kkktMIKm2TrUrbaaAa92jWzMGYVx4gQcB492DenmoG4/T5PseBmfx4sUHjKQYoBsdD/27MDg2b948M4Js3CfSk1824MGsWbNydfLZAjykjAeC44VAs1H7uIZtRvn8e3MQ0+TJk3NRErkH8qAsH6GZjSiH430Rqob7YhYA8kME999/v+2z7SGG8ts61a4ecE1xp4qnR2sMAoBljTNFflA2jK21tdW2GZEJcdnZyEraadOm2UjNKImxkT4/TGZ+eZAfWI20uETMKCkQddalyr83DA7heJhMZiqfpVzkXh+MOT+qSE8hb8plcEAIWfeQsrOuUVcB8ETP6FHANTopG3ANY/BR2dPgw3sa9t398QiEBEfz9YMblgdS4xg+u4ehxFBJT34+S4EHJfOgY9kohA6i4LpiQtrk3xsgxnz/3EPkeABoymdWAe4J4ffWdeG+77vvvlzYUNY9tA8DhbuNXudsWzvZdvX8RPF0K+AafitRxfnGrQdPJhgaxsM+nUOAMAKX0Vkcw4jpFNYfq1evNiPPTvl0IOdIS2A0ApVhCMwmHGM0zxo1QdCIKo5RkhfnCILGtQRGwyipE/jClK/OkxeuGunyA64RIHnQoEEH3BsixJd3wXENQqOOXMuLwHDXXXedBWwjEjn1onx3y3oD9SdPbxNmD2YlgqtRR9ouv61x9egD6ubtSkC2zkKUijT6dq0QCfR3DCESSBhCJJAwhEggYQiRQMIQIoGEIUQCCUOIBBKGEAkkDCESSBhCJJAwhEggYQiRQMIQIsFfACqLpuwst386AAAAAElFTkSuQmCC", + "description": "Allows users to create and display custom statistic data for the gateway in real-time.", + "descriptor": { + "type": "timeseries", + "sizeX": 8, + "sizeY": 5, + "resources": [], + "templateHtml": "", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() { \n};\n\nself.onDataUpdated = function() {\n};\n\nself.onLatestDataUpdated = function() {\n};\n\nself.onResize = function() {\n};\n\nself.onEditModeChanged = function() {\n};\n\nself.onDestroy = function() {\n};\n\nself.typeParameters = function() {\n return {\n hasAdditionalLatestDataKeys: false,\n dataKeysOptional: true\n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-flot-line-widget-settings", + "dataKeySettingsDirective": "tb-flot-line-key-settings", + "latestDataKeySettingsDirective": "tb-flot-latest-key-settings", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"First\",\"color\":\"#2196f3\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Second\",\"color\":\"#ffc107\",\"settings\":{\"showLines\":true,\"fillLines\":false,\"showPoints\":false},\"_hash\":0.12775350966079668,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"shadowSize\":4,\"fontColor\":\"#545454\",\"fontSize\":10,\"xaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"grid\":{\"color\":\"#545454\",\"tickColor\":\"#DDDDDD\",\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1},\"legend\":{\"show\":true,\"position\":\"nw\",\"backgroundColor\":\"#f0f0f0\",\"backgroundOpacity\":0.85,\"labelBoxBorderColor\":\"rgba(1, 1, 1, 0.45)\"},\"decimals\":1,\"stack\":false,\"tooltipIndividual\":false},\"title\":\"Gateway custom statistics \",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null}" + } +} diff --git a/application/src/main/data/json/system/widget_types/gateway_events.json b/application/src/main/data/json/system/widget_types/gateway_events.json index 5c2a38edfe..b7d1cb1343 100644 --- a/application/src/main/data/json/system/widget_types/gateway_events.json +++ b/application/src/main/data/json/system/widget_types/gateway_events.json @@ -3,7 +3,7 @@ "name": "Gateway events", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Allows to browse events from the gateway.", + "description": "Allows to browse events reported by the gateway.", "descriptor": { "type": "latest", "sizeX": 7.5, diff --git a/application/src/main/data/json/system/widget_types/gateway_general_statistics.json b/application/src/main/data/json/system/widget_types/gateway_general_chart_statistics.json similarity index 96% rename from application/src/main/data/json/system/widget_types/gateway_general_statistics.json rename to application/src/main/data/json/system/widget_types/gateway_general_chart_statistics.json index 8cf20c1340..d3404042e6 100644 --- a/application/src/main/data/json/system/widget_types/gateway_general_statistics.json +++ b/application/src/main/data/json/system/widget_types/gateway_general_chart_statistics.json @@ -1,9 +1,9 @@ { - "fqn": "gateway_widgets.gateway_general_statistics", - "name": "Gateway General Statistics", + "fqn": "gateway_widgets.gateway_general_chart_statistics", + "name": "Gateway general chart statistics", "deprecated": false, "image": "data:image/png;base64,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", - "description": "", + "description": "Provides a real-time chart with statistical data. Displays one of the following: bytes sent to the platform, bytes received from the platform, CPU, RAM, Disk, etc.", "descriptor": { "type": "timeseries", "sizeX": 8, @@ -18,6 +18,6 @@ "settingsDirective": "tb-flot-line-widget-settings", "dataKeySettingsDirective": "tb-flot-line-key-settings", "latestDataKeySettingsDirective": "tb-flot-latest-key-settings", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"First\",\"color\":\"#2196f3\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Second\",\"color\":\"#ffc107\",\"settings\":{\"showLines\":true,\"fillLines\":false,\"showPoints\":false},\"_hash\":0.12775350966079668,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"shadowSize\":4,\"fontColor\":\"#545454\",\"fontSize\":10,\"xaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"grid\":{\"color\":\"#545454\",\"tickColor\":\"#DDDDDD\",\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1},\"legend\":{\"show\":true,\"position\":\"nw\",\"backgroundColor\":\"#f0f0f0\",\"backgroundOpacity\":0.85,\"labelBoxBorderColor\":\"rgba(1, 1, 1, 0.45)\"},\"decimals\":1,\"stack\":false,\"tooltipIndividual\":false},\"title\":\"Gateway General Statistics\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null}" + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"First\",\"color\":\"#2196f3\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Second\",\"color\":\"#ffc107\",\"settings\":{\"showLines\":true,\"fillLines\":false,\"showPoints\":false},\"_hash\":0.12775350966079668,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"shadowSize\":4,\"fontColor\":\"#545454\",\"fontSize\":10,\"xaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"grid\":{\"color\":\"#545454\",\"tickColor\":\"#DDDDDD\",\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1},\"legend\":{\"show\":true,\"position\":\"nw\",\"backgroundColor\":\"#f0f0f0\",\"backgroundOpacity\":0.85,\"labelBoxBorderColor\":\"rgba(1, 1, 1, 0.45)\"},\"decimals\":1,\"stack\":false,\"tooltipIndividual\":false},\"title\":\"Gateway general chart statistics\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null}" } -} \ No newline at end of file +} diff --git a/application/src/main/data/json/system/widget_types/gateway_general_configuration.json b/application/src/main/data/json/system/widget_types/gateway_general_configuration.json new file mode 100644 index 0000000000..66d6ee9fd7 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/gateway_general_configuration.json @@ -0,0 +1,19 @@ +{ + "fqn": "gateway_widgets.gateway_general_configuration", + "name": "Gateway general configuration", + "deprecated": false, + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAYAAABJ/yOpAAAdjUlEQVR4Ae2dCZQV1ZnHvwZatkYWWbpBWQQCQmRRjDo2GIMbqOhEEUMyiiYTmSQiyUEP6FGiOWJG40QkyUjGiJ4z4rB4jooKQZQgrQhhc0EB2RFoFuludoXuN/W78D2rH+/Vq/e66YX3/c6pfq+qbt2l3ve/33dvVVdlicfGjRs7ZmVlTfG+9vGWZmIYmc2rkUjk1506ddqUdUIcK5o2bdrszDPPlDp16ohhZCplZWVy4MABKSoqKvZE0reet+3p5s2bO3EYRqaDg0ALnlCalZSUTKnjeY8bc3JyxDCMbznhMPq4eMrCKsMozwlNNDNlGEYAJhDDCMAEYhgBmEAMIwATiGEEYAIxjABMIIYRgAnEMAIwgRhGACYQwwignqTJ/kNH5PV/rJS1mwolp3FD6dezg1zRr7vUBAb/aqJc1KODPPKLm6Q6Wbp0qbRt29YtpzsLFy6UHTt2SMOGni306yd5eXlyOpC2B7nt/sky9a3FnjgayP6Dh+U3T06Tl2Z/KMa3IJDt27fL6c706dNl/fr10qNHDyeMF154wbUdioqK5PHHH5faSloe5PUFK2X77mJ580/3SttW3/5/1eQZC+THgy6Jri/9bJMsXbXJ8y4dpV+PjtFt0KRRA/e9betm5TyPeia44qLu0fzn/3O1dOuY6z51O8ev8TxYE0+k5O+vS21gw4YNsm3bNmnRooX07NnzpH0YXefOneXw4cNy7rnnut452XFVDXVDDOPGjZPmzZu7bQ0aNJBVq1a5un/66adOJKShrtoG9tN5kIa2KaTT4/r37++2hTlPeC3y858nyiWfipynuqNHj/5ts2apGdYfXpwjea2ay48HfysGRDBkQB9nrDD+v19zgjkju55MevkdaZLTQHp1PVuenfEPmTxzgfzjn2tkT/EBeeG1951IMH5E98Nf/9mJZNP2Pc5DIQby/OXjL7n1ZZ9tlvO9fD5Z96X85g/T5KxmOTJrwUduGfL9PlLfK+8lL107TywcW50EhVhz586VgoIC9+OtWbPGLd/97nejx73++uvuOH78+fPnS5cuXZwB6r7WrVu7YxYvXuyMo7rIzs6OegsMG6gbbTly5Iir45YtW1xb2rdv79I//fTTTli0Z/bs2ZKVleX2Afsw9NLSUmfUep44HlH528u+t99+2+1DCP7zRB5Tp06NnsP3338/5fNUUlKS/hhEwajVK8CQ1n3cOl5APYwTRYx3YR8Qqi3zvMyQy/t46RY4sTw3fkR0H8Z+3x3XuPUrLuoWHVfgxR75jxudKKjDdd64Y/6S1W69pkPPNm/ePBk7dqwTCDz88MOuN6QH5EcfNmxYtGf94x//GD0WI6Fnzc/Pd0aG8VQ3d999twuzGIcgDOpHqIWh8p06XnXVVS6tion2ASKYOHGiXHjhhdGef8iQIdFOBdFh2JwnPsePHx8td9myZXLHHXdE0/pDuWnTprmyVRScQz2/qVBhgew/eDwk2rG7xBkqhk5YBeP/8trxNJ5HIB37gfBKadK4fvQ7wsryPv/9kRfdOunzdhdF9+f5QihCKsSDMGobe/fudT+8igMwLA0REJB/kKuGAxjaiy++6IRCzF+d3kOhHSNHjnTtwggZg6iIY6FtfiPlWEIytms7/e1lPx0G54Z0/nxYEk2AMGGAgFg0PfWrEoF8p0OuzHrvI2f4hEb0+Bo6gQrg7lsuL3dcmDFCtw5tZLgvdNOQLZbxf3lVIt7n/z1xtxNfbRIKPT9L7LYwYBDE+4QNhBXPPvuseGFyOaOqSjBcRIEYMGY1+FmzZsUVSDyC2o7Y6ARuvfVWt37//fe7TxULx8ZrO/vpTHRc5D8mFdKaxSKMwSgJm+jlWdZu2hnd361Trvtc9vlmNzbBLazdsjN5vpf3lqXeMW5M4uWxZnOhOzYe2zyP1c4bByFGBu61CbyH9rZA76YeATTM0n0sioYK5HHNNdeU21cdYIDU1V8PROP3jn5oG726picsw8ATeQLStWvXzn3X8wUcQ16cN03nF5qOS6gfCx1KOqTlQfAa/zVmmDdY/7sX5hyf2sVQx5wYKxD+jLn9Gpk6e7HzLOy7e+jlSfNl0K/jCS0n0UB7pJcfIRxjkQu9ax6AR6tpMKBWYwd6VcIPQhJCJQwJsdxwww1Ro6K3nDx5svvxY3tHYnc9jpkdesnq8h5A2UOHDnWejO86+NYen++Ei4yxaDPCvuyyy5zQaQPpb7/99oT50z7yVkPXcIzvjFU4F5zf2HNA+exj0A9MRKUVjm7atClSEbbtLHJL0P59Bw9HUoH0QXnG5l+b8cRx0jbPaMrtmzBhQsTrAU867tChQ5GaBPVJVKd47Yy3LVG+Yc7TQw89FPE6jdB1SgbaqPAgnXCoIvvjgcfxD+QrO/+ahD9GVgg7dDBLWKHhRLLjqpsgTxavvmHbQL7x8maal6lkDbXiTalX1LtmoZIOHTqIUbMgfmYmBiPyX2AzyuM/T5U9o7d582YTiGEkAoHY3byGEYAJxDACMIEYRgAmEMMIwARiGAGYQAwjABOIYQRgAjGMAEwghhGACcQwAjCBGEYAJhDDCMDd7t532CNiiLz6xAgxDD8V/n+Q0wm7q9nww928TiArpo0XwzBOxsYghhGACcQwAjCBGEYAJhDDCMAEYhgBmEAMIwATiGEEYAIxjABMIIYRgAnEMAIwgRhGACYQwwjABGIYAVTL7e67ig/Jbm9p3CBbOuY2FcOoqVSpQKbP/1zmr9jsBOLnir4dZNgV50mrZo3EMGoSVfL6g91FB+U/X/5QNhaWBKZDJLd6i1F5FBYWSk5OjluM1Ij+w1Q6LPt4j6z4ZI9s2Lw/MF1ZJCKbvimUo5Fjkoxpnodp5IVd11/aRcIwZcqUcuuDBg2S3NxcqW2sXLlSZs+e7b736dPHtaMyuPfee+WLL75w3++5555KyzddeI859ahNYk1rkP7Owm3yyhsbk4oDikr3hRIH4RXiIAzbHROCJQKBcLIRBZ+jRo2KGlptgTZMmDDBCYMXfM6YMeMk4acDr3Hbv3+/vPXWW24J+0rmyoQXjuLBlMaNG7s61Sbqjh49+re8ATQseI43520NlbY0Uibbj33l3mceBOJ49K4BcuxYmazatMcN3nt2aiXJwJDGjBkjffv2da8pg8WLF8vAgQPd9wMHDsi7774rK1askLPOOivac9Fj6yfp2Qfx0mo+r732mmzZskWaNGni9mneXbp86+0KCgrcm1vPOOOMhGX7wXgefPBB+dvf/ubaQKjLq6CfeuopufHGG10+Wk+Ef/DgQWnfvn258kjDp78c8uXtukePHpWsrCxXx/nz57uOxJ8nIiKNGjHHsp266xt3tQz/viVLljhD5+218dqp26gzZdIu8uC9i127do3WgXJJ4z+vsG7dOvfmX7azn32JXit9KikpKUndgxBWheXryDcuxApCxcHg/Y1F69w2vqcLP45+3nXXXbJ8+XL3He+i4QYn/YEHHnD72EY61teuXevWSav58GOxH4PACNincf0zzzzjtgHbWFcDjS3b35MqlIXnwNAUDOixxx6LGgudAPnC9OnTnbdR2E7e/noDddWF9/cBx2mbtP2s4134ru1gH8JR8Gj+fZTx3nvvuWO1nbwXHfiu51jLJY16DX8dKEPrq+fVv486UTdgn9ahqkl5DBImrFKORI4G7veLg9BK2RUyxAJOJj0MPwg/5rhx46LbMT5OtDJnzhxngMC7yu+88073nR+Wdd73Dbxjmx+aXn3SpEkuncbvGCzlEEuTnh6WdFoe8GP6y+aH12P8qEHEQn6AcXEcHgYRUR51I39NQ57UHQYPHuyOoY1so8fXNvrRumibaH9YCNW0XZxzf/l0JpwPymThXFHneONCzqv/WMRDvbS+eD0thzaRt7a5KknZgzSoX1fSYdj3u8ut3qIkEkeqcPL4oejd/Ccc42BhoMrCfu3VYvG791j8xgj8cNpLYmA65uFTBYaR8INq2YgnkRiCoBzKUw9DHWmf3xv56x128BtrbLQ/LH5vx3fqou1MpZfnOH8d+K7nNV6d0jl/lUHKHiSvTSPZuCWcF2mQlR39vmT1DicImL9yS6A4OuaFHxNpD8VCD+Sfqbn22msrPHMTZHSUiQEjDn5A9U4cQ0/rLztePhyPscaCsaknjDUMDe8qQmXNItFulokTJzqDZpYqXapLAMlI2YNcdlGb0GnrZ50hdbxBInAN5OHn35Mb/qWrPPWLgYGeI52r6xgjPzwiAUIcenJ+OHo6Brjp/Ag6s6QQpvkNnx5dQwklXtnxxiD0mtTZP2tFWXg6xMN+jtOele/00v6JgXTgeG0T58TvWXUMFW9fLOynfbST76l4EM6RtltDUPX+NYmUPUiPbs3lB/lt5d2C7UnT1s2qI83rNpGvju1z6yoSZqh0QB6PYWleLCR+ZVYIA2bhxyW+5gdkoEhPl06e9Iw//elPXX6xnoHvxNP+aVS26eA/Wdlsp84ICkNp06ZNNC3Giidhv+YzduzYcmFOOpAnXooQNHba9ZZbbnH7mKKNeBMsQdeVtPPwp/V3QoiAc0B71LvGqwPntTK8/akg7SvpTPd+sGSn7NgVPKAujZR6Fwp3yjHvMwxDL+8mtw3sKZUFBqA9XUXzgVTi9VTKTpY/RlTRNijUCfFpnhgqwvD34KmUF5Q2WT7pnNeqgivpVXKrybZdxfLIi+/LV/u/Dkz3r/ldZPiV35U6dewm41OJTuUOGDDAhUUsTCEb5akygeB+9+3bJ3OXrJM5y7dL8cFvp38bZNeRti0ayk2XdZZLzu8kdeumN0tmpAaiILzBkxDe1MQevLqpMoEAIuGqLVdI9xTtky+/OiQNPXG0aZEjrc9qJk2bNjVxGDWKCt2smCrc8sAtBgxCW7ZsKd/pXOa2E04hjKwTs12GUZOo8n+YQgj16tlrSYzagY2GDSMAE4hhBGACMYwATCCGEYAJxDACMIEYRgAmEMMIwARiGAGcFgKJxPzfeySS7DERFcu/NlKZbQiTV7rlpXJcUNrKam9Kl7QplCvhWng8w4y9ZcS/LXZ/7D6It+4vN1H+8eoStmz/tkRllpWVxb0dJl4+yfJT4tVbt8cer5/x6pGoDonOaSKCznNsOUGdkr9dydqYqPxEZfI9kQ0GneN4duBPr3eQ+/PlXKckEM2MA1nUCJMZX5ChJDrh8U5sIoOOd1yi4xPlGXQSY9MlyiuojKA8Y0lURrxzmoh4RpCszkGdT7LzGps+TD1iPzFSfweQTnmxbfKn97crUdv937m5NrRANNPS0lI5duyYawjfVSD+dP4KJWpAbOVihebvLbOyEvfgWmbs/5DEnmj2B53IeEII43H89Y2XfzIxxKuH1jXWiPz5+fMM02PH1jlMJ5CojET1D/Ky4BdAovSxbSGN/7dLZDPx2hPrFfztT9Qm/7ZvvvkmNQ+CIFAVla5fv77dhWuc1hQXF4cTiIZV6jkaNWpkwjAygtCzWIgEgfA/HSYOI1MILRAdb2RnZ4thZApJBeIfwBJeGUYmkVQg8WY2DCNTSOlKuonEyDTsXizDCCCUQMxzGJmKeRDDCCCUQOy6h5GppDTNaxiZRuhpXr3BLB14Li/vgrjvvvvkd7/7nXz22WdSVVD2yJEjq7RM4/QhpVtN0vUk119/vTz//PNy9tlnO4Nl/e2335aqgreVfvnll+47QuWp5oYRhqQ3K8a7nTgVPvzwQ2ecb7zxhnvFMbCOoV511VVuHdG88sorcuaZZ8rFF1/shKTwmmby4FhNzzrvldB1xMbTyS+55BK3D6gr+ZKGd19wPF5E60N5lEX+/jLZft5550XramQ4PN09iLKyskhpaWnk8OHDkaKiokiqeL13pFOnTpExY8ZEtm7detJ+z2AjvXv3jtx2222R/Pz8SP/+/d0x8Oijj0Z69eoV+fnPf+72sQ7kRTqFY9mm+yhPjwPWZ86cGZkxY4bLh3WOoRzSab6LFi1y+1atWhUxDLQRegySLniFZ5991vXchDbDhw93vbTCmIRe/uWXX5Y333zThUPsVy/z17/+VSZPnixPPvmk8xR4hWS0a9fOvSCG4/zgSViA8qgb6xruUS7HmvcwlCp5zPrVV1/tFkSCETJYx9B5/x9hD98RDhA6sU1DHgwWCJ94gX0YzjnnHGf8YUCcCJFQi4V6GoYSagxSEeidEcZDDz3kjJwF7+CFPE4gjB0YA9x8880u/ahRo5w4Pv+8/BtwERGLf3xSGVAf6sAkAvXSF9kbBoQKsSJpDtAB46OHZsHA8Q7btm1zb5QCwhl6bgxfvwOi0WMBA77uuutcHngHPjFozS+V+oDOagGiQMgMzitbgEbtJtSFQv9nqtBD4xUwcF4LzBQvYdMTTzzh9jO2YJ3xCft1FgoR4HXmzp0r5557rhMK62xXz8MxP/rRj1J6vx710fJUJBpWmfcwYgn1jkJ9WMPXX38d7fnTAYPEwOOND4JCKI5LZXsyYsvCCyFcxjjmQQwl1DsKIzGPTKkIQcaXSDhBx6VrzP6yeMk9EweMgUwcRiwZ/7JARDFixIjo9K9h+EkqkNP9Tl6dPTOMeIQapNvt7kamEvo/Ck0kRiaS0lNNTCRGppHS7e6GkWmE/pfbZE/3NozTkdAexMIrIxOxEMswAkjpsT/mRYxMI/SV9FM1BuGVCvpSHn2CvGHUBPjfpNAv0Klsw0UY3PzIJxR+tU/Wbd0tBw59Lac7OY3qS27LM6XL2a3EqNmEfmhDZUF+CIMFMcx8Z4W8v3KDNG7cQLq2b+MZTlNp0qiBnK7sP3REdhYXy5wPV0vh7mLpck4rGXHDJZJ7Vrj/gDSqltAepDIgjDp06JALpRDGzHkrZOg135OJ435yWosiiLcKPpbRT70i1156nhOKUbMI9f8gGDY9Pm/9TPf/QRDZgQMHXF5/mrZAsurWkztv6p+xwojl+Vffky827ZCxI652IZhR/WzdujW16yAV8SSHDx924nhh1ofSpEljGTX8KhOHj7tuGiBdO+bJ71+YK0bNoUqe7o7nYaZqzgefycGvS50xGCejIiH8NGoGof8nHdIdrBOeFe7ZJ3MWfe7CKiMxiOT9jza6WT2j+knp4dXphFj6bvWVa7+UQf17W1gVAjoRJjCM6if0hcJ0xx+EVjDznZUyady/Baad8NwbMvTqi9x0b3VCPWLp2729DMrvddL2HXtK5NYxf5bpf/il5LVM/4EW5cvqIM9MfdtNgycasPPACgaRsVx66aWyYcMGycnJkdatW5fbd/DgQfn444/dZ5s2baRbt27uvffpoHlRXnWzc+dO1+ZYLrzwwrjtY7KIp+dceeWVkoxT/go2vAfhVY53nSNodmbF6i0y25vynDS16p76ngjEwLJy9WbPSA+777mVZPzh69DBXThNBMbfq1cv90gkjJXvLIDBYASxzJs3z6XHMPhNP/nkk7h5k1888fmhDF2qm+bNm8c9F+mK308oD1KRGSyueRTu3ed+8CAQB6HFlFcXlus5Z8xd4i1L3TrehV680Ou16eX57OMZLzNi7PenJa/+F3xH1m3Z6dKSZ763Pmr4leWOx/Af+Nn15QSgnmJ2wSfSpX1udD1eXn4of+HyL2TCqFu8NEdOquMX3vG0D9geLw8FL7ruy93Sp1v8J63w47Po79K4cWMJgokSFowJunfvntC4ERceike4JmL16tVy/vnnO5HhjfzbERc2Qw9OeRjt0qVLXfl4NvU6pKXnpx3kRT6xadUL+PPF8/nrFnQu/GVwDMf6wQsCgvKXnZubK82aNTv1t7tTaedBAsYeGAsCGZR/vuutp3uGptufmTpPJo4dLo+NujlqnHz26X6OF9b8wktT7NLjgabP/adLe49ndBomTXhullzrGfjzj97lGWihFxIVy3vL1zgRcTz5sB6GB56Z6eV1vitj5epN3rWLhdF9BcvXuvV7hg90ecerI6zwvNK4n13nteeHTlCEaPEgj8q87QYDwThmz54tixYtcqFvrAAwkPXr1zvh+L/Hwj7y69y5s/t9MSjAgIuKitzzjnlAH+XABx984AyQ7dnZ2c5oyYPPwYMHl3ttBY+cRSikxdDJj/xJq/n6n4oZhJaBx2SJbQ/7yEs9Lx4WQVJOYWGh7NmzJ7WbFU8VGE0XN+7Icr0+PfddngdgO71vXstmLt3CFx6Ipr/zpnz3/ZmxP3Gfz5/wPFNeLXDr9OAYH+KY6RniSk9Ag73v5IUIZ3hiGvX7l5wo+1/QLUQdtxwfb1z9Pbee7x2DR1GmeBf6BuX39nr+3Ggdve4hKupCnxC0PUHkNGoolQ2GgOfAkPVRq7E9KkbFglGqEGKh19XeHg+xZs0a5wEwZvUm9P4YP+zatSvqufr16+c+Mdb69etHRaTlIbply5a5vHgkk+bHdwyYTzXoZGDkhF3aBo6lDBUeYtE6qofVsJPJJe76OOWDdISV07C+rN+eOFZFEMeNaZZbp5c/bmBSzrAwUkIPf+/K/v0nQjLCJBUOnwyaMVi8zxdbdrmBL2kw0EmesCiHkId8CbOC0BBMw7/CmJ4fIeIREJzWkdAMgQMedJ1Xh7Dg7SrzijoGwYLBYIQYHgbnFwiGg/HpoDeRIRYXF7tPDU9YRyAYonoTLRNh6HY+8VyahhBGy+BTQyN6e45FKNgPde3du7ezQeq1YMGCqGEnQyeJQAUNeDK8EWXoYJ1t/jZzHk75/4PUrVvXxdHrvB88HhgaYiBux2hZ6OGJ5fEmMMkLsxi8I6DjY5HvOcNGWKN+/7/OmEhLKDPTG4MQ7jz+3JvuWHr2OQWfer4pKzrFTEhFuPRt6Jdc/IiNelEHhFDg5eG/pkOdCO0e9PJFRFpH6oJXw4OlAmKqyN2+/Lj00hpWYHwaj7NOr+8fO/jBkDHeeOB92Mc4QhcMlzzpoTdu3Oi+0xNTHiBCymM7xo1ACO+0F9+7d29UbNSXY0mDweqd5IiZ9MnGWn4og/x1xs8vEDwc+2kLIqHNnA/OD2MwPvEgdUePHv3bRCdDYSaKBbfToEFq1zE4rq4nw4IV6+SSXl3ljOzyTouBax9vAH+BbxDfPu8sZ2QM7DH8zTu+khZNG8uYOwZJfe94tmd7n4iLgfsAL9zB+Ade3MOl/eZoqfMgbKMH/6rkgOwtOejScmzPzu2ix1PWyKE/SFh/vIGGRNQFKZHXj6+71OVDl0GbqD95sx/RXenVpbH3SVrCR9azTuzzT1hwXOw5gRl/Xxz65sU6depIixYtym3T5ylrD9qqVSvJy8tzPz6Gxu/Yt2/fuPk1bNjQpY8HzzTm3j1/6IWxAXWgDAwS4+7Zs6frIDE8LRcP1rJlS7edtBjwkSNHXOinRqppO3bsKG3bto2mJV/aRZjGtmTnQo/bvn27O476aF01HfnrGwMoT8umHrQh6c2KqmAUTUOSiSkWRIVyuQcrq262G1sYwTBhsfyzDe7GRaP6CHWzYkUH5/Xq1XPLLQP7ysJlazLiH6Iqyoy/L7Fb32sIVXIvFrMVjB1+deuA6EDciA/jlst6n2v/QFVDCP2GqYr8ZyEehPiSwXrnti2iF8uM8nBe9u0/ICOGmPeoKYT2IIiDAXe6MPBj0MSPX3bs6IlZpBIxjk8dM0uHOH417HIxag6hXn9QWRcJmaJjwI5IClaslwn/87r0Pa+ju15Q1fc61QQQBlPGsxd+JDd7Y7RbruwrRs0i9L/cMl3ILFZFXsGmkA//IwL8E5X7R6ojR910aCYIBc/JEikrlfy+neXaS3vYv9nWQNy9X6lM81b0HYV+EB1C0Xl6etOgu1dPJ9xVf28QbqKo2SCQUCGWjkMqMgaJhQs1jRo1il6AZCB/wXkN7cFxRo0B20/pHYWn4oZFhKK3KxtGTYKr7lXy0AbDqK2YQAwjgJSupBtGphH6Srp+N4xMIvQr2AwjE0lpDGLhlpFpnPLH/hhGbcZmsQwjgNBjkMp+kY5h1Aaq7PUHhlEbQSDFye6xMmEYmYZqAoGs5G2eQVhoZWQaPN3Ecwyv1fH+3FnswaNPEnkSu1BoZApooKSkhEf/8HS80c7iN27c2NH7eNoTwI2JDuL/Nvh/EJ4fZBinMcWeQ/jI+xzRqVOnTf8PTbGHfeX24CAAAAAASUVORK5CYII=", + "description": "Allows to create or edit general gateway configuration.", + "descriptor": { + "type": "latest", + "sizeX": 11, + "sizeY": 8, + "resources": [], + "templateHtml": "", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources && self.ctx.datasources.length) {\n self.ctx.$scope.entityId = self.ctx.datasources[0].entity.id;\n }\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway configuration\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":500},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" + } +} diff --git a/application/src/main/data/json/system/widget_types/gateway_logs.json b/application/src/main/data/json/system/widget_types/gateway_logs.json index 5c17b22188..247e167c76 100644 --- a/application/src/main/data/json/system/widget_types/gateway_logs.json +++ b/application/src/main/data/json/system/widget_types/gateway_logs.json @@ -1,9 +1,9 @@ { "fqn": "gateway_widgets.gateway_logs", - "name": "Gateway Logs", + "name": "Gateway logs", "deprecated": false, - "image": "data:image/jpeg;base64,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V6B4kuvEviqC88aeILvTL5dW0vSTY2eny6bKJrIRWrzTMUWUMzh5mMgkZdyjaF9qoo63879tdNV2ei2KstL9P6+e73OC+Dvwk1TwTruveIfE2uWPiHxV4kFvDd3VhprabZxQW6uIYYYGmndQDLKxLSuWaRugCqOGv/2Qtb+3RaXp/jW0sfA9v4th8YQ6S2h+bercC/F/Nbm7M4U27zF2UCEOhYDe6LsPu1FVGTU1NbqzXqmmtNtGl/VyXFODpvZ3v800/wAGzwGw/Y01jSfEmkiPxxbr4T0DxjP40tdNTw+v264nnkuJZori687Eih7l9jJCjqFUOZcVH+zd8Gm1PX/i54ws28T+F7f4hX/laGbuzazvtLtlhzJcR29xGGhaS9mu5gkqZOVYrhgK+gqKmKUb26pr7+VN33vaMV6eZcpNvmfdemjk1ptvJs8r+Cf7PWqfD34l694v8Qa5oera5rlnBp8p0XQP7Gt544nkdZrhDPO01yfMIMm5VCjCovOfVKKKOiXb/hxW1b7/APDfkgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPn39tXxNrmsfEj4R/DfSfEGreFbD4iaxdx6vqWlT/Z78W1raPOYIZsZiaRgoLrhgoIBGc15j4a/ay8P/ALMfw1+MmoaL498Z/Ei18FpaXFl4f8U6bqUep6RNcOYEjN7dRia6glmGVIV2QK2C2VFfSnx+/Z20H9ovw7p9nrE2rabfaLepqWk6tpN19l1DSLpQVEsMmCAdrMpVlZWDEFTXG6H+wR4OTw543svEmpeKvHd58Q7SKw1vU9ev1e7ngh3eSieQkUUXllmZTHGrBjkk8V6lGvh1SUal/NJLX3r3v6abp6dmefVo1nUcoW8nrppa3367NfNHi15/wUH+KPhn4MfEbVL7wvpt5qnhWy0++0rVpvCmt6BpF69xdLBLaPDfhJmkiyG8yNirBwdowVO/4t/b18afs/Q/F2z+IGk+FdW1XwHomma7pR8Px3UMF2t/LLbxW8qyNI5ZJo8F0HzKchAflr0WX9hDSdZ+FGv+Edf8ffE7xVZ+II7SB7rV9Yimns4raVZY0hVYVhUll+Z2jaRx95zgY3PHX7Gng34meLPG2q66mpagvj7QLTw5qdm86rbrb2zzSRPFtUSJKGmY7t5wVQgAg509vg72cdL9P+3fT+8R7HFWupa2/wDkv+AeBXX/AAUE+KHhn4G/FLWdQ8M6fd6n4N0i01XSdWl8J63oOk30k04iktHhvwkzPHwd8b7WDg4Ugqe0+Nf7S/xQ+DvhHwnY6hf/AAztvGet297fXMFloet680kcWGjjt7G0BuGQBlWW5d1RDghDuCjrpf2EtK1n4P8A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gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMvxh4K0f4haBNpWvaXp+saZcFWktb2BZ4ZCrBlJVgQcMAR7itKKNYY1RFVUUBVVRgADsKdRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHlWs/sS/DDxD8Z4fH994YF14khvE1NS+oXRsPtqKES8Nj5v2RrlVVQJzEZRtGGGBXqtFFC0iorZdA683UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKjunlSBjCkcknZXcop/EA/yqSigDP+1ap/z52H/gY/8A8ao+1ap/z52H/gY//wAarQooAz/+Ekt/+eeof+AM/wD8RR/wklv/AM89Q/8AAGf/AOIrQooAz/8AhJLf/nnqH/gDP/8AEUf8JJb/APPPUP8AwBn/APiK0KKAM/8A4SS3/wCeeof+AM//AMRR/wAJJb/889Q/8AZ//iK0KKAM/wD4SS3/AOeeof8AgDP/APEUf8JJb/8APPUP/AGf/wCIrQooAz/+Ekt/+eeof+AM/wD8RR/wklv/AM89Q/8AAGf/AOIrQooAz/8AhJLf/nnqH/gDP/8AEUf8JJb/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FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFHX/Dtt4jtPKuFOV5R1+8h9q5G5+E14sh8m6t3XsXyp/QGu8ooA8+/wCFUaj/AM9rL/vtv/iaP+FUaj/z2sv++2/+Jr0GigDz7/hVGo/89rL/AL7b/wCJo/4VRqP/AD2sv++2/wDia9BooA47RvhSsUwe+nWRV/5Zx5Ab6nr+VdfFEsEaoihVUYUAcAU6igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqO6tIr6Bopo45o2+8jqGU9+hqSigDP/4RPS/+gbYf+A6f4Uf8Inpf/QNsP/AdP8K0KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3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x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbqS102a3nV21C8nVeqOsQVv++UB/I0AXKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiuW8feNX0dvsdo224YZd/wDnmOwHua4S5vJr2TdNJJKx7uxY0AeyUV4vRQB7RRXi9FAHtFFeTaR4mvdEmVoZ32g8xsco34V6Z4f1uPxBpcdzH8u7hl/uMOooAu0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRVfVtVt9D0q6vrqTyrWzieeZ9pbYigsxwMk4APA5rH+FfxP0f40fDzSfFXh99Ql0XXIBdWUl7ptzp00sR+65guI45VDDlSyDcpDDIIJFre3S1/K97ffZ272fYG7WT63t8rX+66v6rudBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRXK/Gj40+H/ANn7wBdeKPFM2pWuh2BX7VcWelXepG2Un/WPHbRyOsa9WkKhEHLEDmuqVty5HQ80dL/L5/0194dbBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRVLQfEuneKbWa40vULLUoLe4ms5ZLWdZljnhkaKWJipIDpIrIynlWUggEEUB0uXaKKqa/r9j4U0K91TVL2003TNNge6u7u6mWGC1hRSzySOxCqiqCSxIAAJNA0m3ZFuiozewrZ/aDLGLcJ5hl3DZtxndnpjHOah0LXbHxRolnqWmXlrqOm6hAlza3drKs0FzE6hkkR1JVlZSCGBIIIIoFdFqiiigAorHg+Inh+61hdPj1zR5NQe7ksFtlvY2ma5jiE0kITOfMWIh2TG4KQxAHNbFAlJPYKKKKBhRRRQAUUUUAFFFFABRRUOo6lb6Pp9xeXlxDa2trG0000ziOOFFGWZmPCqACSTwAKUpJK7BXeiJqKh0/ULfVrCG6tZobm1uY1lhmicPHKjDKsrDgggggjgg1NTaadmCaaugoorJ8cePND+GPhS917xLrWk+HtD01PMu9R1O7jtLS1XIG6SWQhFGSBkkckUm0ldgk27I1qKjtbuK+tY54JI5oZlDxyIwZXUjIII4II5yKkp7aML31QUUUUAFFFFABRVPxF4j0/whoV3qmrX9npemafE091d3c6wQW0ajLO7sQqqBySSAKuA5FABRRRQAUUU2SVYV3MyquQMk45JwB+J4oAdRRRQAUVRt/E2m3fiK60eLULGTVrGCK6ubJJ1a4t4ZWkWKR487lR2ilCsRhjE4GdpxeoAKKKo6l4l03RtQsrO81CxtbrUmdLSGadY5LpkQyOI1Jy5VFZiBnCgk8Chu2rAvUVT8O+I9P8X6BZatpN9Z6ppepQJdWl5aTLPb3UTqGSSN1JV0ZSCGBIIIIq5TaadmAUUUUgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK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56h/4Az/APxFH/CSW/8Azz1D/wAAZ/8A4igDQorP/wCEkt/+eeof+AM//wARR/wklv8A889Q/wDAGf8A+IoA0KKz/wDhJLf/AJ56h/4Az/8AxFH/AAklv/zz1D/wBn/+IoA0KKz/APhJLf8A556h/wCAM/8A8RR/wklv/wA89Q/8AZ//AIigDQorP/4SS3/556h/4Az/APxFH/CSW/8Azz1D/wAAZ/8A4igDQorP/wCEkt/+eeof+AM//wARR/wklv8A889Q/wDAGf8A+IoA0KKz/wDhJLf/AJ56h/4Az/8AxFH/AAklv/zz1D/wBn/+IoA0KKz/APhJLf8A556h/wCAM/8A8RR/wklv/wA89Q/8AZ//AIigDQorP/4SS3/556h/4Az/APxFH/CSW/8Azz1D/wAAZ/8A4igDQorP/wCEkt/+eeof+AM//wARR/wklv8A889Q/wDAGf8A+IoA0KKz/wDhJLf/AJ56h/4Az/8AxFSWutw3k6xql4rN0L2ksa/mygD8TQBcooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKrarq1voto01xII4xx7sfQCuYufi5Ckn7mykkX1eQKfywaAOwori/+Fvf9Q/8A8j//AGNH/C3v+of/AOR//saAO0ori/8Ahb3/AFD/APyP/wDY0f8AC3v+of8A+R//ALGgDtKK5rSPidZahMsc0b2rMcAsdyfn2/KulByKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo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mSnc8m0AbmPcnGTWs1BXUXezdntdXdtOiStbvfdtMh7prsrrzsru/m7u3S3ZosUUUVkMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo6/4dtvEdp5VwpyvKOv3kPtXI3PwmvFkPk3Vu69i+VP6A13lFAHn3/CqNR/57WX/AH23/wATR/wqjUf+e1l/323/AMTXoNFAHn3/AAqjUf8AntZf99t/8TR/wqjUf+e1l/323/xNeg0UAcdo3wpWKYPfTrIq/wDLOPIDfU9fyrr4olgjVEUKqjCgDgCnUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBn/ANj3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N1oUUAZ/wDY9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdaFFAGf8A2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43WhRQBn/ANj3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N1oUUAZ/wDY9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdaFFAGf8A2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/4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RxNa280wkj8uKaVHk82Parb1zXK20lrft37evkVKLi2n0SfyaTv+KPR6K8t8J/tn/Djxv8QLXwzpuuXs2qXuo3ujwSPot9DYzX9m8yXNmt28ItzcJ9nmbyfM3skZdVZCGPM337b+i+Jfjd4P8KeEZn1K31i+1S0vru50W+gtZhZ2c0payupES3uQs0ao7QtKoyRlTg1nKajHme1m/ktyZe67S3ul827W+894or5/+Fn7fXhWX4E/DXXvHWpR6X4h8ZeFdN8RalDpmk3t1Z6Ql1CrGe5eJJVsrUyeYqzXUiJ+7YbyVbHXav8Ato/DfQ/EfirSrjXLz7Z4JkS31oxaNfTQ2c8gtjFbeakJjkuJftdv5UEbNLKZMIjFWA2qUZQnKm94tp/9uuz+57hre3XT8dvv6dz1KiuF+H37R/hP4o6bp91otzq841DUZNI8ifQ761urC7SFp2iu4JoVls28pdw+0rGDvjxkyIG89/a+/bQm/Zo8f+D/AA5aQ/DWO68VWl9efbfG3jc+FdPh+zy2kSwpKLO682aVrv5Y9q8ROcnpUWd1Hq9vPS/5ajiua9ul393/AAVb103PfKKp+H7m8vdBsptRgs7XUJYEe5htLlrm3ikKgsscrJGZEByA5RCwwdq5wLlEk07MmMrq6CiiikMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK8F/an8A/Ff4h/EXQYfD3hv4eeKfh7psaX13pet+LrzQ5dQ1FJC0fniHTLxZbaMKjiPcu6TBcFUAPvVFK2qfb+v8Ag+tmO+jXf+v+B6aHzL8U/wBmH4ieOT4+0myh8E2vh/41W9m3imaXVrprzw7cLaRWd19jQWu29V4IIhGZGtdrKWKsDsGlrHgH4zX37VR8TXnhb4Z+IvCWj3CW/hk3Hja+sbjRbZ0CXN2bJdKljlvnDSqGNwFWLEaGPfM8n0RRVJtNNdL6ettPklZeQndp36pL7v8APr0+R843v7LvjDxf+0npXinWtN+HtlJol9O48b6PLPaeJ9Y0thcCPR54UgULAgmTLm7lDNAsiwxy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A8Z+J7fW9MsdWkuWtmt4bTToRHLKgEsE++zcxzx+aYWMUoDspSvfKK2lWlKU5ved7/OSlttuuq7p3RMtXFv7LuvWzX4p9Oye547+zR8OviP8KfCyWfiC40vUI9Q1uS5eym8TX+tSeHNPNqqrBDf3UAuNQc3Sb91wItqXDKCREitqfHnw34+v9Ut7rwbpfgHxDbXGn3Gl32neJriWxWNZWQ+ck8VtcNIu1Sr2zIqyfIfMTbz6dRWdRKatLa1vlbl173W73vre+oRbjqv6d73+/wCVtLWvfkfgD8Lm+CHwM8G+DW1CTVm8J6LZ6Qb2RdrXZghSLzCuTt3bc4ycZxk9a66iirqVJVJuct27v5kxioqyCiiioKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/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W1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdNbSrgf8xXUP8AviD/AON0UUANOm3P/QV1D/viD/43TRp9yf8AmK6h/wB8Qf8AxuiigB66ZcH/AJiuof8AfEH/AMbqe006aCdXbULydV6o6xBW/wC+UB/I0UUAXKKKKAP/2Q==", - "description": null, + "image": "data:image/png;base64,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", + "description": "Allows to monitor and analyze the gateway logs.", "descriptor": { "type": "timeseries", "sizeX": 7.5, @@ -15,6 +15,6 @@ "settingsSchema": "{}", "dataKeySettingsSchema": "{}\n", "settingsDirective": "tb-gateway-logs-settings", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"entityAliasId\":null,\"filterId\":null,\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"hideInterval\":false,\"hideLastInterval\":false,\"hideQuickInterval\":false,\"hideAggregation\":false,\"hideAggInterval\":false,\"hideTimezone\":false,\"selectedTab\":0,\"realtime\":{\"realtimeType\":0,\"timewindowMs\":86400000,\"quickInterval\":\"CURRENT_DAY\",\"interval\":300000},\"aggregation\":{\"type\":\"AVG\",\"limit\":25000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway Logs\",\"showTitleIcon\":false,\"dropShadow\":false,\"enableFullscreen\":true,\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false,\"useDashboardTimewindow\":false,\"displayTimewindow\":true}" + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"entityAliasId\":null,\"filterId\":null,\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"hideInterval\":false,\"hideLastInterval\":false,\"hideQuickInterval\":false,\"hideAggregation\":false,\"hideAggInterval\":false,\"hideTimezone\":false,\"selectedTab\":0,\"realtime\":{\"realtimeType\":0,\"timewindowMs\":86400000,\"quickInterval\":\"CURRENT_DAY\",\"interval\":300000},\"aggregation\":{\"type\":\"AVG\",\"limit\":25000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway logs\",\"showTitleIcon\":false,\"dropShadow\":false,\"enableFullscreen\":true,\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false,\"useDashboardTimewindow\":false,\"displayTimewindow\":true}" } -} \ No newline at end of file +} diff --git a/application/src/main/data/json/system/widget_types/gateway_statistics.json b/application/src/main/data/json/system/widget_types/gateway_statistics.json deleted file mode 100644 index 1eb24c4482..0000000000 --- a/application/src/main/data/json/system/widget_types/gateway_statistics.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "fqn": "gateway_widgets.gateway_statistics", - "name": "Gateway statistics", - "deprecated": false, - "image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAFSBl0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKBwKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiimyLvQ84PY0AOoqKyn+02sb/3lBqWgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqlr0rR2IwcbmAP05oWrAu0Vy9FachPMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvQrFTkcH1FHIHMdRRUdo5ktY2PUoCfyqSsyiro3/ILg/wBwfyq1VXRv+QXB/uD+VWqACiiigAooqj4l8S6d4M8PX2r6xf2WlaTpkD3V5e3k6wW9pCilnkkkYhURVBJYkAAEmhuyuwSbdkXqK8l8H/t8/Ar4h+KLLRPD/wAafhNrutanKILPT9O8X6fdXV3IeiRxJKXdj6KCa7z4ZfEzQvjJ4D03xP4Z1GLVtC1iLzrO8iVlSdMlcgMAeoI5HajXcV1exvUUUUDCiqPiXxLp3gzw9favrF/ZaVpWmQPdXl7eTrBb2kKKWeSSRiFRFUEliQAASasafqEGrWEN1azRXNtcxrLDNE4eOVGGVZWHBBBBBHXNAE1FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVg6n8UvDOiePtM8KXniLQrTxRrUElzp+jzX8Ud/fxR8ySRQFvMkVP4mVSB3o62Dpc3qKw7v4neG7D4g2nhKfxDocPiq/tHv7XRpL+JdQubZDteZIC3mNGp4LhcA963KOlw62CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqHiH/jyX/fH8jV+qHiH/AI8l/wB8fyNOO4nsY1cx8YfEOq+Fvh/eXujQST3kTRgmO1a6eGIyKJJVhX5pGRCzBBySOh6V09ZXjPw1J4r0M20Go3mlXCyJNDdWxG+N0YMMg5DKcYKnggkVuQeUx/HvV9I8Dw6npl1pvj2zutesdLgu7XZbzxpNKkcqXERZAkyFiAOPvLuUYOe71b4wQ6J4zttJudJ1WKO7ulsYr11jWF5mjLhVBfey8Ebwu3IIzxWJP+zudQtNWnu9euJdc1fUrHU5L2O0jjjjezZGhRYRxt+T5ssWO4/MMABNQ/Zug1D4nR+I21VsxapHqyxNYwvKJFj8sxidgXWIjkKuMHPJHFICt4S+O+o+IdN0KbUdOl0aXU/FF5oix+XHOJ0h+1YOVlynEAy3zfMDhcHIl/4aObXfhzrWvaL4e1W4jsbCW9s3laDyrrYSCpxLmNhjJR9rYB4yMVoWHwHjtH09X1a5lt9K8QXGv2qeUqsjTrPviLDqA1w5BwCMAc9ap6J+zfDp9xq0l1rNzeSanpkulGYW0UMzxv1kndR+/mGAA7AcZ4ySaAHy/HlNE1TUf7Ut7yD7Ho+nXp09LdHl866mliSNZFlIdmdFXbgAcHecnb1/g7xZN4ojuhc6Pqui3FnII3ivUX58qGDI6MyOvOPlY4IIOK5TUv2eodf+3y6hq91LfX+mWFibmGFIjBLZzSTRXCKdw3eY4O05HyDrk11Xgzw1f+H4rt9S1q51q7vJRIzvGsMUAChQkca8KvGTkkksTnoAwNuiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA6Ox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+VS1FY/8eUP+4v8AKpa5zQq6N/yC4P8AcH8qtVV0b/kFwf7g/lVqgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqh4h/48l/3x/I1frnPib420bwHoMV3rmraZo1pJcCFJ766S3jZyrEKGcgFsKxx1wD6U47iexFVTXdBsfFOjXWnanZWmo6fexNDc2t1Cs0NxGwwyOjAqykdQRiuW/4aP+Hn/Q+eDP8Awd23/wAXR/w0f8PP+h88Gf8Ag7tv/i63IJfBX7P/AID+G1j9m8O+CfCOgW32NtP8rTdHt7VPszMXaDbGgHlliSU+6SScVqaT8NfDmg3ul3FjoGiWdxodidM06WCxijfT7Q7M28JCgxxHy48ouF+ReOBWN/w0f8PP+h88Gf8Ag7tv/i6P+Gj/AIef9D54M/8AB3bf/F0gMnwn+xl8HvAXjr/hKNC+FHw10XxN5rz/ANr2Hhiytr7zHOWfzkiD7mJyTnJNTan8Er/xR+0JpvjLWdfivNI8NW8q6BokOnCIWVzMgjmuppzIxmfZuRAqRhFkfO8kEaH/AA0f8PP+h88Gf+Du2/8Ai6P+Gj/h5/0Pngz/AMHdt/8AF0AbWtfDjw94k8WaVr2oaDot/rug+YNM1G5sYpbvTvMG2TyZWUvHuHB2kZHWs0fAfwOPicfG3/CGeFP+EzMfknX/AOyLf+0ymMbftOzzcY4xuxVf/ho/4ef9D54M/wDB3bf/ABdH/DR/w8/6HzwZ/wCDu2/+LoAn1f4CeBfEHxItPGN/4L8J3vi+wUJa65caRbyalbKOgS4ZDIo9g1N+Jv7P3gL41XVhP4y8EeEfFs2ltvspNa0e3v2s265jMqMUPuuKi/4aP+Hn/Q+eDP8Awd23/wAXR/w0f8PP+h88Gf8Ag7tv/i6ANbxx8LPD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JWk3M8QUlURi/wBX0UAeL/tl/GeX4IeHtGv9L8La5rXiTVbiTS7HVtN8Iah4jHhyN1DTXM0dhBNOI8IuEUASyCNSyrl15HxN4ZsPEH/BP06X4I07xlqEP2i12R6v4dvtL1e9mGpxSXM8tpcwQzqXfzZSfKVSCWX5cV9LUUAeV/G/xL4X+H1t4u8R3XgDW/Fms6PpFpeTR6b4Zn1G41ZYp5HtbeArGwmljm3OETc0W8OQMg186anaP8e/hHf681r8T7jxBN4r0jXvGMVt4N13w5cJYQEqlrpovbWCa4FuuH3QAzMyu6hHdEH2/RQB87fsv2URtoTrGkeO9S0KLxPK3gC58V2Go3esaZbHTwJJbmW8VruBS5u0R7wrIQ6qT8yg9Bpmh6npPxr+Nupnwzda3a32laV9htJYxHDrbR21wHgSSQeW2SVU5OAXG7Fe00UAfNn7L0uqeL/2mPEficL8QNR0W60VbX7R4y8ONodx4fnFxv8A7MskNtbCe2wSxl8uQlkT/SJRhU+k6KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvkr9unwzrN78YftcVz8S/D2n33hSTSLa+8E+HJNcl16eSZy2nXwW3uBa2+NhEwFu372TF1Fjn61ooA+EvH/AMM/FXhPX9S1KXRvijo3jnV/C2iQ+C7bwfPqMmiadqFtavG9neNbE2/kxzMSf7RJgKSZQl91fSvxC8P6rqH7Snwk1D7DczwadZ6yt/cwws0Fq8kFuFDuBhdzBguSM4OOlesUUAeC/G3xodE+LXgH4gnQPGV/4d8NSa1ompR2Phy9vb60klESx3KWkUTXEsJa3ZBJFGwKzKw+Qlq6b9jTwvqfhb4E266tYXOl3Wp6tqurraXKbJ7eG71C4uYlkXqj+XKm5TypyDyK9UooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA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qf8APnYf+Bj/APxqgDQorP8AtOqf8+dh/wCBj/8Axqj7Tqn/AD52H/gY/wD8aoA0KKz/ALTqn/PnYf8AgY//AMao+06p/wA+dh/4GP8A/GqANCis/wC06p/z52H/AIGP/wDGqPtOqf8APnYf+Bj/APxqgDQorP8AtOqf8+dh/wCBj/8Axqj7Tqn/AD52H/gY/wD8aoA0KKz/ALTqn/PnYf8AgY//AMao+06p/wA+dh/4GP8A/GqANCis/wC06p/z52H/AIGP/wDGqPtOqf8APnYf+Bj/APxqgDQorP8AtOqf8+dh/wCBj/8Axqj7Tqn/AD52H/gY/wD8aoA0KKz/ALTqn/PnYf8AgY//AMao+06p/wA+dh/4GP8A/GqANCis/wC06p/z52H/AIGP/wDGqPtOqf8APnYf+Bj/APxqgDQorP8AtOqf8+dh/wCBj/8Axqj7Tqn/AD52H/gY/wD8aoA0KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCro3/ILg/3B/KrVVdG/wCQXB/uD+VWqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK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J1KPzbe4QMu8ZIIKsAysCCCrAMpBBAIIrxz42+NDonxa8A/EE6B4yv8Aw74ak1rRNSjsfDl7e31pJKIljuUtIomuJYS1uyCSKNgVmVh8hLV037GnhfU/C3wJt11awudLutT1bVdXW0uU2T28N3qFxcxLIvVH8uVNynlTkHkUAeqUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAVdG/5BcH+4P5Vaqro3/ILg/3B/KrVABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAVdG/wCQXB/uD+VWqq6N/wAguD/cH8qtUAFFFFAF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UPtOqf8APnYf+Bj/APxqj7Tqn/PnYf8AgY//AMaq41wFpn2ugCt9p1T/AJ87D/wMf/41R9p1T/nzsP8AwMf/AONVZF1UizA0AUvtOqf8+dh/4GP/APGqPtOqf8+dh/4GP/8AGqvg5paACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAq6N/yC4P9wfyq1RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACHpUMxoooAqTGod1FFAChuasQmiigC1Ef51LRRQB//9k=", - "description": null, - "descriptor": { - "type": "timeseries", - "sizeX": 8, - "sizeY": 5, - "resources": [], - "templateHtml": "", - "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", - "controllerScript": "self.onInit = function() { \n};\n\nself.onDataUpdated = function() {\n};\n\nself.onLatestDataUpdated = function() {\n};\n\nself.onResize = function() {\n};\n\nself.onEditModeChanged = function() {\n};\n\nself.onDestroy = function() {\n};\n\nself.typeParameters = function() {\n return {\n hasAdditionalLatestDataKeys: false,\n dataKeysOptional: true\n };\n}\n", - "settingsSchema": "{}", - "dataKeySettingsSchema": "{}", - "latestDataKeySettingsSchema": "{}", - "settingsDirective": "tb-flot-line-widget-settings", - "dataKeySettingsDirective": "tb-flot-line-key-settings", - "latestDataKeySettingsDirective": "tb-flot-latest-key-settings", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"First\",\"color\":\"#2196f3\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Second\",\"color\":\"#ffc107\",\"settings\":{\"showLines\":true,\"fillLines\":false,\"showPoints\":false},\"_hash\":0.12775350966079668,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"shadowSize\":4,\"fontColor\":\"#545454\",\"fontSize\":10,\"xaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"grid\":{\"color\":\"#545454\",\"tickColor\":\"#DDDDDD\",\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1},\"legend\":{\"show\":true,\"position\":\"nw\",\"backgroundColor\":\"#f0f0f0\",\"backgroundOpacity\":0.85,\"labelBoxBorderColor\":\"rgba(1, 1, 1, 0.45)\"},\"decimals\":1,\"stack\":false,\"tooltipIndividual\":false},\"title\":\"Gateway statistics\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null}" - } -} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/gauge.json b/application/src/main/data/json/system/widget_types/gauge.json index 3ac6fd00b4..8bfdc6ea10 100644 --- a/application/src/main/data/json/system/widget_types/gauge.json +++ b/application/src/main/data/json/system/widget_types/gauge.json @@ -3,7 +3,7 @@ "name": "Gauge", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Preconfigured gauge to display any value reading. Allows to configure value range, gradient colors and other settings.", + "description": "Preconfigured gauge to display any value reading. Allows to configure value range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 4, diff --git a/application/src/main/data/json/system/widget_types/getting_started.json b/application/src/main/data/json/system/widget_types/getting_started.json index 65aaa3e167..54611c0565 100644 --- a/application/src/main/data/json/system/widget_types/getting_started.json +++ b/application/src/main/data/json/system/widget_types/getting_started.json @@ -3,7 +3,7 @@ "name": "Getting started", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Getting started instruction.", + "description": "Displays the getting started instructions.", "descriptor": { "type": "static", "sizeX": 7.5, diff --git a/application/src/main/data/json/system/widget_types/google_map.json b/application/src/main/data/json/system/widget_types/google_map.json index 2ef3dcceba..c57b80b7c3 100644 --- a/application/src/main/data/json/system/widget_types/google_map.json +++ b/application/src/main/data/json/system/widget_types/google_map.json @@ -3,7 +3,7 @@ "name": "Google Map", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Show latest values and location of the entities on Google Maps.", + "description": "Displays the location of the entities on Google Maps. Requires the Google map key to work properly. Highly customizable via custom markers, marker tooltips, and widget actions.", "descriptor": { "type": "latest", "sizeX": 8.5, diff --git a/application/src/main/data/json/system/widget_types/here_map.json b/application/src/main/data/json/system/widget_types/here_map.json index eac0fc751d..76a4bc78fb 100644 --- a/application/src/main/data/json/system/widget_types/here_map.json +++ b/application/src/main/data/json/system/widget_types/here_map.json @@ -3,7 +3,7 @@ "name": "HERE Map", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Show latest values and location of the entities on HERE maps.", + "description": "Displays the location of the entities on HERE Maps. Requires the HERE map key to work properly. Highly customizable via custom markers, marker tooltips, and widget actions.", "descriptor": { "type": "latest", "sizeX": 9.5, diff --git a/application/src/main/data/json/system/widget_types/horizontal_bar.json b/application/src/main/data/json/system/widget_types/horizontal_bar.json index de72fc84a0..27ec8d2367 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_bar.json +++ b/application/src/main/data/json/system/widget_types/horizontal_bar.json @@ -3,7 +3,7 @@ "name": "Horizontal bar", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Preconfigured gauge to display any value reading as a horizontal bar. Allows to configure value range, gradient colors and other settings.", + "description": "Preconfigured gauge to display any value reading as a horizontal bar. Allows to configure value range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 7, diff --git a/application/src/main/data/json/system/widget_types/horizontal_value_card.json b/application/src/main/data/json/system/widget_types/horizontal_value_card.json index 46e76a19bc..50c50050bc 100644 --- a/application/src/main/data/json/system/widget_types/horizontal_value_card.json +++ b/application/src/main/data/json/system/widget_types/horizontal_value_card.json @@ -3,7 +3,7 @@ "name": "Horizontal value card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Designed to display single value of the selected attribute or timeseries data. Widget styles are customizable.", + "description": "Displays a single entity attribute or the latest telemetry data in a horizontal layout.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/html_value_card.json b/application/src/main/data/json/system/widget_types/html_value_card.json index efac2feec4..880775c0d3 100644 --- a/application/src/main/data/json/system/widget_types/html_value_card.json +++ b/application/src/main/data/json/system/widget_types/html_value_card.json @@ -3,7 +3,7 @@ "name": "HTML Value Card", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAAAAABslHx1AAAAAmJLR0QA/4ePzL8AAAkbSURBVHja7d3rT1vnHcBx/pVK24ttLybtTdd3k7alaRPWtZmULu20tZu2at1aqWrWrkvVSmnVpVu3qFLHtGx6Cj0cH8Bg+0C4XwqmQBITQgiXmEswt1DHDja+4dv57sWx8SWEAHFQgp7njY9/z7HP+Tx+bjzH+JSR9C7MP+JpwZugLLkYTPGIp1RwMVnmDXIAUtBbtpA6CJDUQtk8ByLNS4iESIiESIiESIiESIiESIiESIiESMgjBmkWbQBfiRoDPELcBugQFwEYFzZgWQioFEIIIdyAV2RSK73CaWSfKQyKbgBSmcjcfkImRVUCqBEXgS4hLt0VUq/ruj4P3NZ1vVJYdX2AXuE0dF2vFhZdb86HNOi6ri/vJyT2uZgHnxA+iFVWCs24G2Qp/2W1YhqgVzgBusQQkA9Z3f820iaccFnUA+Oi2y4WHlXItLAY6GIE0MXsFdF9N0iPy+Wa2ymk1+Vyze8vJFElvGEh1mBNVCWCompjm8beu1OIEEIM7HP32y1cU0IHLorW9XWrmLwLZMLn84V2CnH7fL7wPkNuCHuHuAqGZhaknoNMinrAI6oehTZC8gtRKcKwKKpaW1tbhFjbhKyIz9fAKfRHAkKvEM1Aj+gCcIhLdAhN13XdYzQJpd0hxI2CcWQbSLWu6/pUdhxZ2mfIghCTsFElZgFGRY3RYVayaTb6vhCifpbNkX1ye4gQQogr2ZF99qGaa4WTctIoIRIiIRIiIRIiIRIiIRIiIRIiIRIiIRIiIRIiIRIiIRIiIRIiIRIiIRIiIRJyMCFL/a3DsbvmBooDkV1/iWBjeD8gIyde/ODs24dOrW+d3fhYujBw87uduz0B+2MrDx6iPzcDkLYcCWyV7T3+ZCHE+PUru4bEXObj5xcfHGT6mWhmq/atrfJ/O3i0EKJ+9EnnXk/kTNeDg7y+WX3TP47cmV3/FoWQxaORhxKycTS3/ac7m+TNp0KFEOOFizyUkLlXc9sfdRfnGi85KYRUnuYOSEtu8zwAV5YhUHnq9TOZpkGqDRhW1V++p6qq+XZrllOvvvkvd8kgkbzvS792rThX+wuFkPkj0TshT+c2DwHwcTfVL1jds92vvGn+IEDsOeCriornT1ZUVKQB7EfO9c2M1Rx7LVL6ATHxdPHPECwdDhdC0seH2RHk36fNF314LgfJr1p9L5gA49OXSw9p+FtxxXpxgELIuQ/ZEaTijWy/+6SxJeSlzRP6xXCpIaGjxSNi1bsUQqaPxHYG+f7tbOB3ni0hTxnZHRRRasg7zUUBz+FIISR17DI7g7yzGTg9sPUnMlvqXis3YLxTFEgfH6QQ8tlf2SHk/GbgH+1bQnpOBB8QZOxEvCjy3/cphEwd2dgpJNeP/7NtSwj2Q2dnHwRk+VlvUWTmcKQQknxmlNJBiJ4/+ezbzRslhqwfmyqKpI5tzu8ykLMfU0oIYIydPfSfVCkhyV99WRxSv1WeTd8uLy//I4vfPJwNPP6D8vJy7/1DgNCf3ygl5KSyXe7R4kIr1ScCwImR0kE+/ZD7ghzb/FeR1Pd2Bgnnhqza/5UMYnslfX+QU87sVu83toecbTIf20/n6nDJIEM/i3J/kKHfZGegxx/fHqKdyzSNH2aH/tRPJ0sEmTnydWFgpSK9Swh/+HsS4Prz3fdoI57yTH/b/qx5/jdfPmNOVCbvG/L7J8pzSQXOf8e/W0jigx+dPHPq2EvX7tXY+eTQ++99CXDt5Z+89sFbP3/aZnbET3z2ANa19vIfI7GRvqu3d7Kjb8iV2S8y0juwvMtjypVGCZEQCZEQCZEQCZEQCZEQCZEQCZEQCXl4IJ7R7XKX7rlUa8TvHSk95EJtCiCijm+GXI3bvdVV270ONm7JW+BL+NMwYbnbtYOYf6uoP7Z7yC1lAWBCjZYMElnMe7KsRIsiBWlC2yqquvdQtRxOgOYuILa0mshAgmFgfR0wvCub5WN4VzZMSGDJXE4PLJpFmlhZTQD+jfAyMT+EQslbSwkITilLoUy5hxe/NoBQyFhdyiyc3h62+KPA+lIQ8K8DgUDUr474dw8Z05KwrszBuNpUb/WakNZBoMsJoaZae7aAkh1KQ12bDVL9qkN1GhhOS6PWGofFGmtD3TKo3arKhAb9zQ021eqnt16xuZjUwLik2jVHAPpbztu0OnO1sdla7biOMaQ61G6D4boYftV93aHUNe8eElbn4aqWxK/cwOhuLoK0dCWZ1MyrieOaj2iTDa5Y1/Fb5llUA0SsI0S0KxjDdUnUxkDShGg+Ik3tmao1qYFbXSXR3mjQry4Stw/kVa3x2gDBGjdJx4DR0rnXqkXnl9A0COk45iHzIT7FB4Y2A0DTkNlGjLoxoM/JrOqD4DqTWgriF0KoU5mT6+8AbijRHOR8P+BXbtHfBgy05UHsw8BgN3jVQS20Z8isGr+trAK3ehrqNEshZE6xOxwO1eyQtQkTElOsDoejpoXUgNo0GoSLTdlWej0fElBu5SCWCcBQZ+hvB4aac5CUUudwOOp04JJ5dWFvkKQ2M2IHAtpoODVVBLmhzHo8Hs8aALWTJiSuuDwej2cFiLg71UVGtob4FX8OYh0HktXTd0LS6gWPx+NZAjqrB/cOYaDLPpqpVYxnIJ1OoMPJmrICZL430uoErtigftgMzs4And3MWOKZqrUJaQfcajwHae8BVhT/nRAaBzPHuK7Nqyt7h9xUqkPAgjId8VhVA1cjXK7zx9yqE9od3tSqw+xj5lR3bKXOBtcss8lQxxTXtKV0wH6JuLUvEutvSOZB1Bspb4MTbikLcSY1WKieSPj1Tgohc4o/yXXVnYz0jBHSrnHBloC6odheIIbNbHmXVKVxRAniaoRYm1Ld1uqEjT5V0bJzFpeqOAZsYIxqitoXxxjWlOq+BPibFKUlkF+1mnqqlbYoGG1Kn/lhu62K2hcvgsTtygiM1yhqT4zOJoO4dRDGFMt9zbWS+eUQy15DSoRzM45Edo90yMxOZR6JFpZhfwfJzFwhmp2eGFv9eJoRNQAjnCiIbsQfltlvf8cBmcYfGEgsckAg8i9ECZEQCZEQCZEQCZEQCZEQCZGQhxZyYG4QfDBu2RzwliUOxk20U2UH47bmKf4Pbw32/q0TqIwAAAAASUVORK5CYII=", - "description": "Displays configurable HTML with ability to inject values from the selected datasource. For example, display single or multiple attribute values.", + "description": "Displays configurable HTML with the ability to inject values from the selected data source. For example, display single or multiple attribute values.", "descriptor": { "type": "latest", "sizeX": 7.5, diff --git a/application/src/main/data/json/system/widget_types/image_map.json b/application/src/main/data/json/system/widget_types/image_map.json index a09794d68a..6103585dac 100644 --- a/application/src/main/data/json/system/widget_types/image_map.json +++ b/application/src/main/data/json/system/widget_types/image_map.json @@ -3,7 +3,7 @@ "name": "Image Map", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Show latest values and location of the entities on image map. Uses configurable background image and coordintates in range from 0 to 1.", + "description": "Displays the indoor or relative location of the entities on the image map. Useful to display floor maps, smart parking, etc. Entity coordinates are expected to be in the range from 0 to 1. Highly customizable via custom markers, marker tooltips, and widget actions. ", "descriptor": { "type": "latest", "sizeX": 8.5, diff --git a/application/src/main/data/json/system/widget_types/knob_control.json b/application/src/main/data/json/system/widget_types/knob_control.json index 83cf6d1c66..00443240ae 100644 --- a/application/src/main/data/json/system/widget_types/knob_control.json +++ b/application/src/main/data/json/system/widget_types/knob_control.json @@ -3,7 +3,7 @@ "name": "Knob Control", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Sends the command to device with specified value each time user changes the value. Uses 'setValue' and 'getValue' RPC calls by default. The name of the RPC calls is configurable in advanced settings.", + "description": "Sends the command to the device each time the user changes the value. Uses 'setValue' and 'getValue' RPC calls by default. The name of the RPC calls is configurable in advanced settings.", "descriptor": { "type": "rpc", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/label_widget.json b/application/src/main/data/json/system/widget_types/label_widget.json index 2a586faa3b..c4f0375b06 100644 --- a/application/src/main/data/json/system/widget_types/label_widget.json +++ b/application/src/main/data/json/system/widget_types/label_widget.json @@ -3,7 +3,7 @@ "name": "Label widget", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays static image and multiple values of selected attributes or timeseries keys on top of it. Position of the values on the image is configurable using advanced settings.", + "description": "Displays attributes or the latest telemetry values as an overlay on the configured image. The position of the values is configurable using appearance settings.", "descriptor": { "type": "latest", "sizeX": 4.5, diff --git a/application/src/main/data/json/system/widget_types/lcd_bar_gauge.json b/application/src/main/data/json/system/widget_types/lcd_bar_gauge.json index 2771b26f58..b2c8caa4c3 100644 --- a/application/src/main/data/json/system/widget_types/lcd_bar_gauge.json +++ b/application/src/main/data/json/system/widget_types/lcd_bar_gauge.json @@ -3,7 +3,7 @@ "name": "LCD bar gauge", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Preconfigured gauge to display any value reading as a bar. Allows to configure value range, gradient colors and other settings.", + "description": "Preconfigured gauge to display any value reading as a bar. Allows to configure value range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 2, diff --git a/application/src/main/data/json/system/widget_types/lcd_gauge.json b/application/src/main/data/json/system/widget_types/lcd_gauge.json index 8a2ec33b4d..bfe7a64a5f 100644 --- a/application/src/main/data/json/system/widget_types/lcd_gauge.json +++ b/application/src/main/data/json/system/widget_types/lcd_gauge.json @@ -3,7 +3,7 @@ "name": "LCD gauge", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Preconfigured gauge to display any value reading as an arc. Allows to configure value range, gradient colors and other settings.", + "description": "Preconfigured gauge to display any value reading as an arc. Allows to configure value range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/led_indicator.json b/application/src/main/data/json/system/widget_types/led_indicator.json index cdf0816ec3..3a8ceef5b4 100644 --- a/application/src/main/data/json/system/widget_types/led_indicator.json +++ b/application/src/main/data/json/system/widget_types/led_indicator.json @@ -3,7 +3,7 @@ "name": "Led indicator", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Visualize the state of the device. Fetches the value from device using RPC or using attribute subscription.", + "description": "Visualize the state of the device. Fetches the value from the device from the attribute or using RPC.", "descriptor": { "type": "rpc", "sizeX": 2.5, diff --git a/application/src/main/data/json/system/widget_types/markdown_html_card.json b/application/src/main/data/json/system/widget_types/markdown_html_card.json index 23507dc415..cdf5a6fd76 100644 --- a/application/src/main/data/json/system/widget_types/markdown_html_card.json +++ b/application/src/main/data/json/system/widget_types/markdown_html_card.json @@ -3,7 +3,7 @@ "name": "Markdown/HTML Card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Renders markdown/HTML using configurable pattern or function with applied attributes or timeseries values.", + "description": "Renders markdown/HTML using the configurable pattern or function with applied attributes or time-series values.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/markers_placement___google_maps.json b/application/src/main/data/json/system/widget_types/markers_placement___google_maps.json index 5728553792..65e4261d5f 100644 --- a/application/src/main/data/json/system/widget_types/markers_placement___google_maps.json +++ b/application/src/main/data/json/system/widget_types/markers_placement___google_maps.json @@ -3,7 +3,7 @@ "name": "Markers Placement - Google Maps", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Allows configuring location of the selected entities on the Google Map.", + "description": "Allows configuring the location of the selected entities on Google Maps. By default, store the location using 'latitude' and 'longitude' server-side attributes.", "descriptor": { "type": "latest", "sizeX": 8.5, diff --git a/application/src/main/data/json/system/widget_types/markers_placement___image_map.json b/application/src/main/data/json/system/widget_types/markers_placement___image_map.json index ef4a71b16a..68889552af 100644 --- a/application/src/main/data/json/system/widget_types/markers_placement___image_map.json +++ b/application/src/main/data/json/system/widget_types/markers_placement___image_map.json @@ -3,7 +3,7 @@ "name": "Markers Placement - Image Map", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Allows configuring location of the selected entities on the image map.", + "description": "Allows configuring the location of the selected entities on the Image map. By default, store the location using 'xPos' and 'yPos' server-side attributes with values of 0.0 to 1.0.", "descriptor": { "type": "latest", "sizeX": 8.5, diff --git a/application/src/main/data/json/system/widget_types/markers_placement___openstreetmap.json b/application/src/main/data/json/system/widget_types/markers_placement___openstreetmap.json index 4115c3f871..15069ec8e2 100644 --- a/application/src/main/data/json/system/widget_types/markers_placement___openstreetmap.json +++ b/application/src/main/data/json/system/widget_types/markers_placement___openstreetmap.json @@ -3,7 +3,7 @@ "name": "Markers Placement - OpenStreetMap", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Allows configuring location of the selected entities on the OpenStreetMap.", + "description": "Allows configuring the location of the selected entities on OpenStreetMap. By default, store the location using 'latitude' and 'longitude' server-side attributes.", "descriptor": { "type": "latest", "sizeX": 8.5, diff --git a/application/src/main/data/json/system/widget_types/mini_gauge.json b/application/src/main/data/json/system/widget_types/mini_gauge.json index 58fbf1c106..2789102c6c 100644 --- a/application/src/main/data/json/system/widget_types/mini_gauge.json +++ b/application/src/main/data/json/system/widget_types/mini_gauge.json @@ -3,7 +3,7 @@ "name": "Mini gauge", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAC2VBMVEV8s0J9s0N9tEN+tER+tEV+tUV/tEZ/tUZ/tUeAtUeAtUiAtkiBtkmCtkqCt0yDt0yEuE2EuE6FuE+FuU+GuVCGuVGHuVKIulOJu1SKu1aKu1eKvFeMvFiMvVmMvVqNvVmNvVuOvVyPvVyPvl2Qvl6Qvl+Qv1+Rv2CSv2GSwGKTwGOUwGWUwmWVwWWVwmaWwmeWwmiXwmmXw2mYw2qZxGyaxG2axW6bxW6bxW+cxW+cxnGex3Sfx3Sfx3WfyHWgyHaiyXeiyXmiyXqjyXqly32nzICnzYGozYGpzYOpzYSqzoWrzoasz4itz4itz4mt0Iiu0Imu0Yuv0Yyw0Y2y0o+y05Gz0pG01JO11JS21ZW21Za31Za31Ze31pi41pi51pm51pq615u615y82J682J+92Z+92aC+2aG+2aK/2aK/2qPB26XC26bC3KjD3KjE3KrE3anE3arF3avF3qzG3q3G3q7H3q3I36/J37DJ4K/K37HK4LHK4LPL4bPM4bbM4rXN4rfN47jO47jO47nP47nP47rP5LrQ5LvQ5LzR5L3R5b3S5b/T5b/U5sHV5sLV58PW58PW58TX6MXX6Mba6srb6srb6svc6szd683d687e7M/e7NDf7dDg7tPh7tPi7tTi79fj7tbj79fk79fk79jk8Njl8Nnl8Nrm8Nrm8Nvm8drm8dvn8dvn8dzn8tzo8t7p8t7p8t/p8uDp89/p8+Dq8+Dq8+Hr8+Hr8+Lr9OLs8+Ls9OPs9OTt9OTt9OXt9eTt9eXu9ebu9efv9efv9ufv9ujv9unv9urw9ujw9unw9+rx9+rx9+vy9+vy9+zy+Ozy+O3z+O3z+O70+O70+e/1+fD1+fH2+vH2+vL3+vP3+vT3+/T4+/T4+/X4/Pb5+/b5/Pb5/Pf6/Pf6/Pj7/Pj7/Pn7/fn7/fr8/fr8/fv8/vv9/vv9/vz9/v3+/v3+/v7+//7///7///8nclaiAAAAAWJLR0Ty27aOeAAACZhJREFUeNrdnfl7E0UYx1dQAUXF+74VvA9QUUFRAS/AA+9b8cL7wvu+8UQRRBFFEaex7dquNS21VpvYqjGVEgg5pBVoZZto0qb7F9hs6JE2Mzvv7DubyPcXWJ4ns/Nh53jnnXfeUQw56ty0Luj3/lBZpqrFhHx21xl7D99696PPueKBBQE5L1Twi0ysa/JopJ+WXTNK6afdTrvqvUihgyQiDVkMaS05XhmkIYfPfLetYEH+bqoig/XhoUpubT/pqdUFCKI3aSSXlo9V6Bpy2vMbCwokFakhFF2usLXTxV8WDEjMr9IwyKLhiqXGvpksBJBWTxGha6bCowPn6PkGafMQlr7aTeHTXk8k8gmi1xG23lG4te+TyXyBJBpdFhzkdgWgY5flBySoEkvNhIAoQy+NOA/SXkM4dIkC064vOgzS1eTi4SDTFKgu+NdJkFg14dO1YBBlSrtzIKESTg7yNBxEuTPsEEiqgXBr6Sg4yMjF3k4nQOJVBKDpAp/kGuKOyQdZr0I4yOLd4SCHEKJukA0ScRGYHh0KBhn6KSGuiFyQVQSs2UPAJK+mfxeQCeInAnoW3LpeMH/nlwfiI0JadP42MJDXM79rkAVST0S18IYTduTn2GrR5p/VywH5DVh7l1bXGIxEW1p1vbUlGvlm3oNXTtxnKw6Q/XqL8MkAAfUPzRfVu3KYaPovr112jNU4dl5fOX58EP7xSm2IMFd7//748MTtWK6Vef0KC2CDRHgxakIc9kXq13uPpYJMzCovjAuynm8eLA9yr7wTS6fl/iy7LszuaRswQWJcdkkFzGztqrooB8qQxwe21DgeSMrNgVEZhZus30/beuDQe8vgglNoIBx2u7pGbGH3+anZZtatOcr2YoGErDkahL1SiZfG9HEc8UrO0sM4IO2W60G3LU/0Xy+fu396atnzrMeW5y6/JIYB0mW5kBJZ0GV1QR/54oP5S1j9L4UA0mSBUYKw+xS2+ugB+yC6xQzi1g0E6Rbjoku3DWLh+KnpwNmn6fiB/Z5quyBBdvmelIGkFNutT9baA0mwp3SfgSi2ea0mbIGw14QrDVStZL7MbweE3dN9BrJ8Nvo7G4S5j+Mx0OUVfx8TpI05XqXwQVLMsatNGKSWNX90GBLUwZpP6kRBWlnzuW5IkV4i+ElYIKyRPWxIEmtN7RUDiTH2zxsMaWIsflxxIRDGBOXulAfSWSE0l9BBOhmT+kZDojbS31vaKQASykvDsmhcEQGQamGzx64YBl4NHEQXN0Rtay393e1gEPrCsNKQLjd8qUgF0ahlReWD0CcTNxSEbmZphgP6jvp6HQjS5PycnuWNALctGgjVB1TW5QSIUQ5dvFNAEtT/kaAjHMYa2vuLkiAQam9zJZwBSbiAc6ICnFzrgBXSZk8+8qDjJt8NHrNrgQtsBTj4wsbeyrN7/dNn/4w0ArshINQuooLWt3NH9tsx2GEBbNVbSqtDAgCyDsVcnJsdvLHdRyAS6q5+MwCkCW59Dta3me+x7YTpZw4z/7ZHCGUqWQUAobqBIAGHk8zaT2hM/8dMNP8+AwISh7mFFFBfrwBUpMis+7iMw6D9JHOjE9ThNZCNlBOkE8O3eLW5t1my+anMDHe4DcPvWJTiBtmEMfiOTtd8fO/j5PTjYSgDsM4Nsg68rMlhPptD1u29z8+ZHwgyWOigYSsnCG1TxAUwGFeYXWRu7/PX5vOHkJnEBTH3FIgjCLIUWW5WfH5fQzGfn8Ho7X5uEA+CoaWZFX+rz1gwn++DgPwEcTjmBKH5xBsBtWg0K35/3z+YIWezICC0hlHLDVKJsBb5x5zXpwwAuQ4CQuuqVdwgZQgGinF6uuIjVvc8vm1+oesxjJQybhCag+xPSDXuMWt+YU+329N8nA0pIUozwblBaBZ0C6hhZIKxrvsn/bAow6HMgZTQYhukmFJCK8gOvzFT94NvnHPTuB5T/mVIAbSNpmJuEKhPiTIzHzk4Pu59UAG0ejgMYjQd1S+ibJb5h+YsCE7T6nZGz+iJVx798SfpP4bFnW1aKJ09M5DfNv6AXcZMfSNuPJIGOcVwtrOjDL8DNCENcofh7PCLMiEOcFOZ4aTfojiAyx01UQZoaprjZNhv7JsoGEZjth4eYNQ7ZDR6kfylvQ6RWeZycQLwZzQzvt7RhVW/QXhOJn3Fzl7gD+0vrDCWupll4s1XTB29eS4ZsRD4Y4SlLobzwdQL/ZJULIB+SQTnA4o7KBvklBXgJongDkJx0PUHOfFtgSg1BAcd0FvJBBlx2JSHVggNEjC/bW4QD4YTO20tBVoMUaE4sVG2FWwqDNuglrnRY08oGz1JnK03O6JvvSUBIEZFHgNRLAZf0GYo3va0uN2Psz1dwAEDURDIFhPCke+gmq4ypKCafIc5hdDCnPT8Bp5VoAWeMYr6f4UCMtqWWz4IZnBmPsNlGSfUYmCQLSaAmREfKdt0rMcNKc9bkP8Gxhm+lAAI69jFdxKPXXRoyMcujLgrL42rHv0gTOEdTWJlrmGBtG0ph8WY5yklHd+rkHF8Lw8HKmvkHKhk9hIZi0WPpCOuW86hY4sz5sjHwP+QdwzcSBbOwfykLRDWua3/VaoE55JX1EhOXuFUOpEK6elEjAD7FaQEwVoJOZDgxehaYfES4rXZvDot0yZybLBwJEGKWSZBqthgh2O9ZlV+KUoSJOZasdesF09LxZH9kWdXJt+JwkIcSeG4Ziu+1G2V1m8jbgF/V4QnJ1wVXuo2I86VTE8Lg/zCXSGNp1TMZHrdDgG+9IZla/jTG64p4yqymNPRISHhJMdgnPrTw5sAmXf7lTsFaICXhJTWh5mtIR6uL+UubLWBDQJNyhrRc/TRlB7xaZBy+CPEAGlyoWmLu9Pk+oPhnjS54aC/ToMm1JaSJtdO4mJBQbxnoFTSvzvLAVq2wZJ7r3SSAxZBCUy3HnCOY7UhE8SIFjuDITsBfvccrzrBoYI3LmRfEiGmSgcuiTBzqMoedgV8M0IXqYRLZGKUCkW3Sb7aRkBVDl5t072WCLgkjVaiF1hKvv4JqmphL5mNC7nWog/Eqo1QBDtXpHWsRG1fLp+dy95sXlrnwePw2PO92r1GcBMSSo3dq1DtX+zY5rXdwFxe+ze6Yly1Gffb6vaqP45QCemXn1qaVWtxwkHQrqNtX+WGU7gDMaz3Y14QrAeqi/ghiqoDmNETyFc2JyM+rg/j9kWTuG+WcIl2snmVR6N+miLNE2hO4r9VAshmV1xz97XmtVXlqtpt85eoanlVrdcfbNZlHXf4D6acttknYE+FAAAAAElFTkSuQmCC", - "description": "Preconfigured gauge to display any value reading as a circle. Allows to configure value range, gradient colors and other settings.", + "description": "Preconfigured gauge to display any value reading as a circle. Allows to configure value range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 2, diff --git a/application/src/main/data/json/system/widget_types/navigation_card.json b/application/src/main/data/json/system/widget_types/navigation_card.json index 24f56676ee..ab3811c47c 100644 --- a/application/src/main/data/json/system/widget_types/navigation_card.json +++ b/application/src/main/data/json/system/widget_types/navigation_card.json @@ -3,7 +3,7 @@ "name": "Navigation card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Allows to open specific page using relative path defined in the advanced settings of the widget.", + "description": "Displays the link to the platform page as a button. The link is configured as the relative path in the appearance settings of the widget.", "descriptor": { "type": "static", "sizeX": 2.5, diff --git a/application/src/main/data/json/system/widget_types/navigation_cards.json b/application/src/main/data/json/system/widget_types/navigation_cards.json index 4e520070f8..52be3671b8 100644 --- a/application/src/main/data/json/system/widget_types/navigation_cards.json +++ b/application/src/main/data/json/system/widget_types/navigation_cards.json @@ -3,7 +3,7 @@ "name": "Navigation cards", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Allows to open one or more specific pages using filter defined in the advanced settings of the widget.", + "description": "Displays multiple links to the platform page as separate buttons. The link is configured as the relative path in the appearance settings of the widget.", "descriptor": { "type": "static", "sizeX": 7, diff --git a/application/src/main/data/json/system/widget_types/neon_gauge.json b/application/src/main/data/json/system/widget_types/neon_gauge.json index e6bfb0ce54..4f595392b6 100644 --- a/application/src/main/data/json/system/widget_types/neon_gauge.json +++ b/application/src/main/data/json/system/widget_types/neon_gauge.json @@ -3,7 +3,7 @@ "name": "Neon gauge", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Preconfigured gauge to display any value reading as an arc. Allows to configure value range, gradient colors and other settings.", + "description": "Preconfigured gauge to display any value reading as an arc. Allows to configure value range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 5, diff --git a/application/src/main/data/json/system/widget_types/openstreet_map.json b/application/src/main/data/json/system/widget_types/openstreet_map.json index 2f3ba00d1f..35cb9246d2 100644 --- a/application/src/main/data/json/system/widget_types/openstreet_map.json +++ b/application/src/main/data/json/system/widget_types/openstreet_map.json @@ -3,7 +3,7 @@ "name": "OpenStreet Map", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Show latest values and location of the entities on OpenStreetMap.", + "description": "Displays the location of the entities on OpenStreetMap. Allows to choose among existing tile providers or configure own server. Some providers require additional licenses. Highly customizable via custom markers, marker tooltips, and widget actions. ", "descriptor": { "type": "latest", "sizeX": 8.5, diff --git a/application/src/main/data/json/system/widget_types/persistent_rpc_table.json b/application/src/main/data/json/system/widget_types/persistent_rpc_table.json index 284dbd8c34..1b7f9aa965 100644 --- a/application/src/main/data/json/system/widget_types/persistent_rpc_table.json +++ b/application/src/main/data/json/system/widget_types/persistent_rpc_table.json @@ -3,7 +3,7 @@ "name": "Persistent RPC table", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAACRlBMVEX////g4OD7/PshISFaWlpNTU1GRkZoaGj39/f///5Mr1CJiYmDg4P19fU6Ojo5OTnNzc39/f3i4uLR0dGXl5enp6dISEhAQEC9vb21tbXn5+fk8+TX19d0dHQ9PT0kJCRRUVFDQ0MoKCju7u7p6emPj49cXFxKSkr09PTr6+vGxsbCwsKcnJySkpL5+fnw8PDd3d3C5MSGhobz8/Py8vKzs7Otra1sbGwxMTEsLCwqKirZ2dnAwMChoaFTU1P/pQH//fz29vbS0tL/Pj76+vrk5OTHx8e5ubn/eXlUVFSxsbGenp56enpubm5PT082Njbe8d+vr6+rq6ukpKT/h4dhYWFTs1fm5ua4uLh8fHxxcXFkZGReXl4zMzMuLi4iIiLt7e3a79v/2Ni7u7uUlJRRsVT5/fqsrKz/q6ug1KKZmZmBgYF1wXj/z3b/zG9lumj/vkT/syf/9N/U1NTQ69HLy8uMjIx+fn54eHhXV1f/wU7/tS3/qxH/+vr/+/Hr9uv/6en/4eHJycmy3bT/3qD/xFj/V1f3/Pfb29v/7s7/5ri3t7f/4Kil16f/25qX0Zn/1Yh+xoH/Vlb/qAj0+vTK58u54Lur2q2Iyotwv3P/YGBatl7/RUX/uDb/9PT/3t7X7dj/04H/cHD/rRb/1NTQ0ND/vr7/sbH/oaH/mJiNzJBqvW3/yWT/x17y+fP/9+j/8df/6sP/trb/4ar/2JD/hIT/fn7/ZmZhuWT/Tk7/zc3/ycn/ubn/5LGd05//YmL/XV3/paXAgy0RAAALBUlEQVR42uza708SARzH8Q93x90xQH4EHLCDkx/ySwSWivwUZWYDNKeMZRbSVpubjpa6/D0fNNvSWmvzsQ9c61mtWj3tf+uubKmVIbV1unvvdjeOg/HafdndBgDhN6sueGb/CECY4wQueETcTMAfxyUo7of5wp8PKcIMFS5FKgUisxSI3FIgckuByC0FIrdOQrJqtZqJoFvc3I4AiduGG/0Qe2zTG9XqUpcewInDFwD41ONorVCRwNlN3zBQV+BbxlEJZ3uQK+RUbsxr7idzOZ3AhwwDxqowCsBO9naTjslgiQBOHC74gAppQ2tFyF6cWVaoLK+lQslZHEXp2oUkwJKOfpIAJqJzmRCwWv0OCcMpXD8FseWBoM0GdtW9XgRPdTB+TNFcl4booulJEFc5hulH9w1uxQRkPWSw3MlioBKdCXDzwCRN53G8bvIafBaHWxjE6LrbxerSE5ZJBqDsmhXOljwPpFs1LyREiOaxMK2lIfUDAm7lFOS+Grx3xQYtXdS6idKMitL5Gw5jPfIsyFeEvmTG7vDmnZmKcaIMxMokHxbszsYjXT1iJY1FwdHtNeJY7Hp6IQF9NG0eoSuJVMXf6fJFOWA2mROWy6nwOSAk2ZhGv7jx6jQ/Q2jtKUg2w+tcXTZ4AhYtaR5zW1SIdVCTvcCjnjHyqYsB3HmrYLHYxo5Gq7Zm7dDoKMBjWZmwWAwWHI9wrDe0kEYrXNF26KTR+gZJZGbsI+caLX9mSoSE4yYgP0sA1es/IHFv8hRENbNaH9Xa4Ka0Wq3T5BjwWuGrDKZUjtTUHPl0ZkaCVL3ik+UjyGS9dhUSJNijnRD353Cs5QjgIM0iRG+4lQseg0DV5aGHzwPBVcOw9B0Rc2Z6WKO3/ztExd/m9KcgiYjAaUTIzGBvOE+UnmGcMXaGY7NzOhubJLOVCWcineeFe0Q5AeAReQ36TKMIHRfnhZzdWySqJ8bFmnmNuYa57B1+So463Qu448Kc17csJKcYNktmzwXxpeePILB3kJkVfIeQs8w1nIZouPsQIWFK8K6a5uqzHY8IVyZD9WUNAtW4PlxrcLN5VNOChwcQcpNOjHOAzmBozGiw4hU6b+JYxNUMOVvBzRRpGmhM0LeRb6zF6YYtlfRRae+aqf0Lok+DFtOzEItDjNAD0PQCMBVDd712QOPD14he4E6XCKFMeogRcZyK8H1/h5AJkp0A+iDFxv7jlf1pXV2vETjWsC3llCAALtQtCvuax4mIe6IDiSKACwX5bQpEgVyUFIjcUiByS4HILQUity4T5JJ0ic4ILkUKRG4pELmlQOSWApFbCkRuKRC5pUDkVguQlatYZvCr1mxSEfyz3m5K7Rxu4KyWltqCPE4xIJz4VURsVB2LmfDP2t1rFvb2lpZ2cVZPnrQIMXV5OnPQr9HUMhBTzzPIutCVw/A6TmdUA9MWmGsAc7PXRVM8xMbNmLeiuArHerAHqzn4qVa1zwtDwMs3ePLgYPPj28W3Q9g7WDzUYGdz8XDo3cF7HD443NpqtgZJ3hm5ZgitLmheu/XQRp8xuNIJVxL69C8hqiCiad7nhkuLxxwLQGeFeh33LfpAnPXw1XFY13AeyIOHWHy4+6TwYq+wt7T/4sPW5w+F5x9evVgq7OLNxruNjXetQQbKQII1mIHAKD9I/AkCT5iK9kzfQsoPlF4HAtHIQHa85A9k4c9ruVw8xdYi54a8xM4W8OrFp/2XLxcfNA+kvd8grY/W+DOIGfxA7V6JGgu458+G6KpU3+CCHak+gIrcvasfcff0z1dphD2OYikHZrKDaB+y1Ww2PzYfAs2Dc0CGpaWyhtht/Xge/nqYLxbnqYQI0VlQ/A2kux5FjRsGMwVnPQ4xxtCrMtzC6CBCHjumJxbQNmS3sDe0s/R5//32YnO7sLN9sIG3DzV/gpgN0kdjmRvBKpzrJa4MsW+jxXfcqP0GMpJWwVoDrg2WOAekpEdBO1iKDqrziKWM7UPwaX9/8z2a+/sb23hQ2NrcwMfCwz9BYPq6gCWOfqw/yjgIECH8KekVJ+uD2F1ag79oaPvHenvoaN3elZ0PjKH97Gor/nVtQvz3Ymi/7O8GS7nXUiAXIQUitxSI3FIgckuByC0FIreUPwx8ae/Of5KMAziOf3gGyIMKWuCRYpApXlgQZqerPCIzrwzPNi9Qko0fwo4fmAdbtjXmdB4oTJ1znps/uHlV6/jP+j5BZk0MTPKRnvcvXL/wgoft2T5jD9viIGyLg7AtDsK2OAjb4iBsi4Owrf8Kkp2Kk2lgFnv1LxwZUitQa8CUXIgApSsk6i4cX7PTpDp8b+Mz6gzYq/vNUSGpKn2+suxwCD9DxBM24NhqL9748MH/0c8s/D3kmbCyHJd4QFMN4irVTYVQ9CTqM6OFT/TY3820eKAhEzqNUpiDkhhh5mUApcTdUgrZ/XydUll25YEINZ1BQwYAOFa+fF7EooGB9G+NGvqxsP3FcARIQVFsduJzIDmaTwbaHKqxEJW6bP35JDrqMfaX3AyAJ0GUQtShhKaCvvUApLT01OsPoT6TFE3HqcC/j8xbQUOWl5b6P27PLnsd3aMMZN4wu2VwjG62zx8B8ugqoNEwEMG5m0JySyBnob8GaDKwv/IoAKVViLqPcxIIGmWyC2WZmWcrkjNu89OFQJws5gZqH+mlVNCQeYOhHe+X64r7v0Nmiuu+bnoHyBfVfRRIMiDT5d8FojufCw6BxAkB5BT5IQkZcrk8q7WV6mgsii2S61DAL+u9gayntY0I6dDa2P24tAfZWllZmS3uDw3i39kfF9JUUVIHn4ZCfrfqDDoDQShVAUQtt/2QCg2oXJBipc2QSXPQmIfeC8CjqsHQIHXbjh8QTNfdGVh07C47NkOB+Hd2SiEQxiBekVAZlY9yqaAlEARvBSppDOWHtPKVwk4wtdSCd70E9yTq5gvZSJLEhwZp3y2eL37vg7RPe73dWPR6Q/uN7O3sIpDIwUWiRDgkfclvf87fX3wWSF26kJf1GfxsxsE84zj5U5SMtFIc3Ck718oN4Dh1kIPjIBzktMRB2BYHYVschG1xELYVSZAIKYK+EUREHIRtcRC2xUHYFgdhWxyEbXEQthUERNSLE8lsNx/66lAIkDxVZS7qJQi8s0sTunB8pUxNWS1jPx6IU8Z3aASoT1wdPGQwIYsnvUQg/2pnbxNPaK1r5j3ImB1/A6mpUNfwKTR0dmYAhR0E8vbJxfyXwhYeENadnUBSMGacwJzVNmwmELvVbLVDOwL7lM1F262rq7TLNjWOMbdtNQhInppX0lKG5ls1CiBKXi+pVw3iRQ9N3jLCu7MzEFiHxzyuNpuTQLRGjAxj5FOf0Tnn0WrFw/YJz5zTODZsm3MFA9EBV1/GplHpaTGKqo76ayo5IOyRyW7QCO/O7oeMi12TVrcPot0ZMrVNmCYn14a1JmBkanJSbF+bRF+QkNjE8hggvSC16Gb9+VeCfCRqyIpOIbw7OwMxe5xa8SeLZcIHGTK6bLTTaLFYtD4IuVdtczKQP+7sDARNifcA0I8foF6Cih40PfOt6OHc2QmkrdrtWe8zTdDjbT4I3EYLqsXj8doUBuKy9Q05qVWrWUsgf9jZfZBcFYACtaKVgYgE7y6+VqrygLDu7AQiNo6kAFqPaWfODxln3rHTaFqrZiBDbpPJbe6ziUd8kEN39gDFiv7Vzk5ap/FL9Dr8mYcAAuJ2dm5nPzgOwkFOSxyEbXEQthVBkIi5QHDEXLK5JFIuoh0ZlzWn8A1wbXgNYiqI0gAAAABJRU5ErkJggg==", - "description": "Displays Persistent RPC requests that match selected alias and filter with the ability of pagination and sending persistent RPC requests.", + "description": "Displays Persistent RPC requests based on entity alias and optional filter with the ability of pagination. It also allows to resend or delete selected RPC requests.", "descriptor": { "type": "rpc", "sizeX": 7.5, diff --git a/application/src/main/data/json/system/widget_types/photo_camera_input.json b/application/src/main/data/json/system/widget_types/photo_camera_input.json index ddc5744f44..901d992009 100644 --- a/application/src/main/data/json/system/widget_types/photo_camera_input.json +++ b/application/src/main/data/json/system/widget_types/photo_camera_input.json @@ -3,7 +3,7 @@ "name": "Photo camera input", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Simple form to take webcamera image or upload photo.", + "description": "A simple form to take web camera images or upload photos. The taken picture is stored in a configurable format converted to Base64 data as the target entity's server-side attribute or telemetry value. ", "descriptor": { "type": "latest", "sizeX": 7.5, diff --git a/application/src/main/data/json/system/widget_types/pie___chart_js.json b/application/src/main/data/json/system/widget_types/pie___chart_js.json index 1778e4df8b..f54c4f9702 100644 --- a/application/src/main/data/json/system/widget_types/pie___chart_js.json +++ b/application/src/main/data/json/system/widget_types/pie___chart_js.json @@ -3,7 +3,7 @@ "name": "Pie - Chart.js", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays latest values of the attributes or timeseries data for multiple entities in a pie chart. Supports numeric values only.", + "description": "Displays the latest values of the attributes or time series data for multiple entities in a pie chart. Supports numeric values only.", "descriptor": { "type": "latest", "sizeX": 8, diff --git a/application/src/main/data/json/system/widget_types/pie___flot.json b/application/src/main/data/json/system/widget_types/pie___flot.json index ffea136698..a50993639e 100644 --- a/application/src/main/data/json/system/widget_types/pie___flot.json +++ b/application/src/main/data/json/system/widget_types/pie___flot.json @@ -3,7 +3,7 @@ "name": "Pie - Flot", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAIAAADGnbT+AAAABmJLR0QA/wD/AP+gvaeTAAAZTElEQVR42u2deXwUVbbH/e+tM/Pe5/Oe82beNjo6znvjvFFnRkFxF1f2RREQWQQEEZFNFDUCOjAoCKjsq+xG1hBCWAJkJSEJCQGyJyQkZN+7urq7lvt+1RU61dWd0Emqqm911/2cPzq9pdP1zT3nnnvO795BrGENHcYd1ldgDQss3YYoiDcr+NQkLvqQc/sGx5eL2Q9n2aePt49/lRk1gBn0jNeTk+4kKb8iab8jGX1JzkCS9xYp/YxUriMNsYQtJUSwvs4wBovjhGtXXAf2OZZF2KeNs738hO3Zh7swr9ee/5uuLOFnJP1PJG8iqVxLWtOIwFpghfrgef7yJefWdex7k20v9euapJ6DpbL4f5AmtpKFpPFMWEEW+mCJba3ciShHxAfwaN2CSRuwvCazfyJXhpHq3YRrssAyLU92O3fmBPvJHNuL/XrMk8ZgdUxj/0hyBpPaH0J4DgtBsISyUuemb5khz/aeJ73A8ljSz0nBdNKWaYFFdQjFnY6xz5igIU+6g+WxrKdJbSQRXRZYNA2Xkzt53P7mCD2QMggs2S7cI6UtQsI/mhwsp9MVuZsZ/oJ+SBkKlmwp/00qVhPBboEVlEhKwFqPeX2Q3kgFAaz22esucnMzEXkLLAOjqUvp9kmvG4NU0MCSLeMR0nTeAkv/JEJDvWPZZ7bnHjGSqmCCJdnfkrwJxFVrgaUTUyJ39AAz+FmDkaIALDkx8QtStRXfggWWxhMVu3B2UJCiBSzZsOftvGmBpc1AdkrbbKeJwZKnLqTsLbB6NRwOVLAEFynqwJIN1RMCY4HVI/dXU4WKKBqoohEsacHYh7AlFljdTChcSApWnG4asOStxsaTFlgB79Ac+sHWvw89VNELllQo8fek4jsLrNvnFFw7NlGFFO1gyVY0l7YcPU1guZxsxPxuXW/7lDH2ccP9PsQMec6x8i+OpREd9wx73rlulVRRM3pQqIEFuzaWquIIasByONC/EOBlZka+BESE4kLpdcsi/D6Hi4mSZsD6uvaXDHxKrLop5Ofy2RmoKWVee0W6//m+zIgXQwQsKcs1mJ6tazrAcrDsvBkBUoVnYgdanuE6A4ud+w68qhIs9qNZuEeqTu7fR2xscKxahjudG9YIuVdCByxYdn/C2yywblE1a0rgXol9f6pr/0601rj2bPcP1suPCxU3hMI8L7A+nYceL0xRuC1WVznXfs2MGUxYO/v+2yEFlsTWCzRUdAUbLI7DXNKzgLozsFz7vseUhhyYlysc+bLIMPCPgFJ6dMoYZDTwY+jEWEq7/AoRHGEMlig4Pl/Y45WaX7DsU8aiRhkNgzINHrCkh2ZM4M7EcvFxQNmx+EOxuZEZ2j80wZJi+dHBbZ0NJljONct7kwLwA1b/PgjPxdpqhOq+YHXE/oOeERvq5PIbrAMCyZmZDyxY8QfhCJaUBe1dbskXLOf61e57PsOmNUwui5A2sF941OuFRyL5zIv2qW9g16i9dGLm5BAEC4Zu7LACi8/OtL3wmOZgiS3Nfn8dInelQ8RyAZ0XfGYanxzPDHyaO3Uc81xogoW8fJD2fIIAltjUiOxl77Phfmasb1cg/+kx6XcxNtzoSKI+31coKoDsh0RhVaVzw2rccHy5RLS1hSZYcpmNJFUSHjOWkH8NSQHNwfKlQRVjIQcmlBbLvdHwhnziOUycXPRhoSg/ZMGCpf/Z+Bqb4AXvrN0+a6rBYEl2q+Me+Qg8Kj2npZmdMy2UwYLlTwmrdIPo2rsjmLvL/ftA/koV2ocmWLC6A6EJVp29flHKkjp7ndotFubZXnmKwoqGUAMLxVuOG6EGlkjEiOTFAw4Nee3Y6MTKJB+3yLJzpltgGZGRN6rPxyCwTpSeBFWyDTw0dEvONk7g1W4xco8Flu5WtSN0wGpgG1+NGu0BS7Y55+bXMDVqt1h+3Tb4GQssHS35F8b0vhoB1vKLK1RUyQbaEioS/RRmBVxCY4HVE8sdHwpgZdde9kuVxy1uyN7kElxqt9jrDR8LrK6sOd7cYAmiMP30zC7Akm3W2Tk3bVXq194otw3pb4GlT+vYw3rXPugLVuz1k7elSraRUa+fv+Hzb+RyOT6db4Gli1XvMitYTt45/sRbAYIl28r01Q5eXaEGtb6QAiv+J+TKSHJ9CSmaRzL7eVVQQY/U16CEKwXdvyTF8yVZ79R7NdLfulvXQlMdwYosONAtqmR7N25WRVuF2i1WVtj0l+0zAqzkfydtWV7vVrGm/SHmmr8EIC+JeCf+C2Gvk7YMKTaClDc02WQF+ZT/7NWH0bMhUS+wMPGMOf5mD8CCjYgaFVd+zo9bXLTA9GBV73TDtJok/iu5+EB7KhwnDMhTSOpvOyz7RSmZWX+kvf0Gt3HUCspgnDWkYIa7ju9D6eSLXmpS6tbVoxdYh4uO9owqpVtkefVczSecNTdYrgapGl32brDy5dIb5k/utEYv61npNlwnYm1MUbjNlkntqam/kbpxsp6jthJQF7A4gXszZlIvwYJhRVneWq52DjXV9tcGmBWspH+TJh5VHhyTk9pj/lIqdIH+u2dq4VulJ99YITlHlME0xEg/9j7SQsQmcqYBC46s91TJNuzoyKNFx3zI5RxLFpp+VZj5qDR7MXmSg1M9hNAeAwqRHU/uR2r2kbqDkltEmO+qk3LoFFc96ALW7HPztAJLthXpX7NcMN2i9mAhikc8LjrJpSd8jtz5Z4kbKPdh/ehnzruTOKskfSxok6b8lx8oe3B2gSnAym3I05Yq2aaeeqe0RV1iK9bV2kcPMh9YWOW1pkvxuMSHz6OF70m/pTSik6hoPWk6K6kpO9xBgrOaXHqqt59HhzNXtAdrVcY3eoAlu8WY0hPq38fzjuWLzQRWwk9JU5z0Pshj+W1/gJwaFmsIs/x4z35S7JV2v/QO9cekpWXNHikN0cuPVDiTdrCwjkMOXSewZPviwjKbSy1PwKcl6yqppRlY4EaOacq+6FQ0BgNHB/g9+tCWTa4vdq8NS0nxgvaaY6651zWAd2qed9AYrNNlZ3SlSraJsZPzGvLVbrGh3j52KO1gVax25+TqSPmXHVbykcIrZUguEikuP2V6LxHmqjTh4Ta8IVJcCMKg0Y2Ma++9s9aCuRqD9XFShAFgwYYeGXm0+JivW3SuXEo1WC0X/M3zpbf0PF6UfkQnYBdutN0nPtauy43EWPbzWkggDaEXrFZn6+DDw40BS7YlF/7S6mxT7/9kZdj6Pxr6m9DwqkjWe3KtvY/8+BZKwQq8lkFDm3Bi8rWGXLVbbG3R9rCdEKxu8DXkyegEC004xoMFG3Jk+KHCI6KqTUAQeik6EnZgSQI19IGFKtARR0cFBSzZFqd8AV+sDroyL2riFsMCLGTXtFMx1QysrNrsIFIl2/gTk67WX/Nxi60QzbLACmxtkUIdWNuu7Ag6WDCsHiLzD/hxixvXWGDd3q5/Th1YaOeiASzZFiZ+2sg2qVeL13IC6aYPa7CynqELLFQhDzkygh6wYCgzvFSTpXaLba32qWMtsDpPOvxM2henB6ycuitUUSXboMPD9uTuQ6eQN1yic9sGC6xOTdodpwasAwWHKASrK7eYd7VbAl1hBFblOorA+ip9JbVgwcYeH3+pVu0WCcPY351ogeVzEuIkisAKpCs1uIaW642XN/sqkTgDOxMqjMBCZwclYKHCHblvysGSbUH8wnq2Xu0WC3JtrzxpgdVRv6pFk7QGYKEN0BRUyTY6etzFap/4FLqVs9+2wGo3NALRABauk4nAkt0i0rm86CPQtX+nBZZkDbFUgIW6KHOBJdu88wtq7WqlKKGkyDbg6XAH6+YWKsDakrPdjGDJupUJFT66ldIZd9PDGiy5+SzoYKE3y6RgKVaLnNotHtwfvmDlT6UCLMPKkfWz98/NrWaq1W7xRpnt1gka4QVWziAqwII+jNnBcrvFMUmVyT6boE72o/fDDiz00NIA1qTYqd2v+Rzx+YWlu3P3brq81bdtesaZ9+Cevr+6a1HK5wMPD1VmCjbnbN1+5Xt06eiEF5RIsKGudotHIsMLrIt/oAIsXO9u1h2MK24uUb6DUpoGSt2iKCq3t+W6CbQrQmW5sKkI96CvUBYdQfUVtmu0ZWtm3OzKtptd/cEhD1bKr6gACw3K3bpyp8vi3DAdgWrytNPvymdVQIYUD70RMx7ppRZnyztnZo46Nja9Gk12ZG3Wejz0WfISlO9hHYeahSZH03dZ63Dn1ivb8xsLNJ+33LqVCeELFmqUaQBL6a0CMVSmo0DeswuEgk9yqzH/o8RPiCRWc1Z+CK4QP6KtHrfhOjGTye1lNUwtfOjE2ClovF6QsFA/t+irWykN1O+iWRRVAGhKhpTjleHk0uPkwq87mv5CYVfHhGBhKsLE4/nxVNlpvAmKW3B78slpmJYKGguRBZAnJE/R87iYCXbOjiejRAclVlgxIOOPH3WN6BHt3Wit6MZ3AVVPKC+0JJOGaKlNHgkhibxhkqILRPpk5TRTlPtRAdahoT2+crPOzsXshYsHByffsz9fipTh4HDkDtwibnjEIFD9DGVlrN3gFpelLW92tLwe/Ybeq8W/pn2lYVMU4RolrVGQV/sjqfhWEquF4AzIQ00BIpvzf0dHK+xPTDljKaN4xONITs49/4HnThADKSx4PflUgeiS477d1ZjwcIwKXBWYRljmgVJzmxn3vnpLUdcBHTaokrakkvoo94T3uSRpBJ3IS09KEx48lEEz1k+pAKtn7YSYhwqaCuH4wIdyRQY3h/vBHHhCGyreH1kJ1WtBGw68wJPlzT4UiM6LX6A5VXC+qtTDyjTnq4fsC8461mc6owq5tJt8YaNQw4iMi/DGHKoFVwvVNQiHeFxt0Ryp0bTd1WrUbg89SxrAAgQ9kPRAHyJeixhcef/e3P24c3Xmt55oDD+WtZapTndCTD311HS8Q2pVGpaWUKZEGkJbqoZHvYrFqfLP3HPVddfati7s7rVt/Xbaxh9jP09y7MhxnSrlMqv50mahkRUdHA7pMIQ8HMBku0Iaz0i6WTdWSdLwODkHMjXpD5Hk/whYAv4uKsDC6qy7PQ7ykYV78/arHkISC/fvurZH/nHa6RnEWyIQ01hJc+muXOkJ2ISR979XZ35jczFadmEcGlZp80plxV3n7lnf1jVYgdgTu5jJMezSFMfeq64TJRJ5ZS1ik0N08kaRJwd5IK96d0eQB/IuPugO8txgQdiNBrDkFFTghgwWXoXQGycMeExe+k05NQ0ZBBiYW5+9EXMVnolTnDyv/TgxAndiwsNteMOUmxeQPoUYCTKuGoKFHKzyD7xUzf/vRg2ouq09tLXt9cP2j887NmS6oou41Eq+qFGok1ytaJSrZaRVrS2bCrAikhd167JhBvJ9E0w/8qNIZV1vaa9gRIYdGzuqVadMlbxz3MA2ELd80kcJn2hF1YnrXmVuZS3Cn7fZDKAqEHvQTd4n8Y5v0p2H8rkLlVKQV2cX25wiJxCqhgZgKaNvDSulxsVMDMSrQq9Bw4p7TJzKPw3h0dO7GUqouq3dt77tlf3MO7Hs12nOfddc58v4q3VCRavY6pRcrWg6sLArHALVDVKmI3W5UvSB5cjwg3azUBWI/X5z24DIjiDvXBl/rV7wBHkibWBFl8SEAFWzz81X9kwjlH47hg0lqgKxR7YzWNVevMlTARa2is1O1fiYt1Qpq0UJjnCjymMplXSAZa72L7+p2jaXl5DpxkuusKUKVsuIVICFTQ/PSs10hpRVNVPj5dmLuF+vC1+q/m+zjZYYy9TVydjkVv4h2KX57Ya2cJ6uhh6wUwQW5aIgnVl8RaLyr0BO6MEttnCmCjYvzkERWEeKokxH1Z7cvco/AXvJj+9kwpwq2O6rLorAKm4uNhdVqzLWKD+/nSNwARZVsNx6gSKwkAFC+5RZqPowYaGyXwPbcJOPsxZSsPs32bTalNRM3BZVnaagasqp6aq+Z9RXWUjJNuaoZmeAaQYWKhTop2pU9FgUzis/9pp0p8WTx1amOqkDCwfa0J6yOjKs3l0N0bHmKODutnhSWEY1Tx1Y8C/BPfLktoYKQeUHTq7gf7PegqnD/rjNpmHVl5aHNOHsU2qpSqvyUvHLbxD+EPYpK5XNPcPSVd3gGWfK4+ikCi38ys9ZZRMf/d6iSm3HizhKwTL+IMxADCXO3h9SfGGflQhVG6ICfDOUgtWDMmW9DU36yto91O++cdRKhPqxt0+w2pKgMVhny8/TQ9XMuFnKdlPwNeeMlQj1b2hWoxosNNiMiKJibYhDmvBhlJ/trylWyqrT9aDmvRgag0WkdtNvgk4V6sMgdaT8VHuvuiyAOrPFiQ7NMdAeLBo2pMtby72Wq2g3XWcB1KmhmccEYGGg4y+IVKGRVflhcmqF322ykgudGhoVKW3/8h3Q7AsWVcdLTig/STlN7aZ0GqZz04CFQ7b005/twjZd3qJqN312j5Wy6srw/eikGaELWMRbr9YY+wJakoqUlYMnIw5aKavb2F6N6kWNAwviad1VU+5du+k8Vbvp9FgrZXUb67PDxnLEZGBhHCw06DxfSHOr2k2XJBpRu4d+npkn2VUXnRHxjs62iXDxVH36D221QUALSTWIaYVGebvRYDl5FxQ79KYKCmnYo1T+3i1ZRqSssI19vdlrjlQmYCF7NOsUe76cRyHKD7kuZe3vjVYBC1UIxbQ4xL47JLagvGX8CgNiJ7oK1OgIFrmlpK1ru2mVzesMHGxNGJOyinbXAnyb7vyfjW399zKVbZKE1ZO7GJkem0t0/2tJH0kJ1oRjdjyAplB8SMgPQQoLdy5NdmbV8AaDBalLXS+9vmAh7plxRsdeVpXUVnqVce2mQArikZ5ft/2y5FZkHRGA9WMeB4YmRrMqsKbGsJjbZHFACAzBZaPnDLpqow4bus4YGMnorWp0h87vT7LrLutE1dkb57wy/k0CwpdgxSuoR8VneHm/V6Q1LsquAuuR7dJkFpnr2nDJiRkOzz9bxkfmGrrdhGpsTfRkggwWxtLU5Xq3mzbYxaeCoZA2JYZFSAcpUdHtFlWP+oIl97AfLeBiiqUpDSJp+OQG/z98eM5hwEU3AixoskP/WEOqVqSvUr4/2k2HBandFLo0jDucQjLWN8HhFyyl/Abar1HJgynk4e02Y0JDQIyPGiJguaP4WK2o+iBe3W46JdgKaYjZ8+oFBE+DIpnAwdqZ44IDHfCDFPjjaRAPMiCjC+VSY664QWAhJ66J/uzkU9NU7aYLzwWn3fSBLTZMOZ4fITiLD7Mi1RkgWHCImGif2cMk3eBPl3K/32zDJUcaQtfPPP6YnRg17jDsN+EUiV624Y+KHqNqN/0uI2i1e/Bi2DW6/1bdBBpffSnvDCysCiH+CQla3MY2+V+SpVfNj3Og6ly/D/ynbbZaRgxBsDBwvlLv2k3rle92tDCY7aabsqT8QkYVj1wUwnZMPwi2VM0/nYE19qi9oEG4b0P7cjK2hEMvA3SOURel30rwdCln5LU2FCyMrzN6qN1d1FysfB/oZN4XVIW0e9e34UQdOXKXCKvmh/xoDzx493z4wT8y1bb28H/0Eb1irIh4h8EX2miwcAxOD+T/cAKF8k0QKSvjmyAaRCX7fm/rZSHhPe43uVe3tuyX9jMsR0IcLCJJnNV065zBHwsOKl+O/+/HrHbT7uQXcLiG8Vc5CGARt4J3gIcM4uxn5QtxtsdL+63avW60oaZW8kG5xMEBCyOqOPq2VH2c9Jmq3RRRi4ULJYUxlIKFseHypi6owgH3vGC1m/bcliQ5gnhxgwkWah+WpX3pv900+k3UoCqf/FWq1W7aDZt9mhVEEqZgub0bF5G82F+7abPyacjxWKx0S4iBD/Ypc0EGS05ALEhYqATLc16hPFBYco+lkNYdHVEHH/SrSgFYMlsfJ0XIVGXWZCkfstpNu0uVJ2drgSUNdENAAulYSbTyTpSHo57EwiVAe+s4S8NcRRdYUrwleqWHcTojasktXAI/qoQX6bmYNIHl7RzJq4eslFWghn4ykbIrSClYM09ZKatA98KDmAU1H1iJN/g/WmIeAZRYBWvHxqxgYdxsE30LUSzzmKem2QKrB0tFIrd0Wqaq2sPXYudovnR0gyWPY0VcEBsGKXR/BteChixYGPV2EdsUFlUo7pDLTS2wtBzoY3kgXM8pwVIGDdOieS6WmcAi7gN257o7PMMHKVQ/o3e5ySGa60qZDCx5QJslTE7axdIvs5o34zUyJVjEXfd3II/rG7rF75CiOFzACaJJr49pwZKHSyAH8zlZlSpkDP8t2y67nLypr4zJwfLgBakqCE2FwCy1I8fl4EPgmoQEWPJAqwVU9tDzacbQHh8bWoTmdXyhDJZnFDUJixIcpjhA9cEtNuTQc+uF0LsKIQiWPND7C3GzGbEsdGZp4wmypZBcO1nCuYRQ/fpDFyzPQKkuNoWgihb05CqSnJBSxlpP27NMLbCCPFBgmV0jrM1wojDcMA1cFOyjYhEiR/jVghg+X3Y4gaUcWMxfrhWwloSiFYpzNOQMJEGTGLlytKwheOKF8PyCwxUs38kM4tgomkPSFSdNoH58UjSLmQY6ETg/AusACKzBk3oM4sfP72NeO2yHvPYHZx1opoVWEV5ew4jWl2mBZQ0LLGuYbfw/UfikHjIsMFkAAAAASUVORK5CYII=", - "description": "Displays latest values of the attributes or timeseries data for multiple entities in a pie chart. Supports numeric values only.", + "description": "Displays the latest values of the attributes or time series data for multiple entities in a pie chart. Supports numeric values only.", "descriptor": { "type": "latest", "sizeX": 8, diff --git a/application/src/main/data/json/system/widget_types/polar_area.json b/application/src/main/data/json/system/widget_types/polar_area.json index 444b7d77ff..4cc516321c 100644 --- a/application/src/main/data/json/system/widget_types/polar_area.json +++ b/application/src/main/data/json/system/widget_types/polar_area.json @@ -3,7 +3,7 @@ "name": "Polar Area", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays latest values of the attributes or timeseries data for multiple entities in a polar area chart. Supports numeric values only.", + "description": "Displays the latest values of the attributes or time series data for multiple entities in a polar area chart. Supports numeric values only.", "descriptor": { "type": "latest", "sizeX": 7, diff --git a/application/src/main/data/json/system/widget_types/qr_code.json b/application/src/main/data/json/system/widget_types/qr_code.json index 1a3828c074..4443ee2830 100644 --- a/application/src/main/data/json/system/widget_types/qr_code.json +++ b/application/src/main/data/json/system/widget_types/qr_code.json @@ -3,7 +3,7 @@ "name": "QR Code", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMoAAADACAYAAABF/vzOAAAZJ0lEQVR4Xu1de/BWUxfeKSkKuVQaXSgSlW5UkkJKGmVQKQnl0gymm4kol+TSdTQMw8iQLpQiVCilDCqlkhS6iqhQKpWkvnn21zef3+9d++xzzt7nvf2eNfP+dc7eZ+1n7+dd56y191rFDh8+fFhRiAARCESgGInCFUIE7AiQKHaMeAcRUCQKFwERCIEAiRICJN5CBEgUrgEiEAIBEiUESLyFCJAoXANEIAQCJEoIkHgLESBRuAaIQAgESJQQIPEWIkCicA0QgRAIkCghQOItRIBE4RogAiEQ8EqU1atXq2XLlqmDBw+GeHRu3FKmTBlVv359dcYZZ3hXeNeuXRqvTZs2xeq7Xr16qm7durHabtiwQT97z549sdpnY6MSJUrouapVq5Z39bwSZezYsWr48OFq37593hXNVIeVK1dWAwYMUB06dPCuwvr16zVeM2fOjNV3//79Ve/evWO1nT59un725s2bY7XPxkalS5fWc9WzZ0/v6nklytNPP60efPBBtXfvXu+KZqpDWJLHH39cdenSxbsK3333ncbrzTffjNX3o48+qh566KFYbSdNmqSfDcuSL3LsscfquerTp4/3IZEoFkhJFO9rLrEOSZTEoLV3TKLYMcqWO0iUDM4EiZJB8CM+mkSJCJjP20kUn2gm21feEKVYsWIKv2wT5Ncw5dhwJUpQ3/iYHzRokJo6dWosSJL8mM/FucoLopQtW1a1bt1aNWzYMNaiSLLR/Pnz1YcffiiSxZUoc+fOVXPmzBHV//333xWevWbNmljDS4ooIAnmqkWLFrH0SrLR0qVL9Vzt3r075TF5QZSKFStq112PHj2SxDFW308++aR2lUpWxZUoQ4YMUQ8//HAsvWyNkiQK5mrgwIE2FdJ+/eWXX9Zz9csvv5Ao6UafRCmIOCwKiVIIE595vYICjrQo/ulPi1IQU756+V9jBXqkRaFFsS2xtEXmaVFsUxH9Oi0KLUr0VePQghaFFsW2fLLGomC797Zt2xLZeQzXdPny5VWpUqVEPFyIAjfl1q1b1V9//SX2jRjJ5MmTxWtogzFju70kxx9/vNb7mGOOEa/ffffdqlevXrY5Fq8HbYq0fczv379f6y25aGMp869G2AGMMeN4gyRF3uu1fPlyNX78eLVu3TpXrFPaI3bTrVs3Va1aNe9EWbRokZowYYJxu/r555+vcG5Eki1btugxf/755+L1pk2bar0rVaokXse5i5o1a8bCy4UoGzdu1HojpuFbqlevrsdswqzIEwVBJPjHlyxZ4ht71a5dO+3uxKKVxMWivP322zq6vmrVKrFvbIPHt4Qktm32119/vdb77LPP9o6JC1FWrFih52rGjBne9WrUqJEeMwKetCgCAiRKKigkSiomtCi0KCmrgkQhUVIQoEWhRQECfPWy7PUiUUgUEkUpZQs4kigkColShImC74zOnTuLHpyff/5ZTZw4US1cuFC83qRJE9W1a1d12mmnRfYuIQZTu3Zto2uZXq9okGZNwDFfLcrJJ5+s8JPkwIED6tdffzXm1kLQ7ZRTTlElS5aMNqtKqRo1aqi+ffuqVq1aiW1JlGiQkihKqSTjKNGmw9/d5513nho6dKi65pprSBQPsJIoJErKMrJtYWHA0ZF5LudR8vXVyxHS2M1pUWJDJzakRaFFoUUJwSkShUQhUUiU/yKQyU2RIeYgkVv46uUXVloUWhRalBCcIlFIFBKFROGrF+MoIVgQ4hZaFFoUWhQShRaFFiUEC0LcQotCi0KLQqLQotCihGBBiFuyxqJ88sknatSoUWrlypUh1I52y6WXXqpQGNRULTbJTZHlypVT+Eny999/K2S0//PPP8Xrxx13nDrppJPU0UcfLV7fsWOHwk+SJOMoqP6MuZo3b160iQhxd506dfRcNW/eXLy7yJ+ZR3ZybLbDwvEtSPeDDCwnnnii2HWSRLn22msVzqRIgjG/8cYbCimPJGncuLE+y4JDb5KgSOq0adPSTpSdO3fquUK6Jd+CPwbMlWnMRZ4ovgGP0l+SREkyXRHKSaCsRLotShRsfd9LovhGNEJ/JEpBsGzb7CNA6/1WEsU7pOE7JFFIFNtqyZqPeZuiSV4nUUgU2/oiURKOo/AbxbYEo13nq1c0vLzeTYtCi2JbUGmzKIgldO/eXV1xxRU2ndJ+fcqUKWrcuHGxip1mMkl3kl4vzFXHjh3TPhe2B86ePVvPlRQ/yovSdCVKlND5qUype2wAJXkd9U2QY0sSW1XgfCQKcMBcVahQIUnYY/X922+/6bk6ePBgSvu8IEosVLKgUVElShZAH1kFEiUyZP4akCj+sEy6JxIlaYQD+idRMgh+xEeTKBEB83k7ieITzWT7IlGSxTewdxIlg+BHfDSJEhEwn7eTKD7RTLavnCEKzpS8//77Cucs8kUQ/2nbtq2xSq3NPYxs8qbCnf/8848+i2IqvY2y2TiTUrx4cRFOpKGdM2eOeM12HgVVmGfNmmU8z5KL84dzO1deeaXxLIvLmLwGHDHx+OWTYCctFupRRx0lDstGFLQ1LXSUZkDQ0HQKEX2jovDatWvFZwfhbSPKoUOH9FwdPnw4n6ZLY23C22WgXoniokiutrURJWhcKIuNUtGmg104mIUy1SizHVVsRInaX1G/n0RxXAEkiiOAOdKcRHGcKBLFEcAcaU6iOE4UieIIYI40J1EcJ4pEcQQwR5p7JQpcnbt37xY9KfAalS1bVsHXLQlcpGibba5leFCgd+nSpUW94Q4fNmyY+vbbb8Xre/bs0eOSxPYx/95776mnnnpKrV+/XmyPftG/JLaP+X379mm9ss1LCRcv8IZrPJvEK1FwVgDpc1DttrCgnPN1112nLr74YnH8q1atUlOnTlWbNm3KJnx0VV6kHELqIEmg75dffmmMR7z77rsKVicOUTZu3KiWLl2q/vjjD7E9+kX/cYiCFEmYK1QlziapWrWqXicgejaJV6Jkaw1HF8BtkXlb30gnhFhJHKLY+k7q4JbtuUleb9SokXaZm4K0ST47qG8SxYI8iZLepUmiVKyo/yl69OghIp9kVWCXqSZRXNCL3pZEIVFSVo3tY962zPjqZUPI33W+evHVy99q8tATLQotCi1KCCIVCaLAvTt27Fhx2zi2i6P8AjKVS4JYwccff2zMhvLDDz/oeAJ2vRYW+NyrV69uzIAeYn6MtyADfsuWLWO7K3H0YMGCBWL/yNwOTM455xzxevny5dWZZ55pjD0FvXpVq1ZNfw82a9ZM7Hvu3Ll6rpBRP5sEr6M9e/ZUIExUQcwLeFWuXDlq08D7scPa66sX0shgQUuLGcGtmTNnqsWLF4tKAaCrrrrKOMiJEyeqF154QQxIYkH16tVLn0XwLShDAb2XLVsWq2vkMTPptX37dt33V199JfYNEt15552qSpUq4vUgoiCwiwUDMkqC+AnmynQWJtZgPTQqU6aM1ttUoiPoEfjDxDpAqQyf4p0oQcrhnwtbxpESUxL4zeEVM/2TjBw5UreXgpkAFm1vuukmn/jovjZs2KCfO2nSpFh9Zyqlaixlc7xRUicc8cfv1aKQKKkIkCjpYx+JopSiRUldcEGvXulbntnzpKSIgv1wtCiWeearV/YQwaYJiUKLEvlj3rao8vE6iUKikCghmJ0XRNm1a5d655131MKFC8UhI84CN2+pUqXE6x999JFuL52fcPV6YZs89JIykiB7OrayL1myRNQLe8GaNGlidMNim/6pp54qtt22bZvu2+R6rl+/vrr66qs1LpLAvRx3mzwSVmCrPeZFEoypYcOGIZZn6i04mwM8TWdlYnV6pBFKoEM36VwTzrK0b99ex6Z8Slq/UbAI9+/fL7p3MSgE5UaMGGGMKcDfj/aSuBJl9OjR6rHHHhOJAtcgnms6UNauXTs1ePBgY9BwzJgxCv1LYusbE48/DlOqpH79+qnevXvHWhMIDuMIgHT+Byma4K3r27dvrL5REhx9//TTT7HaBzXq1q2b1k3684DeiKX4PvSVVqLYEHPZPexKlKCKWza9kZNr6NChxsh90HkUW9+268j5hUUTRxAXQnwIzorC4loV+LXXXtN9b968OY5qgW2w2wAxM1Mdeu8PVEq/xaTN62UbAIliQyj1OokSHbM4LUiUI6jRohRcPrQoBfEgUUgUvnqFMDEkColComSCKPBM4Rcn8bPN6xU0HhTmHDBggM6WEkeee+45NXz48ES8Xuj3iSeeiKOWsnm9HnjgAT3uOIK8xvD0mbxe8OTBqyYJ/mHhCZQKjuJ+F68XtsrD04fiuJJ06tRJj1lyueeM12vevHk61hEnN5ctjhK0GDBhiEmY0vrYFhIqFZtiFa5xlC+++MJ4tMCmly2OcuGFF6oLLrjA1o14/fvvv9exDimOggWHWEWDBg3EtnD7Yp6RYkoSlzgKjhQgFmI6o7Nz504911I8LWfiKEHpimyzadtmH9Qebki4I+GWjCMDBw7ULkcskMLiutcrjj7/a4Ms99ALZ3WySVasWKHxnjFjhne1bCcccUwDz5YOnOVMZJ5E8btuSJRUPEkUy8EtWhS/JHTpjRbFBT2lFC2KI4CFmtOi0KKkIMBvlNRFQaKQKCRKCONDopAoKQjA1YkMGia3YKVKlXQ2EskztXXrVp2hBSUY4sjll1+uM8BI4pqF5ccffzRuDkS8AGOCe1qSunXrar1M2/SxGfT000+PM2SnNrZvFOgL3eLs4sV4MOaaNWuKOiKLDzLXSKU0ksrC4j0y7/KNgrQ6yMmE8hCSdOzYUd12221iIApBznXr1sXOUfXZZ58pxIAkcc3rBZf1K6+8IvaNRYEcVpdccol4fc2aNVovkFWSW265JZHMMzYW2YiCFE0Yl4ngQf0j5RXGLO1qRjvkhcN5E8TdCktSeb2yiii2ybn33nt1TKFkyZK2WyNfD9oUmckk3baqwC67hyOD9K8GNqIgbRTmKk4iOhyQQ5wEu8klyYtt9i4WxTZxJEoqQiSKbdX4uU6LcgRHWpRoC4oWJRpeKXfToqQC6FJxi69eqXjy1ctCUr568dULCJAoJEoKArQoeWpRgqoCO77VqTZt2ujzJqZzCi79wy+PrCSSuFYFxs5mZI2XpEKFCnpMpsTkNqIgsQXSGaVbMCZUFDZl4W/atKkel5RJHy5cpEGqXbu2qDYqIaNv0xZ+HIdASQtsqS8sWBvo23dFYe8f80F15l0nE35z1B+XAo6ufQfVgnetM3/77bfrQKokmFiMyZTLzEYUtEWZhHQLzhsh4GcqGVG6dGk9LmBXWLDAcazBhImtb5yDefbZZxXOCRUWPPf+++9XwNyneCeKT+VypS/Ueh80aJDxHzAom71tjDai2Npn43XEwRBjwTdnHMmLbfZxBp7rbUiUaDNIokTDK2/uJlGiTSWJEg2vvLmbRIk2lSRKNLzy5m4SJdpUkihHcrRK2TGiQZldd8PLBu+NKVE2vDCofPXNN9+IiiOlEK7HEbhJ4QxAxhRJgLUJb5veSBCOtqbUUhiz5LWKM45/twFRsFvBlAAc+kAvqWAu+sFubOxxw9GKwoLkEuj7nnvucVWzQHvvXi+UisaZkDjpiryOzGNn5cqVU23btlX16tUTe127dq3CuE3lFy666CJjCWubmijNgL5N2+yxw3bOnDliN4jRoBqxKaawfPlyPVdS3yAZ2vounwBFQb7mzZsb0yzh/M6sWbOMfw5wpSNUIP1xwfWMvuOWqzDNh3eiJLnXy7aokrruus0+Kb3Qb1ANRxAEWfYRlJQkyWz2LmPmNnsX9DLYlkRJL/gkSnrx9vY0EsUblKE6IlFCwZR9N5Eo6Z0TEiW9eHt7GoniDcpQHZEooWDKvptIlPTOSZEnCnbKojyDKTVPeqej4NPgk0f2D0lsREEGfbQ1FWINGhfS6wATZHqRBJnb0bdpl+7zzz+vXnzxRbFt9erV1V133WV08cI1jF24UkFS14pbO3bs0HofOHAg8rRimz02g5q22Xfo0EHHSdK5jtLqHkY8onv37gqpbLJNpkyZosaNGycG32xEQekEtDWdOQkaK3KV3XzzzcY4y6effqpeffVVtWXLFrEbxFlMwUhsc0cWfFNRUPSJ8gx79+5N6duVKHPnztWYxCntjRRHjRs3NmZwQWYX5PyKkzMs7rpLK1EwYdhejaOc2SYuySVsW1iCxoqFDEyQEVKSTG2zdyWKS1VgW9mHTKwdEuUI6iRKweVHohTEg0QhUcQ/aBKFRBEXBi0KLUrQKx0tCi0KLUqIjx4ShUQhUXKNKCheiVSdpi3lIcZjvAVuWGRBN8Urknz1QlqeOnXqiLphu3itWrV0LEUSxCJWr16tkN1GkpUrV6qvv/5avHbCCScolI2IWxYCetWoUSMW7NgqD73jxJbgju/cubPWXZL169frNEn79u1LuYxYHdqZSkbEGsyRc1bFDscpCm94YtA2e5t7GOcuRo0apTD5vgXnKvr3768XpSRJEgXBsT59+ojPxYJCVhGMXRKcrYA73bTYgfczzzwjtj3rrLP0mOPErbAkoNfrr78eaypatWql9Y5T9gHxEeQDQ+ohSRDzwjrZvn17ymWcVUF2l1tvvTWW3qZGWfXqhUNISPePLQy+pV27djpeAauSbqIEpStCwBBjRrxEElvFLZfzKEEYgyjQC38gccSl7IPteXmRrsjFopAoqUuEREnFhEShRUlZFSQKiZKCAC0KLYrttQvXaVFoUWhRQjCFRCFRSBQSRent3kG7h/P11QsVf1u2bCkuAWRkx5Z0xByKitcLrlakWEIlZkkQ84J7GedpJEGaJWCGCgSFBemKLrvsMr1N36fQPXwEzSTjKC4Tlo8f8zjMBdfzyJEjRWi4zb6IWhQSpSACJIpSinEUF1oUDa8XiUKi+GWJUvrkI77rcBJSklyMzJMoJAqJcgSBoC0sJAqJQqKQKOHWAL9RUnFCWp24qXWaNWumM9fAZSrJhAkTjDt8q1SpovDP3qRJE7EtsrSg4rFUXRebIkePHm1MhWRbDditDb3Rf2E5ePCgztDy1ltvid3gWEK/fv1iVwCw6RbnOt3DaXAP4zsD5yviCLbh4+wFKvBKgkVlKuuwa9cu3VbK24W+QMKuXbsqlKOWBOdc1qxZE0dthdxcOC4hpUJCuYagMyNIa4VxoWxFtgiJkgaiJFkVGAV10L8kSCCHasVIpyRJly5dtKMAB6V8S1C6IteKW751DdMfiUKikCghmEKikCgkConyfwSy9YSjbY5smSL56mVD0M91WhRaFFqUEFwiUUgUEiXXiILt0+PHj1fr1q0LoXq0W1Altlu3bqpatWpiQ5fdw4sWLVKIZ2zevFnsGwktTBWFy5Qpo84991xjnARb0dG3KZs9PFedOnUSn4vs+mi7ePFi8ToyvNx4441GNyzKgSP5hSRIhQS9TS7cIK8XUgphLlC+QRKklELfJrd1tJn3c3dWWRScL9i2bZuYr8l1uAiuAXiks5HEhSiIcaC+iqmGydSpU9XkyZPF51atWlX17t1btW7dWryOWAgwMfWNMZlSAqEN9DLFYLDY0R7u2sKCgOOYMWPUSy+9JOqFvFnQG2dtJAkiCvIa47lSMBJ9IS6EvlF2PFskq4iSSVBciGLTe8iQIbrMtSS2sg+2vpO6bktXBCuJGAycJFGJYtOZ51HytD6KbeJJFBtCBa+TKCRKyoqhRUklEYlCopAoIYwLiUKikCgkyn8RcNlmHwLDxG7hx3xBaPkxXxCPtHq94KKFGxQxjWyT+fPnK6RLkhL726oCI9awYMECMbs6xonUOkjPIwlcpMAE28rjCNyz2C4vCSryYlymWAhiFS1atBBLYQAH4IH2kiD1VJs2bYzlFYLcw8WLF9fPNaUUwjZ8uPFxnyTwuKE9SmakS9JKFAwKPnT8sk2wMEzVL2xEmT59ut7OjgCdJEF9u2LyyCOPqMGDB4vPxTZ7XIN+ktxwww1q6NChxsi8i962bfZ4LkpSSLJ06VKt9+zZs8XrKOmA9qay4EmsrbQTJYlBJN2njSgu5bNddc/HTZEo+4G8X7BokqDuCmI4JIrr6vHcnkSJDqjNomCho+CPJNlIlEOHDqm0VdyKDnd2tCBRos8DiWLBLMjrFR3u7GhBokSfh3wjCr7XaFEs64BEIVG8E2Xs2LFq+PDhiewAjj5dflpUrlxZDRgwwLgt/IMPPlAjRowwumH9aCH3As8RdtpKArcw5sL0Udy+fXt13333KYzPt0ybNk0NGzZMoapxYUF6JDz3jjvuEB+LzDHQGy53SXCsAO3jFFJ1GadXi4LyBcuWLVPI3ZQvgjMj9evXN7pRcQ4FY965c2fah4xzLqYy09AHZ3xwLkUSWEqMC+PzLShxDUykst+IkzRo0ECfOZEEpTDQ1nQGByW9obeparDvsfyvP69ESUpJ9ksEMo0AiZLpGeDzcwIBEiUnpolKZhoBEiXTM8Dn5wQCJEpOTBOVzDQCJEqmZ4DPzwkESJScmCYqmWkESJRMzwCfnxMIkCg5MU1UMtMIkCiZngE+PycQIFFyYpqoZKYRIFEyPQN8fk4gQKLkxDRRyUwjQKJkegb4/JxAgETJiWmikplG4D8Y74bFkLlFggAAAABJRU5ErkJggg==", - "description": "Displays QR code of calculated text from configured pattern or function with applied attributes or timeseries values.", + "description": "Displays the QR code. The code is calculated using a configured pattern or function based on the values of the selected entity attributes or the latest telemetry data.", "descriptor": { "type": "latest", "sizeX": 4, diff --git a/application/src/main/data/json/system/widget_types/radar.json b/application/src/main/data/json/system/widget_types/radar.json index 4c7f9b2560..18bc07ac98 100644 --- a/application/src/main/data/json/system/widget_types/radar.json +++ b/application/src/main/data/json/system/widget_types/radar.json @@ -3,7 +3,7 @@ "name": "Radar", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays latest values of the attributes or timeseries data for multiple entities in a radar chart. Supports numeric values only.", + "description": "Displays the latest values of the attributes or time series data for multiple entities in a radar chart. Supports numeric values only.", "descriptor": { "type": "latest", "sizeX": 7, diff --git a/application/src/main/data/json/system/widget_types/radial_gauge.json b/application/src/main/data/json/system/widget_types/radial_gauge.json index afd8697cee..7d793b2b87 100644 --- a/application/src/main/data/json/system/widget_types/radial_gauge.json +++ b/application/src/main/data/json/system/widget_types/radial_gauge.json @@ -3,7 +3,7 @@ "name": "Radial gauge", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAC+lBMVEX////m3d398OrwlGL1vJ33ybH75Njthk7xoXX51sTzr4n//v7mUQDx8fHn5+dsXFzt7e3+/f3h4eHj4+Pl5eX7+vr09PTp6enq6urv7+/9/Pz8+/vy8vL49/fd3d2lpaX5+fn29vbk5OT++fff39+9vb20nZCxsbGzloapoaHb29r++/ns7OyampqenZ18d3awgmq0tLT++PX+9vL97ubExMSqqqqVlZS3sa/79fL31cO6urqKiYnY19f74tT62snwuZvOgVehoaGwpqDGmoGpjHz98uzi2trNxsPy0cCZgnWphnP86+Hc1NPIyMi3traurq6uiHPokmPZglTnVQbMzMzaycDzxq6srKysnZW5oJPxrojtrIh+fX2DfHnp39rU1NT63s/a0M/TzMnBwcHIwL/Bs633xqzKs6esp6XntJiblpOek42WjovoqoefjYOXe2zHiGepemH86N324NXx3dPNvbW5rKaFgoGwj33fkGXnhVD37ejq1szpyrrFvrqPj4+umY6klo7toHXonnV0b29TTk4uKirs5N/gzcKvqqinp6fGsKX2waS0qaPWtKGyopnBppe5monAloCOgoCeiHzSlnSngGu3hWjYjWWufGBGQEDpaSTpYhnz6ePi2NLl0cbtzb34zrjfxLW1r63nvqmnn5/Qr568qZ7JqprCn4yXiYJ5amqzfF68flzCf1rIgFj38e326+Xm3NbWz8/Vxbzavq/RuazOtqnCraKgmpjXq5PQp5Djp4awlYbXooSrkoTOnYLzqYC7lH/YmHXNlHTGkXS6jHOzinOig3LwmGfvj1vtgUbrcC3x5t/v2s/Ozs75076+uba8tLLuw6ymm5SSh4HypHnemnW+jnS/h2jRjGXuiVLhhFHsdzjoXA/RwbjduKT1tpS9nozcpIWYhnuBeHOPe3GbeGVbVlbQ0ND51sPkx7fTu671uJfcrpX0tJHJo46nj4Pmo32Nf3fjnHXxn3FNSEjOysjFuLKjeWNnYWHsfUE8NzepajCWAAAUc0lEQVR42tSWW2xLcRzH/6GH/M/Rk3Pac3p6tV7mEh0JiqyChU6CxSWR1WwuQ6KWWh9clzBpvbiUbWqvmGVZ6dOIy7LNhjdEIsyTiMs8uYWIROLB75z2nNPt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", - "description": "Preconfigured gauge to display any value reading. Allows to configure value range, gradient colors and other settings.", + "description": "Preconfigured gauge to display any value reading. Allows to configure value range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 6, diff --git a/application/src/main/data/json/system/widget_types/raspberry_pi_gpio_control.json b/application/src/main/data/json/system/widget_types/raspberry_pi_gpio_control.json index 6a9b31d473..d41a09e0ad 100644 --- a/application/src/main/data/json/system/widget_types/raspberry_pi_gpio_control.json +++ b/application/src/main/data/json/system/widget_types/raspberry_pi_gpio_control.json @@ -3,7 +3,7 @@ "name": "Raspberry Pi GPIO Control", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAIAAADGnbT+AAAABmJLR0QA/wD/AP+gvaeTAAAUeUlEQVR42u2dCXBV1RnHXwzVSJopbbRCy9KpMo60yNQWOu0YKkhsDFMNSxBCCAIKKoIsQggkQICEsGWDmLAEFEIICVsgCFgXRNwAEVFUFKWCC4qK+4JL+uMdvLm5776QhIg8/J+5w9x3c2/Iu+/3vnPu+c7//3kqKyu/+eab995779ChQ/9TUzuNBkKAdPz4caDyQNXhw4c//vjjb7/9tlJN7TQaCAESOAGVB8R4oZui1lANnIDKQ/hSrFJr2LgFVB66Rt0LtYZtQCWw1ASWmsD6ydvoR0Z7ZnrO/i3x0USBJbAElsCqHVjhueGXL7q89cLWv8z+pcA6R8D67rvvGupXff/993UFq9HsRp1KOvXf2N9sCRUJVy25ypPuqbZlCKwzC9aHH36YkZGRmZn52Wefvf766+zPnDnz6aef5gPeuHEjJzz22GPjx4/ftm2b/apdu3Y999xzZv/rr7/mKnbWrFmTkpLyzDPPsF9QUMDBJUuW8FMyA/PmzZs6deqRI0f4L1544QVz4YYNG8wfUFFR8cknn8yYMWPp0qUfffTRnDlz/IEVNDPoXyv+FZYdZv9EOxZ3tKiytityr/CM9VTbkn9cvARWtda/f39m7iEpOTl58+bNAPH+++9z8K233rr55ptfffXVoUOHwtydd975yiuvmEs+//zza6+9trCw0LxctGjRSy+9VF5enpOT8+mnn8bFxX355Zd9+vSBmAceeCAtLW3y5Mnbt2//4IMP+vXrt2nTpmXLlpkLecmZ8fHxb775Jv/7iy++mJ2dvXPnzvz8fPZdwWq7pG3WrqwW+S2sI0DmSxVbr3W9gsYGOdmaKLDOFFh8uiZswIQBi1n8hIQEAxb0PPHEE5zw+OOPWySlpqauXLnSejl8+PATH//o0e+++y7M8avoGQ1YYDRt2rQBAwaYMwHUDlbfvn27d+9uItzAgQP595FHHikqKoJge9BydIWDNg2yg9Uyv6UrWGyNUxo7wUoSWGcKLD51Zu7ptnr06AFYN910E90iPR0HAeu+++579NFHOY1/6afYIaIAQVZWFiSRoeTI4MGD+ZdOkMh3//33R0ZGEuc6d+7M7ywuLqYfNOzS6AftYPE/Lly4kFho/gxw3LJly4oVKyAyMTGxlmD97p7f+QPr/PHnO8EaL7DOFFjEG3gCFz5adqxP3YBFJ0VXtXfvXtNjcpywBHZ0fxMnTjSpSfpKBmQ7duwYNmzYyy+/bM60YKLRwRGH6G1vu+02wGKwxW8AMnPOggULwHfWrFkMuUaOHEmvum/fPsZk/sC6csmV9jEWI/c+6/v4UnX9iuudVCV6PFMF1pkCi6jDoLu0tJSu8J133rF+iWGFnddee23x4sUHDhywX3X06FHIsMbgDz/8MDvPP/88o3WwYB+M7Ocz2CopKWFExX9R6m1PPfWUdQ6XwygHTbcLiJxW+6dCphgcVMVviA9PDz8Rn6wtxeNJ01NhQE03gOD8+fMb6rcdO3Zs9erVdZ3HalXQKmZNjKEqqjSKOS3NY2mCtMFm3n8x+xfBs4M18y6wlNIRWAJLYAksgSWwBJbAElgCS2AJLIElsASWwBJYAktgCSyBJbAElsASWAJLYAksgSWwBJbAElgCS2AJLIElsH4mYKGq+O2837IoOWhWUD2wCMkMCcsJC54VLLAEVpU8ut2Sdn039D0pVS3v9Yf5f6g9EE1ymkSVRZlr4zbEXXXvVfVDU2D96A3dKUoyhDcof/7rbchfOW7E9SitV61ahfjHfonR9qAFMucjR/MH1kVzLyK62I+AglP+VdG/xYwWTqnqZBcaUJL1Xt/bcfnVhVc7dWPI86dXu7D90vYOfO1gYSyAQQEqX/bffvtt3tFDDz2Ee8BXX32F6LLSK7HkJiB2si5BVon0zexzMtpxgVWtIahHdIqWa8SIEfg73HXXXYi6ECfiZomQEDF0z549cYK45ZZbLB39uHHjIiIi2IE/JIdoxe6++25XsBAVlrxUYhesAlm/in6+usKYshinrnCsC1sRxRGuYtfwqeEuKuoZJ6+KXhVNXJy/Zz7B0hWsQYMGPfjgg+np6ejFUU3m5eWh+O3WrRs3AS3u/v37Ef1yE7gVfPfMl23UqFG9evViH5X57NmzuSdGVCewTjZLqoq0FbCwGGEfww/w4kcEM+TRHOHbye2zrjISe9OmT59+8OBBfxHLoYRm358S+sLkC08psYcP12vbzmvrwmV6tSHdpO2TXCMWPgNDhgyp9Arj8CsALL4q7CPlRdALWOjIzZcKhuDPcRMIV2h6x44du2fPHoFV1dBPV3r9HbBvAKxOnTqNGTNm7ty5hjnUrUY2yF/LOb5gffHFF0iraxhjOcBqnt/cH1ghySH1ByvPDay0qlHd+G3jm+Y1dQUL5xx8AxBIwhBGBICFcQEBae3atYRkDuJnYUYC5d7mCxb2PojCd+/eLbCqGpp9vpdYNhDnrYhlBTPCGLeP4RfhijvoCxZWM08++WQNYHUu6Rw+t0qPesGcC+Ir4n3JuLH0RhcyUp1g2Y217FvTtKY1+D785d6/EK4GbxnMc6hrV9i7d2/cdRhUEaVMxDLHDVh0gvSSDKqwvWAE5rgJeBdw34hkdp8BgXXCUoa7NmnSJO4OSnnjKWIaKnv+ZVjK19fsW62srMx+Tp2eCnkkdGCRsDGh+YzmJwbd1pbkpWqG89rf5P7Gl8vIokjPOE+1y30G7zU/FeJ5gUsKPRrcYKdjOUBhyY9vinm/3ASH65i5CXiiME7lHtKlCqyfeB7rz4v/zEyBwaLnup72vvKUW7O8ZlxiEYmx2/lzztd0g8A6uTG3Sfj5Vc6v7E9qtdy45OJ5Fze/p3loVqgmSAWWUjoCS2AJLIElsASWwBJYPyZYzINTPeDq5Vf/o+gfmLDVY/wusASWc6MURfc13e0TUdeVXBc8NdgzxVO1TXOZxBJYgQQWeXum/shpYEnKn0RqgnlCnJhJlpnEDu7LZKbN1LO5BPNtUh9keyhWkOFt5BZdwWJpw5itY+wz72xdV3X1nTrvsKCDSz5nusAKWLBIYpCxJ+UHT1ZKB7BYQ0JK54033iB1yBFS0eTOKr2rSoxVM5UHzG/A9BaTXFewMN8e/uBw+/wnc1euOZm+6/uel3ieS3EKgRWgYJnVDVu3biXlB1ikwwhF5A3Nspl169aZtCsvSXpYV2GibOIZjWjHuiV/XaEjCc2Iyl8SOjQl1AnWOIEVsGCZOhSAFRMTY8AiXUhG1jDH4hk84tl/9tlnLZJI9ZO6NuWZSKvRS9YwxnKARRrYlSoWaTUa18gJ1gSBFbBg0a+RwIceygX4rm5g1QM5fOy7yf+bigSkWtu3bw9kHGThJWMy+7pKX7DoDe0rSFlG7Bi5m63jvR1dwlW6wArkp0Jy+AQhxuaAwrIk6zhrZiq9NS9Yo2yl7qlg8NoPjUvMOXV6KmRE32dDteIUMatiQqaFeCZ5qrbUH72ynMA6B+exSB53WNYhuiwaWQTLlzF81zyWwNLMu8ASWAJLYAksgSWwBNZZDBYVms6bdZ7AElgNBhZTpv9Z/R+zaP260uvI89QeCFa4d1jaIXZdLFkg0o6t5rcSWGcpWOh6TSVL5rGYnWIi1OSbzRwV+xy0J20okEnq2sy8M+9l9Pj+wGJJjCMsXbbgMmeicENfZyHMZO8CBzeqrEKHVaLCe9pWu3aCV0JdfXFE46zGjkkNB1i8CzOHR+aU92tuCHN4JgnB28dPwErDm8k/M2NM42S0OgKrWkNGh95ywoQJ6H2ZeafwM/o4FJumij3TodQYp4YqR4ykDrkYR5h5J0WIUuqOO+5AX29VEK48lcS+0ZxGjtnRk6V7i6930RX6lO7FgsH32oSKhLBJYS7poBlVwvyJ2ycW7i30J7FHG0gxYoT2VLnmhuA2wN0gPY8sjLTEkSNHePs5OTnk3UlFcD6ie07mKsT4COA4h3tiWTkIrBONO2J2SAtaKZ2CggKyh4DFygUKjHMEjwZuIjuoOskPGvUmhhnmpb9lM3UoNl5Rq2LjPdb1cL28TU6bGiT2aIEQBfmT2BOnjRycsMRXxRKs3n777SjrgYbklSmLTE1kYxzCZ/eetyUlJZHRIrBx38yPBNbJlpCQUOmV2HOPjMSeHYIQtxuwqD9tVjcQ9pOTk62rUJ0bRTmnQRgq9VqC1TK/pb/VDY1TGp9ydYOv1YzZ2uW1q0Fib/4MwqcrWPRi5NSNxJ5IbCT2mHzwbTFKaCITy4c4s6KiAs8ZcxUwEa1NnnT58uWsB3EMCX7uYGEjQ9Qxocs3Cc1YilvM/ipvM8fJWJu1WcQtktDG6McfWLHlsUhM7ctHXcmIXRsbNDbIScYkJ1j/Lv236+UtZ7Z0XptY1RX+9b6/LnxuYQ0Se0gCFEaNfM18JfasHcKQh5csHLLeLOMHbhc73Aq+VzgfcaHAqvan8H0lSuFkxKCVf60fsTTUYMQJaPC59WbQyrcz0dtwc+CTYCc3N7f2T4Usdfcl4/Lsy51kpLhc6+opgu+Dc5FgUrVwdcqnQtai8R5Z0sg6M6iiQ7QeaxgJ8P0horOM1irSDlJ8D3njRDVW3jLc5Atmvp8C6yebbkBJ0bG4o30lVrvF7U6sZbBv/he8X7HoCrvDFg+JYVlhzss13fCznSDF8ZF5hz8u+GPjzMZ1nYLiEkQ+Vy6+ktFb/XwiBZZSOpp5F1gCS2AJLIElsASWwDojYPFcybwDA/86Za8FlsCqaUOZaJ9/jyyJDJkZciJ7Y23TayXPF1gCy2OXJZJydiawV1zvnLUfV22CFEfdIVuGsMbGH1gkrPARJfFs0oXMfDIjSs7K8iAlr4XhtmXjyxw9k6WcQ37aHMHkl+yWwApUsCJXRrqmdH6f8fsaUjpdVnZpvbB1xlMZ/lY3UAqAeXPSMphDm5QOngOxsbEslQEyssswBHOIew1JnEmSB3f7YcOG8RLL5EsvvZR1HwIrUMGqdxKa0djYrWNdIxZhiZwMeRuy0cABWKTeyW5RmYJUKWAh9TY+7yQN169fb71TeCoqKuIS8jkQJrACGCx/y2b+NPdPLmD9YFZzYeaFU56YQofoChbrFlkhA17kRsm7AxZrrViUxqIrk4TGXcdUpiCRauWnyUbDEzusBKEPjYqKIowJrEAFC6M2V7CapDapwammTWGbof8dWsPqBpZ4EH6o70Lg8V3dAFWcwJIsekz44zgrsbp27coKNjLQlF9gsRrrI/bu3SuwAhUsYo9v1ZMOizqcwMi+pdbtqZBxN90fy61YIMrnYg3JGWkZXIhe9HpmvXKl18up1NuoGWaOMNJnta3ACuDpBuT516y4BhWGqXVINNI8lsBqsA2BhmPMJLAEllI6AktgCSyBJbAElsASWAJLYAksgSWwBJbAElgCS2AJLIElsASWwBJYAktgCSyBJbAElsASWAJLYAksgSWwBNa5DRaL35vkNkFrL7AEVsNsv879dfSqaMsgHn/R+pW3EFgCq2oLywnztYmPWBzh1EAnOw0jsXq/bOFl/sBCWoh1Lw7k5rNBfoMwFf2qXaWDNbKl3qn0llgvKytDHo01q1HsoAMTWIEKFny46govmnqRU1eYZBPml0bGrI0p2FPgT2KPz/u2bduoIYAjA7pCHO23b99OkWxcuNEVUhkAXSHGDYjuja4QRSFuv1RlxxQY7eGtt96KWvVs+EAFVj03X1HhyaoneW1rlthT74TiFK4Ri6rE1MOu9Fp9sG8EqyjuUUUTqAArMzPTVJ2wlND4bxPkELIikt65c+cNN9zAaaY4isA6t8Ca17aGyhQEquTHki+ed7ErWBTPwbvBSOxHjx5tJPbUgCEgGSV0Wlqar3cDJiIEKpSuEIYwGkk0dQYEVqCCdU3xNa5gXZJ2iUu5FFsBAcJVDRL73r17U5GKQRV9oq/Enm5xypQpMARwRgxt7B5MWQr6UPzuqcfOOQIrUMHikTB+Q7yDqi7LupwwxEr8YUvyFh/IqMNTIbjgjzV9+nTwwh+L6kDmuOWPRazC/IOhlTlOz2hKKFBAAGU9piBEOyKfwArg6YZL5l3SfW33k3W/NiYwnHfUi9N0g8Cq58aYKTw3vNk9zepRfEBgCSyldASWwBJYAktgCSyBJbAElsASWAJLYAksgSWwBJbAElgCS2AJLIElsASWwBJYAktgCSyBJbAElsASWAJLYAksgSWwBJbAElgCS2AJLIElsASWwBJYAktgCSyBJbAElsASWAJLYAksgSWw3DYMjyOWR3Rb2+3G1Te2X9o+JDNEYAms0wWraV5T3I7tBlc91/QMnRbqmeip2iZX+fEJrIAHKzs7e9SoUXFxcXhvYvM6cODA4cOHT5s2DT9gvMUwvBswYABHUlJSrEuio6MHDx5cWFjoClabwjZYyjbLa2YdwTq757qevpZ8nZd2rtlEVGAFKlgYtoJIpdfeDnPEnJycHTt28DIhIQGDzfT09Nzc3N27d3MkNTX14MGDlV43WNwTd+3ahRWsK1jBs4IHbRrUIr+F3TbN1esxoSKhUVIjJ1gTBFbgg3XgwAHsEqEKB8Ty8nLAAqkRI0YQw/bt2wdYOMACH2cWFRXhPs0OtpxAlp+fjyu1v67QAVarglauYLGFTgytwVJbYAUqWMePH6enY+fYsWP0d1bEohmwiFhYT/MSi3Pzx+PYyY/YodOsJViYiLpSFbc+LigxyAlWisA6J8ZYixYtAqmRI0du3ryZMZbp+GhmjIUBNR0fMcyyB6ZwA876uL6uXLnSH1gXzLnAUZIkqizKF6y/FfzNJVxlCCw9Fdb6qTA0KzRmTUw12+PiLsFpwZ6pnqotTdMNAqvu81hU7Wq9oPU/l//z78v+Tkdpr0SieSyBpZl3gSWwBFagt6NfHN3/4f6zf+PvFFhqagJL7acF69ChQxTn1L1Qa6gGTkDlocidKdepptYgjRlsoPKQQjl8+DBsKW6pnX6sAiRwYsfDa0rdgRjh639qaqfRQAiQTIT6P6smAX3bjvRbAAAAAElFTkSuQmCC", - "description": "Allows to display state of the GPIO for target Raspberry Pi device using latest attribute values. You should set the label of the selected data key to GPIO pin number (e.g. '1') and use boolean values for widget to display the data.", + "description": "Allows to display the state of the GPIO for the target Raspberry Pi device using the latest attribute values. You should set the label of the selected data key to the GPIO PIN (e.g., '1') and use boolean values for the widget to display the data.", "descriptor": { "type": "rpc", "sizeX": 6, diff --git a/application/src/main/data/json/system/widget_types/raspberry_pi_gpio_panel.json b/application/src/main/data/json/system/widget_types/raspberry_pi_gpio_panel.json index b6417d7be3..1bbe2482f2 100644 --- a/application/src/main/data/json/system/widget_types/raspberry_pi_gpio_panel.json +++ b/application/src/main/data/json/system/widget_types/raspberry_pi_gpio_panel.json @@ -3,7 +3,7 @@ "name": "Raspberry Pi GPIO Panel", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Allows to change state of the GPIO for Raspberry Pi device using RPC commands. Requires handling of the RPC commands in the device firmware. Uses 'getGpioStatus' and 'setGpioStatus' RPC calls", + "description": "Allows to change the state of the GPIO for Raspberry Pi devices using RPC commands. Requires handling of the RPC commands in the device firmware. Uses 'getGpioStatus' and 'setGpioStatus' RPC calls", "descriptor": { "type": "latest", "sizeX": 7, diff --git a/application/src/main/data/json/system/widget_types/round_switch.json b/application/src/main/data/json/system/widget_types/round_switch.json index 1e7b63ea18..9a29d0150d 100644 --- a/application/src/main/data/json/system/widget_types/round_switch.json +++ b/application/src/main/data/json/system/widget_types/round_switch.json @@ -3,7 +3,7 @@ "name": "Round switch", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Allows to send the RPC call to device when user toggle the switch. Advanced widget settings allow you to configure how to fetch the initial value of the switch.", + "description": "Sends the RPC call to the device when the user toggles the switch. Appearance settings will enable you to configure how to fetch the initial value of the switch.", "descriptor": { "type": "rpc", "sizeX": 2.5, diff --git a/application/src/main/data/json/system/widget_types/route_map___google.json b/application/src/main/data/json/system/widget_types/route_map___google.json index f5e62582d2..504464592e 100644 --- a/application/src/main/data/json/system/widget_types/route_map___google.json +++ b/application/src/main/data/json/system/widget_types/route_map___google.json @@ -3,7 +3,7 @@ "name": "Route Map - Google", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Trip animation on the Google maps. Allows to visualize location change over time. Use Trip Animation widget for advanced features.", + "description": "Visualize the entity trip on Google Maps. Allows to visualize location history. Use the Trip Animation widget for advanced features.", "descriptor": { "type": "timeseries", "sizeX": 8.5, diff --git a/application/src/main/data/json/system/widget_types/route_map___openstreet.json b/application/src/main/data/json/system/widget_types/route_map___openstreet.json index 173807b9bc..1e8b807a69 100644 --- a/application/src/main/data/json/system/widget_types/route_map___openstreet.json +++ b/application/src/main/data/json/system/widget_types/route_map___openstreet.json @@ -3,7 +3,7 @@ "name": "Route Map - OpenStreet", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Trip animation on the OpenStreetMap. Allows to visualize location change over time. Use Trip Animation widget for advanced features.", + "description": "Visualize the entity trip on OpenStreetMap. Allows to visualize location history. Use the Trip Animation widget for advanced features.", "descriptor": { "type": "timeseries", "sizeX": 8.5, diff --git a/application/src/main/data/json/system/widget_types/route_map___tencent.json b/application/src/main/data/json/system/widget_types/route_map___tencent.json index 8ee658089e..037c17999c 100644 --- a/application/src/main/data/json/system/widget_types/route_map___tencent.json +++ b/application/src/main/data/json/system/widget_types/route_map___tencent.json @@ -3,7 +3,7 @@ "name": "Route Map - Tencent", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Trip animation on the Tencent maps. Allows to visualize location change over time. Use Trip Animation widget for advanced features.", + "description": "Visualize the entity trip on Tencent Maps. Allows to visualize location history. Use the Trip Animation widget for advanced features.", "descriptor": { "type": "timeseries", "sizeX": 8.5, diff --git a/application/src/main/data/json/system/widget_types/rpc_button.json b/application/src/main/data/json/system/widget_types/rpc_button.json index 4860f6a9f0..3ca7975209 100644 --- a/application/src/main/data/json/system/widget_types/rpc_button.json +++ b/application/src/main/data/json/system/widget_types/rpc_button.json @@ -3,7 +3,7 @@ "name": "RPC Button", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAAAAABslHx1AAAAAmJLR0QA/4ePzL8AAAN8SURBVHja7dvbSxRRHAfw/X9+bhcvrJZSmllhZFSCWBDaY4FUhBRZCQXR7akLyoJYlqxU0g0tukF0oYQM3bxsYVRgbuuyu7k7szNn9vSb2Wx9qB56ac72/T7MHGYZmA/nMjvDbzzSTkbpOASPw7CUjkPx2AwhTNNQNKYphE1hiCXMtK5pWkrB8GXraZMl0sMOQ9dEdqApmIzQdIMlDDH1lLIMh5LSTYZYIp1MS6XDAGF5uEPiltoQK85dwhAtKhVPVLMhRj5ADAcyqzpkNgtJqQ9JAQIIIIAAAggggAACCCB/8wog8btfAjd+f9Y3t0GmW5bS8rO/fvavaXB2jWVlZbVHwjLC+7L1x2P8rN1ZQcWtX90EyWws7r7bSuf+BKnz+f1t3norTPV+/0HvNiFP0+5b54sahYsgn+mQrdksZfL6hYcZGe2betoxyG/LtP7OiXlIJW/a6F2Y9nPjKI3MLtrBjbM05CJIsqT6tdOI1BbWFuyRQVpbupw7yGygqqLCBZCTNJqFdNGTAQpwY2bwo5vmyL1iqr+uS3l4yaTsoaEg7bT0VXWyn/xyquQHpDz4JuCrFWHaG48OrSuJXqLHLly1Yl01VDkuq6r7+i5Qd5ABsqlctlMiN0eI0/BZhu09rXggu10J4TVoYMlWWeKr51x2IM3lcp83k4NUfAqVbrQYsn3w/lvuvTt0lQ9Hn027CNJLt3m7YaXctIaXYCHnIWfog5Src3Okg/pldo7Ys8O7S9qHXrgIEllWee35uYJ9MkAHXgVq3s9Dxguan56iHCRZUa3/hPDAa3/U7dtiuGloTTZ7aXFrnO9xPio8Zs5D5JViaqpbsGpdpK4cxDxRRItbpl02R1Jfsje2zIy+8LCI/ekkc0a4b7Lj3y8ggAACCCCAAAIIIIAA8v9C8qaoRosqXngmsmVOXHgWVxsSyxaemXosJFR2mBMxpxRQpOPB0YihKsOIjAbjdnEml8vOhUaGX97s7VEwvTdfDo+E5kyn7pe7JDQWVDZjIbtDMk5JuZGcSyQScQXDlz2XNJyS8vwp8s+bzy6kzJsPYfIigAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg/yTfATinNXQTM7TQAAAAAElFTkSuQmCC", - "description": "Allows to send RPC command when user press the button.", + "description": "Allows to send RPC command when the user presses the button.", "descriptor": { "type": "rpc", "sizeX": 4, diff --git a/application/src/main/data/json/system/widget_types/rpc_debug_terminal.json b/application/src/main/data/json/system/widget_types/rpc_debug_terminal.json index ac995e24cd..d028097b16 100644 --- a/application/src/main/data/json/system/widget_types/rpc_debug_terminal.json +++ b/application/src/main/data/json/system/widget_types/rpc_debug_terminal.json @@ -3,7 +3,7 @@ "name": "RPC debug terminal", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAIAAADGnbT+AAAABmJLR0QA/wD/AP+gvaeTAAAWcklEQVR42u2dB5QWRZeGi6QgklFUDJhFMCJGRFHMomMAMStiBvUXRTFgRjGLERMoiIBZ1GVXdNcF4yIe5agYdvVnfkAwIAoiIs4+/72na3u+NN8wAzsD73vmzOnur7rCrbfuvV3VfSuUlZXNnDnzmGOOadKkSRCEKgAKlZSUzJgxA1IFWNWyZUsJRagutGjRAlIFdJVkIVQvevbsGWQBhWpH06ZNJQRBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEITlRK9evc5KwAdAnTt3rlevXvz1oIMOir+efvrp3bp1a9WqVUYOderUOfDAAy+77LJLL7308MMPX2ONNYop99577+ULyaOPPrpwsvfff59kG264Ya0W8uDBg6+55pqq5PDRRx8hh3XXXbfWtPnzzz8vK4/PPvtsjz328F9ffvnljF9///33q6++Ot6+/vrrv/fee+kEX3zxxeabb15biHXqqafecsstK5S4a6655pIlS/7444+11lprtSPWEUcc0alTp/333//hhx/mdNasWa54nFj9+vXj19122+2MM8747rvvuHLiiSe6rnrrrbc4feyxxzp27Aifbr/9dk6nTp1aW4j10ksvkf8uu+yyQoVM/piC1VFjbbbZZtGu+RUXhBMLgxjTQymuvPrqqxzvs88+HH/44Ydps/jJJ59wccstt8wua+ONN7722mvvuOOOQw89NJtYlAIv7777buwp+aSJtd122w0YMIBbUDDRUjMYsL8bbbSRn+63336ctm/f3k/XXnvtiy66iFsw4htssAE/MWzSlWncuDEXUc/kT7L4cXn9+vVxD+65557bbrttr732iunJ7dxzz91mm22o4QEHHECIA27v0aMHgkKFDxs2jIsk23PPPWng0KFD995773jv3wx+3Ldv34svvrh58+a06L777jv77LMbNGiQtgBcf+CBB8hz6623XnWIBd59990CxOrSpQtX3n77bY6HDBnCMfJNZ4gfRl9uuummGQWhz3788UfS//nnn/z/4Ycf0sR6/PHHOcVkLF26lAMkmybW3LlzMSVuaseOHes/jRkzhlPI7aeuLI8//niOGzVq5PxetmzZX3/9VVpayvFdd92Vrs86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", - "description": "Allows to send any RPC command using its name and parameters to device. Useful for debug.", + "description": "Allows to send any RPC command using its name and parameters to the device. Useful for debugging.", "descriptor": { "type": "rpc", "sizeX": 9.5, diff --git a/application/src/main/data/json/system/widget_types/rpc_remote_shell.json b/application/src/main/data/json/system/widget_types/rpc_remote_shell.json index f1a486b8a2..d95085d22a 100644 --- a/application/src/main/data/json/system/widget_types/rpc_remote_shell.json +++ b/application/src/main/data/json/system/widget_types/rpc_remote_shell.json @@ -3,7 +3,7 @@ "name": "RPC remote shell", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAIAAADGnbT+AAAABmJLR0QA/wD/AP+gvaeTAAAU6klEQVR42u2dCbSW0xrHtyZDOpVkyFCKIplCZpLMIVJIhsgYmSUakLniInOGyFRXaCn3ilws89Q1RrpRSq4k15Tx3N96Ht9e73m/4Xzn9EVH//8666z97u99997v3v/9PM8e3meH8vLyWbNmdevWrUGDBkEQFgNQqGvXrtOmTYNUAVatssoqqhShVGjcuDGkCsgq1YVQWnTv3j1IAwolR1lZmSpBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEARBEAShmujRo8fxGfAB0NZbb127du3465577hl/7d2796677tqkSZNUCsstt9wee+zRv3//c845p0uXLvXq1ftLVtQ222zDJ50PP/xwlZ7abbfdeOruu+8mXKtWLcKzZ89eJoj1/vvvl1fEe++9t9122/mvEyZMSP26aNGiQYMGxcfXXHPNl156KXnDBx980KpVq6Xh1aD7FVdcsdVWW4lYfxqx9t9//y233JJauPXWW7mcM2eOCx4n1imnnMKv1Oyxxx47b948Yg4//HCXVc888wyXt99+e7t27eDT8OHDuXzttdeWhlcbOnQohTnmmGNErD+NWC1btox6zWPQiZFYKMR4P5QiZuLEiYR32WUXwq+//npSLb711ltEbrDBBqmMDjnkENTluuuue+mllx533HEe2axZs/POO++mm24666yzVl11VY9s27Ytd3bo0GHvvfe+/PLLhw0btummmxJ/0EEHXXfddRdddFGbNm2SKcPpCy+8kET69evXqFEjj6QzPPXUU5Rk3LhxJ554Yry5c+fOJHjttdfisIDS5qyTpk2bnn322eR1/vnnR+kbiUV2Q4YMufLKK7fffvvkU+uss86AAQMoxhlnnBEdIIhYLWPMiy++WIBYO+64IzHPP/884csuu4wwJEgmiB2GQbbeeuulMpo8eTI3z5w5k/8kS8xOO+20cOFCLr/77jv+z507t3nz5sT37NnTpSb/f/75Z/5///33Dz74IIGffvrJ74/pQ5pffvmFyB9++MGbbf311yceLxcew81Tp071m2l1T8TTueOOO7IrZOONN/7qq6/IlxTQ+9y57777RmKRPsl6qX799VdeNhLom2++ie+CH4S11lpLxPqd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", - "description": "Allows to emulate remote shell. Requires custom implementation on the target device to work properly.", + "description": "Allows to emulate remote shell. Requires custom implementation on the target device to work correctly.", "descriptor": { "type": "rpc", "sizeX": 9.5, diff --git a/application/src/main/data/json/system/widget_types/service_rpc.json b/application/src/main/data/json/system/widget_types/service_rpc.json index aa6730697b..f822c87bb4 100644 --- a/application/src/main/data/json/system/widget_types/service_rpc.json +++ b/application/src/main/data/json/system/widget_types/service_rpc.json @@ -2,8 +2,8 @@ "fqn": "gateway_widgets.service_rpc", "name": "Service RPC", "deprecated": false, - "image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAEAAAAAAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAJNBKMDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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Nm8SeLPidri6Tp+lWdwiXFvCEZ5r2RTkiGJVyxwBzjOa9moAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK4Oy/ap+GGp+L18PW3xI8B3GvtcmyXTI/EFo9404baYhEJN/mBgRtxnIxiu8r4N/YQ/4IveDfhB8UvGXxI+JXg7w7qnxKufiJqvijw9rVpqNy8lnZz3BltgyhkTeu5sqVYZJGSKAPsn4j/HPwT8HHtV8XeMPC3hVr8MbYaxq0FibgLjds8113YyM4zjIrV8HeNtF+Inh231jw/q+l67pN5kwXun3SXVvNglTtkQlWwQQcHggivJ/2yv2APhX+3HoVovxF8G2Hiy+0K3uF0drq6uIVtJJVGT+6dQclU+8DjH1rH/4JX/sx+JP2N/2DfAHw38XNpsniLwzbTQ3jWE5mtyWnkkGx2VSRtYdQKAPoSiiigCvqulWuvaZcWN9bW95Z3kbQz288YkimRhhlZTkMpBIIPBFfL6/8ESP2V18bjXv+FN+H/tIuPtQs/tV3/ZQlznd/Z/nfZM/9sunHSvqiigDmfiH8GfCfxa+Gt34N8TeHNG1vwrfW4tZtJu7RJLR4gAFXYRgbcDGMFSARjAryv8AZw/4JifAj9krxq3iTwF8O9O0nXhG0MOoXN5dalcWcbfeSB7qWUwIem2LaMcYxxXvVFAHF/Dz9nrwf8KfiL408WaBo/2DxB8Q7uC+8QXX2qeX+0JoYVgjbY7ske2NVXEaqDjJBPNM+Ov7OPgn9pjQNK0vx14ftfEOn6Jq1trllDNJJGILy3bfDLlGUnaeqnKsOGBHFdvRQByPx1+BfhX9pb4Ta14F8baX/bXhXxFB9m1Cy+0zW32iPcGx5kLpIvKg5VgeKh+Lv7Ovgf4+fCmTwP408M6X4k8KzRpGdPvo/NRdgwjK2dyuuOHUhh1BrtKKAPHf2X/+Cf8A8Hv2M7rULr4b+B7DQNQ1RRHd6hJc3GoX80YORGbm5kkm8sHkIH2j0rL/AGkv+CZnwL/a48bweJvH3w907VvEVvEIP7Utry6028niHSOWW1lieZB/dkLL2xXu1FAHN/CT4PeFvgL4A0/wr4L0DS/DPh3Sk8u10/T7dYYIR1JwOrE8ljkknJJNZnxT/Zy8GfGvxn4K8QeJtG/tLWPh3qbax4euPtc8P9n3TRmMybY3VZPlJG2QMvfGea7eigDi/wBoH9nfwb+1N8L73wZ480SPX/DmoSRTS2zTy27rJE4kjkSWFkkjdXUEMjKwI61Dffs2+C9T+MPhfx9caRJP4u8GaXcaNo+ovfXDNa2k+zzoynmbJC3lp88is4xwRk57qigArg/2h/2YPh9+1l4Dbwz8RvCWj+LtF8wTJb38O4wSDgSROCHjfGRuRlbBPNd5RQB4j+y//wAE4vgn+xprV3qnw58A6boes30flTapPc3Gpai8f/PP7TdSSzBOnyhwOBxwK9uoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK+Df2EP8AgtD4N+L/AMUvGXw3+JXjHw7pfxKtviJqvhfw9otpp1ykl5ZwXBitizBXTe21ssWUZBOAK+8q4Oy/ZX+GGmeL18Q23w38B2+vrcm9XU4/D9ol4s5bcZRKI9/mFiTuznJzmgDj/wBsr9v/AOFf7DmhWjfEXxlYeE77Xbe4bR1urW4mW7kiUZH7pGAwWT7xGc/Wsf8A4JX/ALTniT9sf9g3wB8SPFy6bH4i8TW0014thAYbcFZ5IxsRmYgbVHUmvW/iP8DfBPxje1bxd4P8LeKmsAwtjrGk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in5Uf8I5af8APFPyq9RQBR/4Ry0/54p+VH/COWn/ADxT8qvUUAUf+EctP+eKflTo9DtYjlYkH4VcooAakaxj5RTqKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAory9/jd4tsz5c/w51CSVTgtb6lC0be4LBT+YpP+F7+KP+ib61/4H2/+NAHqNFeXf8L38Uf9E31r/wAD7f8Axo/4Xv4o/wCib61/4H2/+NAHqNFeXf8AC9/FH/RN9a/8D7f/ABo/4Xv4o/6JvrX/AIH2/wDjQB6jRXl3/C9/FH/RN9a/8D7f/Gj/AIXv4o/6JvrX/gfb/wCNAHqNFeXf8L38Uf8ARN9a/wDA+3/xo/4Xv4o/6JvrX/gfb/40Aeo0V5d/wvfxR/0TfWv/AAPt/wDGj/he/ij/AKJvrX/gfb/40Aeo0V5d/wAL38Uf9E31r/wPt/8AGj/he/ij/om+tf8Agfb/AONAHqNFeXf8L38Uf9E31r/wPt/8aP8Ahe/ij/om+tf+B9v/AI0Aeo0V5d/wvfxR/wBE31r/AMD7f/Gj/he/ij/om+tf+B9v/jQB6jRXl3/C9/FH/RN9a/8AA+3/AMaP+F7+KP8Aom+tf+B9v/jQB6jRXl3/AAvfxR/0TfWv/A+3/wAaP+F7+KP+ib61/wCB9v8A40Aeo0V5d/wvfxR/0TfWv/A+3/xo/wCF7+KP+ib61/4H2/8AjQB6jRXl3/C9/FH/AETfWv8AwPt/8aP+F7+KP+ib61/4H2/+NAHqNFeXf8L38Uf9E31r/wAD7f8Axo/4Xv4o/wCib61/4H2/+NAHqNFeXf8AC9/F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CH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/VPU9Gj1D5vuSf3h3+tZn/CwIf+fG9/76h/8AjlH/AAsCH/nxvf8AvqH/AOOUAQXGi3Nu3+rZh6r82ahFnMzYEUhPptNXf+FgQ/8APje/99Q//HKP+FgQ/wDPje/99Q//ABygBln4fnuG+dfKX1PX8q3LGwjsItsa/Unqaxv+FgQ/8+N7/wB9Q/8Axyj/AIWBD/z43v8A31D/APHKAN+is3w54nt/E8d0YFmjazn+zyrIBlW2I/YkH5XU8HvWlQAUUUUAFFFFAHlf7Q//ACMvh3/r2vf/AEK2rh67j9of/kZfDv8A17Xv/oVtXD0AFFFFAGb4s8Y6T4C0C41bXNU0/RtLs13z3l9cJbwQr6s7kKB9TXH/AAC/as+H/wC1HBrU3gHxJb+JIPD10tnfTQQTJFHKQWAV3RVkBAzuQsvvW78Ufg54V+NmiWum+LtB0zxFp1ndx30VrfwiaETJnaxQ8NjJ4II56V85f8E7bWKx/aX/AGoYYY44YYvG0KJGihVRRbDAAHAA9KAPrKiiigDovAP/AC9/8A/9mrmfgp/yP/jv/sID/wBGT103gH/l7/4B/wCzVzPwU/5H/wAd/wDYQH/oyegD0iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDW+D/XxJ/2FR/6SW1dlXG/B/r4k/7Co/8ASS2rsqACiiigAooooA8r/aH/AORl8O/9e17/AOhW1cPXpPxh0Vdd8Z6DC0jRhbK9fIH+3aj+tYf/AArmH/n5l/75FAHJUV1v/CuYf+fmX/vkUf8ACuYf+fmX/vkUAeOfH7/hY3/CvZP+FW/8IT/wlf2iPZ/wlX2r+z/J58zP2f8Aeb+mO3XNfMf7Ln7Nv7UPwR+OnijxFql18BLjR/iLr8OseJUtJdWe5gVVCOtmGRVU7M4EpbnqcV9//wDCuYf+fmX/AL5FH/CuYf8An5l/75FAHJUV1v8AwrmH/n5l/wC+RR/wrmH/AJ+Zf++RQBU8A/8AL3/wD/2auZ+Cn/I/+O/+wgP/AEZPXp3gr4eIv2rZ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", - "description": null, + "image": "data:image/png;base64,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", + "description": "Allow users to send RPC requests to specific devices through the gateway.", "descriptor": { "type": "rpc", "sizeX": 8.5, @@ -17,4 +17,4 @@ "settingsDirective": "tb-gateway-service-rpc-settings", "defaultConfig": "{\"targetDeviceAliases\":[],\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"isConnector\":false},\"title\":\"Service RPC\"}" } -} \ No newline at end of file +} diff --git a/application/src/main/data/json/system/widget_types/simple_gauge.json b/application/src/main/data/json/system/widget_types/simple_gauge.json index 3ec1196d41..1683efee14 100644 --- a/application/src/main/data/json/system/widget_types/simple_gauge.json +++ b/application/src/main/data/json/system/widget_types/simple_gauge.json @@ -3,7 +3,7 @@ "name": "Simple gauge", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Preconfigured gauge to display any value reading as a circle. Allows to configure value range, gradient colors and other settings.", + "description": "Preconfigured gauge to display any value reading as a circle. Allows to configure value range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 2, diff --git a/application/src/main/data/json/system/widget_types/simple_neon_gauge.json b/application/src/main/data/json/system/widget_types/simple_neon_gauge.json index 0028a0d7fd..fd84396430 100644 --- a/application/src/main/data/json/system/widget_types/simple_neon_gauge.json +++ b/application/src/main/data/json/system/widget_types/simple_neon_gauge.json @@ -3,7 +3,7 @@ "name": "Simple neon gauge", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Preconfigured gauge to display any value reading as a doughnut. Allows to configure value range, gradient colors and other settings.", + "description": "Preconfigured gauge to display any value reading as a doughnut. Allows to configure value range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/slide_toggle_control.json b/application/src/main/data/json/system/widget_types/slide_toggle_control.json index 3f4486c431..a533f1d026 100644 --- a/application/src/main/data/json/system/widget_types/slide_toggle_control.json +++ b/application/src/main/data/json/system/widget_types/slide_toggle_control.json @@ -3,7 +3,7 @@ "name": "Slide Toggle Control", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Allows to send the RPC call to device when user toggle the slider. Advanced widget settings allow you to configure how to fetch the initial value of the slider.", + "description": "Sends the RPC call to the device when the user toggles the slider. Appearance widget settings will enable you to configure how to fetch the initial value of the slider.", "descriptor": { "type": "rpc", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/speed_gauge.json b/application/src/main/data/json/system/widget_types/speed_gauge.json index 752211a3cf..2c70d27cf5 100644 --- a/application/src/main/data/json/system/widget_types/speed_gauge.json +++ b/application/src/main/data/json/system/widget_types/speed_gauge.json @@ -3,7 +3,7 @@ "name": "Speed gauge", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Preconfigured gauge to display speed. Allows to configure speed range, gradient colors and other settings.", + "description": "Preconfigured gauge to display speed. Allows to configure speed range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 7, diff --git a/application/src/main/data/json/system/widget_types/switch_control.json b/application/src/main/data/json/system/widget_types/switch_control.json index 95b8cc3016..ee66563b8b 100644 --- a/application/src/main/data/json/system/widget_types/switch_control.json +++ b/application/src/main/data/json/system/widget_types/switch_control.json @@ -3,7 +3,7 @@ "name": "Switch Control", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Allows to send the RPC call to device when user toggle the switch. Advanced widget settings allow you to configure how to fetch the initial value of the switch.", + "description": "Sends the RPC call to the device when the user toggles the switch. Appearance widget settings will enable you to configure how to fetch the initial value of the switch.", "descriptor": { "type": "rpc", "sizeX": 4, diff --git a/application/src/main/data/json/system/widget_types/temperature_radial_gauge.json b/application/src/main/data/json/system/widget_types/temperature_radial_gauge.json index 1f3598f702..d11faa7ab2 100644 --- a/application/src/main/data/json/system/widget_types/temperature_radial_gauge.json +++ b/application/src/main/data/json/system/widget_types/temperature_radial_gauge.json @@ -3,7 +3,7 @@ "name": "Temperature radial gauge", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Preconfigured gauge to display temperature. Allows to configure temperature range, gradient colors and other settings.", + "description": "Preconfigured gauge to display temperature. Allows to configure temperature range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 6, diff --git a/application/src/main/data/json/system/widget_types/tencent_map.json b/application/src/main/data/json/system/widget_types/tencent_map.json index 25ebe39e8c..342c5d1782 100644 --- a/application/src/main/data/json/system/widget_types/tencent_map.json +++ b/application/src/main/data/json/system/widget_types/tencent_map.json @@ -3,7 +3,7 @@ "name": "Tencent Map", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Show latest values and location of the entities on Tencent maps.", + "description": "Displays the location of the entities on Tencent maps. Requires the Tencent map key to work properly. Highly customizable via custom markers, marker tooltips, and widget actions.", "descriptor": { "type": "latest", "sizeX": 9, diff --git a/application/src/main/data/json/system/widget_types/thermometer_scale.json b/application/src/main/data/json/system/widget_types/thermometer_scale.json index 68c7e22d2e..cdc4a2268a 100644 --- a/application/src/main/data/json/system/widget_types/thermometer_scale.json +++ b/application/src/main/data/json/system/widget_types/thermometer_scale.json @@ -3,7 +3,7 @@ "name": "Thermometer scale", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Preconfigured widget to display temperature. Allows to configure temperature range, gradient colors and other settings.", + "description": "Preconfigured widget to display temperature. Allows to configure temperature range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 7, diff --git a/application/src/main/data/json/system/widget_types/timeseries_bar_chart.json b/application/src/main/data/json/system/widget_types/timeseries_bar_chart.json index 2ae875c925..baf662a9de 100644 --- a/application/src/main/data/json/system/widget_types/timeseries_bar_chart.json +++ b/application/src/main/data/json/system/widget_types/timeseries_bar_chart.json @@ -3,7 +3,7 @@ "name": "Timeseries Bar Chart", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAABOFBMVEUAAAA3oPR3d3d6enp8fHyBgYGDg4OGhoaNjY2RkZGSkpKTk5OUlJSVlZWWlpaXl5eYmJiZmZmampqcnJydnZ2enp6goKChoaGioqKjo6OkpKSlpaWmpqanp6eoqKipqamqqqqrq6usrKytra2urq6wsLCxsbGysrK0tLS1tbW2tra3t7e4uLi5ubm6urq8vLy9vb2+vr6/v7/AwMDBwcHDw8PExMTHx8fIyMjJycnLy8vNzc3Ozs7Pz8/S0tLT09PU1NTV1dXW1tbX19fZ2dna2trb29vc3Nzd3d3e3t7f39/h4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojq6urr6+vs7Ozt7e3u7u7v7+/w8PDx8fH09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7/xx////8KXFhiAAAAAWJLR0RnW9PpswAAAvtJREFUeNrt3GtXElEUBuDpZlAqylVHCyMwyi4SpkaWAl4qk8wwUhJlmOn9//+gLzbKbc6AAm5991p82WvPOedZZw6zYM3aGupCQ4tYkZDSsKDrocNVvz8jHQKYY1ZiT/6OAJllRPSpsnzIqIG9SjYmHpKfAzI4CIuHjJeBtyHfZwCatiI1/m+BYV2Dw35NniOEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQUp/6Wx+DgbRbxOAhEb/fXJ98akiH1AIAHtSWlqRDSvdDGcOHnYR0SPV7zVsaQyHeO0jTJapEV5C9bUz9fIjsvHRIefhRxHqpjxzA3ftajXOudHGJOtHV+1rV04/wHenDc2QQkFbLJISQwUDaP90IIYQQQgghpAvIxRO9gFxG4lZ9XBFIx6sihJD+QVRjEEIIIYQQcoMgahkhhBDSe0iLX3ydQdSLIKR9ghCJkIYEIYQQIhPS8d+AhPQboppFw9HMxBrs/lqCIbObpgezP67YjnQ8iwagHDzrryUZUgsUz/prCYZY05vn+msJhiwM6XrR7q/V9OJU4xQuEpcxRsezNPbXEn3Yzz9Hulg3IYT0C3LxxI2CNCQIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQlpA7P5a0iF2fy3hkLP+WsIhVbu/lvRby+6vJR1i99eSG6ffu1XHxlRNcfWq3I0iIK4tJK2nXVyV0lOqEmvjGWAtvnCu+jMzkQWMiOlYdRSd3MAH/UnVPWR/ApFfSkcpiOBvRc3XtAeYW1ZUJbZMD5C8azhWLX4xvZVR692Se0huHm9ySogxkhs3lFVewPM4WlFUlUMoJEYUox1+jAFIbLuHrKaQWlMu8TicDp+4gdw7/qS4t2qBohk4UUF2nieBfLyDM/ItgXhBucT113i14QbixW7M+SRNb6EQ0u8kHavyZQxj2/kgNUCsYDRoqXfEF/Mdu4G8D43uOtakh3R9H1DsyKZvOmneDjt+D/0DTzolrPMHmggAAAAASUVORK5CYII=", - "description": "Displays changes to timeseries data over time. For example, daily water consumption for last month.", + "description": "Displays changes to time-series data over time—for example, daily water consumption for the last month.", "descriptor": { "type": "timeseries", "sizeX": 8, diff --git a/application/src/main/data/json/system/widget_types/timeseries_line_chart.json b/application/src/main/data/json/system/widget_types/timeseries_line_chart.json index 2dd4b07d6c..27d2b8881e 100644 --- a/application/src/main/data/json/system/widget_types/timeseries_line_chart.json +++ b/application/src/main/data/json/system/widget_types/timeseries_line_chart.json @@ -3,7 +3,7 @@ "name": "Timeseries Line Chart", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays changes to timeseries data over time. For example, temperature or humidity readings.", + "description": "Displays changes to time-series data over time—for example, temperature or humidity readings.", "descriptor": { "type": "timeseries", "sizeX": 8, diff --git a/application/src/main/data/json/system/widget_types/timeseries_table.json b/application/src/main/data/json/system/widget_types/timeseries_table.json index 0432c36731..b16672a942 100644 --- a/application/src/main/data/json/system/widget_types/timeseries_table.json +++ b/application/src/main/data/json/system/widget_types/timeseries_table.json @@ -3,7 +3,7 @@ "name": "Timeseries table", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays time series data for one or more entities. Data for each entity is displayed in a separate tab.", + "description": "Displays time series data for one or more entities. Data for each entity is displayed in a separate tab. Columns are configured to display entity fields, attributes, or telemetry data. Highly customizable via cell content functions and row style functions.", "descriptor": { "type": "timeseries", "sizeX": 8, diff --git a/application/src/main/data/json/system/widget_types/trip_animation.json b/application/src/main/data/json/system/widget_types/trip_animation.json index 5a5b57e92f..9ef5751385 100644 --- a/application/src/main/data/json/system/widget_types/trip_animation.json +++ b/application/src/main/data/json/system/widget_types/trip_animation.json @@ -3,7 +3,7 @@ "name": "Trip Animation", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Trip animation on the OpenStreetMap or other map providers. Allows to visualize location and other timeseries data for each point in time.", + "description": "Displays the trip of the entity on the OpenStreetMap or other map providers. Allows to scroll and animate the movement of the entity. Highly customizable via custom markers, marker tooltips, and widget actions.", "descriptor": { "type": "timeseries", "sizeX": 10, diff --git a/application/src/main/data/json/system/widget_types/update_multiple_attributes.json b/application/src/main/data/json/system/widget_types/update_multiple_attributes.json index 1d3950cf65..69a44074f0 100644 --- a/application/src/main/data/json/system/widget_types/update_multiple_attributes.json +++ b/application/src/main/data/json/system/widget_types/update_multiple_attributes.json @@ -3,7 +3,7 @@ "name": "Update Multiple Attributes", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Allows to create an input form and set values for multiple attributes simultaneously.", + "description": "Allows to create an input form and set multiple values of the entity. Each input value may be stored as an attribute or time series data.\nEach input field is highly customizable via input types, value conversion functions, etc.", "descriptor": { "type": "latest", "sizeX": 7.5, diff --git a/application/src/main/data/json/system/widget_types/usage_info.json b/application/src/main/data/json/system/widget_types/usage_info.json index 0e936b1c60..7dfe641aa9 100644 --- a/application/src/main/data/json/system/widget_types/usage_info.json +++ b/application/src/main/data/json/system/widget_types/usage_info.json @@ -3,7 +3,7 @@ "name": "Usage info", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAACClBMVEXj4+Pj4+Pk5OTh4eHh4eHg4ODg4OAAAAD////k5OT7+/vw8PD2+fn+/v7u7u78/P39/f33+/ry8vLz8/T5+fns7O3n6+/39/fIyMj5+vvn5+fp6enh4eHPz8+nuMnDw8Pm7fDS0tLLy8ucr8HX19cuVX/p6uzU1NTp7PHd3d3Y3OL29vf19fbZ2dm5ubnb29vm5ubR0dGYmJjr6+v09PTg4ODf39/W1tatra2UlJSqqqrc5OrOzs7Nzc3FxcW7u7vRJi/Kysr09/jv8vXK1N4xVoGfn5/j4+P77Ozw9Pa/v7+vr6+ampr++vr98/S0tLSysrKnp6eioqJlgqGVlZXmiI3y9ffs8PTk6u7F0Nu5xdO1w9LAwMCDmrN0jqpuiaZEZ407X4eru8uRkZGOjo7QIivf5uybrcHq7/LzxcegssSXq7++vr7lhIksU3765+j209SitMbCwsJ+lrDokJXnjJD1zs/ywMPxvL+KoLd5k63YSVH+9/j87/D32tvwtrmkpKTplprW3+bT2+Suvc3BwcHtqaxZeJrvsrWcnJza4efM1+C9vb2Tp72xsbHsoqU2W4TP2eKywdD0ycuPpLrurrL54eL43t/AzNjqmp6Kior66errnqLg4+eGnbXkfIHgbXO9ytd9fX3bUlnEzNZcepuDg4PdXmVPb5N6enp1dXXZT1bZSlLYR09HwTUoAAAACHRSTlP19Ne5tENBAIsfhKcAABBjSURBVHja7NbfT9pAAMBx9vvao1dEOii/ymQRia6yKWpWNzLbbAGX6MYirQhN2EIJ9UX7BI+AMUFZouHBF02WuP9zhTk9NkVYYgLGLxxcn7hPrs1hefLogYUY8u49fPzE8vg+ZMnhjmbh/UeWhxDcguADyz0W3IJYi4WgwS2IJCwECW5Bd5BB61ZCnA7gmARXRNnaUWBAwyH7Y+DZKgkoANqjsyl3u4E9c3DICgfGXs+O8SHyBe9ywsQ+N+re3zlbOmuHdkjMMWBA64C8NSGh92M8irk+P9tcWPwa/RRbjl3cXZCIDAfE3JGFmZUFDvKxj9vLL53vn39bfh2j/zgQMYWGArLz2r0Q87p8X+ZfzX/m+NXwl/B77nkYc4DhgNhjCzyE/Kpramd59YVndeHbTPj7ihdzDAkEUA4bALSDAjbWRhH86icnIMnz58N0ADgckI6cIR/ELkdbDkAO7D/lW3myD3V3kEHrDjJoDR6EovvJ1g1C3XBdHSy09xOcvAJC0Q443mOMfXZ29D+aZK+2UHYn1U80JC+F2GaruaAW7LHi+jGEqP/gKHsVxAZtoK/sjssg5HhOU4RAj8mVQ/0UQQT7C0GT4rxRCD2uHYoj/ZQvphHsN9R6O24QQtm30ksj1n4aSRVPIUSdi2xfYjt1NkP4jiA7fXMQUgrG8UWanc/bH5dJBD0CcQfGQtgMYRdtCpr8TwhNXwuZLR5ga11S/P602MKkUqnaRCEeaN92LWCHJHcK8cJeyMz7fFE07YHnuRcjL5kLaPvTbusOyR+AlMKCf1J+XAehZK2ArTFeNnLpQkCQlxr6RE0o+eWaGBcC1riQX8Ihe358Q2b4DeThn4Vic4koRChCmOMDIvjopmfGa9LQGcR8k90hhyWqmk2JcgFQgYBIigGrmF8C1qdBHYgy2xVS31qz4hC9HpDUTFZKJvfK67tZychrhlH1lw1lBIMIQYRBprltwsMTTGLehMD5jZ3QHMe9IWLeBMFx3AyEFxC2B0jr9wUla2SFpKGUMk2xYSS1vGFobFdIsROSLP04KgtlpaHLyXomV1GV3aBabJz4D3BIXmOwLeF8rkXPyjbHRTajkElE3dNe3zs+akK8MV+oA+LoAaKoT5vaSbqqVpKC7C/+3FPlolZMbiXlbpBjPdUB8Yvxo0wh04YIJ7WKerRb3FIkfzaHQ6pFeFFkZSPGE/x0hGFMyMzmBybie2veZyYkMr0Yi0DY862VNlilrGTXdD1zJKiVbPzIOPwpqaJf09TDXLwbBAYF/BnJZJvB9VKhJOXMHc7rhlQWTkqNA63ZCUmvY5CQi/FwzxNuCJltL0Q+zvXSl+B474aX874d23dfQBC87mHPNsu16m5T3UuXM8mKsaaozaRQKmW3KmXdb+0CAY71nPWipbokHcj5NSGVkuTKmiwF6msF5SDeGpgjoB9jELfHHG6itVKCMTVz0wwTDn9gCIZAxAsCYQ/7FNUdAiakCl1VlTol1BpZUabJSlVgxb16AeSlCaobxDau7438dY60Xtb21+9Ze+DcWg1C1HEcns3Op3jo/ByBZC/nSL5orlNoNKX+/qKQv9ixv5aEoTCO47c/dzrbUTfODpsKJYIuXZPQFERICZSgf1JQQZdGddM76CIvKgp6Ad70ShumNGLZFixG7HO2m13tC2M8PJXnJ/d1g0sPzm5Lnx3enh9mLWIhSAgTFIAQYYdGXhnfP/ZW0sFsX76u5d2OcCGLDyvS6ReidHo9vsoH4/4I+x+D01fLh3u3g1NEGwKmytNKUFOSIe7l3t7jeeJ/spaE71AiIRQi/EMASllQyu9QLMFJNoxMlsZ1+SCpYQga2y3Kv1kHJSFJSLwkIXGThMRNEhI33hC5bG5igRl/36ed65wWuw24lLIKWA0NSm5oQJvoPHhIU7d1DYwzpoCJlABXAcEBiTNIFFFTH152b8xWrWUA2DjgsNpvOnL1Wp0cbu10Z3nHCxKd8wspw3TUZq5o2Mw2qtzsrMqy00lZTqfKqyqitj6ya3vDfdzpACYFQJHbBbQLysgZEbsuACV/NHfR753MDKhPyDv7ddOSQBDHcfz6W2V2l81tH2VwGFkXWV3zARVcMClRg1UTibKDeA0P3bpFEN2kY3Sv15mudpNuhpGfd/DlBzP88xCbLm3fl5nK4kwNFMtnBY8K1LcNjWDXSP390wlDDCZAdmhhqbcMaZJzvXZUqWlA52OejsynN8drGWnrIn6Sd7kT95pcY0VdIlnKeL5USRZi2D1xJgSD3AKPAcCr5DskkE+So6NokdZL+iySnl5nfghptJml6r5rqGExsdzEdWwvJZhmyqaKL2HXlNlzte7N9JoA0nOwsqDQLyYjcZirhwDGl/ON180iV9tC1LwrgphckCUzJlmS4lUMo8zFmO0Vjd94pMv9uzhp9DlBKSxhxTWRoD0Xaq6rACBvtxsPT+POSut0b0/diKxhO1lak8l/+BD/tEPIvjmEfLFb96gNwwAYhtdvEfhIGb1Im4+QQYOQBv0YKsloEd48GCeYGGzIkKHtHZsMgRi8dDGh9LnBu73v5j/k3fzNEM8ZVijDnk6Do0U/WAKAKg8SlIR3wxlyaNgvQtStB5j08JKBlCXpEyOXkniPPYSq0S4KJ06PqI6CdYtDrRtx0cM04I6Wa6HYCiFTGonUOodRp+CM5uMt1tpYy7EHKagblTlXZwBtDRSsq9G5wvQiREMBOn59vPpeSroRchFKSCs4l3PNT3PudG/8OPFIPfbAqtZoOc+CASxdcJfvIZxoLlisPBCux8Or41XSjfttlrQMjE8pqGzskpveahpb47CTc2PaZvKJAyrjGVIXlRVBGfoIOaxthlDdM2v42IiYamFTrlWcY9emHBV2EVojrXAignTqGcJ1W5UppwEAux3XPrdC/E97d9raShXHcbzuv5lzz8wwmcM5sxlmGBnDzGTfTVJy1UTa3NsmxAWta4soFNSC2wO1oKLFy0UQVKoI+kDUV2naREGtkkJTU83nWZYH+ZIHJ/85h8zrN3Dj9ZtvffAVff/Tt7T33nnnsRtvf/XNB2/f/PIrXIrHXv0G2lufvk5x89ObOPHla7jxxQdf4rHJpwBAX33z8T/49qa23OsIvbFaEK+6VciyWYUsm1XIsvlPhtgppGz8y6L9Zouyre2OCcBOAL6+nS079awyf4grQXIRERkq4TDKhkxicBmXyu8V9uz2uJCoALICsI+7IRnsNDcxce3BmVeuaeop+jchBaVdqBlBwSetjh26XeIwXKqIVIqlj4+3HQD6IQEyP9RDtpvKFE3AfPeFmZ++fmVa9LD2NyG26Fv2htPNtW25mzhlTcPlkoq7cfVWdjcFtLYBKOsHe+3d6Y7Vw5/Mdqz+eaOn4MAp8HzY6m9UqkpLoaWqsHDJ8pZRDPNlvmdDqycAGMNov0GCgTz3jpUkMkKy3UAQP0lIgZitXFeyFFwqr5htlDq9+oBDOuQAkskT+eGwuA/g+vMPzPONUFYpUc2u6IgdWyYmyo6tkRiXSk3SEoxQKECmgAmaSUsoixbHxIdvzNz/8vWpa8u9Y3VKo//3BfFKW4Usm1XIslmFLJu/D1E1gJ7xkkyxWCr+RANAzxNiuaFF8ZuKBfCaij+RPY5FYTse4mwvLQMwRARq7TuIt0Yecod1Nn9I6Nq+hNiOINsEQVAyYmERirJtQGVMlXWiEisdmyWdRiYunHzrxybEMHdcBVBtyog3f0zj41G4axXFdh0T119+aOrlJ9Qp7eyjgFY71Qq7Ua3QtYO06+r7nsgrftiKMgW/Ym9k+sLL6q7nK30FF46q2TpYKh73AWy1Aarenh48azdSmYYBmN/9Plh9PxusntTOPgoo4kqyrhQ8JxVUuWDClNywCq/CMl1X8uBaRoe0gn5MKRZgEgK1vk0BMiJnHAWcc7CqZVD1rLZ9wOy+7yQO7zAh51teBV7GrQSuFJ6G6HZfWFhUiPZxnQNob2EWUt+Ri+GYBAP1NGSewSpIhy3d7oS3mBf6/ZzEfWUnFBLzA19vFYSbDyCJcId4gbAkBQuwsY3az/VsH3KzihNbArVGsxdtHw7Sp4PVozO/h7xyRkhsMwMas4hsWEyLuJaSic0oSD5ClGdlHkFjJV2LLEbLHAtAFChBECiIOwZOKDpoxVXAvUTGxEMfvTT10VPXrp8yl3tBpHS1sl91q5BlswpZNquQZfPHEHVJ/ilalWX195lKMwGY6jlC5EzbK+M3Rgr/FmO9ORzGAJwCYDdHgtZGw/z8IdV2KvGiMnTTzJfkRHDZslVTsRiROLhEKLHLXFKozrFYmsLSYwPApgtsryfHUiPMDjHx8GePTH32pDml/jWEuhJUUqnBtb1CS/I29JrnJvZOsuN7LncD3253mRu2maRg4YY+AGWkA4opjSu7s8Hq2RdnXvh+9uv3jMGKti2AVj34VuA6sVSIO0ZZOD48JxLOrZzItRSt5fU5Fk8qlgF01zGRKnbZOXasZhNirurRrmVb7YzkRoLrJyGhFIn+gWXpkxDLEhIoFq1+C4A8dADEzQ1Kdpk3UOcO0due6OvC27cDz5eUjpK02pVSgQYW98sFL1Q8orph15IYFowNFADVoQxg/5dRs789aAgA15/7fOaFfxqswG2dIsVSsswIpYSrCqFqBG5qMTWZTrkGg6VoZGDBTEZPQhJMKJlMJjZyfQ0TLz/9zNTTT12bkv/bC+IVtgpZNquQZbMKWTb/yRBK5z03ccFXFHkEaGUZkMvTx/zksQqYMU5p02kL4NE8IY6nwWiVcGmizqEOINcb1LTs0ZAozcGBBiS9o5y8PahH1rAnMGEJALlD9/Sdc4SEmwqkuoOSE4FVFKQcm5qSZEJxSlyzJE6Zo6slFRfFqf9QAtSe8Iq5hnX4cbbe32XgRVf0kobVE5tbmV0CYL0DsF1RVo8m7zQAKZ3Tom6X06RjnxUSrAeau+Hk3cBVOkk7JYIWcwIvICLX6Ttu4JVEzo0dGRdG3ysB8Z6tjDsj7GwOu3IjA9JQSuOdJrZu90K+ZwHlEQO6P49uszFjezrIXnbgbG6O1v1BthefFeJ18y232hbhgdKuSUboVbkd+N1MiCAjfK/D/MDSgIsPIcXOIdK3D/1ZCCtuTEI2ZyHhbQDZhl1MFychBPHRUOR/GB4Neh1IBs4arGrr/bBaCEu2npfSLG8Lp+Vk/IqLMOMnpRKxnHSkUlwYclwCjHHiFGtjvrm+ndX3LEQNJ1d0B3L9oHmg7DHQegBAjLTDg2JS2Y1AWoU9cZyuVZr7psfPCEkcZYcHktJtJaTtuinP9VniCz9uF3Ycq1twFN91y4mBC5MaMABid5Dmw0HDqjSO6jKQHo+7vHdUZLlxcVOFPYoA6EdHPUU0immAjHoN6aA4KlSLvc2zvhFZpgZMFZyY4MSATDhUPTZMx+nYiMjpK5RTXBia0gBQK6+BSwRQJAOAZtkUsUMAJsmAneBE3I+h2ZYGoOwQaFZeBnH4eRZENeNllv7mj/Ot7EtyAfJ/9xPlSluFLJv/TIgqra0t7W3PzsO8Y+2upb195nmQu9fuuZOYqny1meTOe9fuu/fuO6Qrbu2ue+77FT+ZKIsnuNqQAAAAAElFTkSuQmCC", - "description": "Display statistics about platform entities and API usage.", + "description": "Display statistics about the number of entities and API usage.", "descriptor": { "type": "static", "sizeX": 7.5, diff --git a/application/src/main/data/json/system/widget_types/value_and_chart_card.json b/application/src/main/data/json/system/widget_types/value_and_chart_card.json index 136419c70c..3efb2c3b44 100644 --- a/application/src/main/data/json/system/widget_types/value_and_chart_card.json +++ b/application/src/main/data/json/system/widget_types/value_and_chart_card.json @@ -3,7 +3,7 @@ "name": "Value and chart card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Displays current and aggregated difference values with a timeseries chart. Widget styles are customizable.", + "description": "Displays a single entity telemetry data as a combination of the latest and aggregated values. Optionally may display the corresponding historical values as a simplified chart.", "descriptor": { "type": "timeseries", "sizeX": 4.5, diff --git a/application/src/main/data/json/system/widget_types/value_card.json b/application/src/main/data/json/system/widget_types/value_card.json index bfab0cbac1..c2fb6dd274 100644 --- a/application/src/main/data/json/system/widget_types/value_card.json +++ b/application/src/main/data/json/system/widget_types/value_card.json @@ -3,7 +3,7 @@ "name": "Value card", "deprecated": false, "image": "data:image/png;base64,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", - "description": "Designed to display single value of the selected attribute or timeseries data. Widget styles are customizable.", + "description": "Displays a single entity attribute or the latest telemetry data in a box layout.", "descriptor": { "type": "latest", "sizeX": 3, diff --git a/application/src/main/data/json/system/widget_types/vertical_bar.json b/application/src/main/data/json/system/widget_types/vertical_bar.json index 6f658d91a9..31d3b3fdd9 100644 --- a/application/src/main/data/json/system/widget_types/vertical_bar.json +++ b/application/src/main/data/json/system/widget_types/vertical_bar.json @@ -3,7 +3,7 @@ "name": "Vertical bar", "deprecated": false, "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAABQVBMVEVqampra2tsbGxtbW1ubm5vb29wcHBycnJzc3N0dHR2dnZ3d3d5eXl6enp7e3t8fHx+fn6BgYGDg4OFhYWHh4eIiIiKioqNjY2Ojo6RkZGTk5OWlpaZmZmbm5uenp6fn5+goKCkpKSlpaWmpqanp6eoqKiqqqqrq6usrKytra2xsbGysrK0tLS1tbW2tra4uLi6urq7u7u9vb2+vr7AwMDBwcHExMTFxcXHx8fIyMjJycnKysrMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXX19fY2NjZ2dnb29vc3Nzd3d3f39/g4ODh4eHj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u7u7v7+/w8PDx8fHy8vLz8/P09PT1fAD19fX29vb39/f6+vr7+/v8/Pz9/f3+/v7///8uFkw3AAAAAWJLR0RqJWKVDgAAAkBJREFUeNrt3ElTE3EQhvGebKMIiUExGkSNuCEiKAqKRKJsIuISN0giwQFC5v3+H8BD5uDBE2WV9tTTp1x/lTyd/6lNKRkDAgQIECBA/jtIHEXx4FOv3fMMWTSLJOn9eN4+OoZ0zg4gjZxduvXDMWQim7FIaoe5hutGXtn90CJp2mZcx340cv44tEgas9kLufKyW8ht21BokVSwTPWKBdtOIdvBDSm0SH2zFWnaxn1CeqPB03o9b88+9C2IpV0r+YTsWDJ3NWQdqWNDPiGH9Xp98I3ous1Ji1b1/NYKLZI+FzKTd3LBG/cQbZXNii9T8frttGKe8UCAAJGaS5J6j2/O96TuzOTz2CfkxZhVJF0tTY1MqF++eK/w0Cdkar5akdrBa60EnTXb04NzXn9a1yrSln1V094+yUvLduQYsmp7+m5rs2ekhrUdQ9ZtV99sYy6UGrbvGPLJdvTOmkvBsRay8T+CtE45v0NOirVurdRvZR/tX67KMUSbwza8KS2ENvrFKySZA0lSfMgTBUjqIH+pESBAiB0IjQBhawEBQuxAaAQIWwsIEGIHQiNA2FpAgBA7EBoBwtYCAoTYgdAIELYWECDEDoRGgKQK8vOUAwQIsQOhESBsLWIHQuxAaAQIW4vYgRA7EBoBwtYidiDEDoRGgLC1iB0IsQOhESBsrXTHnlws9g8ZXCz230hysdg/JLlY7B+SXCz230hysdg/JLlY7B9yUqx1a8V+CtZvcrE4Df/sBzxRgAABAgQIECB/mF+DKtRemhqPQgAAAABJRU5ErkJggg==", - "description": "Preconfigured gauge to display any value reading as a bar. Allows to configure value range, gradient colors and other settings.", + "description": "Preconfigured gauge to display any value reading as a bar. Allows to configure value range, gradient colors, and other settings.", "descriptor": { "type": "latest", "sizeX": 2, diff --git a/application/src/main/data/upgrade/3.5.1/schema_update.sql b/application/src/main/data/upgrade/3.5.1/schema_update.sql index 5aab5d740b..f41e370ab5 100644 --- a/application/src/main/data/upgrade/3.5.1/schema_update.sql +++ b/application/src/main/data/upgrade/3.5.1/schema_update.sql @@ -138,6 +138,9 @@ CREATE TABLE IF NOT EXISTS alarm_types ( INSERT INTO alarm_types (tenant_id, type) SELECT DISTINCT tenant_id, type FROM alarm ON CONFLICT (tenant_id, type) DO NOTHING; +ALTER TABLE widgets_bundle ALTER COLUMN description SET DATA TYPE varchar(1024); +ALTER TABLE widget_type ALTER COLUMN description SET DATA TYPE varchar(1024); + ALTER TABLE widget_type ADD COLUMN IF NOT EXISTS fqn varchar(512); ALTER TABLE widget_type diff --git a/application/src/main/java/org/thingsboard/server/actors/service/DefaultActorService.java b/application/src/main/java/org/thingsboard/server/actors/service/DefaultActorService.java index dd5bd4f1ed..380da71443 100644 --- a/application/src/main/java/org/thingsboard/server/actors/service/DefaultActorService.java +++ b/application/src/main/java/org/thingsboard/server/actors/service/DefaultActorService.java @@ -121,7 +121,7 @@ public class DefaultActorService extends TbApplicationEventListener { + String serviceQueue = queueKey.getQueueName(); + log.info("[{}] Subscribing to partitions: {}", serviceQueue, partitions); + Queue configuration = consumerConfigurations.get(queueKey); + if (configuration == null) { + return; + } + if (!configuration.isConsumerPerPartition()) { + consumers.get(queueKey).subscribe(partitions); + } else { + log.info("[{}] Subscribing consumer per partition: {}", serviceQueue, partitions); + subscribeConsumerPerPartition(queueKey, partitions); + } + }); } } diff --git a/application/src/main/java/org/thingsboard/server/service/state/DefaultDeviceStateService.java b/application/src/main/java/org/thingsboard/server/service/state/DefaultDeviceStateService.java index cdc5afe361..41a41f5e82 100644 --- a/application/src/main/java/org/thingsboard/server/service/state/DefaultDeviceStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/state/DefaultDeviceStateService.java @@ -223,7 +223,7 @@ public class DefaultDeviceStateService extends AbstractPartitionBasedService= deviceState.getLastActivityTime()) { deviceState.setLastInactivityAlarmTime(0L); @@ -425,7 +429,7 @@ public class DefaultDeviceStateService extends AbstractPartitionBasedService { log.debug("Calculating state updates. tpi {} for {} devices", tpi.getFullTopicName(), deviceIds.size()); Set idsFromRemovedTenant = new HashSet<>(); @@ -455,7 +459,7 @@ public class DefaultDeviceStateService extends AbstractPartitionBasedService> stats = new HashMap<>(); for (DeviceStateData stateData : deviceStates.values()) { Pair tenantDevicesActivity = stats.computeIfAbsent(stateData.getTenantId(), @@ -486,8 +490,8 @@ public class DefaultDeviceStateService extends AbstractPartitionBasedService(deviceId, key, value)); } else { tsSubService.saveAttrAndNotify(TenantId.SYS_TENANT_ID, deviceId, SERVER_SCOPE, key, value, new TelemetrySaveCallback<>(deviceId, key, value)); @@ -809,13 +813,17 @@ public class DefaultDeviceStateService extends AbstractPartitionBasedService(deviceId, key, value)); } else { tsSubService.saveAttrAndNotify(TenantId.SYS_TENANT_ID, deviceId, SERVER_SCOPE, key, value, new TelemetrySaveCallback<>(deviceId, key, value)); } } + long getCurrentTimeMillis() { + return System.currentTimeMillis(); + } + private static class TelemetrySaveCallback implements FutureCallback { private final DeviceId deviceId; private final String key; diff --git a/application/src/main/java/org/thingsboard/server/service/sync/ie/exporting/impl/WidgetTypeExportService.java b/application/src/main/java/org/thingsboard/server/service/sync/ie/exporting/impl/WidgetTypeExportService.java new file mode 100644 index 0000000000..5edc9782d4 --- /dev/null +++ b/application/src/main/java/org/thingsboard/server/service/sync/ie/exporting/impl/WidgetTypeExportService.java @@ -0,0 +1,51 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ +package org.thingsboard.server.service.sync.ie.exporting.impl; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.EntityType; +import org.thingsboard.server.common.data.id.WidgetTypeId; +import org.thingsboard.server.common.data.sync.ie.WidgetTypeExportData; +import org.thingsboard.server.common.data.widget.WidgetTypeDetails; +import org.thingsboard.server.queue.util.TbCoreComponent; +import org.thingsboard.server.service.sync.vc.data.EntitiesExportCtx; + +import java.util.Set; + +@Service +@TbCoreComponent +@RequiredArgsConstructor +public class WidgetTypeExportService extends BaseEntityExportService { + + @Override + protected void setRelatedEntities(EntitiesExportCtx ctx, WidgetTypeDetails widgetsBundle, WidgetTypeExportData exportData) { + if (widgetsBundle.getTenantId() == null || widgetsBundle.getTenantId().isNullUid()) { + throw new IllegalArgumentException("Export of system Widget Type is not allowed"); + } + } + + @Override + protected WidgetTypeExportData newExportData() { + return new WidgetTypeExportData(); + } + + @Override + public Set getSupportedEntityTypes() { + return Set.of(EntityType.WIDGET_TYPE); + } + +} \ No newline at end of file diff --git a/application/src/main/java/org/thingsboard/server/service/sync/ie/exporting/impl/WidgetsBundleExportService.java b/application/src/main/java/org/thingsboard/server/service/sync/ie/exporting/impl/WidgetsBundleExportService.java index 3fe9cd9e4a..f984bb9d79 100644 --- a/application/src/main/java/org/thingsboard/server/service/sync/ie/exporting/impl/WidgetsBundleExportService.java +++ b/application/src/main/java/org/thingsboard/server/service/sync/ie/exporting/impl/WidgetsBundleExportService.java @@ -42,8 +42,8 @@ public class WidgetsBundleExportService extends BaseEntityExportService widgets = widgetTypeService.findWidgetFqnsByWidgetsBundleId(ctx.getTenantId(), widgetsBundle.getId()); - exportData.setWidgets(widgets); + List fqns = widgetTypeService.findWidgetFqnsByWidgetsBundleId(ctx.getTenantId(), widgetsBundle.getId()); + exportData.setFqns(fqns); } @Override diff --git a/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/WidgetTypeImportService.java b/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/WidgetTypeImportService.java new file mode 100644 index 0000000000..88ebbbcee3 --- /dev/null +++ b/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/WidgetTypeImportService.java @@ -0,0 +1,70 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ +package org.thingsboard.server.service.sync.ie.importing.impl; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.EntityType; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.data.id.WidgetTypeId; +import org.thingsboard.server.common.data.id.WidgetsBundleId; +import org.thingsboard.server.common.data.sync.ie.WidgetTypeExportData; +import org.thingsboard.server.common.data.sync.ie.WidgetsBundleExportData; +import org.thingsboard.server.common.data.widget.WidgetTypeDetails; +import org.thingsboard.server.common.data.widget.WidgetsBundle; +import org.thingsboard.server.dao.widget.WidgetTypeService; +import org.thingsboard.server.dao.widget.WidgetsBundleService; +import org.thingsboard.server.queue.util.TbCoreComponent; +import org.thingsboard.server.service.sync.vc.data.EntitiesImportCtx; + +@Service +@TbCoreComponent +@RequiredArgsConstructor +public class WidgetTypeImportService extends BaseEntityImportService { + + private final WidgetTypeService widgetTypeService; + + @Override + protected void setOwner(TenantId tenantId, WidgetTypeDetails widgetsBundle, IdProvider idProvider) { + widgetsBundle.setTenantId(tenantId); + } + + @Override + protected WidgetTypeDetails prepare(EntitiesImportCtx ctx, WidgetTypeDetails widgetsBundle, WidgetTypeDetails old, WidgetTypeExportData exportData, IdProvider idProvider) { + return widgetsBundle; + } + + @Override + protected WidgetTypeDetails saveOrUpdate(EntitiesImportCtx ctx, WidgetTypeDetails widgetsBundle, WidgetTypeExportData exportData, IdProvider idProvider) { + return widgetTypeService.saveWidgetType(widgetsBundle); + } + + @Override + protected boolean compare(EntitiesImportCtx ctx, WidgetTypeExportData exportData, WidgetTypeDetails prepared, WidgetTypeDetails existing) { + return true; + } + + @Override + protected WidgetTypeDetails deepCopy(WidgetTypeDetails widgetsBundle) { + return new WidgetTypeDetails(widgetsBundle); + } + + @Override + public EntityType getEntityType() { + return EntityType.WIDGET_TYPE; + } + +} diff --git a/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/WidgetsBundleImportService.java b/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/WidgetsBundleImportService.java index 975eb62f2f..21cf3e4a88 100644 --- a/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/WidgetsBundleImportService.java +++ b/application/src/main/java/org/thingsboard/server/service/sync/ie/importing/impl/WidgetsBundleImportService.java @@ -17,22 +17,19 @@ package org.thingsboard.server.service.sync.ie.importing.impl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.WidgetsBundleId; import org.thingsboard.server.common.data.sync.ie.WidgetsBundleExportData; -import org.thingsboard.server.common.data.widget.BaseWidgetType; +import org.thingsboard.server.common.data.util.CollectionsUtil; import org.thingsboard.server.common.data.widget.WidgetTypeDetails; -import org.thingsboard.server.common.data.widget.WidgetTypeInfo; import org.thingsboard.server.common.data.widget.WidgetsBundle; import org.thingsboard.server.dao.widget.WidgetTypeService; import org.thingsboard.server.dao.widget.WidgetsBundleService; import org.thingsboard.server.queue.util.TbCoreComponent; import org.thingsboard.server.service.sync.vc.data.EntitiesImportCtx; -import java.util.Map; -import java.util.stream.Collectors; - @Service @TbCoreComponent @RequiredArgsConstructor @@ -53,8 +50,27 @@ public class WidgetsBundleImportService extends BaseEntityImportService { + String bundleAlias = widgetTypeNode.remove("bundleAlias").asText(); + String alias = widgetTypeNode.remove("alias").asText(); + String fqn = String.format("%s.%s", bundleAlias, alias); + exportData.addFqn(fqn); + WidgetTypeDetails widgetType = JacksonUtil.treeToValue(widgetTypeNode, WidgetTypeDetails.class); + widgetType.setTenantId(ctx.getTenantId()); + widgetType.setFqn(fqn); + var existingWidgetType = widgetTypeService.findWidgetTypeByTenantIdAndFqn(ctx.getTenantId(), fqn); + if (existingWidgetType == null) { + widgetType.setId(null); + } else { + widgetType.setId(existingWidgetType.getId()); + widgetType.setCreatedTime(existingWidgetType.getCreatedTime()); + } + widgetTypeService.saveWidgetType(widgetType); + }); + } WidgetsBundle savedWidgetsBundle = widgetsBundleService.saveWidgetsBundle(widgetsBundle); - widgetTypeService.updateWidgetsBundleWidgetFqns(ctx.getTenantId(), savedWidgetsBundle.getId(), exportData.getWidgets()); + widgetTypeService.updateWidgetsBundleWidgetFqns(ctx.getTenantId(), savedWidgetsBundle.getId(), exportData.getFqns()); return savedWidgetsBundle; } diff --git a/application/src/test/java/org/thingsboard/server/controller/EdgeControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/EdgeControllerTest.java index 081ce09ae7..1afeaff0cb 100644 --- a/application/src/test/java/org/thingsboard/server/controller/EdgeControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/EdgeControllerTest.java @@ -1107,7 +1107,7 @@ public class EdgeControllerTest extends AbstractControllerTest { public void testGetEdgeInstallInstructions() throws Exception { Edge edge = constructEdge(tenantId, "Edge for Test Docker Install Instructions", "default", "7390c3a6-69b0-9910-d155-b90aca4b772e", "l7q4zsjplzwhk16geqxy"); Edge savedEdge = doPost("/api/edge", edge, Edge.class); - String installInstructions = doGet("/api/edge/instructions/" + savedEdge.getId().getId().toString(), String.class); + String installInstructions = doGet("/api/edge/instructions/" + savedEdge.getId().getId().toString() + "/docker", String.class); Assert.assertTrue(installInstructions.contains("l7q4zsjplzwhk16geqxy")); Assert.assertTrue(installInstructions.contains("7390c3a6-69b0-9910-d155-b90aca4b772e")); } diff --git a/application/src/test/java/org/thingsboard/server/edge/AbstractEdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/AbstractEdgeTest.java index 410348762f..689847416c 100644 --- a/application/src/test/java/org/thingsboard/server/edge/AbstractEdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/AbstractEdgeTest.java @@ -102,7 +102,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @TestPropertySource(properties = { "edges.enabled=true", - "queue.rule-engine.stats.enabled=false" + "queue.rule-engine.stats.enabled=false", + "edges.storage.sleep_between_batches=1000" }) abstract public class AbstractEdgeTest extends AbstractControllerTest { diff --git a/application/src/test/java/org/thingsboard/server/edge/AssetEdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/AssetEdgeTest.java index faf0896b81..08ea322cb8 100644 --- a/application/src/test/java/org/thingsboard/server/edge/AssetEdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/AssetEdgeTest.java @@ -96,7 +96,7 @@ public class AssetEdgeTest extends AbstractEdgeTest { edgeImitator.expectMessageAmount(1); doDelete("/api/asset/" + savedAsset.getUuidId()) .andExpect(status().isOk()); - Assert.assertTrue(edgeImitator.waitForMessages(1)); + Assert.assertTrue(edgeImitator.waitForMessages(5)); // create asset #2 and assign to edge edgeImitator.expectMessageAmount(2); @@ -262,9 +262,9 @@ public class AssetEdgeTest extends AbstractEdgeTest { private Asset saveAssetOnCloudAndVerifyDeliveryToEdge() throws Exception { // create asset and assign to edge Asset savedAsset = saveAsset(StringUtils.randomAlphanumeric(15)); - edgeImitator.expectMessageAmount(1); // asset message + edgeImitator.expectMessageAmount(2); // asset and asset profile messages doPost("/api/edge/" + edge.getUuidId() - + "/asset/" + savedAsset.getUuidId(), Device.class); + + "/asset/" + savedAsset.getUuidId(), Asset.class); Assert.assertTrue(edgeImitator.waitForMessages()); Optional assetUpdateMsgOpt = edgeImitator.findMessageByType(AssetUpdateMsg.class); Assert.assertTrue(assetUpdateMsgOpt.isPresent()); diff --git a/application/src/test/java/org/thingsboard/server/edge/CustomerEdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/CustomerEdgeTest.java index 251b4b4caf..6cc15837d9 100644 --- a/application/src/test/java/org/thingsboard/server/edge/CustomerEdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/CustomerEdgeTest.java @@ -42,7 +42,7 @@ public class CustomerEdgeTest extends AbstractEdgeTest { Customer customer = new Customer(); customer.setTitle("Edge Customer"); Customer savedCustomer = doPost("/api/customer", customer, Customer.class); - Assert.assertFalse(edgeImitator.waitForMessages(1)); + Assert.assertFalse(edgeImitator.waitForMessages(5)); // assign edge to customer edgeImitator.expectMessageAmount(2); diff --git a/application/src/test/java/org/thingsboard/server/edge/DashboardEdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/DashboardEdgeTest.java index 2d21d30174..6180ced49c 100644 --- a/application/src/test/java/org/thingsboard/server/edge/DashboardEdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/DashboardEdgeTest.java @@ -99,7 +99,7 @@ public class DashboardEdgeTest extends AbstractEdgeTest { edgeImitator.expectMessageAmount(1); doDelete("/api/dashboard/" + savedDashboard.getUuidId()) .andExpect(status().isOk()); - Assert.assertTrue(edgeImitator.waitForMessages(1)); + Assert.assertTrue(edgeImitator.waitForMessages(5)); // create dashboard #2 and assign to edge edgeImitator.expectMessageAmount(1); diff --git a/application/src/test/java/org/thingsboard/server/edge/DeviceEdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/DeviceEdgeTest.java index 15b15c0be0..aed99b4cba 100644 --- a/application/src/test/java/org/thingsboard/server/edge/DeviceEdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/DeviceEdgeTest.java @@ -106,7 +106,7 @@ public class DeviceEdgeTest extends AbstractEdgeTest { edgeImitator.expectMessageAmount(1); doDelete("/api/device/" + savedDevice.getUuidId()) .andExpect(status().isOk()); - Assert.assertTrue(edgeImitator.waitForMessages(1)); + Assert.assertTrue(edgeImitator.waitForMessages(5)); // create device #2 and assign to edge edgeImitator.expectMessageAmount(2); diff --git a/application/src/test/java/org/thingsboard/server/edge/EdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/EdgeTest.java index 1f205af53a..fd34b0d973 100644 --- a/application/src/test/java/org/thingsboard/server/edge/EdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/EdgeTest.java @@ -39,7 +39,7 @@ public class EdgeTest extends AbstractEdgeTest { Customer customer = new Customer(); customer.setTitle("Edge Customer"); Customer savedCustomer = doPost("/api/customer", customer, Customer.class); - Assert.assertFalse(edgeImitator.waitForMessages(1)); + Assert.assertFalse(edgeImitator.waitForMessages(5)); // assign edge to customer edgeImitator.expectMessageAmount(2); diff --git a/application/src/test/java/org/thingsboard/server/edge/EntityViewEdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/EntityViewEdgeTest.java index 470fd8e576..d56ded7014 100644 --- a/application/src/test/java/org/thingsboard/server/edge/EntityViewEdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/EntityViewEdgeTest.java @@ -105,7 +105,7 @@ public class EntityViewEdgeTest extends AbstractEdgeTest { edgeImitator.expectMessageAmount(1); doDelete("/api/entityView/" + savedEntityView.getUuidId()) .andExpect(status().isOk()); - Assert.assertTrue(edgeImitator.waitForMessages(1)); + Assert.assertTrue(edgeImitator.waitForMessages(5)); // create entity view #2 and assign to edge edgeImitator.expectMessageAmount(1); diff --git a/application/src/test/java/org/thingsboard/server/edge/RuleChainEdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/RuleChainEdgeTest.java index 83b2370cf0..848b115c72 100644 --- a/application/src/test/java/org/thingsboard/server/edge/RuleChainEdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/RuleChainEdgeTest.java @@ -32,6 +32,7 @@ import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.gen.edge.v1.RuleChainMetadataRequestMsg; import org.thingsboard.server.gen.edge.v1.RuleChainMetadataUpdateMsg; import org.thingsboard.server.gen.edge.v1.RuleChainUpdateMsg; +import org.thingsboard.server.gen.edge.v1.RuleNodeProto; import org.thingsboard.server.gen.edge.v1.UpdateMsgType; import org.thingsboard.server.gen.edge.v1.UplinkMsg; @@ -46,6 +47,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @DaoSqlTest public class RuleChainEdgeTest extends AbstractEdgeTest { + private static final int CONFIGURATION_VERSION = 5; + @Test public void testRuleChains() throws Exception { // create rule chain @@ -138,6 +141,10 @@ public class RuleChainEdgeTest extends AbstractEdgeTest { RuleChainId receivedRuleChainId = new RuleChainId(new UUID(ruleChainMetadataUpdateMsg.getRuleChainIdMSB(), ruleChainMetadataUpdateMsg.getRuleChainIdLSB())); Assert.assertEquals(ruleChainId, receivedRuleChainId); + + for (RuleNodeProto ruleNodeProto : ruleChainMetadataUpdateMsg.getNodesList()) { + Assert.assertEquals(CONFIGURATION_VERSION, ruleNodeProto.getConfigurationVersion()); + } } private void createRuleChainMetadata(RuleChain ruleChain) { @@ -147,7 +154,7 @@ public class RuleChainEdgeTest extends AbstractEdgeTest { RuleNode ruleNode1 = new RuleNode(); ruleNode1.setName("name1"); ruleNode1.setType(org.thingsboard.rule.engine.metadata.TbGetAttributesNode.class.getName()); - ruleNode1.setConfigurationVersion(TbGetAttributesNode.class.getAnnotation(org.thingsboard.rule.engine.api.RuleNode.class).version()); + ruleNode1.setConfigurationVersion(CONFIGURATION_VERSION); TbGetAttributesNodeConfiguration configuration = new TbGetAttributesNodeConfiguration(); configuration.setFetchTo(TbMsgSource.METADATA); configuration.setServerAttributeNames(Collections.singletonList("serverAttributeKey2")); @@ -156,13 +163,13 @@ public class RuleChainEdgeTest extends AbstractEdgeTest { RuleNode ruleNode2 = new RuleNode(); ruleNode2.setName("name2"); ruleNode2.setType(org.thingsboard.rule.engine.metadata.TbGetAttributesNode.class.getName()); - ruleNode2.setConfigurationVersion(TbGetAttributesNode.class.getAnnotation(org.thingsboard.rule.engine.api.RuleNode.class).version()); + ruleNode2.setConfigurationVersion(CONFIGURATION_VERSION); ruleNode2.setConfiguration(JacksonUtil.valueToTree(configuration)); RuleNode ruleNode3 = new RuleNode(); ruleNode3.setName("name3"); ruleNode3.setType(org.thingsboard.rule.engine.metadata.TbGetAttributesNode.class.getName()); - ruleNode3.setConfigurationVersion(TbGetAttributesNode.class.getAnnotation(org.thingsboard.rule.engine.api.RuleNode.class).version()); + ruleNode3.setConfigurationVersion(CONFIGURATION_VERSION); ruleNode3.setConfiguration(JacksonUtil.valueToTree(configuration)); List ruleNodes = new ArrayList<>(); @@ -222,6 +229,6 @@ public class RuleChainEdgeTest extends AbstractEdgeTest { edgeImitator.expectMessageAmount(1); doDelete("/api/ruleChain/" + savedRuleChain.getUuidId()) .andExpect(status().isOk()); - Assert.assertTrue(edgeImitator.waitForMessages(1)); + Assert.assertTrue(edgeImitator.waitForMessages(5)); } } diff --git a/application/src/test/java/org/thingsboard/server/edge/UserEdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/UserEdgeTest.java index d1d555f691..3fd39328d5 100644 --- a/application/src/test/java/org/thingsboard/server/edge/UserEdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/UserEdgeTest.java @@ -120,7 +120,7 @@ public class UserEdgeTest extends AbstractEdgeTest { Customer customer = new Customer(); customer.setTitle("Edge Customer"); Customer savedCustomer = doPost("/api/customer", customer, Customer.class); - Assert.assertFalse(edgeImitator.waitForMessages(1)); + Assert.assertFalse(edgeImitator.waitForMessages(5)); // assign edge to customer edgeImitator.expectMessageAmount(2); diff --git a/application/src/test/java/org/thingsboard/server/edge/imitator/EdgeImitator.java b/application/src/test/java/org/thingsboard/server/edge/imitator/EdgeImitator.java index 9425001aac..f9efbb3ee1 100644 --- a/application/src/test/java/org/thingsboard/server/edge/imitator/EdgeImitator.java +++ b/application/src/test/java/org/thingsboard/server/edge/imitator/EdgeImitator.java @@ -173,6 +173,7 @@ public class EdgeImitator { } private ListenableFuture> processDownlinkMsg(DownlinkMsg downlinkMsg) { + log.trace("processDownlinkMsg: {}", downlinkMsg); List> result = new ArrayList<>(); if (downlinkMsg.getAdminSettingsUpdateMsgCount() > 0) { for (AdminSettingsUpdateMsg adminSettingsUpdateMsg : downlinkMsg.getAdminSettingsUpdateMsgList()) { diff --git a/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java b/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java index 7bd9ec576f..ef87794d96 100644 --- a/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/queue/discovery/HashPartitionServiceTest.java @@ -23,6 +23,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.context.ApplicationEventPublisher; import org.springframework.test.util.ReflectionTestUtils; @@ -35,7 +36,9 @@ import org.thingsboard.server.common.data.id.UUIDBased; import org.thingsboard.server.common.data.queue.Queue; import org.thingsboard.server.common.msg.queue.ServiceType; import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; +import org.thingsboard.server.gen.transport.TransportProtos; import org.thingsboard.server.gen.transport.TransportProtos.ServiceInfo; +import org.thingsboard.server.queue.discovery.event.PartitionChangeEvent; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -49,12 +52,17 @@ import java.util.Random; import java.util.Set; import java.util.UUID; import java.util.concurrent.TimeUnit; +import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @Slf4j @@ -78,15 +86,7 @@ public class HashPartitionServiceTest { applicationEventPublisher = mock(ApplicationEventPublisher.class); routingInfoService = mock(TenantRoutingInfoService.class); queueRoutingInfoService = mock(QueueRoutingInfoService.class); - clusterRoutingService = new HashPartitionService(discoveryService, - routingInfoService, - applicationEventPublisher, - queueRoutingInfoService); - ReflectionTestUtils.setField(clusterRoutingService, "coreTopic", "tb.core"); - ReflectionTestUtils.setField(clusterRoutingService, "corePartitions", 10); - ReflectionTestUtils.setField(clusterRoutingService, "vcTopic", "tb.vc"); - ReflectionTestUtils.setField(clusterRoutingService, "vcPartitions", 10); - ReflectionTestUtils.setField(clusterRoutingService, "hashFunctionName", hashFunctionName); + clusterRoutingService = createPartitionService(); ServiceInfo currentServer = ServiceInfo.newBuilder() .setServiceId("tb-core-0") .addAllServiceTypes(Collections.singletonList(ServiceType.TB_CORE.name())) @@ -101,8 +101,6 @@ public class HashPartitionServiceTest { .build()); } - clusterRoutingService.init(); - clusterRoutingService.partitionsInit(); clusterRoutingService.recalculatePartitions(currentServer, otherServers); } @@ -194,25 +192,12 @@ public class HashPartitionServiceTest { } List queues = new ArrayList<>(); - Queue systemQueue = new Queue(); - systemQueue.setTenantId(TenantId.SYS_TENANT_ID); - systemQueue.setName("Main"); - systemQueue.setTopic(DataConstants.MAIN_QUEUE_TOPIC); - systemQueue.setPartitions(10); - systemQueue.setId(new QueueId(UUID.randomUUID())); - queues.add(systemQueue); + queues.add(createQueue(TenantId.SYS_TENANT_ID, 10)); tenants.forEach((tenantId, profileId) -> { - Queue isolatedQueue = new Queue(); - isolatedQueue.setTenantId(tenantId); - isolatedQueue.setName("Main"); - isolatedQueue.setTopic(DataConstants.MAIN_QUEUE_TOPIC); - isolatedQueue.setPartitions(2); - isolatedQueue.setId(new QueueId(UUID.randomUUID())); - queues.add(isolatedQueue); - when(routingInfoService.getRoutingInfo(eq(tenantId))).thenReturn(new TenantRoutingInfo(tenantId, profileId, true)); + queues.add(createQueue(tenantId, 2)); + mockRoutingInfo(tenantId, profileId, true); }); - when(queueRoutingInfoService.getAllQueuesRoutingInfo()).thenReturn(queues.stream() - .map(QueueRoutingInfo::new).collect(Collectors.toList())); + mockQueues(queues); List ruleEngines = new ArrayList<>(); Map> dedicatedServers = new HashMap<>(); @@ -275,6 +260,90 @@ public class HashPartitionServiceTest { }); } + @Test + public void testPartitionChangeEvents_isolatedProfile_oneCommonServer_oneDedicated() { + ServiceInfo commonRuleEngine = ServiceInfo.newBuilder() + .setServiceId("tb-rule-engine-1") + .addAllServiceTypes(List.of(ServiceType.TB_RULE_ENGINE.name())) + .build(); + TenantProfileId tenantProfileId = new TenantProfileId(UUID.randomUUID()); + ServiceInfo dedicatedRuleEngine = ServiceInfo.newBuilder() + .setServiceId("tb-rule-engine-isolated-1") + .addAllServiceTypes(List.of(ServiceType.TB_RULE_ENGINE.name())) + .addAssignedTenantProfiles(tenantProfileId.toString()) + .build(); + + List queues = new ArrayList<>(); + Queue systemQueue = createQueue(TenantId.SYS_TENANT_ID, 10); + queues.add(systemQueue); + + TenantId tenantId = new TenantId(UUID.randomUUID()); + mockRoutingInfo(tenantId, tenantProfileId, false); // not isolated yet + mockQueues(queues); + + when(discoveryService.isService(eq(ServiceType.TB_RULE_ENGINE))).thenReturn(true); + Mockito.reset(applicationEventPublisher); + HashPartitionService partitionService_common = createPartitionService(); + partitionService_common.recalculatePartitions(commonRuleEngine, List.of(dedicatedRuleEngine)); + verifyPartitionChangeEvent(event -> { + QueueKey queueKey = new QueueKey(ServiceType.TB_RULE_ENGINE, DataConstants.MAIN_QUEUE_NAME, TenantId.SYS_TENANT_ID); + return event.getPartitionsMap().get(queueKey).size() == systemQueue.getPartitions(); + }); + + Mockito.reset(applicationEventPublisher); + HashPartitionService partitionService_dedicated = createPartitionService(); + partitionService_dedicated.recalculatePartitions(dedicatedRuleEngine, List.of(commonRuleEngine)); + verify(applicationEventPublisher, never()).publishEvent(any(PartitionChangeEvent.class)); + + + Queue isolatedQueue = createQueue(tenantId, 3); + queues.add(isolatedQueue); + mockQueues(queues); + mockRoutingInfo(tenantId, tenantProfileId, true); // making isolated + TransportProtos.QueueUpdateMsg queueUpdateMsg = TransportProtos.QueueUpdateMsg.newBuilder() + .setTenantIdMSB(tenantId.getId().getMostSignificantBits()) + .setTenantIdLSB(tenantId.getId().getLeastSignificantBits()) + .setQueueIdMSB(isolatedQueue.getUuidId().getMostSignificantBits()) + .setQueueIdLSB(isolatedQueue.getUuidId().getLeastSignificantBits()) + .setQueueName(isolatedQueue.getName()) + .setQueueTopic(isolatedQueue.getTopic()) + .setPartitions(isolatedQueue.getPartitions()) + .build(); + + partitionService_common.updateQueue(queueUpdateMsg); + partitionService_common.recalculatePartitions(commonRuleEngine, List.of(dedicatedRuleEngine)); + // expecting event about no partitions for isolated queue key + verifyPartitionChangeEvent(event -> { + QueueKey queueKey = new QueueKey(ServiceType.TB_RULE_ENGINE, DataConstants.MAIN_QUEUE_NAME, tenantId); + return event.getPartitionsMap().get(queueKey).isEmpty(); + }); + + partitionService_dedicated.updateQueue(queueUpdateMsg); + partitionService_dedicated.recalculatePartitions(dedicatedRuleEngine, List.of(commonRuleEngine)); + verifyPartitionChangeEvent(event -> { + QueueKey queueKey = new QueueKey(ServiceType.TB_RULE_ENGINE, DataConstants.MAIN_QUEUE_NAME, tenantId); + return event.getPartitionsMap().get(queueKey).size() == isolatedQueue.getPartitions(); + }); + + + queues = List.of(systemQueue); + mockQueues(queues); + mockRoutingInfo(tenantId, tenantProfileId, false); // turning off isolation + Mockito.reset(applicationEventPublisher); + TransportProtos.QueueDeleteMsg queueDeleteMsg = TransportProtos.QueueDeleteMsg.newBuilder() + .setTenantIdMSB(tenantId.getId().getMostSignificantBits()) + .setTenantIdLSB(tenantId.getId().getLeastSignificantBits()) + .setQueueIdMSB(isolatedQueue.getUuidId().getMostSignificantBits()) + .setQueueIdLSB(isolatedQueue.getUuidId().getLeastSignificantBits()) + .setQueueName(isolatedQueue.getName()) + .build(); + partitionService_dedicated.removeQueue(queueDeleteMsg); + verifyPartitionChangeEvent(event -> { + QueueKey queueKey = new QueueKey(ServiceType.TB_RULE_ENGINE, DataConstants.MAIN_QUEUE_NAME, tenantId); + return event.getPartitionsMap().get(queueKey).isEmpty(); + }); + } + @Test public void testIsManagedByCurrentServiceCheck() { TenantProfileId isolatedProfileId = new TenantProfileId(UUID.randomUUID()); @@ -282,9 +351,9 @@ public class HashPartitionServiceTest { TenantProfileId regularProfileId = new TenantProfileId(UUID.randomUUID()); TenantId isolatedTenantId = new TenantId(UUID.randomUUID()); - when(routingInfoService.getRoutingInfo(eq(isolatedTenantId))).thenReturn(new TenantRoutingInfo(isolatedTenantId, isolatedProfileId, true)); + mockRoutingInfo(isolatedTenantId, isolatedProfileId, true); TenantId regularTenantId = new TenantId(UUID.randomUUID()); - when(routingInfoService.getRoutingInfo(eq(regularTenantId))).thenReturn(new TenantRoutingInfo(regularTenantId, regularProfileId, false)); + mockRoutingInfo(regularTenantId, regularProfileId, false); assertThat(clusterRoutingService.isManagedByCurrentService(isolatedTenantId)).isTrue(); assertThat(clusterRoutingService.isManagedByCurrentService(regularTenantId)).isFalse(); @@ -296,4 +365,43 @@ public class HashPartitionServiceTest { assertThat(clusterRoutingService.isManagedByCurrentService(regularTenantId)).isTrue(); } + private void verifyPartitionChangeEvent(Predicate predicate) { + verify(applicationEventPublisher).publishEvent(argThat(event -> event instanceof PartitionChangeEvent && predicate.test((PartitionChangeEvent) event))); + } + + private void mockRoutingInfo(TenantId tenantId, TenantProfileId tenantProfileId, boolean isolatedTbRuleEngine) { + when(routingInfoService.getRoutingInfo(eq(tenantId))) + .thenReturn(new TenantRoutingInfo(tenantId, tenantProfileId, isolatedTbRuleEngine)); + } + + private void mockQueues(List queues) { + when(queueRoutingInfoService.getAllQueuesRoutingInfo()).thenReturn(queues.stream() + .map(QueueRoutingInfo::new).collect(Collectors.toList())); + } + + private Queue createQueue(TenantId tenantId, int partitions) { + Queue systemQueue = new Queue(); + systemQueue.setTenantId(tenantId); + systemQueue.setName("Main"); + systemQueue.setTopic(DataConstants.MAIN_QUEUE_TOPIC); + systemQueue.setPartitions(partitions); + systemQueue.setId(new QueueId(UUID.randomUUID())); + return systemQueue; + } + + private HashPartitionService createPartitionService() { + HashPartitionService partitionService = new HashPartitionService(discoveryService, + routingInfoService, + applicationEventPublisher, + queueRoutingInfoService); + ReflectionTestUtils.setField(partitionService, "coreTopic", "tb.core"); + ReflectionTestUtils.setField(partitionService, "corePartitions", 10); + ReflectionTestUtils.setField(partitionService, "vcTopic", "tb.vc"); + ReflectionTestUtils.setField(partitionService, "vcPartitions", 10); + ReflectionTestUtils.setField(partitionService, "hashFunctionName", hashFunctionName); + partitionService.init(); + partitionService.partitionsInit(); + return partitionService; + } + } diff --git a/application/src/test/java/org/thingsboard/server/service/state/DefaultDeviceStateServiceTest.java b/application/src/test/java/org/thingsboard/server/service/state/DefaultDeviceStateServiceTest.java index ccb0b5e26c..05624b8741 100644 --- a/application/src/test/java/org/thingsboard/server/service/state/DefaultDeviceStateServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/state/DefaultDeviceStateServiceTest.java @@ -15,22 +15,27 @@ */ package org.thingsboard.server.service.state; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.test.util.ReflectionTestUtils; import org.thingsboard.server.cluster.TbClusterService; import org.thingsboard.server.common.data.DeviceIdInfo; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.data.msg.TbMsgType; +import org.thingsboard.server.common.data.notification.rule.trigger.DeviceActivityTrigger; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.query.EntityData; import org.thingsboard.server.common.data.query.EntityKeyType; import org.thingsboard.server.common.data.query.TsValue; +import org.thingsboard.server.common.msg.TbMsg; import org.thingsboard.server.common.msg.TbMsgMetaData; import org.thingsboard.server.common.msg.notification.NotificationRuleProcessor; import org.thingsboard.server.common.msg.queue.ServiceType; @@ -49,17 +54,28 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.UUID; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; +import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.Stream; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; import static org.mockito.BDDMockito.willReturn; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.thingsboard.server.common.data.DataConstants.SERVER_SCOPE; +import static org.thingsboard.server.service.state.DefaultDeviceStateService.ACTIVITY_STATE; +import static org.thingsboard.server.service.state.DefaultDeviceStateService.INACTIVITY_ALARM_TIME; import static org.thingsboard.server.service.state.DefaultDeviceStateService.INACTIVITY_TIMEOUT; +import static org.thingsboard.server.service.state.DefaultDeviceStateService.LAST_ACTIVITY_TIME; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class DefaultDeviceStateServiceTest { @Mock @@ -76,6 +92,12 @@ public class DefaultDeviceStateServiceTest { DeviceStateData deviceStateDataMock; @Mock EntityQueryRepository entityQueryRepository; + @Mock + TelemetrySubscriptionService telemetrySubscriptionService; + @Mock + NotificationRuleProcessor notificationRuleProcessor; + @Mock + DefaultTbApiUsageReportClient defaultTbApiUsageReportClient; TenantId tenantId = new TenantId(UUID.fromString("00797a3b-7aeb-4b5b-b57a-c2a810d0f112")); DeviceId deviceId = DeviceId.fromString("00797a3b-7aeb-4b5b-b57a-c2a810d0f112"); @@ -83,31 +105,23 @@ public class DefaultDeviceStateServiceTest { DefaultDeviceStateService service; - TelemetrySubscriptionService telemetrySubscriptionService; - - @Before + @BeforeEach public void setUp() { - service = spy(new DefaultDeviceStateService(deviceService, attributesService, tsService, clusterService, partitionService, entityQueryRepository, null, mock(DefaultTbApiUsageReportClient.class), mock(NotificationRuleProcessor.class))); - telemetrySubscriptionService = Mockito.mock(TelemetrySubscriptionService.class); + service = spy(new DefaultDeviceStateService(deviceService, attributesService, tsService, clusterService, partitionService, entityQueryRepository, null, defaultTbApiUsageReportClient, notificationRuleProcessor)); ReflectionTestUtils.setField(service, "tsSubService", telemetrySubscriptionService); ReflectionTestUtils.setField(service, "defaultStateCheckIntervalInSec", 60); ReflectionTestUtils.setField(service, "defaultActivityStatsIntervalInSec", 60); ReflectionTestUtils.setField(service, "initFetchPackSize", 10); tpi = TopicPartitionInfo.builder().myPartition(true).build(); - Mockito.when(partitionService.resolve(ServiceType.TB_CORE, tenantId, deviceId)).thenReturn(tpi); - Mockito.when(entityQueryRepository.findEntityDataByQueryInternal(Mockito.any())).thenReturn(new PageData<>()); - var deviceIdInfo = new DeviceIdInfo(tenantId.getId(), null, deviceId.getId()); - Mockito.when(deviceService.findDeviceIdInfos(Mockito.any())) - .thenReturn(new PageData<>(List.of(deviceIdInfo), 0, 1, false)); } @Test public void givenDeviceIdFromDeviceStatesMap_whenGetOrFetchDeviceStateData_thenNoStackOverflow() { service.deviceStates.put(deviceId, deviceStateDataMock); DeviceStateData deviceStateData = service.getOrFetchDeviceStateData(deviceId); - assertThat(deviceStateData, is(deviceStateDataMock)); - Mockito.verify(service, never()).fetchDeviceStateDataUsingEntityDataQuery(deviceId); + assertThat(deviceStateData).isEqualTo(deviceStateDataMock); + verify(service, never()).fetchDeviceStateDataUsingEntityDataQuery(deviceId); } @Test @@ -115,8 +129,8 @@ public class DefaultDeviceStateServiceTest { service.deviceStates.clear(); willReturn(deviceStateDataMock).given(service).fetchDeviceStateDataUsingEntityDataQuery(deviceId); DeviceStateData deviceStateData = service.getOrFetchDeviceStateData(deviceId); - assertThat(deviceStateData, is(deviceStateDataMock)); - Mockito.verify(service, times(1)).fetchDeviceStateDataUsingEntityDataQuery(deviceId); + assertThat(deviceStateData).isEqualTo(deviceStateDataMock); + verify(service, times(1)).fetchDeviceStateDataUsingEntityDataQuery(deviceId); } @Test @@ -152,15 +166,22 @@ public class DefaultDeviceStateServiceTest { DeviceStateData deviceStateData = service.toDeviceStateData(new EntityData(deviceId, latest, Map.of()), new DeviceIdInfo(TenantId.SYS_TENANT_ID.getId(), UUID.randomUUID(), deviceUuid)); - Assert.assertEquals(5000L, deviceStateData.getState().getInactivityTimeout()); + assertThat(deviceStateData.getState().getInactivityTimeout()).isEqualTo(5000L); } private void initStateService(long timeout) throws InterruptedException { service.stop(); - Mockito.reset(service, telemetrySubscriptionService); - ReflectionTestUtils.setField(service, "defaultInactivityTimeoutMs", timeout); + reset(service, telemetrySubscriptionService); + service.setDefaultInactivityTimeoutMs(timeout); service.init(); - PartitionChangeEvent event = new PartitionChangeEvent(this, new QueueKey(ServiceType.TB_CORE), Collections.singleton(tpi)); + when(partitionService.resolve(ServiceType.TB_CORE, tenantId, deviceId)).thenReturn(tpi); + when(entityQueryRepository.findEntityDataByQueryInternal(any())).thenReturn(new PageData<>()); + var deviceIdInfo = new DeviceIdInfo(tenantId.getId(), null, deviceId.getId()); + when(deviceService.findDeviceIdInfos(any())) + .thenReturn(new PageData<>(List.of(deviceIdInfo), 0, 1, false)); + PartitionChangeEvent event = new PartitionChangeEvent(this, ServiceType.TB_CORE, Map.of( + new QueueKey(ServiceType.TB_CORE), Collections.singleton(tpi) + )); service.onApplicationEvent(event); Thread.sleep(100); } @@ -186,7 +207,7 @@ public class DefaultDeviceStateServiceTest { service.checkStates(); activityVerify(false); - Mockito.reset(telemetrySubscriptionService); + reset(telemetrySubscriptionService); long increase = 100; long newTimeout = System.currentTimeMillis() - deviceState.getLastActivityTime() + increase; @@ -197,7 +218,7 @@ public class DefaultDeviceStateServiceTest { service.checkStates(); activityVerify(false); - Mockito.reset(telemetrySubscriptionService); + reset(telemetrySubscriptionService); service.onDeviceActivity(tenantId, deviceId, System.currentTimeMillis()); activityVerify(true); @@ -224,18 +245,18 @@ public class DefaultDeviceStateServiceTest { service.onDeviceActivity(tenantId, deviceId, System.currentTimeMillis()); activityVerify(true); - Mockito.reset(telemetrySubscriptionService); + reset(telemetrySubscriptionService); long increase = 100; long newTimeout = System.currentTimeMillis() - deviceState.getLastActivityTime() + increase; service.onDeviceInactivityTimeoutUpdate(tenantId, deviceId, newTimeout); - Mockito.verify(telemetrySubscriptionService, Mockito.never()).saveAttrAndNotify(Mockito.any(), Mockito.eq(deviceId), Mockito.any(), Mockito.eq("active"), Mockito.any(), Mockito.any()); + verify(telemetrySubscriptionService, never()).saveAttrAndNotify(any(), eq(deviceId), any(), eq(ACTIVITY_STATE), any(), any()); Thread.sleep(defaultTimeout + increase); service.checkStates(); activityVerify(false); - Mockito.reset(telemetrySubscriptionService); + reset(telemetrySubscriptionService); service.onDeviceActivity(tenantId, deviceId, System.currentTimeMillis()); activityVerify(true); @@ -265,11 +286,11 @@ public class DefaultDeviceStateServiceTest { service.checkStates(); activityVerify(false); - Mockito.reset(telemetrySubscriptionService); + reset(telemetrySubscriptionService); long newTimeout = 1; Thread.sleep(newTimeout); - Mockito.verify(telemetrySubscriptionService, Mockito.never()).saveAttrAndNotify(Mockito.any(), Mockito.eq(deviceId), Mockito.any(), Mockito.eq("active"), Mockito.any(), Mockito.any()); + verify(telemetrySubscriptionService, never()).saveAttrAndNotify(any(), eq(deviceId), any(), eq(ACTIVITY_STATE), any(), any()); } @Test @@ -290,16 +311,14 @@ public class DefaultDeviceStateServiceTest { service.onDeviceActivity(tenantId, deviceId, System.currentTimeMillis()); activityVerify(true); - Mockito.reset(telemetrySubscriptionService); - - Mockito.verify(telemetrySubscriptionService, Mockito.never()).saveAttrAndNotify(Mockito.any(), Mockito.eq(deviceId), Mockito.any(), Mockito.eq("active"), Mockito.any(), Mockito.any()); + verify(telemetrySubscriptionService, never()).saveAttrAndNotify(any(), eq(deviceId), any(), eq(ACTIVITY_STATE), any(), any()); long newTimeout = 1; Thread.sleep(newTimeout); service.onDeviceInactivityTimeoutUpdate(tenantId, deviceId, newTimeout); activityVerify(false); - Mockito.reset(telemetrySubscriptionService); + reset(telemetrySubscriptionService); service.onDeviceInactivityTimeoutUpdate(tenantId, deviceId, defaultTimeout); activityVerify(true); @@ -328,17 +347,336 @@ public class DefaultDeviceStateServiceTest { Thread.sleep(defaultTimeout); service.checkStates(); activityVerify(false); - Mockito.reset(telemetrySubscriptionService); + reset(telemetrySubscriptionService); long newTimeout = 1; - Thread.sleep(newTimeout); service.onDeviceInactivityTimeoutUpdate(tenantId, deviceId, newTimeout); - Mockito.verify(telemetrySubscriptionService, Mockito.never()).saveAttrAndNotify(Mockito.any(), Mockito.eq(deviceId), Mockito.any(), Mockito.eq("active"), Mockito.any(), Mockito.any()); + verify(telemetrySubscriptionService, never()).saveAttrAndNotify(any(), eq(deviceId), any(), eq(ACTIVITY_STATE), any(), any()); } private void activityVerify(boolean isActive) { - Mockito.verify(telemetrySubscriptionService, Mockito.times(1)).saveAttrAndNotify(Mockito.any(), Mockito.eq(deviceId), Mockito.any(), Mockito.eq("active"), Mockito.eq(isActive), Mockito.any()); + verify(telemetrySubscriptionService, times(1)).saveAttrAndNotify(any(), eq(deviceId), any(), eq(ACTIVITY_STATE), eq(isActive), any()); + } + + @Test + public void givenStateDataIsNull_whenUpdateActivityState_thenShouldCleanupDevice() { + // GIVEN + service.deviceStates.put(deviceId, deviceStateDataMock); + + // WHEN + service.updateActivityState(deviceId, null, System.currentTimeMillis()); + + // THEN + assertThat(service.deviceStates.get(deviceId)).isNull(); + assertThat(service.deviceStates.size()).isEqualTo(0); + assertThat(service.deviceStates.isEmpty()).isTrue(); + } + + + @ParameterizedTest + @MethodSource("provideParametersForUpdateActivityState") + public void givenTestParameters_whenUpdateActivityState_thenShouldBeInTheExpectedStateAndPerformExpectedActions( + boolean activityState, long previousActivityTime, long lastReportedActivity, long inactivityAlarmTime, + long expectedInactivityAlarmTime, boolean shouldSetInactivityAlarmTimeToZero, + boolean shouldUpdateActivityStateToActive + ) { + // GIVEN + DeviceState deviceState = DeviceState.builder() + .active(activityState) + .lastActivityTime(previousActivityTime) + .lastInactivityAlarmTime(inactivityAlarmTime) + .inactivityTimeout(10000) + .build(); + + DeviceStateData deviceStateData = DeviceStateData.builder() + .tenantId(tenantId) + .deviceId(deviceId) + .state(deviceState) + .metaData(new TbMsgMetaData()) + .build(); + + // WHEN + service.updateActivityState(deviceId, deviceStateData, lastReportedActivity); + + // THEN + assertThat(deviceState.isActive()).isEqualTo(true); + assertThat(deviceState.getLastActivityTime()).isEqualTo(lastReportedActivity); + then(telemetrySubscriptionService).should().saveAttrAndNotify( + any(), eq(deviceId), any(), eq(LAST_ACTIVITY_TIME), eq(lastReportedActivity), any() + ); + + assertThat(deviceState.getLastInactivityAlarmTime()).isEqualTo(expectedInactivityAlarmTime); + if (shouldSetInactivityAlarmTimeToZero) { + then(telemetrySubscriptionService).should().saveAttrAndNotify( + any(), eq(deviceId), any(), eq(INACTIVITY_ALARM_TIME), eq(0L), any() + ); + } + + if (shouldUpdateActivityStateToActive) { + then(telemetrySubscriptionService).should().saveAttrAndNotify( + eq(TenantId.SYS_TENANT_ID), eq(deviceId), eq(SERVER_SCOPE), eq(ACTIVITY_STATE), eq(true), any() + ); + + var msgCaptor = ArgumentCaptor.forClass(TbMsg.class); + then(clusterService).should().pushMsgToRuleEngine(eq(tenantId), eq(deviceId), msgCaptor.capture(), any()); + var actualMsg = msgCaptor.getValue(); + assertThat(actualMsg.getType()).isEqualTo(TbMsgType.ACTIVITY_EVENT.name()); + assertThat(actualMsg.getOriginator()).isEqualTo(deviceId); + + var notificationCaptor = ArgumentCaptor.forClass(DeviceActivityTrigger.class); + then(notificationRuleProcessor).should().process(notificationCaptor.capture()); + var actualNotification = notificationCaptor.getValue(); + assertThat(actualNotification.getTenantId()).isEqualTo(tenantId); + assertThat(actualNotification.getDeviceId()).isEqualTo(deviceId); + assertThat(actualNotification.isActive()).isTrue(); + } + } + + private static Stream provideParametersForUpdateActivityState() { + return Stream.of( + Arguments.of(true, 100, 120, 80, 80, false, false), + + Arguments.of(true, 100, 120, 100, 100, false, false), + + Arguments.of(false, 100, 120, 110, 110, false, true), + + + Arguments.of(true, 100, 100, 80, 80, false, false), + + Arguments.of(true, 100, 100, 100, 100, false, false), + + Arguments.of(false, 100, 100, 110, 0, true, true), + + + Arguments.of(false, 100, 110, 110, 0, true, true), + + Arguments.of(false, 100, 110, 120, 0, true, true), + + + Arguments.of(true, 0, 0, 0, 0, false, false), + + Arguments.of(false, 0, 0, 0, 0, true, true) + ); + } + + @ParameterizedTest + @MethodSource("provideParametersForDecreaseInactivityTimeout") + public void givenTestParameters_whenOnDeviceInactivityTimeout_thenShouldBeInTheExpectedStateAndPerformExpectedActions( + boolean activityState, long newInactivityTimeout, long timeIncrement, boolean expectedActivityState + ) throws Exception { + // GIVEN + long defaultInactivityTimeout = 10000; + initStateService(defaultInactivityTimeout); + + var currentTime = new AtomicLong(System.currentTimeMillis()); + + DeviceState deviceState = DeviceState.builder() + .active(activityState) + .lastActivityTime(currentTime.get()) + .inactivityTimeout(defaultInactivityTimeout) + .build(); + + DeviceStateData deviceStateData = DeviceStateData.builder() + .tenantId(tenantId) + .deviceId(deviceId) + .state(deviceState) + .metaData(new TbMsgMetaData()) + .build(); + + service.deviceStates.put(deviceId, deviceStateData); + service.getPartitionedEntities(tpi).add(deviceId); + + given(service.getCurrentTimeMillis()).willReturn(currentTime.addAndGet(timeIncrement)); + + // WHEN + service.onDeviceInactivityTimeoutUpdate(tenantId, deviceId, newInactivityTimeout); + + // THEN + assertThat(deviceState.getInactivityTimeout()).isEqualTo(newInactivityTimeout); + assertThat(deviceState.isActive()).isEqualTo(expectedActivityState); + if (activityState && !expectedActivityState) { + then(telemetrySubscriptionService).should().saveAttrAndNotify( + any(), eq(deviceId), any(), eq(ACTIVITY_STATE), eq(false), any() + ); + } + } + + private static Stream provideParametersForDecreaseInactivityTimeout() { + return Stream.of( + Arguments.of(true, 1, 0, true), + + Arguments.of(true, 1, 1, false) + ); + } + + @Test + public void givenStateDataIsNull_whenUpdateInactivityTimeoutIfExpired_thenShouldCleanupDevice() { + // GIVEN + service.deviceStates.put(deviceId, deviceStateDataMock); + + // WHEN + service.updateInactivityStateIfExpired(System.currentTimeMillis(), deviceId, null); + + // THEN + assertThat(service.deviceStates.get(deviceId)).isNull(); + assertThat(service.deviceStates.size()).isEqualTo(0); + assertThat(service.deviceStates.isEmpty()).isTrue(); + } + + @Test + public void givenNotMyPartition_whenUpdateInactivityTimeoutIfExpired_thenShouldCleanupDevice() { + // GIVEN + long currentTime = System.currentTimeMillis(); + + DeviceState deviceState = DeviceState.builder() + .active(true) + .lastConnectTime(currentTime - 8000) + .lastActivityTime(currentTime - 4000) + .lastDisconnectTime(0) + .lastInactivityAlarmTime(0) + .inactivityTimeout(3000) + .build(); + + DeviceStateData stateData = DeviceStateData.builder() + .tenantId(tenantId) + .deviceId(deviceId) + .deviceCreationTime(currentTime - 10000) + .state(deviceState) + .build(); + + service.deviceStates.put(deviceId, stateData); + + var notMyTpi = TopicPartitionInfo.builder().myPartition(false).build(); + given(partitionService.resolve(ServiceType.TB_CORE, tenantId, deviceId)).willReturn(notMyTpi); + + // WHEN + service.updateInactivityStateIfExpired(System.currentTimeMillis(), deviceId, stateData); + + // THEN + assertThat(service.deviceStates.get(deviceId)).isNull(); + assertThat(service.deviceStates.size()).isEqualTo(0); + assertThat(service.deviceStates.isEmpty()).isTrue(); + } + + @ParameterizedTest + @MethodSource("provideParametersForUpdateInactivityStateIfExpired") + public void givenTestParameters_whenUpdateInactivityStateIfExpired_thenShouldBeInTheExpectedStateAndPerformExpectedActions( + boolean activityState, long ts, long lastActivityTime, long lastInactivityAlarmTime, long inactivityTimeout, long deviceCreationTime, + boolean expectedActivityState, long expectedLastInactivityAlarmTime, boolean shouldUpdateActivityStateToInactive + ) { + // GIVEN + var state = DeviceState.builder() + .active(activityState) + .lastActivityTime(lastActivityTime) + .lastInactivityAlarmTime(lastInactivityAlarmTime) + .inactivityTimeout(inactivityTimeout) + .build(); + + var deviceStateData = DeviceStateData.builder() + .tenantId(tenantId) + .deviceId(deviceId) + .deviceCreationTime(deviceCreationTime) + .metaData(new TbMsgMetaData()) + .state(state) + .build(); + + if (shouldUpdateActivityStateToInactive) { + given(partitionService.resolve(ServiceType.TB_CORE, tenantId, deviceId)).willReturn(tpi); + } + + // WHEN + service.updateInactivityStateIfExpired(ts, deviceId, deviceStateData); + + // THEN + assertThat(state.isActive()).isEqualTo(expectedActivityState); + assertThat(state.getLastInactivityAlarmTime()).isEqualTo(expectedLastInactivityAlarmTime); + + if (shouldUpdateActivityStateToInactive) { + then(telemetrySubscriptionService).should().saveAttrAndNotify( + eq(TenantId.SYS_TENANT_ID), eq(deviceId), eq(SERVER_SCOPE), eq(ACTIVITY_STATE), eq(false), any() + ); + + var msgCaptor = ArgumentCaptor.forClass(TbMsg.class); + then(clusterService).should().pushMsgToRuleEngine(eq(tenantId), eq(deviceId), msgCaptor.capture(), any()); + var actualMsg = msgCaptor.getValue(); + assertThat(actualMsg.getType()).isEqualTo(TbMsgType.INACTIVITY_EVENT.name()); + assertThat(actualMsg.getOriginator()).isEqualTo(deviceId); + + var notificationCaptor = ArgumentCaptor.forClass(DeviceActivityTrigger.class); + then(notificationRuleProcessor).should().process(notificationCaptor.capture()); + var actualNotification = notificationCaptor.getValue(); + assertThat(actualNotification.getTenantId()).isEqualTo(tenantId); + assertThat(actualNotification.getDeviceId()).isEqualTo(deviceId); + assertThat(actualNotification.isActive()).isFalse(); + + then(telemetrySubscriptionService).should().saveAttrAndNotify( + eq(TenantId.SYS_TENANT_ID), eq(deviceId), eq(SERVER_SCOPE), + eq(INACTIVITY_ALARM_TIME), eq(expectedLastInactivityAlarmTime), any() + ); + } + } + + private static Stream provideParametersForUpdateInactivityStateIfExpired() { + return Stream.of( + Arguments.of(false, 100, 70, 90, 70, 60, false, 90, false), + + Arguments.of(false, 100, 40, 50, 70, 10, false, 50, false), + + Arguments.of(false, 100, 25, 60, 75, 25, false, 60, false), + + Arguments.of(false, 100, 60, 70, 10, 50, false, 70, false), + + Arguments.of(false, 100, 10, 15, 90, 10, false, 15, false), + + Arguments.of(false, 100, 0, 40, 75, 0, false, 40, false), + + Arguments.of(true, 100, 90, 80, 80, 50, true, 80, false), + + Arguments.of(true, 100, 95, 90, 10, 50, true, 90, false), + + Arguments.of(true, 100, 10, 10, 90, 10, false, 100, true), + + Arguments.of(true, 100, 10, 10, 90, 11, true, 10, false), + + Arguments.of(true, 100, 15, 10, 85, 5, false, 100, true), + + Arguments.of(true, 100, 15, 10, 75, 5, false, 100, true), + + Arguments.of(true, 100, 95, 90, 5, 50, false, 100, true), + + Arguments.of(true, 100, 0, 0, 101, 0, true, 0, false), + + Arguments.of(true, 100, 0, 0, 100, 0, false, 100, true), + + Arguments.of(true, 100, 0, 0, 99, 0, false, 100, true), + + Arguments.of(true, 100, 0, 0, 120, 10, true, 0, false), + + Arguments.of(true, 100, 50, 0, 100, 0, true, 0, false), + + Arguments.of(true, 100, 10, 0, 91, 0, true, 0, false), + + Arguments.of(true, 100, 90, 0, 10, 0, false, 100, true), + + Arguments.of(true, 100, 100, 100, 1, 0, true, 100, false), + + Arguments.of(true, 100, 100, 100, 100, 100, true, 100, false), + + Arguments.of(false, 100, 59, 60, 30, 10, false, 60, false), + + Arguments.of(true, 100, 60, 60, 30, 10, false, 100, true), + + Arguments.of(true, 100, 61, 60, 30, 10, false, 100, true), + + Arguments.of(true, 0, 0, 0, 1, 0, true, 0, false), + + Arguments.of(true, 0, 0, 0, 0, 0, false, 0, true), + + Arguments.of(true, 100, 90, 80, 20, 70, true, 80, false), + + Arguments.of(true, 100, 80, 90, 30, 70, true, 90, false) + ); } -} \ No newline at end of file +} diff --git a/application/src/test/resources/application-test.properties b/application/src/test/resources/application-test.properties index a964b0b700..d8943b47e9 100644 --- a/application/src/test/resources/application-test.properties +++ b/application/src/test/resources/application-test.properties @@ -11,8 +11,6 @@ transport.lwm2m.security.trust-credentials.keystore.store_file=lwm2m/credentials # Edge disabled to speed up the context init. Will be enabled by @TestPropertySource in respective tests edges.enabled=false -edges.storage.no_read_records_sleep=500 -edges.storage.sleep_between_batches=500 actors.rpc.submit_strategy=BURST queue.rule-engine.stats.enabled=true diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/alarm/AlarmModificationRequest.java b/common/data/src/main/java/org/thingsboard/server/common/data/alarm/AlarmModificationRequest.java index e40cb15d22..9270c2d696 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/alarm/AlarmModificationRequest.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/alarm/AlarmModificationRequest.java @@ -22,6 +22,8 @@ public interface AlarmModificationRequest { TenantId getTenantId(); + AlarmSeverity getSeverity(); + long getStartTs(); long getEndTs(); diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeInstallInstructions.java b/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeInstallInstructions.java index acfc458906..8343058250 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeInstallInstructions.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeInstallInstructions.java @@ -27,6 +27,6 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class EdgeInstallInstructions { - @ApiModelProperty(position = 1, value = "Markdown with docker install instructions") - private String dockerInstallInstructions; + @ApiModelProperty(position = 1, value = "Markdown with install instructions") + private String installInstructions; } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/notification/template/WebDeliveryMethodNotificationTemplate.java b/common/data/src/main/java/org/thingsboard/server/common/data/notification/template/WebDeliveryMethodNotificationTemplate.java index f45371f716..e3a8ab4d8c 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/notification/template/WebDeliveryMethodNotificationTemplate.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/notification/template/WebDeliveryMethodNotificationTemplate.java @@ -56,7 +56,6 @@ public class WebDeliveryMethodNotificationTemplate extends DeliveryMethodNotific this.additionalConfig = other.additionalConfig != null ? other.additionalConfig.deepCopy() : null; } - @NoXss(fieldName = "web notification message") @Length(fieldName = "web notification message", max = 250, message = "cannot be longer than 250 chars") @Override public String getBody() { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/sync/ie/EntityExportData.java b/common/data/src/main/java/org/thingsboard/server/common/data/sync/ie/EntityExportData.java index 6518a485be..7445ba4da5 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/sync/ie/EntityExportData.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/sync/ie/EntityExportData.java @@ -39,6 +39,7 @@ import java.util.Map; @JsonSubTypes({ @Type(name = "DEVICE", value = DeviceExportData.class), @Type(name = "RULE_CHAIN", value = RuleChainExportData.class), + @Type(name = "WIDGET_TYPE", value = WidgetTypeExportData.class), @Type(name = "WIDGETS_BUNDLE", value = WidgetsBundleExportData.class) }) @JsonInclude(JsonInclude.Include.NON_NULL) diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/sync/ie/WidgetTypeExportData.java b/common/data/src/main/java/org/thingsboard/server/common/data/sync/ie/WidgetTypeExportData.java new file mode 100644 index 0000000000..37714e0712 --- /dev/null +++ b/common/data/src/main/java/org/thingsboard/server/common/data/sync/ie/WidgetTypeExportData.java @@ -0,0 +1,26 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ +package org.thingsboard.server.common.data.sync.ie; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.thingsboard.server.common.data.widget.WidgetTypeDetails; + +@Data +@EqualsAndHashCode(callSuper = true) +public class WidgetTypeExportData extends EntityExportData { + +} diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/sync/ie/WidgetsBundleExportData.java b/common/data/src/main/java/org/thingsboard/server/common/data/sync/ie/WidgetsBundleExportData.java index 5ee856e312..89d509159d 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/sync/ie/WidgetsBundleExportData.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/sync/ie/WidgetsBundleExportData.java @@ -16,13 +16,12 @@ package org.thingsboard.server.common.data.sync.ie; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.Data; import lombok.EqualsAndHashCode; -import org.thingsboard.server.common.data.widget.BaseWidgetType; -import org.thingsboard.server.common.data.widget.WidgetTypeDetails; import org.thingsboard.server.common.data.widget.WidgetsBundle; -import java.util.Comparator; +import java.util.ArrayList; import java.util.List; @Data @@ -30,6 +29,16 @@ import java.util.List; public class WidgetsBundleExportData extends EntityExportData { @JsonProperty(index = 3) - private List widgets; + private List widgets; + + @JsonProperty(index = 4) + private List fqns; + + public void addFqn(String fqn) { + if (fqns == null) { + fqns = new ArrayList<>(); + } + fqns.add(fqn); + } } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/widget/BaseWidgetType.java b/common/data/src/main/java/org/thingsboard/server/common/data/widget/BaseWidgetType.java index 8fd0e58006..e26f0ca6e5 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/widget/BaseWidgetType.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/widget/BaseWidgetType.java @@ -38,7 +38,7 @@ public class BaseWidgetType extends BaseData implements HasName, H private String fqn; @NoXss @Length(fieldName = "name") - @ApiModelProperty(position = 6, value = "Widget name used in search and UI", accessMode = ApiModelProperty.AccessMode.READ_ONLY) + @ApiModelProperty(position = 6, value = "Widget name used in search and UI") private String name; @ApiModelProperty(position = 7, value = "Whether widget type is deprecated.", example = "true") diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetType.java b/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetType.java index 63c270851c..ddf1b6b03f 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetType.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetType.java @@ -23,7 +23,7 @@ import org.thingsboard.server.common.data.id.WidgetTypeId; @Data public class WidgetType extends BaseWidgetType { - @ApiModelProperty(position = 8, value = "Complex JSON object that describes the widget type", accessMode = ApiModelProperty.AccessMode.READ_ONLY) + @ApiModelProperty(position = 8, value = "Complex JSON object that describes the widget type") private transient JsonNode descriptor; public WidgetType() { diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetTypeDetails.java b/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetTypeDetails.java index 9ebc0b6639..cd6f13c6d0 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetTypeDetails.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetTypeDetails.java @@ -32,11 +32,11 @@ import org.thingsboard.server.common.data.validation.NoXss; public class WidgetTypeDetails extends WidgetType implements HasName, HasTenantId, ExportableEntity { @Length(fieldName = "image", max = 1000000) - @ApiModelProperty(position = 9, value = "Base64 encoded thumbnail", accessMode = ApiModelProperty.AccessMode.READ_ONLY) + @ApiModelProperty(position = 9, value = "Base64 encoded thumbnail") private String image; @NoXss - @Length(fieldName = "description") - @ApiModelProperty(position = 10, value = "Description of the widget", accessMode = ApiModelProperty.AccessMode.READ_ONLY) + @Length(fieldName = "description", max = 1024) + @ApiModelProperty(position = 10, value = "Description of the widget") private String description; @Getter diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetsBundle.java b/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetsBundle.java index 0ceef991ad..3655eace53 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetsBundle.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/widget/WidgetsBundle.java @@ -64,7 +64,7 @@ public class WidgetsBundle extends BaseData implements HasName, private String image; @NoXss - @Length(fieldName = "description") + @Length(fieldName = "description", max = 1024) @Getter @Setter @ApiModelProperty(position = 7, value = "Description", accessMode = ApiModelProperty.AccessMode.READ_ONLY) diff --git a/common/edge-api/src/main/proto/edge.proto b/common/edge-api/src/main/proto/edge.proto index 50d5ad3c7f..b316d5b3c4 100644 --- a/common/edge-api/src/main/proto/edge.proto +++ b/common/edge-api/src/main/proto/edge.proto @@ -163,6 +163,8 @@ message RuleNodeProto { bool debugMode = 5; string configuration = 6; string additionalInfo = 7; + bool singletonMode = 8; + int32 configurationVersion = 9; } message NodeConnectionInfoProto { diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/queue/PartitionChangeMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/queue/PartitionChangeMsg.java index 39d7dad2db..fd48b36e67 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/queue/PartitionChangeMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/queue/PartitionChangeMsg.java @@ -20,8 +20,6 @@ import lombok.Getter; import org.thingsboard.server.common.msg.MsgType; import org.thingsboard.server.common.msg.TbActorMsg; -import java.util.Set; - /** * @author Andrew Shvayka */ @@ -30,8 +28,6 @@ public final class PartitionChangeMsg implements TbActorMsg { @Getter private final ServiceType serviceType; - @Getter - private final Set partitions; @Override public MsgType getMsgType() { diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/discovery/HashPartitionService.java b/common/queue/src/main/java/org/thingsboard/server/queue/discovery/HashPartitionService.java index 2db342d4e6..5be5caf6ff 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/discovery/HashPartitionService.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/discovery/HashPartitionService.java @@ -184,6 +184,10 @@ public class HashPartitionService implements PartitionService { partitionSizesMap.remove(queueKey); //TODO: remove after merging tb entity services removeTenant(tenantId); + + if (serviceInfoProvider.isService(ServiceType.TB_RULE_ENGINE)) { + publishPartitionChangeEvent(ServiceType.TB_RULE_ENGINE, Map.of(queueKey, Collections.emptySet())); + } } @Override @@ -272,12 +276,25 @@ public class HashPartitionService implements PartitionService { final ConcurrentMap> oldPartitions = myPartitions; myPartitions = newPartitions; + Map> changedPartitionsMap = new HashMap<>(); + + Set removed = new HashSet<>(); oldPartitions.forEach((queueKey, partitions) -> { - if (!myPartitions.containsKey(queueKey)) { - log.info("[{}] NO MORE PARTITIONS FOR CURRENT KEY", queueKey); - applicationEventPublisher.publishEvent(new PartitionChangeEvent(this, queueKey, Collections.emptySet())); + if (!newPartitions.containsKey(queueKey)) { + removed.add(queueKey); } }); + if (serviceInfoProvider.isService(ServiceType.TB_RULE_ENGINE)) { + partitionSizesMap.keySet().stream() + .filter(queueKey -> queueKey.getType() == ServiceType.TB_RULE_ENGINE && + !queueKey.getTenantId().isSysTenantId() && + !newPartitions.containsKey(queueKey)) + .forEach(removed::add); + } + removed.forEach(queueKey -> { + log.info("[{}] NO MORE PARTITIONS FOR CURRENT KEY", queueKey); + changedPartitionsMap.put(queueKey, Collections.emptySet()); + }); myPartitions.forEach((queueKey, partitions) -> { if (!partitions.equals(oldPartitions.get(queueKey))) { @@ -285,9 +302,17 @@ public class HashPartitionService implements PartitionService { Set tpiList = partitions.stream() .map(partition -> buildTopicPartitionInfo(queueKey, partition)) .collect(Collectors.toSet()); - applicationEventPublisher.publishEvent(new PartitionChangeEvent(this, queueKey, tpiList)); + changedPartitionsMap.put(queueKey, tpiList); } }); + if (!changedPartitionsMap.isEmpty()) { + Map>> partitionsByServiceType = new HashMap<>(); + changedPartitionsMap.forEach((queueKey, partitions) -> { + partitionsByServiceType.computeIfAbsent(queueKey.getType(), serviceType -> new HashMap<>()) + .put(queueKey, partitions); + }); + partitionsByServiceType.forEach(this::publishPartitionChangeEvent); + } if (currentOtherServices == null) { currentOtherServices = new ArrayList<>(otherServices); @@ -306,7 +331,11 @@ public class HashPartitionService implements PartitionService { if (!changes.isEmpty()) { applicationEventPublisher.publishEvent(new ClusterTopologyChangeEvent(this, changes)); responsibleServices.forEach((profileId, serviceInfos) -> { - log.info("Servers responsible for tenant profile {}: {}", profileId, toServiceIds(serviceInfos)); + if (profileId != null) { + log.info("Servers responsible for tenant profile {}: {}", profileId, toServiceIds(serviceInfos)); + } else { + log.info("Servers responsible for system queues: {}", toServiceIds(serviceInfos)); + } }); } } @@ -314,6 +343,18 @@ public class HashPartitionService implements PartitionService { applicationEventPublisher.publishEvent(new ServiceListChangedEvent(otherServices, currentService)); } + private void publishPartitionChangeEvent(ServiceType serviceType, Map> partitionsMap) { + if (log.isDebugEnabled()) { + log.debug("Publishing partition change event for service type " + serviceType + ":" + System.lineSeparator() + + partitionsMap.entrySet().stream() + .map(entry -> entry.getKey() + " - " + entry.getValue().stream() + .map(TopicPartitionInfo::getFullTopicName).sorted() + .collect(Collectors.toList())) + .collect(Collectors.joining(System.lineSeparator()))); + } + applicationEventPublisher.publishEvent(new PartitionChangeEvent(this, serviceType, partitionsMap)); + } + @Override public Set getAllServiceIds(ServiceType serviceType) { return getAllServices(serviceType).stream().map(ServiceInfo::getServiceId).collect(Collectors.toSet()); @@ -479,6 +520,9 @@ public class HashPartitionService implements PartitionService { } responsibleServices.put(profileId, responsible); } + if (responsible.isEmpty()) { + return null; + } servers = responsible; } diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/discovery/event/PartitionChangeEvent.java b/common/queue/src/main/java/org/thingsboard/server/queue/discovery/event/PartitionChangeEvent.java index c7a00daa1c..0d74cdfaee 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/discovery/event/PartitionChangeEvent.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/discovery/event/PartitionChangeEvent.java @@ -21,6 +21,8 @@ import org.thingsboard.server.common.msg.queue.ServiceType; import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; import org.thingsboard.server.queue.discovery.QueueKey; +import java.util.Collections; +import java.util.Map; import java.util.Set; @ToString(callSuper = true) @@ -29,17 +31,19 @@ public class PartitionChangeEvent extends TbApplicationEvent { private static final long serialVersionUID = -8731788167026510559L; @Getter - private final QueueKey queueKey; + private final ServiceType serviceType; @Getter - private final Set partitions; + private final Map> partitionsMap; - public PartitionChangeEvent(Object source, QueueKey queueKey, Set partitions) { + public PartitionChangeEvent(Object source, ServiceType serviceType, Map> partitionsMap) { super(source); - this.queueKey = queueKey; - this.partitions = partitions; + this.serviceType = serviceType; + this.partitionsMap = partitionsMap; } - public ServiceType getServiceType() { - return queueKey.getType(); + // only for service types that have single QueueKey + public Set getPartitions() { + return partitionsMap.values().stream().findAny().orElse(Collections.emptySet()); } + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/service/Validator.java b/dao/src/main/java/org/thingsboard/server/dao/service/Validator.java index e9e664e9c1..d8c4ffddc9 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/service/Validator.java +++ b/dao/src/main/java/org/thingsboard/server/dao/service/Validator.java @@ -157,4 +157,10 @@ public class Validator { return StringUtils.isEmpty(key) || RegexUtils.matches(key, PROPERTY_PATTERN); } + public static void checkNotNull(Object reference, String errorMessage) { + if (reference == null) { + throw new IncorrectParameterException(errorMessage); + } + } + } diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java index 410e0e4a3f..4bd0b62f4b 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/widget/WidgetTypeServiceImpl.java @@ -178,7 +178,10 @@ public class WidgetTypeServiceImpl implements WidgetTypeService { log.trace("Executing updateWidgetsBundleWidgetTypes, tenantId [{}], widgetsBundleId [{}], widgetTypeIds [{}]", tenantId, widgetsBundleId, widgetTypeIds); Validator.validateId(tenantId, INCORRECT_TENANT_ID + tenantId); Validator.validateId(widgetsBundleId, INCORRECT_WIDGETS_BUNDLE_ID + widgetsBundleId); - validateIds(widgetTypeIds, "Incorrect widgetTypeIds " + widgetTypeIds); + Validator.checkNotNull(widgetTypeIds, "Incorrect widgetTypeIds " + widgetTypeIds); + if (!widgetTypeIds.isEmpty()) { + validateIds(widgetTypeIds, "Incorrect widgetTypeIds " + widgetTypeIds); + } List bundleWidgets = new ArrayList<>(); for (int index = 0; index < widgetTypeIds.size(); index++) { bundleWidgets.add(new WidgetsBundleWidget(widgetsBundleId, widgetTypeIds.get(index), index)); diff --git a/dao/src/main/resources/sql/schema-entities.sql b/dao/src/main/resources/sql/schema-entities.sql index 883e9da4a4..4df73de9d6 100644 --- a/dao/src/main/resources/sql/schema-entities.sql +++ b/dao/src/main/resources/sql/schema-entities.sql @@ -25,7 +25,7 @@ CREATE OR REPLACE PROCEDURE insert_tb_schema_settings() $$ BEGIN IF (SELECT COUNT(*) FROM tb_schema_settings) = 0 THEN - INSERT INTO tb_schema_settings (schema_version) VALUES (3005002); + INSERT INTO tb_schema_settings (schema_version) VALUES (3006000); END IF; END; $$; @@ -488,7 +488,7 @@ CREATE TABLE IF NOT EXISTS widget_type ( tenant_id uuid, image varchar(1000000), deprecated boolean NOT NULL DEFAULT false, - description varchar(255), + description varchar(1024), external_id uuid, CONSTRAINT uq_widget_type_fqn UNIQUE (tenant_id, fqn), CONSTRAINT widget_type_external_id_unq_key UNIQUE (tenant_id, external_id) @@ -501,7 +501,7 @@ CREATE TABLE IF NOT EXISTS widgets_bundle ( tenant_id uuid, title varchar(255), image varchar(1000000), - description varchar(255), + description varchar(1024), external_id uuid, CONSTRAINT uq_widgets_bundle_alias UNIQUE (tenant_id, alias), CONSTRAINT widgets_bundle_external_id_unq_key UNIQUE (tenant_id, external_id) diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/WidgetTypeServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/WidgetTypeServiceTest.java index 679c288ae7..c1802d9865 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/WidgetTypeServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/WidgetTypeServiceTest.java @@ -218,4 +218,33 @@ public class WidgetTypeServiceTest extends AbstractServiceTest { widgetsBundleService.deleteWidgetsBundle(tenantId, savedWidgetsBundle.getId()); } + @Test + public void testDeleteAllTypesFromWidgetsBundle() { + WidgetsBundle widgetsBundle = new WidgetsBundle(); + widgetsBundle.setTenantId(tenantId); + widgetsBundle.setTitle("Widgets bundle"); + WidgetsBundle savedWidgetsBundle = widgetsBundleService.saveWidgetsBundle(widgetsBundle); + + List widgetTypes = new ArrayList<>(); + for (int i = 0; i < 5; i++) { + WidgetTypeDetails widgetType = new WidgetTypeDetails(); + widgetType.setTenantId(tenantId); + widgetType.setName("Widget Type " + i); + widgetType.setDescriptor(JacksonUtil.fromString("{ \"someKey\": \"someValue\" }", JsonNode.class)); + widgetTypes.add(new WidgetType(widgetTypeService.saveWidgetType(widgetType))); + } + + List widgetTypeIds = widgetTypes.stream().map(WidgetType::getId).collect(Collectors.toList()); + + widgetTypeService.updateWidgetsBundleWidgetTypes(tenantId, savedWidgetsBundle.getId(), widgetTypeIds); + + List loadedWidgetTypes = widgetTypeService.findWidgetTypesByWidgetsBundleId(tenantId, savedWidgetsBundle.getId()); + Assert.assertEquals(widgetTypes.size(), loadedWidgetTypes.size()); + + widgetTypeService.updateWidgetsBundleWidgetTypes(tenantId, savedWidgetsBundle.getId(), Collections.emptyList()); + + loadedWidgetTypes = widgetTypeService.findWidgetTypesByWidgetsBundleId(tenantId, savedWidgetsBundle.getId()); + Assert.assertEquals(0, loadedWidgetTypes.size()); + } + } diff --git a/dao/src/test/resources/sql/system-test-psql.sql b/dao/src/test/resources/sql/system-test-psql.sql index 21af327f13..172731b9c5 100644 --- a/dao/src/test/resources/sql/system-test-psql.sql +++ b/dao/src/test/resources/sql/system-test-psql.sql @@ -1,5 +1,2 @@ --PostgreSQL specific truncate to fit constraints -TRUNCATE TABLE device_credentials, device, device_profile, asset, asset_profile, ota_package, rule_node_state, rule_node, rule_chain, alarm_comment, alarm, entity_alarm; - --- Decrease seq_id column to make sure to cover cases of new sequential cycle during the tests -ALTER SEQUENCE edge_event_seq_id_seq MAXVALUE 256; +TRUNCATE TABLE device_credentials, device, device_profile, asset, asset_profile, ota_package, rule_node_state, rule_node, rule_chain, alarm_comment, alarm, entity_alarm; \ No newline at end of file diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbAlarmResult.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbAlarmResult.java index 67384ebe23..85c3cb5a98 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbAlarmResult.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbAlarmResult.java @@ -37,6 +37,11 @@ public class TbAlarmResult { } public static TbAlarmResult fromAlarmResult(AlarmApiCallResult result) { - return new TbAlarmResult(result.isCreated(), result.isModified(), result.isSeverityChanged(), result.isCleared(), result.getAlarm()); + return new TbAlarmResult( + result.isCreated(), + result.isModified() && !result.isSeverityChanged(), + result.isSeverityChanged(), + result.isCleared(), + result.getAlarm()); } } diff --git a/rule-engine/rule-engine-components/src/main/resources/public/static/rulenode/rulenode-core-config.js b/rule-engine/rule-engine-components/src/main/resources/public/static/rulenode/rulenode-core-config.js index 4e91b83928..70ca7239bd 100644 --- a/rule-engine/rule-engine-components/src/main/resources/public/static/rulenode/rulenode-core-config.js +++ b/rule-engine/rule-engine-components/src/main/resources/public/static/rulenode/rulenode-core-config.js @@ -1 +1 @@ -System.register(["@angular/core","@shared/public-api","@ngrx/store","@angular/forms","@angular/common","@angular/material/checkbox","@angular/material/input","@angular/material/form-field","@angular/flex-layout/flex","@ngx-translate/core","@angular/material/select","@angular/material/core","@angular/material/slide-toggle","@shared/components/hint-tooltip-icon.component","@shared/components/queue/queue-autocomplete.component","@core/public-api","@shared/components/js-func.component","@angular/material/button","@angular/material/icon","@angular/material/tooltip","@shared/components/script-lang.component","@angular/cdk/keycodes","@angular/material/chips","@shared/pipe/safe.pipe","@shared/components/entity/entity-type-select.component","@shared/components/entity/entity-select.component","@angular/cdk/coercion","@shared/components/tb-error.component","@angular/flex-layout/extended","@angular/material/list","@angular/cdk/drag-drop","rxjs/operators","@angular/material/autocomplete","@shared/pipe/highlight.pipe","@angular/material/expansion","tslib","rxjs","@home/components/public-api","@shared/components/help-popup.component","@shared/components/entity/entity-subtype-list.component","@shared/components/relation/relation-type-autocomplete.component","@home/components/relation/relation-filters.component","@shared/components/file-input.component","@shared/components/button/toggle-password.component","@shared/components/string-items-list.component","@shared/components/toggle-header.component","@shared/components/toggle-select.component","@shared/components/entity/entity-list.component","@shared/components/notification/template-autocomplete.component","@shared/components/tb-checkbox.component","@home/components/sms/sms-provider-configuration.component","@angular/material/radio","@shared/components/slack-conversation-autocomplete.component","@shared/components/entity/entity-autocomplete.component","@shared/components/entity/entity-type-list.component"],(function(e){"use strict";var t,n,r,o,a,i,l,s,m,u,p,d,c,f,g,y,x,b,h,v,C,F,k,L,T,I,N,S,q,A,M,G,E,D,V,P,w,R,O,B,K,U,_,H,z,j,Q,$,J,Y,W,X,Z,ee,te,ne,re,oe,ae,ie,le,se,me,ue,pe,de,ce,fe,ge,ye,xe,be,he,ve,Ce,Fe,ke,Le,Te,Ie,Ne,Se,qe,Ae,Me,Ge,Ee,De,Ve,Pe,we,Re,Oe,Be,Ke,Ue,_e,He,ze,je,Qe,$e;return{setters:[function(e){t=e,n=e.Component,r=e.EventEmitter,o=e.ViewChild,a=e.forwardRef,i=e.Input,l=e.NgModule},function(e){s=e.RuleNodeConfigurationComponent,m=e.AttributeScope,u=e.telemetryTypeTranslations,p=e.ServiceType,d=e.ScriptLanguage,c=e.AlarmSeverity,f=e.alarmSeverityTranslations,g=e.EntitySearchDirection,y=e.entitySearchDirectionTranslations,x=e.EntityType,b=e.PageComponent,h=e.coerceBoolean,v=e.MessageType,C=e.messageTypeNames,F=e,k=e.AlarmStatus,L=e.alarmStatusTranslations,T=e.SharedModule,I=e.AggregationType,N=e.aggregationTranslations,S=e.entityFields,q=e.NotificationType,A=e.SlackChanelType,M=e.SlackChanelTypesTranslateMap},function(e){G=e},function(e){E=e,D=e.Validators,V=e.NgControl,P=e.NG_VALUE_ACCESSOR,w=e.NG_VALIDATORS},function(e){R=e,O=e.CommonModule},function(e){B=e},function(e){K=e},function(e){U=e},function(e){_=e},function(e){H=e},function(e){z=e},function(e){j=e},function(e){Q=e},function(e){$=e},function(e){J=e},function(e){Y=e.getCurrentAuthState,W=e,X=e.isDefinedAndNotNull,Z=e.deepTrim,ee=e.isObject,te=e.isNotEmptyStr},function(e){ne=e},function(e){re=e},function(e){oe=e},function(e){ae=e},function(e){ie=e},function(e){le=e.ENTER,se=e.COMMA,me=e.SEMICOLON},function(e){ue=e},function(e){pe=e},function(e){de=e},function(e){ce=e},function(e){fe=e.coerceBooleanProperty},function(e){ge=e},function(e){ye=e},function(e){xe=e},function(e){be=e},function(e){he=e.tap,ve=e.map,Ce=e.mergeMap,Fe=e.startWith,ke=e.share,Le=e.takeUntil},function(e){Te=e},function(e){Ie=e},function(e){Ne=e},function(e){Se=e.__decorate},function(e){qe=e.of,Ae=e.Subject},function(e){Me=e.HomeComponentsModule},function(e){Ge=e},function(e){Ee=e},function(e){De=e},function(e){Ve=e},function(e){Pe=e},function(e){we=e},function(e){Re=e},function(e){Oe=e},function(e){Be=e},function(e){Ke=e},function(e){Ue=e},function(e){_e=e},function(e){He=e},function(e){ze=e},function(e){je=e},function(e){Qe=e},function(e){$e=e}],execute:function(){class Je extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.emptyConfigForm}onConfigurationSet(e){this.emptyConfigForm=this.fb.group({})}}e("EmptyConfigComponent",Je),Je.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Je,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Je.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Je,selector:"tb-node-empty-config",usesInheritance:!0,ngImport:t,template:"
",isInline:!0}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Je,decorators:[{type:n,args:[{selector:"tb-node-empty-config",template:"
"}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Ye extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.assignCustomerConfigForm}onConfigurationSet(e){this.assignCustomerConfigForm=this.fb.group({customerNamePattern:[e?e.customerNamePattern:null,[D.required,D.pattern(/.*\S.*/)]],createCustomerIfNotExists:[!!e&&e.createCustomerIfNotExists,[]],customerCacheExpiration:[e?e.customerCacheExpiration:null,[D.required,D.min(0)]]})}prepareOutputConfig(e){return e.customerNamePattern=e.customerNamePattern.trim(),e}}e("AssignCustomerConfigComponent",Ye),Ye.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ye,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Ye.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Ye,selector:"tb-action-node-assign-to-customer-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.customer-name-pattern\n \n \n {{ \'tb.rulenode.customer-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.create-customer-if-not-exists\' | translate }}\n \n \n tb.rulenode.customer-cache-expiration\n \n \n {{ \'tb.rulenode.customer-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.customer-cache-expiration-range\' | translate }}\n \n tb.rulenode.customer-cache-expiration-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ye,decorators:[{type:n,args:[{selector:"tb-action-node-assign-to-customer-config",template:'
\n \n tb.rulenode.customer-name-pattern\n \n \n {{ \'tb.rulenode.customer-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.create-customer-if-not-exists\' | translate }}\n \n \n tb.rulenode.customer-cache-expiration\n \n \n {{ \'tb.rulenode.customer-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.customer-cache-expiration-range\' | translate }}\n \n tb.rulenode.customer-cache-expiration-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class We extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopeMap=m,this.attributeScopes=Object.keys(m),this.telemetryTypeTranslationsMap=u}configForm(){return this.attributesConfigForm}onConfigurationSet(e){this.attributesConfigForm=this.fb.group({scope:[e?e.scope:null,[D.required]],notifyDevice:[!e||e.notifyDevice,[]],sendAttributesUpdatedNotification:[!!e&&e.sendAttributesUpdatedNotification,[]],updateAttributesOnlyOnValueChange:[!!e&&e.updateAttributesOnlyOnValueChange,[]]}),this.attributesConfigForm.get("scope").valueChanges.subscribe((e=>{e!==m.SHARED_SCOPE&&this.attributesConfigForm.get("notifyDevice").patchValue(!1,{emitEvent:!1}),e===m.CLIENT_SCOPE&&this.attributesConfigForm.get("sendAttributesUpdatedNotification").patchValue(!1,{emitEvent:!1}),this.attributesConfigForm.get("updateAttributesOnlyOnValueChange").patchValue(!1,{emitEvent:!1})}))}}e("AttributesConfigComponent",We),We.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:We,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),We.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:We,selector:"tb-action-node-attributes-config",usesInheritance:!0,ngImport:t,template:'
\n \n attribute.attributes-scope\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n
\n
\n \n {{ \'tb.rulenode.update-attributes-only-on-value-change\' | translate }}\n \n
\n
\n \n {{ \'tb.rulenode.send-attributes-updated-notification\' | translate }}\n \n
\n
\n \n {{ \'tb.rulenode.notify-device\' | translate }}\n \n
\n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:We,decorators:[{type:n,args:[{selector:"tb-action-node-attributes-config",template:'
\n \n attribute.attributes-scope\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n
\n
\n \n {{ \'tb.rulenode.update-attributes-only-on-value-change\' | translate }}\n \n
\n
\n \n {{ \'tb.rulenode.send-attributes-updated-notification\' | translate }}\n \n
\n
\n \n {{ \'tb.rulenode.notify-device\' | translate }}\n \n
\n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Xe extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.serviceType=p.TB_RULE_ENGINE}configForm(){return this.checkPointConfigForm}onConfigurationSet(e){this.checkPointConfigForm=this.fb.group({queueName:[e?e.queueName:null,[D.required]]})}}e("CheckPointConfigComponent",Xe),Xe.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Xe,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Xe.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Xe,selector:"tb-action-node-check-point-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n
\n',dependencies:[{kind:"component",type:J.QueueAutocompleteComponent,selector:"tb-queue-autocomplete",inputs:["labelText","requiredText","autocompleteHint","subscriptSizing","required","queueType","disabled"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Xe,decorators:[{type:n,args:[{selector:"tb-action-node-check-point-config",template:'
\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Ze extends s{constructor(e,t,n,o){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=n,this.translate=o,this.tbelEnabled=Y(this.store).tbelEnabled,this.scriptLanguage=d,this.changeScript=new r,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-details-function"}configForm(){return this.clearAlarmConfigForm}onConfigurationSet(e){this.clearAlarmConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:d.JS,[D.required]],alarmDetailsBuildJs:[e?e.alarmDetailsBuildJs:null,[]],alarmDetailsBuildTbel:[e?e.alarmDetailsBuildTbel:null,[]],alarmType:[e?e.alarmType:null,[D.required]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.clearAlarmConfigForm.get("scriptLang").value;t!==d.TBEL||this.tbelEnabled||(t=d.JS,this.clearAlarmConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.clearAlarmConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.clearAlarmConfigForm.get("alarmDetailsBuildJs").setValidators(t===d.JS?[D.required]:[]),this.clearAlarmConfigForm.get("alarmDetailsBuildJs").updateValueAndValidity({emitEvent:e}),this.clearAlarmConfigForm.get("alarmDetailsBuildTbel").setValidators(t===d.TBEL?[D.required]:[]),this.clearAlarmConfigForm.get("alarmDetailsBuildTbel").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=d.JS)),e}testScript(e){const t=this.clearAlarmConfigForm.get("scriptLang").value,n=t===d.JS?"alarmDetailsBuildJs":"alarmDetailsBuildTbel",r=t===d.JS?"rulenode/clear_alarm_node_script_fn":"rulenode/tbel/clear_alarm_node_script_fn",o=this.clearAlarmConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(o,"json",this.translate.instant("tb.rulenode.details"),"Details",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.clearAlarmConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.clearAlarmConfigForm.get("scriptLang").value===d.JS&&this.jsFuncComponent.validateOnSubmit()}}e("ClearAlarmConfigComponent",Ze),Ze.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ze,deps:[{token:G.Store},{token:E.UntypedFormBuilder},{token:W.NodeScriptTestService},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),Ze.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Ze,selector:"tb-action-node-clear-alarm-config",viewQueries:[{propertyName:"jsFuncComponent",first:!0,predicate:["jsFuncComponent"],descendants:!0},{propertyName:"tbelFuncComponent",first:!0,predicate:["tbelFuncComponent"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n \n \n \n \n \n \n
\n \n
\n \n tb.rulenode.alarm-type\n \n \n {{ \'tb.rulenode.alarm-type-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ne.JsFuncComponent,selector:"tb-js-func",inputs:["functionTitle","functionName","functionArgs","validationArgs","resultType","disabled","fillHeight","minHeight","editorCompleter","globalVariables","disableUndefinedCheck","helpId","scriptLanguage","noValidate","required"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:ie.TbScriptLangComponent,selector:"tb-script-lang",inputs:["disabled"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ze,decorators:[{type:n,args:[{selector:"tb-action-node-clear-alarm-config",template:'
\n \n \n \n \n \n \n \n
\n \n
\n \n tb.rulenode.alarm-type\n \n \n {{ \'tb.rulenode.alarm-type-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder},{type:W.NodeScriptTestService},{type:H.TranslateService}]},propDecorators:{jsFuncComponent:[{type:o,args:["jsFuncComponent",{static:!1}]}],tbelFuncComponent:[{type:o,args:["tbelFuncComponent",{static:!1}]}]}});class et extends s{constructor(e,t,n,o){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=n,this.translate=o,this.alarmSeverities=Object.keys(c),this.alarmSeverityTranslationMap=f,this.separatorKeysCodes=[le,se,me],this.tbelEnabled=Y(this.store).tbelEnabled,this.scriptLanguage=d,this.changeScript=new r,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-details-function"}configForm(){return this.createAlarmConfigForm}onConfigurationSet(e){this.createAlarmConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:d.JS,[D.required]],alarmDetailsBuildJs:[e?e.alarmDetailsBuildJs:null,[]],alarmDetailsBuildTbel:[e?e.alarmDetailsBuildTbel:null,[]],useMessageAlarmData:[!!e&&e.useMessageAlarmData,[]],overwriteAlarmDetails:[!!e&&e.overwriteAlarmDetails,[]],alarmType:[e?e.alarmType:null,[]],severity:[e?e.severity:null,[]],propagate:[!!e&&e.propagate,[]],relationTypes:[e?e.relationTypes:null,[]],propagateToOwner:[!!e&&e.propagateToOwner,[]],propagateToTenant:[!!e&&e.propagateToTenant,[]],dynamicSeverity:!1}),this.createAlarmConfigForm.get("dynamicSeverity").valueChanges.subscribe((e=>{e?this.createAlarmConfigForm.get("severity").patchValue("",{emitEvent:!1}):this.createAlarmConfigForm.get("severity").patchValue(this.alarmSeverities[0],{emitEvent:!1})}))}validatorTriggers(){return["useMessageAlarmData","overwriteAlarmDetails","scriptLang"]}updateValidators(e){const t=this.createAlarmConfigForm.get("useMessageAlarmData").value,n=this.createAlarmConfigForm.get("overwriteAlarmDetails").value;t?(this.createAlarmConfigForm.get("alarmType").setValidators([]),this.createAlarmConfigForm.get("severity").setValidators([])):(this.createAlarmConfigForm.get("alarmType").setValidators([D.required]),this.createAlarmConfigForm.get("severity").setValidators([D.required])),this.createAlarmConfigForm.get("alarmType").updateValueAndValidity({emitEvent:e}),this.createAlarmConfigForm.get("severity").updateValueAndValidity({emitEvent:e});let r=this.createAlarmConfigForm.get("scriptLang").value;r!==d.TBEL||this.tbelEnabled||(r=d.JS,this.createAlarmConfigForm.get("scriptLang").patchValue(r,{emitEvent:!1}),setTimeout((()=>{this.createAlarmConfigForm.updateValueAndValidity({emitEvent:!0})})));const o=!1===t||!0===n;this.createAlarmConfigForm.get("alarmDetailsBuildJs").setValidators(o&&r===d.JS?[D.required]:[]),this.createAlarmConfigForm.get("alarmDetailsBuildTbel").setValidators(o&&r===d.TBEL?[D.required]:[]),this.createAlarmConfigForm.get("alarmDetailsBuildJs").updateValueAndValidity({emitEvent:e}),this.createAlarmConfigForm.get("alarmDetailsBuildTbel").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=d.JS)),e}testScript(e){const t=this.createAlarmConfigForm.get("scriptLang").value,n=t===d.JS?"alarmDetailsBuildJs":"alarmDetailsBuildTbel",r=t===d.JS?"rulenode/create_alarm_node_script_fn":"rulenode/tbel/create_alarm_node_script_fn",o=this.createAlarmConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(o,"json",this.translate.instant("tb.rulenode.details"),"Details",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.createAlarmConfigForm.get(n).setValue(e),this.changeScript.emit())}))}removeKey(e,t){const n=this.createAlarmConfigForm.get(t).value,r=n.indexOf(e);r>=0&&(n.splice(r,1),this.createAlarmConfigForm.get(t).setValue(n,{emitEvent:!0}))}addKey(e,t){const n=e.input;let r=e.value;if((r||"").trim()){r=r.trim();let e=this.createAlarmConfigForm.get(t).value;e&&-1!==e.indexOf(r)||(e||(e=[]),e.push(r),this.createAlarmConfigForm.get(t).setValue(e,{emitEvent:!0}))}n&&(n.value="")}onValidate(){const e=this.createAlarmConfigForm.get("useMessageAlarmData").value,t=this.createAlarmConfigForm.get("overwriteAlarmDetails").value;if(!e||t){this.createAlarmConfigForm.get("scriptLang").value===d.JS&&this.jsFuncComponent.validateOnSubmit()}}}e("CreateAlarmConfigComponent",et),et.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:et,deps:[{token:G.Store},{token:E.UntypedFormBuilder},{token:W.NodeScriptTestService},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),et.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:et,selector:"tb-action-node-create-alarm-config",viewQueries:[{propertyName:"jsFuncComponent",first:!0,predicate:["jsFuncComponent"],descendants:!0},{propertyName:"tbelFuncComponent",first:!0,predicate:["tbelFuncComponent"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n {{ \'tb.rulenode.use-message-alarm-data\' | translate }}\n \n \n {{ \'tb.rulenode.overwrite-alarm-details\' | translate }}\n \n
\n \n \n \n \n \n \n \n
\n \n
\n
\n
\n \n tb.rulenode.alarm-type\n \n \n {{ \'tb.rulenode.alarm-type-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.use-alarm-severity-pattern\' | translate }}\n \n \n tb.rulenode.alarm-severity\n \n \n {{ alarmSeverityTranslationMap.get(severity) | translate }}\n \n \n \n {{ \'tb.rulenode.alarm-severity-required\' | translate }}\n \n \n \n tb.rulenode.alarm-severity-pattern\n \n \n {{ \'tb.rulenode.alarm-severity-required\' | translate }}\n \n \n \n \n {{ \'tb.rulenode.propagate\' | translate }}\n \n
\n \n tb.rulenode.relation-types-list\n \n \n {{key}}\n close\n \n \n \n tb.rulenode.relation-types-list-hint\n \n
\n \n {{ \'tb.rulenode.propagate-to-owner\' | translate }}\n \n \n {{ \'tb.rulenode.propagate-to-tenant\' | translate }}\n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ne.JsFuncComponent,selector:"tb-js-func",inputs:["functionTitle","functionName","functionArgs","validationArgs","resultType","disabled","fillHeight","minHeight","editorCompleter","globalVariables","disableUndefinedCheck","helpId","scriptLanguage","noValidate","required"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"component",type:ue.MatChipGrid,selector:"mat-chip-grid",inputs:["tabIndex","disabled","placeholder","required","value","errorStateMatcher"],outputs:["change","valueChange"]},{kind:"directive",type:ue.MatChipInput,selector:"input[matChipInputFor]",inputs:["matChipInputFor","matChipInputAddOnBlur","matChipInputSeparatorKeyCodes","placeholder","id","disabled"],outputs:["matChipInputTokenEnd"],exportAs:["matChipInput","matChipInputFor"]},{kind:"directive",type:ue.MatChipRemove,selector:"[matChipRemove]"},{kind:"component",type:ue.MatChipRow,selector:"mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]",inputs:["color","disabled","disableRipple","tabIndex","editable"],outputs:["edited"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:ie.TbScriptLangComponent,selector:"tb-script-lang",inputs:["disabled"]},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:et,decorators:[{type:n,args:[{selector:"tb-action-node-create-alarm-config",template:'
\n \n {{ \'tb.rulenode.use-message-alarm-data\' | translate }}\n \n \n {{ \'tb.rulenode.overwrite-alarm-details\' | translate }}\n \n
\n \n \n \n \n \n \n \n
\n \n
\n
\n
\n \n tb.rulenode.alarm-type\n \n \n {{ \'tb.rulenode.alarm-type-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.use-alarm-severity-pattern\' | translate }}\n \n \n tb.rulenode.alarm-severity\n \n \n {{ alarmSeverityTranslationMap.get(severity) | translate }}\n \n \n \n {{ \'tb.rulenode.alarm-severity-required\' | translate }}\n \n \n \n tb.rulenode.alarm-severity-pattern\n \n \n {{ \'tb.rulenode.alarm-severity-required\' | translate }}\n \n \n \n \n {{ \'tb.rulenode.propagate\' | translate }}\n \n
\n \n tb.rulenode.relation-types-list\n \n \n {{key}}\n close\n \n \n \n tb.rulenode.relation-types-list-hint\n \n
\n \n {{ \'tb.rulenode.propagate-to-owner\' | translate }}\n \n \n {{ \'tb.rulenode.propagate-to-tenant\' | translate }}\n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder},{type:W.NodeScriptTestService},{type:H.TranslateService}]},propDecorators:{jsFuncComponent:[{type:o,args:["jsFuncComponent",{static:!1}]}],tbelFuncComponent:[{type:o,args:["tbelFuncComponent",{static:!1}]}]}});class tt extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.keys(g),this.directionTypeTranslations=y,this.entityType=x}configForm(){return this.createRelationConfigForm}onConfigurationSet(e){this.createRelationConfigForm=this.fb.group({direction:[e?e.direction:null,[D.required]],entityType:[e?e.entityType:null,[D.required]],entityNamePattern:[e?e.entityNamePattern:null,[]],entityTypePattern:[e?e.entityTypePattern:null,[]],relationType:[e?e.relationType:null,[D.required]],createEntityIfNotExists:[!!e&&e.createEntityIfNotExists,[]],removeCurrentRelations:[!!e&&e.removeCurrentRelations,[]],changeOriginatorToRelatedEntity:[!!e&&e.changeOriginatorToRelatedEntity,[]],entityCacheExpiration:[e?e.entityCacheExpiration:null,[D.required,D.min(0)]]})}validatorTriggers(){return["entityType"]}updateValidators(e){const t=this.createRelationConfigForm.get("entityType").value;t?this.createRelationConfigForm.get("entityNamePattern").setValidators([D.required,D.pattern(/.*\S.*/)]):this.createRelationConfigForm.get("entityNamePattern").setValidators([]),!t||t!==x.DEVICE&&t!==x.ASSET?this.createRelationConfigForm.get("entityTypePattern").setValidators([]):this.createRelationConfigForm.get("entityTypePattern").setValidators([D.required,D.pattern(/.*\S.*/)]),this.createRelationConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e}),this.createRelationConfigForm.get("entityTypePattern").updateValueAndValidity({emitEvent:e})}prepareOutputConfig(e){return e.entityNamePattern=e.entityNamePattern?e.entityNamePattern.trim():null,e.entityTypePattern=e.entityTypePattern?e.entityTypePattern.trim():null,e}}e("CreateRelationConfigComponent",tt),tt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:tt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),tt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:tt,selector:"tb-action-node-create-relation-config",usesInheritance:!0,ngImport:t,template:'
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.entity-name-pattern\n \n \n {{ \'tb.rulenode.entity-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.entity-type-pattern\n \n \n {{ \'tb.rulenode.entity-type-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n tb.rulenode.relation-type-pattern\n \n \n {{ \'tb.rulenode.relation-type-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n {{ \'tb.rulenode.create-entity-if-not-exists\' | translate }}\n \n
tb.rulenode.create-entity-if-not-exists-hint
\n
\n \n {{ \'tb.rulenode.remove-current-relations\' | translate }}\n \n
tb.rulenode.remove-current-relations-hint
\n \n {{ \'tb.rulenode.change-originator-to-related-entity\' | translate }}\n \n
tb.rulenode.change-originator-to-related-entity-hint
\n \n tb.rulenode.entity-cache-expiration\n \n \n {{ \'tb.rulenode.entity-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.entity-cache-expiration-range\' | translate }}\n \n tb.rulenode.entity-cache-expiration-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:de.EntityTypeSelectComponent,selector:"tb-entity-type-select",inputs:["allowedEntityTypes","useAliasEntityTypes","filterAllowedEntityTypes","showLabel","required","disabled"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:tt,decorators:[{type:n,args:[{selector:"tb-action-node-create-relation-config",template:'
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.entity-name-pattern\n \n \n {{ \'tb.rulenode.entity-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.entity-type-pattern\n \n \n {{ \'tb.rulenode.entity-type-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n tb.rulenode.relation-type-pattern\n \n \n {{ \'tb.rulenode.relation-type-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n {{ \'tb.rulenode.create-entity-if-not-exists\' | translate }}\n \n
tb.rulenode.create-entity-if-not-exists-hint
\n
\n \n {{ \'tb.rulenode.remove-current-relations\' | translate }}\n \n
tb.rulenode.remove-current-relations-hint
\n \n {{ \'tb.rulenode.change-originator-to-related-entity\' | translate }}\n \n
tb.rulenode.change-originator-to-related-entity-hint
\n \n tb.rulenode.entity-cache-expiration\n \n \n {{ \'tb.rulenode.entity-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.entity-cache-expiration-range\' | translate }}\n \n tb.rulenode.entity-cache-expiration-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class nt extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.keys(g),this.directionTypeTranslations=y,this.entityType=x}configForm(){return this.deleteRelationConfigForm}onConfigurationSet(e){this.deleteRelationConfigForm=this.fb.group({deleteForSingleEntity:[!!e&&e.deleteForSingleEntity,[]],direction:[e?e.direction:null,[D.required]],entityType:[e?e.entityType:null,[]],entityNamePattern:[e?e.entityNamePattern:null,[]],relationType:[e?e.relationType:null,[D.required]],entityCacheExpiration:[e?e.entityCacheExpiration:null,[D.required,D.min(0)]]})}validatorTriggers(){return["deleteForSingleEntity","entityType"]}updateValidators(e){const t=this.deleteRelationConfigForm.get("deleteForSingleEntity").value,n=this.deleteRelationConfigForm.get("entityType").value;t?this.deleteRelationConfigForm.get("entityType").setValidators([D.required]):this.deleteRelationConfigForm.get("entityType").setValidators([]),t&&n?this.deleteRelationConfigForm.get("entityNamePattern").setValidators([D.required,D.pattern(/.*\S.*/)]):this.deleteRelationConfigForm.get("entityNamePattern").setValidators([]),this.deleteRelationConfigForm.get("entityType").updateValueAndValidity({emitEvent:!1}),this.deleteRelationConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e})}prepareOutputConfig(e){return e.entityNamePattern=e.entityNamePattern?e.entityNamePattern.trim():null,e}}e("DeleteRelationConfigComponent",nt),nt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:nt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),nt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:nt,selector:"tb-action-node-delete-relation-config",usesInheritance:!0,ngImport:t,template:'
\n \n {{ \'tb.rulenode.delete-relation-to-specific-entity\' | translate }}\n \n
tb.rulenode.delete-relation-hint
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.entity-name-pattern\n \n \n {{ \'tb.rulenode.entity-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n tb.rulenode.relation-type-pattern\n \n \n {{ \'tb.rulenode.relation-type-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.entity-cache-expiration\n \n \n {{ \'tb.rulenode.entity-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.entity-cache-expiration-range\' | translate }}\n \n tb.rulenode.entity-cache-expiration-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:de.EntityTypeSelectComponent,selector:"tb-entity-type-select",inputs:["allowedEntityTypes","useAliasEntityTypes","filterAllowedEntityTypes","showLabel","required","disabled"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:nt,decorators:[{type:n,args:[{selector:"tb-action-node-delete-relation-config",template:'
\n \n {{ \'tb.rulenode.delete-relation-to-specific-entity\' | translate }}\n \n
tb.rulenode.delete-relation-hint
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.entity-name-pattern\n \n \n {{ \'tb.rulenode.entity-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n tb.rulenode.relation-type-pattern\n \n \n {{ \'tb.rulenode.relation-type-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.entity-cache-expiration\n \n \n {{ \'tb.rulenode.entity-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.entity-cache-expiration-range\' | translate }}\n \n tb.rulenode.entity-cache-expiration-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class rt extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.deviceProfile}onConfigurationSet(e){this.deviceProfile=this.fb.group({persistAlarmRulesState:[!!e&&e.persistAlarmRulesState,D.required],fetchAlarmRulesStateOnStart:[!!e&&e.fetchAlarmRulesStateOnStart,D.required]})}}e("DeviceProfileConfigComponent",rt),rt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:rt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),rt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:rt,selector:"tb-device-profile-config",usesInheritance:!0,ngImport:t,template:'
\n \n {{ \'tb.rulenode.persist-alarm-rules\' | translate }}\n \n \n {{ \'tb.rulenode.fetch-alarm-rules\' | translate }}\n \n
\n',dependencies:[{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:rt,decorators:[{type:n,args:[{selector:"tb-device-profile-config",template:'
\n \n {{ \'tb.rulenode.persist-alarm-rules\' | translate }}\n \n \n {{ \'tb.rulenode.fetch-alarm-rules\' | translate }}\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class ot extends s{constructor(e,t,n,o){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=n,this.translate=o,this.tbelEnabled=Y(this.store).tbelEnabled,this.scriptLanguage=d,this.changeScript=new r,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-generator-function",this.serviceType=p.TB_RULE_ENGINE}configForm(){return this.generatorConfigForm}onConfigurationSet(e){this.generatorConfigForm=this.fb.group({msgCount:[e?e.msgCount:null,[D.required,D.min(0)]],periodInSeconds:[e?e.periodInSeconds:null,[D.required,D.min(1)]],originator:[e?e.originator:null,[]],scriptLang:[e?e.scriptLang:d.JS,[D.required]],jsScript:[e?e.jsScript:null,[]],tbelScript:[e?e.tbelScript:null,[]],queueName:[e?e.queueName:null,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.generatorConfigForm.get("scriptLang").value;t!==d.TBEL||this.tbelEnabled||(t=d.JS,this.generatorConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.generatorConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.generatorConfigForm.get("jsScript").setValidators(t===d.JS?[D.required]:[]),this.generatorConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.generatorConfigForm.get("tbelScript").setValidators(t===d.TBEL?[D.required]:[]),this.generatorConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=d.JS),e.originatorId&&e.originatorType?e.originator={id:e.originatorId,entityType:e.originatorType}:e.originator=null,delete e.originatorId,delete e.originatorType),e}prepareOutputConfig(e){return e.originator?(e.originatorId=e.originator.id,e.originatorType=e.originator.entityType):(e.originatorId=null,e.originatorType=null),delete e.originator,e}testScript(e){const t=this.generatorConfigForm.get("scriptLang").value,n=t===d.JS?"jsScript":"tbelScript",r=t===d.JS?"rulenode/generator_node_script_fn":"rulenode/tbel/generator_node_script_fn",o=this.generatorConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(o,"generate",this.translate.instant("tb.rulenode.generator"),"Generate",["prevMsg","prevMetadata","prevMsgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.generatorConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.generatorConfigForm.get("scriptLang").value===d.JS&&this.jsFuncComponent.validateOnSubmit()}}var at;e("GeneratorConfigComponent",ot),ot.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ot,deps:[{token:G.Store},{token:E.UntypedFormBuilder},{token:W.NodeScriptTestService},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),ot.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:ot,selector:"tb-action-node-generator-config",viewQueries:[{propertyName:"jsFuncComponent",first:!0,predicate:["jsFuncComponent"],descendants:!0},{propertyName:"tbelFuncComponent",first:!0,predicate:["tbelFuncComponent"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.message-count\n \n \n {{ \'tb.rulenode.message-count-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-message-count-message\' | translate }}\n \n \n \n tb.rulenode.period-seconds\n \n \n {{ \'tb.rulenode.period-seconds-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-period-seconds-message\' | translate }}\n \n \n
\n \n \n \n
\n\n \n \n\n \n \n \n \n \n \n \n
\n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ce.EntitySelectComponent,selector:"tb-entity-select",inputs:["allowedEntityTypes","useAliasEntityTypes","required","disabled"]},{kind:"component",type:J.QueueAutocompleteComponent,selector:"tb-queue-autocomplete",inputs:["labelText","requiredText","autocompleteHint","subscriptSizing","required","queueType","disabled"]},{kind:"component",type:ne.JsFuncComponent,selector:"tb-js-func",inputs:["functionTitle","functionName","functionArgs","validationArgs","resultType","disabled","fillHeight","minHeight","editorCompleter","globalVariables","disableUndefinedCheck","helpId","scriptLanguage","noValidate","required"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:ie.TbScriptLangComponent,selector:"tb-script-lang",inputs:["disabled"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ot,decorators:[{type:n,args:[{selector:"tb-action-node-generator-config",template:'
\n \n tb.rulenode.message-count\n \n \n {{ \'tb.rulenode.message-count-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-message-count-message\' | translate }}\n \n \n \n tb.rulenode.period-seconds\n \n \n {{ \'tb.rulenode.period-seconds-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-period-seconds-message\' | translate }}\n \n \n
\n \n \n \n
\n\n \n \n\n \n \n \n \n \n \n \n
\n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder},{type:W.NodeScriptTestService},{type:H.TranslateService}]},propDecorators:{jsFuncComponent:[{type:o,args:["jsFuncComponent",{static:!1}]}],tbelFuncComponent:[{type:o,args:["tbelFuncComponent",{static:!1}]}]}}),function(e){e.CUSTOMER="CUSTOMER",e.TENANT="TENANT",e.RELATED="RELATED",e.ALARM_ORIGINATOR="ALARM_ORIGINATOR",e.ENTITY="ENTITY"}(at||(at={}));const it=new Map([[at.CUSTOMER,"tb.rulenode.originator-customer"],[at.TENANT,"tb.rulenode.originator-tenant"],[at.RELATED,"tb.rulenode.originator-related"],[at.ALARM_ORIGINATOR,"tb.rulenode.originator-alarm-originator"],[at.ENTITY,"tb.rulenode.originator-entity"]]);var lt;!function(e){e.CIRCLE="CIRCLE",e.POLYGON="POLYGON"}(lt||(lt={}));const st=new Map([[lt.CIRCLE,"tb.rulenode.perimeter-circle"],[lt.POLYGON,"tb.rulenode.perimeter-polygon"]]);var mt;!function(e){e.MILLISECONDS="MILLISECONDS",e.SECONDS="SECONDS",e.MINUTES="MINUTES",e.HOURS="HOURS",e.DAYS="DAYS"}(mt||(mt={}));const ut=new Map([[mt.MILLISECONDS,"tb.rulenode.time-unit-milliseconds"],[mt.SECONDS,"tb.rulenode.time-unit-seconds"],[mt.MINUTES,"tb.rulenode.time-unit-minutes"],[mt.HOURS,"tb.rulenode.time-unit-hours"],[mt.DAYS,"tb.rulenode.time-unit-days"]]);var pt;!function(e){e.METER="METER",e.KILOMETER="KILOMETER",e.FOOT="FOOT",e.MILE="MILE",e.NAUTICAL_MILE="NAUTICAL_MILE"}(pt||(pt={}));const dt=new Map([[pt.METER,"tb.rulenode.range-unit-meter"],[pt.KILOMETER,"tb.rulenode.range-unit-kilometer"],[pt.FOOT,"tb.rulenode.range-unit-foot"],[pt.MILE,"tb.rulenode.range-unit-mile"],[pt.NAUTICAL_MILE,"tb.rulenode.range-unit-nautical-mile"]]);var ct;!function(e){e.ID="ID",e.TITLE="TITLE",e.COUNTRY="COUNTRY",e.STATE="STATE",e.CITY="CITY",e.ZIP="ZIP",e.ADDRESS="ADDRESS",e.ADDRESS2="ADDRESS2",e.PHONE="PHONE",e.EMAIL="EMAIL",e.ADDITIONAL_INFO="ADDITIONAL_INFO"}(ct||(ct={}));const ft=new Map([[ct.ID,"tb.rulenode.entity-details-id"],[ct.TITLE,"tb.rulenode.entity-details-title"],[ct.COUNTRY,"tb.rulenode.entity-details-country"],[ct.STATE,"tb.rulenode.entity-details-state"],[ct.CITY,"tb.rulenode.entity-details-city"],[ct.ZIP,"tb.rulenode.entity-details-zip"],[ct.ADDRESS,"tb.rulenode.entity-details-address"],[ct.ADDRESS2,"tb.rulenode.entity-details-address2"],[ct.PHONE,"tb.rulenode.entity-details-phone"],[ct.EMAIL,"tb.rulenode.entity-details-email"],[ct.ADDITIONAL_INFO,"tb.rulenode.entity-details-additional_info"]]);var gt;!function(e){e.FIRST="FIRST",e.LAST="LAST",e.ALL="ALL"}(gt||(gt={}));const yt=new Map([[gt.FIRST,"tb.rulenode.first"],[gt.LAST,"tb.rulenode.last"],[gt.ALL,"tb.rulenode.all"]]),xt=new Map([[gt.FIRST,"tb.rulenode.first-mode-hint"],[gt.LAST,"tb.rulenode.last-mode-hint"],[gt.ALL,"tb.rulenode.all-mode-hint"]]);var bt,ht;!function(e){e.ASC="ASC",e.DESC="DESC"}(bt||(bt={})),function(e){e.ATTRIBUTES="ATTRIBUTES",e.LATEST_TELEMETRY="LATEST_TELEMETRY",e.FIELDS="FIELDS"}(ht||(ht={}));const vt=new Map([[ht.ATTRIBUTES,"tb.rulenode.attributes"],[ht.LATEST_TELEMETRY,"tb.rulenode.latest-telemetry"],[ht.FIELDS,"tb.rulenode.fields"]]),Ct=new Map([[ht.ATTRIBUTES,"tb.rulenode.add-mapped-attribute-to"],[ht.LATEST_TELEMETRY,"tb.rulenode.add-mapped-latest-telemetry-to"],[ht.FIELDS,"tb.rulenode.add-mapped-fields-to"]]),Ft=new Map([[bt.ASC,"tb.rulenode.ascending"],[bt.DESC,"tb.rulenode.descending"]]);var kt;!function(e){e.STANDARD="STANDARD",e.FIFO="FIFO"}(kt||(kt={}));const Lt=new Map([[kt.STANDARD,"tb.rulenode.sqs-queue-standard"],[kt.FIFO,"tb.rulenode.sqs-queue-fifo"]]),Tt=["anonymous","basic","cert.PEM"],It=new Map([["anonymous","tb.rulenode.credentials-anonymous"],["basic","tb.rulenode.credentials-basic"],["cert.PEM","tb.rulenode.credentials-pem"]]),Nt=["sas","cert.PEM"],St=new Map([["sas","tb.rulenode.credentials-sas"],["cert.PEM","tb.rulenode.credentials-pem"]]);var qt;!function(e){e.GET="GET",e.POST="POST",e.PUT="PUT",e.DELETE="DELETE"}(qt||(qt={}));const At=["US-ASCII","ISO-8859-1","UTF-8","UTF-16BE","UTF-16LE","UTF-16"],Mt=new Map([["US-ASCII","tb.rulenode.charset-us-ascii"],["ISO-8859-1","tb.rulenode.charset-iso-8859-1"],["UTF-8","tb.rulenode.charset-utf-8"],["UTF-16BE","tb.rulenode.charset-utf-16be"],["UTF-16LE","tb.rulenode.charset-utf-16le"],["UTF-16","tb.rulenode.charset-utf-16"]]);var Gt;!function(e){e.CUSTOM="CUSTOM",e.ADD="ADD",e.SUB="SUB",e.MULT="MULT",e.DIV="DIV",e.SIN="SIN",e.SINH="SINH",e.COS="COS",e.COSH="COSH",e.TAN="TAN",e.TANH="TANH",e.ACOS="ACOS",e.ASIN="ASIN",e.ATAN="ATAN",e.ATAN2="ATAN2",e.EXP="EXP",e.EXPM1="EXPM1",e.SQRT="SQRT",e.CBRT="CBRT",e.GET_EXP="GET_EXP",e.HYPOT="HYPOT",e.LOG="LOG",e.LOG10="LOG10",e.LOG1P="LOG1P",e.CEIL="CEIL",e.FLOOR="FLOOR",e.FLOOR_DIV="FLOOR_DIV",e.FLOOR_MOD="FLOOR_MOD",e.ABS="ABS",e.MIN="MIN",e.MAX="MAX",e.POW="POW",e.SIGNUM="SIGNUM",e.RAD="RAD",e.DEG="DEG"}(Gt||(Gt={}));const Et=new Map([[Gt.CUSTOM,{value:Gt.CUSTOM,name:"Custom Function",description:"Use this function to specify complex mathematical expression.",minArgs:1,maxArgs:16}],[Gt.ADD,{value:Gt.ADD,name:"Addition",description:"x + y",minArgs:2,maxArgs:2}],[Gt.SUB,{value:Gt.SUB,name:"Subtraction",description:"x - y",minArgs:2,maxArgs:2}],[Gt.MULT,{value:Gt.MULT,name:"Multiplication",description:"x * y",minArgs:2,maxArgs:2}],[Gt.DIV,{value:Gt.DIV,name:"Division",description:"x / y",minArgs:2,maxArgs:2}],[Gt.SIN,{value:Gt.SIN,name:"Sine",description:"Returns the trigonometric sine of an angle in radians.",minArgs:1,maxArgs:1}],[Gt.SINH,{value:Gt.SINH,name:"Hyperbolic sine",description:"Returns the hyperbolic sine of an argument.",minArgs:1,maxArgs:1}],[Gt.COS,{value:Gt.COS,name:"Cosine",description:"Returns the trigonometric cosine of an angle in radians.",minArgs:1,maxArgs:1}],[Gt.COSH,{value:Gt.COSH,name:"Hyperbolic cosine",description:"Returns the hyperbolic cosine of an argument.",minArgs:1,maxArgs:1}],[Gt.TAN,{value:Gt.TAN,name:"Tangent",description:"Returns the trigonometric tangent of an angle in radians",minArgs:1,maxArgs:1}],[Gt.TANH,{value:Gt.TANH,name:"Hyperbolic tangent",description:"Returns the hyperbolic tangent of an argument",minArgs:1,maxArgs:1}],[Gt.ACOS,{value:Gt.ACOS,name:"Arc cosine",description:"Returns the arc cosine of an argument",minArgs:1,maxArgs:1}],[Gt.ASIN,{value:Gt.ASIN,name:"Arc sine",description:"Returns the arc sine of an argument",minArgs:1,maxArgs:1}],[Gt.ATAN,{value:Gt.ATAN,name:"Arc tangent",description:"Returns the arc tangent of an argument",minArgs:1,maxArgs:1}],[Gt.ATAN2,{value:Gt.ATAN2,name:"2-argument arc tangent",description:"Returns the angle theta from the conversion of rectangular coordinates (x, y) to polar coordinates (r, theta)",minArgs:2,maxArgs:2}],[Gt.EXP,{value:Gt.EXP,name:"Exponential",description:"Returns Euler's number e raised to the power of an argument",minArgs:1,maxArgs:1}],[Gt.EXPM1,{value:Gt.EXPM1,name:"Exponential minus one",description:"Returns Euler's number e raised to the power of an argument minus one",minArgs:1,maxArgs:1}],[Gt.SQRT,{value:Gt.SQRT,name:"Square",description:"Returns the correctly rounded positive square root of an argument",minArgs:1,maxArgs:1}],[Gt.CBRT,{value:Gt.CBRT,name:"Cube root",description:"Returns the cube root of an argument",minArgs:1,maxArgs:1}],[Gt.GET_EXP,{value:Gt.GET_EXP,name:"Get exponent",description:"Returns the unbiased exponent used in the representation of an argument",minArgs:1,maxArgs:1}],[Gt.HYPOT,{value:Gt.HYPOT,name:"Square root",description:"Returns the square root of the squares of the arguments",minArgs:2,maxArgs:2}],[Gt.LOG,{value:Gt.LOG,name:"Logarithm",description:"Returns the natural logarithm of an argument",minArgs:1,maxArgs:1}],[Gt.LOG10,{value:Gt.LOG10,name:"Base 10 logarithm",description:"Returns the base 10 logarithm of an argument",minArgs:1,maxArgs:1}],[Gt.LOG1P,{value:Gt.LOG1P,name:"Logarithm of the sum",description:"Returns the natural logarithm of the sum of an argument",minArgs:1,maxArgs:1}],[Gt.CEIL,{value:Gt.CEIL,name:"Ceiling",description:"Returns the smallest (closest to negative infinity) of an argument",minArgs:1,maxArgs:1}],[Gt.FLOOR,{value:Gt.FLOOR,name:"Floor",description:"Returns the largest (closest to positive infinity) of an argument",minArgs:1,maxArgs:1}],[Gt.FLOOR_DIV,{value:Gt.FLOOR_DIV,name:"Floor division",description:"Returns the largest (closest to positive infinity) of the arguments",minArgs:2,maxArgs:2}],[Gt.FLOOR_MOD,{value:Gt.FLOOR_MOD,name:"Floor modulus",description:"Returns the floor modulus of the arguments",minArgs:2,maxArgs:2}],[Gt.ABS,{value:Gt.ABS,name:"Absolute",description:"Returns the absolute value of an argument",minArgs:1,maxArgs:1}],[Gt.MIN,{value:Gt.MIN,name:"Min",description:"Returns the smaller of the arguments",minArgs:2,maxArgs:2}],[Gt.MAX,{value:Gt.MAX,name:"Max",description:"Returns the greater of the arguments",minArgs:2,maxArgs:2}],[Gt.POW,{value:Gt.POW,name:"Raise to a power",description:"Returns the value of the first argument raised to the power of the second argument",minArgs:2,maxArgs:2}],[Gt.SIGNUM,{value:Gt.SIGNUM,name:"Sign of a real number",description:"Returns the signum function of the argument",minArgs:1,maxArgs:1}],[Gt.RAD,{value:Gt.RAD,name:"Radian",description:"Converts an angle measured in degrees to an approximately equivalent angle measured in radians",minArgs:1,maxArgs:1}],[Gt.DEG,{value:Gt.DEG,name:"Degrees",description:"Converts an angle measured in radians to an approximately equivalent angle measured in degrees.",minArgs:1,maxArgs:1}]]);var Dt,Vt,Pt;!function(e){e.MESSAGE_BODY="MESSAGE_BODY",e.MESSAGE_METADATA="MESSAGE_METADATA",e.ATTRIBUTE="ATTRIBUTE",e.TIME_SERIES="TIME_SERIES",e.CONSTANT="CONSTANT"}(Dt||(Dt={})),function(e){e.MESSAGE_BODY="MESSAGE_BODY",e.MESSAGE_METADATA="MESSAGE_METADATA",e.ATTRIBUTE="ATTRIBUTE",e.TIME_SERIES="TIME_SERIES"}(Vt||(Vt={})),function(e){e.DATA="DATA",e.METADATA="METADATA"}(Pt||(Pt={}));const wt=new Map([[Pt.DATA,"tb.rulenode.message"],[Pt.METADATA,"tb.rulenode.metadata"]]),Rt=new Map([[Dt.MESSAGE_BODY,{name:"tb.rulenode.message-body-type",description:"Fetch argument value from incoming message"}],[Dt.MESSAGE_METADATA,{name:"tb.rulenode.message-metadata-type",description:"Fetch argument value from incoming message metadata"}],[Dt.ATTRIBUTE,{name:"tb.rulenode.attribute-type",description:"Fetch attribute value from database"}],[Dt.TIME_SERIES,{name:"tb.rulenode.time-series-type",description:"Fetch latest time-series value from database"}],[Dt.CONSTANT,{name:"tb.rulenode.constant-type",description:"Define constant value"}]]),Ot=new Map([[Vt.MESSAGE_BODY,{name:"tb.rulenode.message-body-type",description:"Add result to the outgoing message"}],[Vt.MESSAGE_METADATA,{name:"tb.rulenode.message-metadata-type",description:"Add result to the outgoing message metadata"}],[Vt.ATTRIBUTE,{name:"tb.rulenode.attribute-type",description:"Store result as an entity attribute in the database"}],[Vt.TIME_SERIES,{name:"tb.rulenode.time-series-type",description:"Store result as an entity time-series in the database"}]]),Bt=["x","y","z","a","b","c","d","k","l","m","n","o","p","r","s","t"];var Kt,Ut;!function(e){e.SHARED_SCOPE="SHARED_SCOPE",e.SERVER_SCOPE="SERVER_SCOPE",e.CLIENT_SCOPE="CLIENT_SCOPE"}(Kt||(Kt={})),function(e){e.SHARED_SCOPE="SHARED_SCOPE",e.SERVER_SCOPE="SERVER_SCOPE"}(Ut||(Ut={}));const _t=new Map([[Kt.SHARED_SCOPE,"tb.rulenode.shared-scope"],[Kt.SERVER_SCOPE,"tb.rulenode.server-scope"],[Kt.CLIENT_SCOPE,"tb.rulenode.client-scope"]]);class Ht extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.perimeterType=lt,this.perimeterTypes=Object.keys(lt),this.perimeterTypeTranslationMap=st,this.rangeUnits=Object.keys(pt),this.rangeUnitTranslationMap=dt,this.timeUnits=Object.keys(mt),this.timeUnitsTranslationMap=ut}configForm(){return this.geoActionConfigForm}onConfigurationSet(e){this.geoActionConfigForm=this.fb.group({latitudeKeyName:[e?e.latitudeKeyName:null,[D.required]],longitudeKeyName:[e?e.longitudeKeyName:null,[D.required]],perimeterType:[e?e.perimeterType:null,[D.required]],fetchPerimeterInfoFromMessageMetadata:[!!e&&e.fetchPerimeterInfoFromMessageMetadata,[]],perimeterKeyName:[e?e.perimeterKeyName:null,[]],centerLatitude:[e?e.centerLatitude:null,[]],centerLongitude:[e?e.centerLatitude:null,[]],range:[e?e.range:null,[]],rangeUnit:[e?e.rangeUnit:null,[]],polygonsDefinition:[e?e.polygonsDefinition:null,[]],minInsideDuration:[e?e.minInsideDuration:null,[D.required,D.min(1),D.max(2147483647)]],minInsideDurationTimeUnit:[e?e.minInsideDurationTimeUnit:null,[D.required]],minOutsideDuration:[e?e.minOutsideDuration:null,[D.required,D.min(1),D.max(2147483647)]],minOutsideDurationTimeUnit:[e?e.minOutsideDurationTimeUnit:null,[D.required]]})}validatorTriggers(){return["fetchPerimeterInfoFromMessageMetadata","perimeterType"]}updateValidators(e){const t=this.geoActionConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value,n=this.geoActionConfigForm.get("perimeterType").value;t?this.geoActionConfigForm.get("perimeterKeyName").setValidators([D.required]):this.geoActionConfigForm.get("perimeterKeyName").setValidators([]),t||n!==lt.CIRCLE?(this.geoActionConfigForm.get("centerLatitude").setValidators([]),this.geoActionConfigForm.get("centerLongitude").setValidators([]),this.geoActionConfigForm.get("range").setValidators([]),this.geoActionConfigForm.get("rangeUnit").setValidators([])):(this.geoActionConfigForm.get("centerLatitude").setValidators([D.required,D.min(-90),D.max(90)]),this.geoActionConfigForm.get("centerLongitude").setValidators([D.required,D.min(-180),D.max(180)]),this.geoActionConfigForm.get("range").setValidators([D.required,D.min(0)]),this.geoActionConfigForm.get("rangeUnit").setValidators([D.required])),t||n!==lt.POLYGON?this.geoActionConfigForm.get("polygonsDefinition").setValidators([]):this.geoActionConfigForm.get("polygonsDefinition").setValidators([D.required]),this.geoActionConfigForm.get("perimeterKeyName").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("centerLatitude").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("centerLongitude").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("range").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("rangeUnit").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("polygonsDefinition").updateValueAndValidity({emitEvent:e})}}e("GpsGeoActionConfigComponent",Ht),Ht.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ht,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Ht.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Ht,selector:"tb-action-node-gps-geofencing-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.latitude-key-name\n \n \n {{ \'tb.rulenode.latitude-key-name-required\' | translate }}\n \n \n \n tb.rulenode.longitude-key-name\n \n \n {{ \'tb.rulenode.longitude-key-name-required\' | translate }}\n \n \n \n tb.rulenode.perimeter-type\n \n \n {{ perimeterTypeTranslationMap.get(type) | translate }}\n \n \n \n \n {{ \'tb.rulenode.fetch-perimeter-info-from-metadata\' | translate }}\n \n \n tb.rulenode.perimeter-key-name\n \n \n {{ \'tb.rulenode.perimeter-key-name-required\' | translate }}\n \n \n
\n
\n \n tb.rulenode.circle-center-latitude\n \n \n {{ \'tb.rulenode.circle-center-latitude-required\' | translate }}\n \n \n \n tb.rulenode.circle-center-longitude\n \n \n {{ \'tb.rulenode.circle-center-longitude-required\' | translate }}\n \n \n
\n
\n \n tb.rulenode.range\n \n \n {{ \'tb.rulenode.range-required\' | translate }}\n \n \n \n tb.rulenode.range-units\n \n \n {{ rangeUnitTranslationMap.get(type) | translate }}\n \n \n \n
\n
\n
\n \n tb.rulenode.polygon-definition\n \n \n {{ \'tb.rulenode.polygon-definition-required\' | translate }}\n \n \n
\n
\n \n tb.rulenode.min-inside-duration\n \n \n {{ \'tb.rulenode.min-inside-duration-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n tb.rulenode.min-inside-duration-time-unit\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n \n tb.rulenode.min-outside-duration\n \n \n {{ \'tb.rulenode.min-outside-duration-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n tb.rulenode.min-outside-duration-time-unit\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ht,decorators:[{type:n,args:[{selector:"tb-action-node-gps-geofencing-config",template:'
\n \n tb.rulenode.latitude-key-name\n \n \n {{ \'tb.rulenode.latitude-key-name-required\' | translate }}\n \n \n \n tb.rulenode.longitude-key-name\n \n \n {{ \'tb.rulenode.longitude-key-name-required\' | translate }}\n \n \n \n tb.rulenode.perimeter-type\n \n \n {{ perimeterTypeTranslationMap.get(type) | translate }}\n \n \n \n \n {{ \'tb.rulenode.fetch-perimeter-info-from-metadata\' | translate }}\n \n \n tb.rulenode.perimeter-key-name\n \n \n {{ \'tb.rulenode.perimeter-key-name-required\' | translate }}\n \n \n
\n
\n \n tb.rulenode.circle-center-latitude\n \n \n {{ \'tb.rulenode.circle-center-latitude-required\' | translate }}\n \n \n \n tb.rulenode.circle-center-longitude\n \n \n {{ \'tb.rulenode.circle-center-longitude-required\' | translate }}\n \n \n
\n
\n \n tb.rulenode.range\n \n \n {{ \'tb.rulenode.range-required\' | translate }}\n \n \n \n tb.rulenode.range-units\n \n \n {{ rangeUnitTranslationMap.get(type) | translate }}\n \n \n \n
\n
\n
\n \n tb.rulenode.polygon-definition\n \n \n {{ \'tb.rulenode.polygon-definition-required\' | translate }}\n \n \n
\n
\n \n tb.rulenode.min-inside-duration\n \n \n {{ \'tb.rulenode.min-inside-duration-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n tb.rulenode.min-inside-duration-time-unit\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n \n tb.rulenode.min-outside-duration\n \n \n {{ \'tb.rulenode.min-outside-duration-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n tb.rulenode.min-outside-duration-time-unit\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class zt extends s{constructor(e,t,n,o){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=n,this.translate=o,this.tbelEnabled=Y(this.store).tbelEnabled,this.scriptLanguage=d,this.changeScript=new r,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-to-string-function"}configForm(){return this.logConfigForm}onConfigurationSet(e){this.logConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:d.JS,[D.required]],jsScript:[e?e.jsScript:null,[]],tbelScript:[e?e.tbelScript:null,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.logConfigForm.get("scriptLang").value;t!==d.TBEL||this.tbelEnabled||(t=d.JS,this.logConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.logConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.logConfigForm.get("jsScript").setValidators(t===d.JS?[D.required]:[]),this.logConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.logConfigForm.get("tbelScript").setValidators(t===d.TBEL?[D.required]:[]),this.logConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=d.JS)),e}testScript(e){const t=this.logConfigForm.get("scriptLang").value,n=t===d.JS?"jsScript":"tbelScript",r=t===d.JS?"rulenode/log_node_script_fn":"rulenode/tbel/log_node_script_fn",o=this.logConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(o,"string",this.translate.instant("tb.rulenode.to-string"),"ToString",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.logConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.logConfigForm.get("scriptLang").value===d.JS&&this.jsFuncComponent.validateOnSubmit()}}e("LogConfigComponent",zt),zt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:zt,deps:[{token:G.Store},{token:E.UntypedFormBuilder},{token:W.NodeScriptTestService},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),zt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:zt,selector:"tb-action-node-log-config",viewQueries:[{propertyName:"jsFuncComponent",first:!0,predicate:["jsFuncComponent"],descendants:!0},{propertyName:"tbelFuncComponent",first:!0,predicate:["tbelFuncComponent"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n \n \n \n \n \n \n
\n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ne.JsFuncComponent,selector:"tb-js-func",inputs:["functionTitle","functionName","functionArgs","validationArgs","resultType","disabled","fillHeight","minHeight","editorCompleter","globalVariables","disableUndefinedCheck","helpId","scriptLanguage","noValidate","required"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:ie.TbScriptLangComponent,selector:"tb-script-lang",inputs:["disabled"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:zt,decorators:[{type:n,args:[{selector:"tb-action-node-log-config",template:'
\n \n \n \n \n \n \n \n
\n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder},{type:W.NodeScriptTestService},{type:H.TranslateService}]},propDecorators:{jsFuncComponent:[{type:o,args:["jsFuncComponent",{static:!1}]}],tbelFuncComponent:[{type:o,args:["tbelFuncComponent",{static:!1}]}]}});class jt extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.msgCountConfigForm}onConfigurationSet(e){this.msgCountConfigForm=this.fb.group({interval:[e?e.interval:null,[D.required,D.min(1)]],telemetryPrefix:[e?e.telemetryPrefix:null,[D.required]]})}}e("MsgCountConfigComponent",jt),jt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:jt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),jt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:jt,selector:"tb-action-node-msg-count-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.interval-seconds\n \n \n {{ \'tb.rulenode.interval-seconds-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-interval-seconds-message\' | translate }}\n \n \n \n tb.rulenode.output-timeseries-key-prefix\n \n \n {{ \'tb.rulenode.output-timeseries-key-prefix-required\' | translate }}\n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:jt,decorators:[{type:n,args:[{selector:"tb-action-node-msg-count-config",template:'
\n \n tb.rulenode.interval-seconds\n \n \n {{ \'tb.rulenode.interval-seconds-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-interval-seconds-message\' | translate }}\n \n \n \n tb.rulenode.output-timeseries-key-prefix\n \n \n {{ \'tb.rulenode.output-timeseries-key-prefix-required\' | translate }}\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Qt extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.msgDelayConfigForm}onConfigurationSet(e){this.msgDelayConfigForm=this.fb.group({useMetadataPeriodInSecondsPatterns:[!!e&&e.useMetadataPeriodInSecondsPatterns,[]],periodInSeconds:[e?e.periodInSeconds:null,[]],periodInSecondsPattern:[e?e.periodInSecondsPattern:null,[]],maxPendingMsgs:[e?e.maxPendingMsgs:null,[D.required,D.min(1),D.max(1e5)]]})}validatorTriggers(){return["useMetadataPeriodInSecondsPatterns"]}updateValidators(e){this.msgDelayConfigForm.get("useMetadataPeriodInSecondsPatterns").value?(this.msgDelayConfigForm.get("periodInSecondsPattern").setValidators([D.required]),this.msgDelayConfigForm.get("periodInSeconds").setValidators([])):(this.msgDelayConfigForm.get("periodInSecondsPattern").setValidators([]),this.msgDelayConfigForm.get("periodInSeconds").setValidators([D.required,D.min(0)])),this.msgDelayConfigForm.get("periodInSecondsPattern").updateValueAndValidity({emitEvent:e}),this.msgDelayConfigForm.get("periodInSeconds").updateValueAndValidity({emitEvent:e})}}e("MsgDelayConfigComponent",Qt),Qt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Qt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Qt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Qt,selector:"tb-action-node-msg-delay-config",usesInheritance:!0,ngImport:t,template:'
\n \n {{ \'tb.rulenode.use-metadata-period-in-seconds-patterns\' | translate }}\n \n
tb.rulenode.use-metadata-period-in-seconds-patterns-hint
\n \n tb.rulenode.period-seconds\n \n \n {{ \'tb.rulenode.period-seconds-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-period-0-seconds-message\' | translate }}\n \n \n \n \n tb.rulenode.period-in-seconds-pattern\n \n \n {{ \'tb.rulenode.period-in-seconds-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n \n tb.rulenode.max-pending-messages\n \n \n {{ \'tb.rulenode.max-pending-messages-required\' | translate }}\n \n \n {{ \'tb.rulenode.max-pending-messages-range\' | translate }}\n \n \n {{ \'tb.rulenode.max-pending-messages-range\' | translate }}\n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Qt,decorators:[{type:n,args:[{selector:"tb-action-node-msg-delay-config",template:'
\n \n {{ \'tb.rulenode.use-metadata-period-in-seconds-patterns\' | translate }}\n \n
tb.rulenode.use-metadata-period-in-seconds-patterns-hint
\n \n tb.rulenode.period-seconds\n \n \n {{ \'tb.rulenode.period-seconds-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-period-0-seconds-message\' | translate }}\n \n \n \n \n tb.rulenode.period-in-seconds-pattern\n \n \n {{ \'tb.rulenode.period-in-seconds-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n \n tb.rulenode.max-pending-messages\n \n \n {{ \'tb.rulenode.max-pending-messages-required\' | translate }}\n \n \n {{ \'tb.rulenode.max-pending-messages-range\' | translate }}\n \n \n {{ \'tb.rulenode.max-pending-messages-range\' | translate }}\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class $t extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopes=Object.keys(m),this.telemetryTypeTranslationsMap=u}configForm(){return this.pushToCloudConfigForm}onConfigurationSet(e){this.pushToCloudConfigForm=this.fb.group({scope:[e?e.scope:null,[D.required]]})}}e("PushToCloudConfigComponent",$t),$t.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:$t,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),$t.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:$t,selector:"tb-action-node-push-to-cloud-config",usesInheritance:!0,ngImport:t,template:'
\n \n attribute.attributes-scope\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:$t,decorators:[{type:n,args:[{selector:"tb-action-node-push-to-cloud-config",template:'
\n \n attribute.attributes-scope\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Jt extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopes=Object.keys(m),this.telemetryTypeTranslationsMap=u}configForm(){return this.pushToEdgeConfigForm}onConfigurationSet(e){this.pushToEdgeConfigForm=this.fb.group({scope:[e?e.scope:null,[D.required]]})}}e("PushToEdgeConfigComponent",Jt),Jt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Jt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Jt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Jt,selector:"tb-action-node-push-to-edge-config",usesInheritance:!0,ngImport:t,template:'
\n \n attribute.attributes-scope\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Jt,decorators:[{type:n,args:[{selector:"tb-action-node-push-to-edge-config",template:'
\n \n attribute.attributes-scope\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Yt extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.rpcReplyConfigForm}onConfigurationSet(e){this.rpcReplyConfigForm=this.fb.group({requestIdMetaDataAttribute:[e?e.requestIdMetaDataAttribute:null,[]]})}}e("RpcReplyConfigComponent",Yt),Yt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Yt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Yt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Yt,selector:"tb-action-node-rpc-reply-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.request-id-metadata-attribute\n \n \n
\n',dependencies:[{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Yt,decorators:[{type:n,args:[{selector:"tb-action-node-rpc-reply-config",template:'
\n \n tb.rulenode.request-id-metadata-attribute\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Wt extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.rpcRequestConfigForm}onConfigurationSet(e){this.rpcRequestConfigForm=this.fb.group({timeoutInSeconds:[e?e.timeoutInSeconds:null,[D.required,D.min(0)]]})}}e("RpcRequestConfigComponent",Wt),Wt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Wt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Wt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Wt,selector:"tb-action-node-rpc-request-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.timeout-sec\n \n \n {{ \'tb.rulenode.timeout-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-timeout-message\' | translate }}\n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Wt,decorators:[{type:n,args:[{selector:"tb-action-node-rpc-request-config",template:'
\n \n tb.rulenode.timeout-sec\n \n \n {{ \'tb.rulenode.timeout-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-timeout-message\' | translate }}\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Xt extends b{get required(){return this.requiredValue}set required(e){this.requiredValue=fe(e)}constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.propagateChange=null,this.valueChangeSubscription=null}ngOnInit(){this.ngControl=this.injector.get(V),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.kvListFormGroup=this.fb.group({}),this.kvListFormGroup.addControl("keyVals",this.fb.array([]))}keyValsFormArray(){return this.kvListFormGroup.get("keyVals")}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.kvListFormGroup.disable({emitEvent:!1}):this.kvListFormGroup.enable({emitEvent:!1})}writeValue(e){this.valueChangeSubscription&&this.valueChangeSubscription.unsubscribe();const t=[];if(e)for(const n of Object.keys(e))Object.prototype.hasOwnProperty.call(e,n)&&t.push(this.fb.group({key:[n,[D.required]],value:[e[n],[D.required]]}));this.kvListFormGroup.setControl("keyVals",this.fb.array(t)),this.valueChangeSubscription=this.kvListFormGroup.valueChanges.subscribe((()=>{this.updateModel()}))}removeKeyVal(e){this.kvListFormGroup.get("keyVals").removeAt(e)}addKeyVal(){this.kvListFormGroup.get("keyVals").push(this.fb.group({key:["",[D.required]],value:["",[D.required]]}))}validate(e){const t=this.kvListFormGroup.get("keyVals").value;if(!t.length&&this.required)return{kvMapRequired:!0};if(!this.kvListFormGroup.valid)return{kvFieldsRequired:!0};if(this.uniqueKeyValuePairValidator)for(const e of t)if(e.key===e.value)return{uniqueKeyValuePair:!0};return null}updateModel(){const e=this.kvListFormGroup.get("keyVals").value;if(this.required&&!e.length||!this.kvListFormGroup.valid)this.propagateChange(null);else{const t={};e.forEach((e=>{t[e.key]=e.value})),this.propagateChange(t)}}}e("KvMapConfigOldComponent",Xt),Xt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Xt,deps:[{token:G.Store},{token:H.TranslateService},{token:t.Injector},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Xt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Xt,selector:"tb-kv-map-config-old",inputs:{disabled:"disabled",uniqueKeyValuePairValidator:"uniqueKeyValuePairValidator",requiredText:"requiredText",keyText:"keyText",keyRequiredText:"keyRequiredText",valText:"valText",valRequiredText:"valRequiredText",hintText:"hintText",required:"required"},providers:[{provide:P,useExisting:a((()=>Xt)),multi:!0},{provide:w,useExisting:a((()=>Xt)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n
\n {{ keyText | translate }}\n {{ valText | translate }}\n \n
\n
\n
\n \n \n \n {{ keyRequiredText | translate }}\n \n \n \n \n \n {{ valRequiredText | translate }}\n \n \n \n
\n
\n
\n \n
\n \n
\n
\n',styles:[":host .tb-kv-map-config{margin-bottom:16px}:host .tb-kv-map-config .header{padding-left:5px;padding-right:5px;padding-bottom:5px}:host .tb-kv-map-config .header .cell{padding-left:5px;padding-right:5px;color:#757575;font-size:12px;font-weight:700;white-space:nowrap}:host .tb-kv-map-config .body{padding-left:5px;padding-right:5px;padding-bottom:0;max-height:300px;overflow:auto}:host .tb-kv-map-config .body .cell{padding-left:5px;padding-right:5px}:host .tb-kv-map-config tb-error{display:block;margin-top:-12px}\n"],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ge.TbErrorComponent,selector:"tb-error",inputs:["noMargin","error"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultLayoutAlignDirective,selector:" [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]",inputs:["fxLayoutAlign","fxLayoutAlign.xs","fxLayoutAlign.sm","fxLayoutAlign.md","fxLayoutAlign.lg","fxLayoutAlign.xl","fxLayoutAlign.lt-sm","fxLayoutAlign.lt-md","fxLayoutAlign.lt-lg","fxLayoutAlign.lt-xl","fxLayoutAlign.gt-xs","fxLayoutAlign.gt-sm","fxLayoutAlign.gt-md","fxLayoutAlign.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:ye.DefaultShowHideDirective,selector:" [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]",inputs:["fxShow","fxShow.print","fxShow.xs","fxShow.sm","fxShow.md","fxShow.lg","fxShow.xl","fxShow.lt-sm","fxShow.lt-md","fxShow.lt-lg","fxShow.lt-xl","fxShow.gt-xs","fxShow.gt-sm","fxShow.gt-md","fxShow.gt-lg","fxHide","fxHide.print","fxHide.xs","fxHide.sm","fxHide.md","fxHide.lg","fxHide.xl","fxHide.lt-sm","fxHide.lt-md","fxHide.lt-lg","fxHide.lt-xl","fxHide.gt-xs","fxHide.gt-sm","fxHide.gt-md","fxHide.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormControlDirective,selector:"[formControl]",inputs:["formControl","disabled","ngModel"],outputs:["ngModelChange"],exportAs:["ngForm"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormArrayName,selector:"[formArrayName]",inputs:["formArrayName"]},{kind:"pipe",type:R.AsyncPipe,name:"async"},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Xt,decorators:[{type:n,args:[{selector:"tb-kv-map-config-old",providers:[{provide:P,useExisting:a((()=>Xt)),multi:!0},{provide:w,useExisting:a((()=>Xt)),multi:!0}],template:'
\n
\n {{ keyText | translate }}\n {{ valText | translate }}\n \n
\n
\n
\n \n \n \n {{ keyRequiredText | translate }}\n \n \n \n \n \n {{ valRequiredText | translate }}\n \n \n \n
\n
\n
\n \n
\n \n
\n
\n',styles:[":host .tb-kv-map-config{margin-bottom:16px}:host .tb-kv-map-config .header{padding-left:5px;padding-right:5px;padding-bottom:5px}:host .tb-kv-map-config .header .cell{padding-left:5px;padding-right:5px;color:#757575;font-size:12px;font-weight:700;white-space:nowrap}:host .tb-kv-map-config .body{padding-left:5px;padding-right:5px;padding-bottom:0;max-height:300px;overflow:auto}:host .tb-kv-map-config .body .cell{padding-left:5px;padding-right:5px}:host .tb-kv-map-config tb-error{display:block;margin-top:-12px}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:t.Injector},{type:E.FormBuilder}]},propDecorators:{disabled:[{type:i}],uniqueKeyValuePairValidator:[{type:i}],requiredText:[{type:i}],keyText:[{type:i}],keyRequiredText:[{type:i}],valText:[{type:i}],valRequiredText:[{type:i}],hintText:[{type:i}],required:[{type:i}]}});class Zt extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.saveToCustomTableConfigForm}onConfigurationSet(e){this.saveToCustomTableConfigForm=this.fb.group({tableName:[e?e.tableName:null,[D.required,D.pattern(/.*\S.*/)]],fieldsMapping:[e?e.fieldsMapping:null,[D.required]]})}prepareOutputConfig(e){return e.tableName=e.tableName.trim(),e}}e("SaveToCustomTableConfigComponent",Zt),Zt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Zt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Zt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Zt,selector:"tb-action-node-custom-table-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.custom-table-name\n \n \n {{ \'tb.rulenode.custom-table-name-required\' | translate }}\n \n tb.rulenode.custom-table-hint\n \n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:Xt,selector:"tb-kv-map-config-old",inputs:["disabled","uniqueKeyValuePairValidator","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Zt,decorators:[{type:n,args:[{selector:"tb-action-node-custom-table-config",template:'
\n \n tb.rulenode.custom-table-name\n \n \n {{ \'tb.rulenode.custom-table-name-required\' | translate }}\n \n tb.rulenode.custom-table-hint\n \n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class en extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.timeseriesConfigForm}onConfigurationSet(e){this.timeseriesConfigForm=this.fb.group({defaultTTL:[e?e.defaultTTL:null,[D.required,D.min(0)]],skipLatestPersistence:[!!e&&e.skipLatestPersistence,[]],useServerTs:[!!e&&e.useServerTs,[]]})}}e("TimeseriesConfigComponent",en),en.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:en,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),en.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:en,selector:"tb-action-node-timeseries-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.default-ttl\n \n \n {{ \'tb.rulenode.default-ttl-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-default-ttl-message\' | translate }}\n \n \n \n {{ \'tb.rulenode.skip-latest-persistence\' | translate }}\n \n \n {{ \'tb.rulenode.use-server-ts\' | translate }}\n \n
tb.rulenode.use-server-ts-hint
\n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:en,decorators:[{type:n,args:[{selector:"tb-action-node-timeseries-config",template:'
\n \n tb.rulenode.default-ttl\n \n \n {{ \'tb.rulenode.default-ttl-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-default-ttl-message\' | translate }}\n \n \n \n {{ \'tb.rulenode.skip-latest-persistence\' | translate }}\n \n \n {{ \'tb.rulenode.use-server-ts\' | translate }}\n \n
tb.rulenode.use-server-ts-hint
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class tn extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.unassignCustomerConfigForm}onConfigurationSet(e){this.unassignCustomerConfigForm=this.fb.group({customerNamePattern:[e?e.customerNamePattern:null,[D.required,D.pattern(/.*\S.*/)]],customerCacheExpiration:[e?e.customerCacheExpiration:null,[D.required,D.min(0)]]})}prepareOutputConfig(e){return e.customerNamePattern=e.customerNamePattern.trim(),e}}e("UnassignCustomerConfigComponent",tn),tn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:tn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),tn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:tn,selector:"tb-action-node-un-assign-to-customer-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.customer-name-pattern\n \n \n {{ \'tb.rulenode.customer-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.customer-cache-expiration\n \n \n {{ \'tb.rulenode.customer-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.customer-cache-expiration-range\' | translate }}\n \n tb.rulenode.customer-cache-expiration-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:tn,decorators:[{type:n,args:[{selector:"tb-action-node-un-assign-to-customer-config",template:'
\n \n tb.rulenode.customer-name-pattern\n \n \n {{ \'tb.rulenode.customer-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.customer-cache-expiration\n \n \n {{ \'tb.rulenode.customer-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.customer-cache-expiration-range\' | translate }}\n \n tb.rulenode.customer-cache-expiration-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class nn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopeMap=m,this.attributeScopes=Object.keys(m),this.telemetryTypeTranslationsMap=u,this.separatorKeysCodes=[le,se,me]}configForm(){return this.deleteAttributesConfigForm}onConfigurationSet(e){this.deleteAttributesConfigForm=this.fb.group({scope:[e?e.scope:null,[D.required]],keys:[e?e.keys:null,[D.required]],sendAttributesDeletedNotification:[!!e&&e.sendAttributesDeletedNotification,[]],notifyDevice:[!!e&&e.notifyDevice,[]]}),this.deleteAttributesConfigForm.get("scope").valueChanges.subscribe((e=>{e!==m.SHARED_SCOPE&&this.deleteAttributesConfigForm.get("notifyDevice").patchValue(!1,{emitEvent:!1})}))}removeKey(e){const t=this.deleteAttributesConfigForm.get("keys").value,n=t.indexOf(e);n>=0&&(t.splice(n,1),this.deleteAttributesConfigForm.get("keys").patchValue(t,{emitEvent:!0}))}addKey(e){const t=e.input;let n=e.value;if((n||"").trim()){n=n.trim();let e=this.deleteAttributesConfigForm.get("keys").value;e&&-1!==e.indexOf(n)||(e||(e=[]),e.push(n),this.deleteAttributesConfigForm.get("keys").patchValue(e,{emitEvent:!0}))}t&&(t.value="")}}e("DeleteAttributesConfigComponent",nn),nn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:nn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),nn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:nn,selector:"tb-action-node-delete-attributes-config",viewQueries:[{propertyName:"attributeChipList",first:!0,predicate:["attributeChipList"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n {{ \'attribute.attributes-scope\' | translate }}\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n \n \n \n {{key}}\n close\n \n \n \n {{ \'tb.rulenode.attributes-keys-required\' | translate }}\n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.send-attributes-deleted-notification\' | translate }}\n \n
tb.rulenode.send-attributes-deleted-notification-hint
\n
\n \n {{ \'tb.rulenode.notify-device\' | translate }}\n \n
tb.rulenode.notify-device-delete-hint
\n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:ue.MatChipGrid,selector:"mat-chip-grid",inputs:["tabIndex","disabled","placeholder","required","value","errorStateMatcher"],outputs:["change","valueChange"]},{kind:"directive",type:ue.MatChipInput,selector:"input[matChipInputFor]",inputs:["matChipInputFor","matChipInputAddOnBlur","matChipInputSeparatorKeyCodes","placeholder","id","disabled"],outputs:["matChipInputTokenEnd"],exportAs:["matChipInput","matChipInputFor"]},{kind:"directive",type:ue.MatChipRemove,selector:"[matChipRemove]"},{kind:"component",type:ue.MatChipRow,selector:"mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]",inputs:["color","disabled","disableRipple","tabIndex","editable"],outputs:["edited"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:nn,decorators:[{type:n,args:[{selector:"tb-action-node-delete-attributes-config",template:'
\n \n {{ \'attribute.attributes-scope\' | translate }}\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n \n \n \n {{key}}\n close\n \n \n \n {{ \'tb.rulenode.attributes-keys-required\' | translate }}\n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.send-attributes-deleted-notification\' | translate }}\n \n
tb.rulenode.send-attributes-deleted-notification-hint
\n
\n \n {{ \'tb.rulenode.notify-device\' | translate }}\n \n
tb.rulenode.notify-device-delete-hint
\n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]},propDecorators:{attributeChipList:[{type:o,args:["attributeChipList"]}]}});class rn extends b{get function(){return this.functionValue}set function(e){e&&this.functionValue!==e&&(this.functionValue=e,this.setupArgumentsFormGroup(!0))}constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.maxArgs=16,this.minArgs=1,this.displayArgumentName=!1,this.mathFunctionMap=Et,this.ArgumentType=Dt,this.attributeScopeMap=_t,this.argumentTypeMap=Rt,this.arguments=Object.values(Dt),this.attributeScope=Object.values(Kt),this.propagateChange=null,this.valueChangeSubscription=[]}ngOnInit(){this.ngControl=this.injector.get(V),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.argumentsFormGroup=this.fb.group({arguments:this.fb.array([])}),this.valueChangeSubscription.push(this.argumentsFormGroup.valueChanges.subscribe((()=>{this.updateModel()}))),this.setupArgumentsFormGroup()}onDrop(e){const t=this.argumentsFormArray(),n=t.at(e.previousIndex);t.removeAt(e.previousIndex),t.insert(e.currentIndex,n),this.updateArgumentNames()}argumentsFormArray(){return this.argumentsFormGroup.get("arguments")}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.argumentsFormGroup.disable({emitEvent:!1}):(this.argumentsFormGroup.enable({emitEvent:!1}),this.argumentsFormGroup.get("arguments").controls.forEach((e=>this.updateArgumentControlValidators(e))))}ngOnDestroy(){this.valueChangeSubscription.length&&this.valueChangeSubscription.forEach((e=>e.unsubscribe()))}writeValue(e){const t=[];e&&e.forEach(((e,n)=>{t.push(this.createArgumentControl(e,n))})),this.argumentsFormGroup.setControl("arguments",this.fb.array(t),{emitEvent:!1}),this.setupArgumentsFormGroup()}removeArgument(e){this.argumentsFormGroup.get("arguments").removeAt(e),this.updateArgumentNames()}addArgument(e=!0){const t=this.argumentsFormGroup.get("arguments"),n=this.createArgumentControl(null,t.length);t.push(n,{emitEvent:e})}validate(e){return this.argumentsFormGroup.valid?null:{argumentsRequired:!0}}setupArgumentsFormGroup(e=!1){if(this.function&&(this.maxArgs=this.mathFunctionMap.get(this.function).maxArgs,this.minArgs=this.mathFunctionMap.get(this.function).minArgs,this.displayArgumentName=this.function===Gt.CUSTOM),this.argumentsFormGroup){for(this.argumentsFormGroup.get("arguments").setValidators([D.minLength(this.minArgs),D.maxLength(this.maxArgs)]),this.argumentsFormGroup.get("arguments").value.length>this.maxArgs&&(this.argumentsFormGroup.get("arguments").controls.length=this.maxArgs);this.argumentsFormGroup.get("arguments").value.length{this.updateArgumentControlValidators(n),n.get("attributeScope").updateValueAndValidity({emitEvent:!1}),n.get("defaultValue").updateValueAndValidity({emitEvent:!1})}))),n}updateArgumentControlValidators(e){const t=e.get("type").value;t===Dt.ATTRIBUTE?e.get("attributeScope").enable({emitEvent:!1}):e.get("attributeScope").disable({emitEvent:!1}),t&&t!==Dt.CONSTANT?e.get("defaultValue").enable({emitEvent:!1}):e.get("defaultValue").disable({emitEvent:!1})}updateArgumentNames(){this.argumentsFormGroup.get("arguments").controls.forEach(((e,t)=>{e.get("name").setValue(Bt[t])}))}updateModel(){const e=this.argumentsFormGroup.get("arguments").value;e.length&&this.argumentsFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}}e("ArgumentsMapConfigComponent",rn),rn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:rn,deps:[{token:G.Store},{token:H.TranslateService},{token:t.Injector},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),rn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:rn,selector:"tb-arguments-map-config",inputs:{disabled:"disabled",function:"function"},providers:[{provide:P,useExisting:a((()=>rn)),multi:!0},{provide:w,useExisting:a((()=>rn)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n\n
\n \n \n
\n \n
\n {{argumentControl.get(\'name\').value}}.\n
\n \n tb.rulenode.argument-source-field-input\n \n \n {{ argumentTypeMap.get(argumentControl.get(\'type\').value)?.name | translate }}\n \n \n {{ argumentTypeMap.get(argument).name | translate }}\n \n {{ argumentTypeMap.get(argument).description }}\n \n \n \n \n tb.rulenode.argument-source-field-input-required\n \n \n
\n \n tb.rulenode.argument-key-field-input\n \n \n help\n \n \n tb.rulenode.argument-key-field-input-required\n \n \n \n tb.rulenode.constant-value-field-input\n \n \n tb.rulenode.constant-value-field-input-required\n \n \n \n tb.rulenode.default-value-field-input\n \n \n
\n \n tb.rulenode.attribute-scope-field-input\n \n \n {{ attributeScopeMap.get(scope) | translate }}\n \n \n \n tb.rulenode.attribute-scope-field-input-required\n \n \n
\n \n
\n
\n
\n
\n
\n
\n tb.rulenode.no-arguments-prompt\n
\n \n
\n',styles:[":host .mat-mdc-list-item.tb-argument{border:solid rgba(0,0,0,.25) 1px;border-radius:4px;padding:10px 0;margin-bottom:16px}:host .arguments-list{padding:0}\n"],dependencies:[{kind:"directive",type:R.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"directive",type:z.MatSelectTrigger,selector:"mat-select-trigger"},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"component",type:xe.MatList,selector:"mat-list",exportAs:["matList"]},{kind:"component",type:xe.MatListItem,selector:"mat-list-item, a[mat-list-item], button[mat-list-item]",inputs:["activated"],exportAs:["matListItem"]},{kind:"directive",type:be.CdkDropList,selector:"[cdkDropList], cdk-drop-list",inputs:["cdkDropListConnectedTo","cdkDropListData","cdkDropListOrientation","id","cdkDropListLockAxis","cdkDropListDisabled","cdkDropListSortingDisabled","cdkDropListEnterPredicate","cdkDropListSortPredicate","cdkDropListAutoScrollDisabled","cdkDropListAutoScrollStep"],outputs:["cdkDropListDropped","cdkDropListEntered","cdkDropListExited","cdkDropListSorted"],exportAs:["cdkDropList"]},{kind:"directive",type:be.CdkDrag,selector:"[cdkDrag]",inputs:["cdkDragData","cdkDragLockAxis","cdkDragRootElement","cdkDragBoundary","cdkDragStartDelay","cdkDragFreeDragPosition","cdkDragDisabled","cdkDragConstrainPosition","cdkDragPreviewClass","cdkDragPreviewContainer"],outputs:["cdkDragStarted","cdkDragReleased","cdkDragEnded","cdkDragEntered","cdkDragExited","cdkDragDropped","cdkDragMoved"],exportAs:["cdkDrag"]},{kind:"directive",type:be.CdkDragHandle,selector:"[cdkDragHandle]",inputs:["cdkDragHandleDisabled"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultLayoutAlignDirective,selector:" [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]",inputs:["fxLayoutAlign","fxLayoutAlign.xs","fxLayoutAlign.sm","fxLayoutAlign.md","fxLayoutAlign.lg","fxLayoutAlign.xl","fxLayoutAlign.lt-sm","fxLayoutAlign.lt-md","fxLayoutAlign.lt-lg","fxLayoutAlign.lt-xl","fxLayoutAlign.gt-xs","fxLayoutAlign.gt-sm","fxLayoutAlign.gt-md","fxLayoutAlign.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:ye.DefaultClassDirective,selector:" [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]",inputs:["ngClass","ngClass.xs","ngClass.sm","ngClass.md","ngClass.lg","ngClass.xl","ngClass.lt-sm","ngClass.lt-md","ngClass.lt-lg","ngClass.lt-xl","ngClass.gt-xs","ngClass.gt-sm","ngClass.gt-md","ngClass.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormControlDirective,selector:"[formControl]",inputs:["formControl","disabled","ngModel"],outputs:["ngModelChange"],exportAs:["ngForm"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormArrayName,selector:"[formArrayName]",inputs:["formArrayName"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:rn,decorators:[{type:n,args:[{selector:"tb-arguments-map-config",providers:[{provide:P,useExisting:a((()=>rn)),multi:!0},{provide:w,useExisting:a((()=>rn)),multi:!0}],template:'
\n\n
\n \n \n
\n \n
\n {{argumentControl.get(\'name\').value}}.\n
\n \n tb.rulenode.argument-source-field-input\n \n \n {{ argumentTypeMap.get(argumentControl.get(\'type\').value)?.name | translate }}\n \n \n {{ argumentTypeMap.get(argument).name | translate }}\n \n {{ argumentTypeMap.get(argument).description }}\n \n \n \n \n tb.rulenode.argument-source-field-input-required\n \n \n
\n \n tb.rulenode.argument-key-field-input\n \n \n help\n \n \n tb.rulenode.argument-key-field-input-required\n \n \n \n tb.rulenode.constant-value-field-input\n \n \n tb.rulenode.constant-value-field-input-required\n \n \n \n tb.rulenode.default-value-field-input\n \n \n
\n \n tb.rulenode.attribute-scope-field-input\n \n \n {{ attributeScopeMap.get(scope) | translate }}\n \n \n \n tb.rulenode.attribute-scope-field-input-required\n \n \n
\n \n
\n
\n
\n
\n
\n
\n tb.rulenode.no-arguments-prompt\n
\n \n
\n',styles:[":host .mat-mdc-list-item.tb-argument{border:solid rgba(0,0,0,.25) 1px;border-radius:4px;padding:10px 0;margin-bottom:16px}:host .arguments-list{padding:0}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:t.Injector},{type:E.FormBuilder}]},propDecorators:{disabled:[{type:i}],function:[{type:i}]}});class on extends b{get required(){return this.requiredValue}set required(e){this.requiredValue=fe(e)}constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.searchText="",this.dirty=!1,this.mathOperation=[...Et.values()],this.propagateChange=null}ngOnInit(){this.mathFunctionForm=this.fb.group({operation:[""]}),this.filteredOptions=this.mathFunctionForm.get("operation").valueChanges.pipe(he((e=>{let t;t="string"==typeof e&&Gt[e]?Gt[e]:null,this.updateView(t)})),ve((e=>(this.searchText=e||"",e?this._filter(e):this.mathOperation.slice()))))}_filter(e){const t=e.toLowerCase();return this.mathOperation.filter((e=>e.name.toLowerCase().includes(t)||e.value.toLowerCase().includes(t)))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.mathFunctionForm.disable({emitEvent:!1}):this.mathFunctionForm.enable({emitEvent:!1})}mathFunctionDisplayFn(e){if(e){const t=Et.get(e);return t.value+" | "+t.name}return""}writeValue(e){this.modelValue=e,this.mathFunctionForm.get("operation").setValue(e,{emitEvent:!1}),this.dirty=!0}updateView(e){this.modelValue!==e&&(this.modelValue=e,this.propagateChange(this.modelValue))}onFocus(){this.dirty&&(this.mathFunctionForm.get("operation").updateValueAndValidity({onlySelf:!0}),this.dirty=!1)}clear(){this.mathFunctionForm.get("operation").patchValue(""),setTimeout((()=>{this.operationInput.nativeElement.blur(),this.operationInput.nativeElement.focus()}),0)}}e("MathFunctionAutocompleteComponent",on),on.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:on,deps:[{token:G.Store},{token:H.TranslateService},{token:t.Injector},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),on.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:on,selector:"tb-math-function-autocomplete",inputs:{required:"required",disabled:"disabled"},providers:[{provide:P,useExisting:a((()=>on)),multi:!0}],viewQueries:[{propertyName:"operationInput",first:!0,predicate:["operationInput"],descendants:!0,static:!0}],usesInheritance:!0,ngImport:t,template:'\n tb.rulenode.functions-field-input\n \n \n \n \n \n \n {{ option.description }}\n \n \n \n tb.rulenode.no-option-found\n \n \n\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Te.MatAutocomplete,selector:"mat-autocomplete",inputs:["disableRipple","hideSingleSelectionIndicator"],exportAs:["matAutocomplete"]},{kind:"directive",type:Te.MatAutocompleteTrigger,selector:"input[matAutocomplete], textarea[matAutocomplete]",exportAs:["matAutocompleteTrigger"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:R.AsyncPipe,name:"async"},{kind:"pipe",type:Ie.HighlightPipe,name:"highlight"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:on,decorators:[{type:n,args:[{selector:"tb-math-function-autocomplete",providers:[{provide:P,useExisting:a((()=>on)),multi:!0}],template:'\n tb.rulenode.functions-field-input\n \n \n \n \n \n \n {{ option.description }}\n \n \n \n tb.rulenode.no-option-found\n \n \n\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:t.Injector},{type:E.UntypedFormBuilder}]},propDecorators:{required:[{type:i}],disabled:[{type:i}],operationInput:[{type:o,args:["operationInput",{static:!0}]}]}});class an extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.MathFunction=Gt,this.ArgumentTypeResult=Vt,this.argumentTypeResultMap=Ot,this.attributeScopeMap=_t,this.argumentsResult=Object.values(Vt),this.attributeScopeResult=Object.values(Ut)}configForm(){return this.mathFunctionConfigForm}onConfigurationSet(e){this.mathFunctionConfigForm=this.fb.group({operation:[e?e.operation:null,[D.required]],arguments:[e?e.arguments:null,[D.required]],customFunction:[e?e.customFunction:"",[D.required]],result:this.fb.group({type:[e?e.result.type:null,[D.required]],attributeScope:[e?e.result.attributeScope:null,[D.required]],key:[e?e.result.key:"",[D.required]],resultValuePrecision:[e?e.result.resultValuePrecision:0],addToBody:[!!e&&e.result.addToBody],addToMetadata:[!!e&&e.result.addToMetadata]})})}updateValidators(e){const t=this.mathFunctionConfigForm.get("operation").value,n=this.mathFunctionConfigForm.get("result.type").value;t===Gt.CUSTOM?this.mathFunctionConfigForm.get("customFunction").enable({emitEvent:!1}):this.mathFunctionConfigForm.get("customFunction").disable({emitEvent:!1}),n===Vt.ATTRIBUTE?this.mathFunctionConfigForm.get("result.attributeScope").enable({emitEvent:!1}):this.mathFunctionConfigForm.get("result.attributeScope").disable({emitEvent:!1}),this.mathFunctionConfigForm.get("customFunction").updateValueAndValidity({emitEvent:e}),this.mathFunctionConfigForm.get("result.attributeScope").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["operation","result.type"]}}e("MathFunctionConfigComponent",an),an.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:an,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),an.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:an,selector:"tb-action-node-math-function-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n
\n tb.rulenode.argument-tile\n \n \n
\n
\n {{\'tb.rulenode.custom-expression-field-input\' | translate }} *\n \n \n \n tb.rulenode.custom-expression-field-input-required\n \n tb.rulenode.custom-expression-field-input-hint\n \n
\n
\n tb.rulenode.result-title\n
\n \n tb.rulenode.type-field-input\n \n \n {{ argumentTypeResultMap.get(mathFunctionConfigForm.get(\'result.type\').value)?.name | translate }}\n \n \n {{ argumentTypeResultMap.get(argument).name | translate }}\n \n {{ argumentTypeResultMap.get(argument).description }}\n \n \n \n \n tb.rulenode.type-field-input-required\n \n \n
\n \n tb.rulenode.attribute-scope-field-input\n \n \n {{ attributeScopeMap.get(scope) | translate }}\n \n \n \n \n tb.rulenode.key-field-input\n \n help\n \n tb.rulenode.key-field-input-required\n \n \n
\n
\n \n tb.rulenode.number-floating-point-field-input\n \n \n \n
\n
\n \n {{\'tb.rulenode.add-to-message-field-input\' | translate }}\n \n \n {{\'tb.rulenode.add-to-metadata-field-input\' | translate}}\n \n
\n
\n
\n
\n',styles:[":host ::ng-deep .fields-group{padding:0 16px 8px;margin:10px 0;border:1px groove rgba(0,0,0,.25);border-radius:4px}:host ::ng-deep .fields-group .mat-mdc-form-field .mat-mdc-form-field-infix{width:100%}:host ::ng-deep .fields-group legend{color:#000000b3;width:-moz-fit-content;width:fit-content}:host ::ng-deep .fields-group legend+*{display:block}:host ::ng-deep .fields-group legend+*.no-margin-top{margin-top:0}\n"],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"directive",type:z.MatSelectTrigger,selector:"mat-select-trigger"},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultLayoutAlignDirective,selector:" [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]",inputs:["fxLayoutAlign","fxLayoutAlign.xs","fxLayoutAlign.sm","fxLayoutAlign.md","fxLayoutAlign.lg","fxLayoutAlign.xl","fxLayoutAlign.lt-sm","fxLayoutAlign.lt-md","fxLayoutAlign.lt-lg","fxLayoutAlign.lt-xl","fxLayoutAlign.gt-xs","fxLayoutAlign.gt-sm","fxLayoutAlign.gt-md","fxLayoutAlign.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:E.FormGroupName,selector:"[formGroupName]",inputs:["formGroupName"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:rn,selector:"tb-arguments-map-config",inputs:["disabled","function"]},{kind:"component",type:on,selector:"tb-math-function-autocomplete",inputs:["required","disabled"]},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:an,decorators:[{type:n,args:[{selector:"tb-action-node-math-function-config",template:'
\n \n \n
\n tb.rulenode.argument-tile\n \n \n
\n
\n {{\'tb.rulenode.custom-expression-field-input\' | translate }} *\n \n \n \n tb.rulenode.custom-expression-field-input-required\n \n tb.rulenode.custom-expression-field-input-hint\n \n
\n
\n tb.rulenode.result-title\n
\n \n tb.rulenode.type-field-input\n \n \n {{ argumentTypeResultMap.get(mathFunctionConfigForm.get(\'result.type\').value)?.name | translate }}\n \n \n {{ argumentTypeResultMap.get(argument).name | translate }}\n \n {{ argumentTypeResultMap.get(argument).description }}\n \n \n \n \n tb.rulenode.type-field-input-required\n \n \n
\n \n tb.rulenode.attribute-scope-field-input\n \n \n {{ attributeScopeMap.get(scope) | translate }}\n \n \n \n \n tb.rulenode.key-field-input\n \n help\n \n tb.rulenode.key-field-input-required\n \n \n
\n
\n \n tb.rulenode.number-floating-point-field-input\n \n \n \n
\n
\n \n {{\'tb.rulenode.add-to-message-field-input\' | translate }}\n \n \n {{\'tb.rulenode.add-to-metadata-field-input\' | translate}}\n \n
\n
\n
\n
\n',styles:[":host ::ng-deep .fields-group{padding:0 16px 8px;margin:10px 0;border:1px groove rgba(0,0,0,.25);border-radius:4px}:host ::ng-deep .fields-group .mat-mdc-form-field .mat-mdc-form-field-infix{width:100%}:host ::ng-deep .fields-group legend{color:#000000b3;width:-moz-fit-content;width:fit-content}:host ::ng-deep .fields-group legend+*{display:block}:host ::ng-deep .fields-group legend+*.no-margin-top{margin-top:0}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class ln extends b{set required(e){this.requiredValue!==e&&(this.requiredValue=e,this.updateValidators())}get required(){return this.requiredValue}constructor(e,t){super(e),this.store=e,this.fb=t,this.subscriptSizing="fixed",this.searchText="",this.dirty=!1,this.messageTypes=["POST_ATTRIBUTES_REQUEST","POST_TELEMETRY_REQUEST"],this.propagateChange=e=>{},this.messageTypeFormGroup=this.fb.group({messageType:[null,[D.maxLength(255)]]})}registerOnTouched(e){}registerOnChange(e){this.propagateChange=e}ngOnInit(){this.outputMessageTypes=this.messageTypeFormGroup.get("messageType").valueChanges.pipe(he((e=>{this.updateView(e)})),ve((e=>e||"")),Ce((e=>this.fetchMessageTypes(e))))}writeValue(e){this.searchText="",this.modelValue=e,this.messageTypeFormGroup.get("messageType").patchValue(e,{emitEvent:!1}),this.dirty=!0}onFocus(){this.dirty&&(this.messageTypeFormGroup.get("messageType").updateValueAndValidity({onlySelf:!0,emitEvent:!0}),this.dirty=!1)}updateView(e){this.modelValue!==e&&(this.modelValue=e,this.propagateChange(this.modelValue))}displayMessageTypeFn(e){return e||void 0}fetchMessageTypes(e,t=!1){return this.searchText=e,qe(this.messageTypes).pipe(ve((n=>n.filter((n=>t?!!e&&n===e:!e||n.toUpperCase().startsWith(e.toUpperCase()))))))}clear(){this.messageTypeFormGroup.get("messageType").patchValue(null,{emitEvent:!0}),setTimeout((()=>{this.messageTypeInput.nativeElement.blur(),this.messageTypeInput.nativeElement.focus()}),0)}setDisabledState(e){e?this.messageTypeFormGroup.disable({emitEvent:!1}):this.messageTypeFormGroup.enable({emitEvent:!1})}updateValidators(){this.messageTypeFormGroup.get("messageType").setValidators(this.required?[D.required,D.maxLength(255)]:[D.maxLength(255)]),this.messageTypeFormGroup.get("messageType").updateValueAndValidity({emitEvent:!1})}}e("OutputMessageTypeAutocompleteComponent",ln),ln.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ln,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),ln.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:ln,selector:"tb-output-message-type-autocomplete",inputs:{autocompleteHint:"autocompleteHint",subscriptSizing:"subscriptSizing",required:"required"},providers:[{provide:P,useExisting:a((()=>ln)),multi:!0}],viewQueries:[{propertyName:"messageTypeInput",first:!0,predicate:["messageTypeInput"],descendants:!0,static:!0}],usesInheritance:!0,ngImport:t,template:'\n {{\'tb.rulenode.output-message-type\' | translate}}\n \n \n \n \n \n \n \n {{autocompleteHint | translate}}\n \n {{ \'tb.rulenode.output-message-type-required\' | translate }}\n \n \n {{ \'tb.rulenode.output-message-type-max-length\' | translate }}\n \n\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Te.MatAutocomplete,selector:"mat-autocomplete",inputs:["disableRipple","hideSingleSelectionIndicator"],exportAs:["matAutocomplete"]},{kind:"directive",type:Te.MatAutocompleteTrigger,selector:"input[matAutocomplete], textarea[matAutocomplete]",exportAs:["matAutocompleteTrigger"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"pipe",type:R.AsyncPipe,name:"async"},{kind:"pipe",type:Ie.HighlightPipe,name:"highlight"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),Se([h()],ln.prototype,"required",null),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ln,decorators:[{type:n,args:[{selector:"tb-output-message-type-autocomplete",providers:[{provide:P,useExisting:a((()=>ln)),multi:!0}],template:'\n {{\'tb.rulenode.output-message-type\' | translate}}\n \n \n \n \n \n \n \n {{autocompleteHint | translate}}\n \n {{ \'tb.rulenode.output-message-type-required\' | translate }}\n \n \n {{ \'tb.rulenode.output-message-type-max-length\' | translate }}\n \n\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]},propDecorators:{messageTypeInput:[{type:o,args:["messageTypeInput",{static:!0}]}],autocompleteHint:[{type:i}],subscriptSizing:[{type:i}],required:[{type:i}]}});class sn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.serviceType=p.TB_RULE_ENGINE,this.deduplicationStrategie=gt,this.deduplicationStrategies=Object.keys(this.deduplicationStrategie),this.deduplicationStrategiesTranslations=yt}configForm(){return this.deduplicationConfigForm}onConfigurationSet(e){this.deduplicationConfigForm=this.fb.group({interval:[X(e?.interval)?e.interval:null,[D.required,D.min(1)]],strategy:[X(e?.strategy)?e.strategy:null,[D.required]],outMsgType:[X(e?.outMsgType)?e.outMsgType:null,[D.required]],queueName:[X(e?.queueName)?e.queueName:null,[D.required]],maxPendingMsgs:[X(e?.maxPendingMsgs)?e.maxPendingMsgs:null,[D.required,D.min(1),D.max(1e3)]],maxRetries:[X(e?.maxRetries)?e.maxRetries:null,[D.required,D.min(0),D.max(100)]]})}updateValidators(e){this.deduplicationConfigForm.get("strategy").value===this.deduplicationStrategie.ALL?(this.deduplicationConfigForm.get("outMsgType").enable({emitEvent:!1}),this.deduplicationConfigForm.get("queueName").enable({emitEvent:!1})):(this.deduplicationConfigForm.get("outMsgType").disable({emitEvent:!1}),this.deduplicationConfigForm.get("queueName").disable({emitEvent:!1})),this.deduplicationConfigForm.get("outMsgType").updateValueAndValidity({emitEvent:e}),this.deduplicationConfigForm.get("queueName").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["strategy"]}}e("DeduplicationConfigComponent",sn),sn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:sn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),sn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:sn,selector:"tb-action-node-msg-deduplication-config",usesInheritance:!0,ngImport:t,template:"
\n \n {{'tb.rulenode.interval' | translate}}\n \n {{'tb.rulenode.interval-hint' | translate}}\n \n {{'tb.rulenode.interval-required' | translate}}\n \n \n {{'tb.rulenode.interval-min-error' | translate}}\n \n \n \n {{'tb.rulenode.strategy' | translate}}\n \n \n {{ deduplicationStrategiesTranslations.get(strategy) | translate }}\n \n \n \n {{'tb.rulenode.strategy-first-hint' | translate}}\n {{'tb.rulenode.strategy-last-hint' | translate}}\n \n {{'tb.rulenode.strategy-required' | translate}}\n \n \n
\n \n \n \n \n
\n \n \n \n
\n
Advanced settings
\n
\n
\n
\n \n \n {{'tb.rulenode.max-pending-msgs' | translate}}\n \n {{'tb.rulenode.max-pending-msgs-hint' | translate}}\n \n {{'tb.rulenode.max-pending-msgs-required' | translate}}\n \n \n {{'tb.rulenode.max-pending-msgs-max-error' | translate}}\n \n \n {{'tb.rulenode.max-pending-msgs-min-error' | translate}}\n \n \n \n {{'tb.rulenode.max-retries' | translate}}\n \n {{'tb.rulenode.max-retries-hint' | translate}}\n \n {{'tb.rulenode.max-retries-required' | translate}}\n \n \n {{'tb.rulenode.max-retries-max-error' | translate}}\n \n \n {{'tb.rulenode.max-retries-min-error' | translate}}\n \n \n \n
\n
\n",styles:[":host ::ng-deep .mat-expansion-panel.advanced-settings{border:none;box-shadow:none;padding:0}:host ::ng-deep .mat-expansion-panel.advanced-settings .mat-expansion-panel-body{padding:0}:host ::ng-deep .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:white}\n"],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:J.QueueAutocompleteComponent,selector:"tb-queue-autocomplete",inputs:["labelText","requiredText","autocompleteHint","subscriptSizing","required","queueType","disabled"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Ne.MatExpansionPanel,selector:"mat-expansion-panel",inputs:["disabled","expanded","hideToggle","togglePosition"],outputs:["opened","closed","expandedChange","afterExpand","afterCollapse"],exportAs:["matExpansionPanel"]},{kind:"component",type:Ne.MatExpansionPanelHeader,selector:"mat-expansion-panel-header",inputs:["tabIndex","expandedHeight","collapsedHeight"]},{kind:"directive",type:Ne.MatExpansionPanelTitle,selector:"mat-panel-title"},{kind:"directive",type:Ne.MatExpansionPanelContent,selector:"ng-template[matExpansionPanelContent]"},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutAlignDirective,selector:" [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]",inputs:["fxLayoutAlign","fxLayoutAlign.xs","fxLayoutAlign.sm","fxLayoutAlign.md","fxLayoutAlign.lg","fxLayoutAlign.xl","fxLayoutAlign.lt-sm","fxLayoutAlign.lt-md","fxLayoutAlign.lt-lg","fxLayoutAlign.lt-xl","fxLayoutAlign.gt-xs","fxLayoutAlign.gt-sm","fxLayoutAlign.gt-md","fxLayoutAlign.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:ln,selector:"tb-output-message-type-autocomplete",inputs:["autocompleteHint","subscriptSizing","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:sn,decorators:[{type:n,args:[{selector:"tb-action-node-msg-deduplication-config",template:"
\n \n {{'tb.rulenode.interval' | translate}}\n \n {{'tb.rulenode.interval-hint' | translate}}\n \n {{'tb.rulenode.interval-required' | translate}}\n \n \n {{'tb.rulenode.interval-min-error' | translate}}\n \n \n \n {{'tb.rulenode.strategy' | translate}}\n \n \n {{ deduplicationStrategiesTranslations.get(strategy) | translate }}\n \n \n \n {{'tb.rulenode.strategy-first-hint' | translate}}\n {{'tb.rulenode.strategy-last-hint' | translate}}\n \n {{'tb.rulenode.strategy-required' | translate}}\n \n \n
\n \n \n \n \n
\n \n \n \n
\n
Advanced settings
\n
\n
\n
\n \n \n {{'tb.rulenode.max-pending-msgs' | translate}}\n \n {{'tb.rulenode.max-pending-msgs-hint' | translate}}\n \n {{'tb.rulenode.max-pending-msgs-required' | translate}}\n \n \n {{'tb.rulenode.max-pending-msgs-max-error' | translate}}\n \n \n {{'tb.rulenode.max-pending-msgs-min-error' | translate}}\n \n \n \n {{'tb.rulenode.max-retries' | translate}}\n \n {{'tb.rulenode.max-retries-hint' | translate}}\n \n {{'tb.rulenode.max-retries-required' | translate}}\n \n \n {{'tb.rulenode.max-retries-max-error' | translate}}\n \n \n {{'tb.rulenode.max-retries-min-error' | translate}}\n \n \n \n
\n
\n",styles:[":host ::ng-deep .mat-expansion-panel.advanced-settings{border:none;box-shadow:none;padding:0}:host ::ng-deep .mat-expansion-panel.advanced-settings .mat-expansion-panel-body{padding:0}:host ::ng-deep .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:white}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class mn{}e("ExampleHintComponent",mn),mn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:mn,deps:[],target:t.ɵɵFactoryTarget.Component}),mn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:mn,selector:"tb-example-hint",inputs:{hintText:"hintText",popupHelpLink:"popupHelpLink"},ngImport:t,template:'
\n
{{ hintText }}
\n
\n
\n
\n',styles:[":host .custom-styles{display:flex;justify-content:space-between;gap:20px}:host .custom-styles .see-example{display:flex;flex-shrink:0}\n"],dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:Ge.HelpPopupComponent,selector:"[tb-help-popup], [tb-help-popup-content]",inputs:["tb-help-popup","tb-help-popup-content","trigger-text","trigger-style","tb-help-popup-placement","tb-help-popup-style","hintMode"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:mn,decorators:[{type:n,args:[{selector:"tb-example-hint",template:'
\n
{{ hintText }}
\n
\n
\n
\n',styles:[":host .custom-styles{display:flex;justify-content:space-between;gap:20px}:host .custom-styles .see-example{display:flex;flex-shrink:0}\n"]}]}],propDecorators:{hintText:[{type:i}],popupHelpLink:[{type:i}]}});class un extends b{constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.propagateChange=null,this.valueChangeSubscription=null,this.disabled=!1,this.uniqueKeyValuePairValidator=!1,this.required=!1}ngOnInit(){this.ngControl=this.injector.get(V),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.kvListFormGroup=this.fb.group({}),this.kvListFormGroup.addControl("keyVals",this.fb.array([]))}keyValsFormArray(){return this.kvListFormGroup.get("keyVals")}errorTrigger(){const e=this.keyValsFormArray();for(const t of e.controls)for(const e of Object.keys(t.value))if(t.get(e).touched&&t.get(e).invalid)return!0;return!1}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.kvListFormGroup.disable({emitEvent:!1}):this.kvListFormGroup.enable({emitEvent:!1})}writeValue(e){this.valueChangeSubscription&&this.valueChangeSubscription.unsubscribe();const t=[];if(e)for(const n of Object.keys(e))Object.prototype.hasOwnProperty.call(e,n)&&t.push(this.fb.group({key:[n,[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],value:[e[n],[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]}));this.kvListFormGroup.setControl("keyVals",this.fb.array(t)),this.valueChangeSubscription=this.kvListFormGroup.valueChanges.subscribe((()=>{this.updateModel()}))}removeKeyVal(e){this.kvListFormGroup.get("keyVals").removeAt(e)}addKeyVal(){this.kvListFormGroup.get("keyVals").push(this.fb.group({key:["",[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],value:["",[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]}))}validate(e){const t=this.kvListFormGroup.get("keyVals").value;if(!t.length&&this.required)return{kvMapRequired:!0};if(!this.kvListFormGroup.valid)return{kvFieldsRequired:!0};if(this.uniqueKeyValuePairValidator)for(const e of t)if(e.key===e.value)return{uniqueKeyValuePair:!0};return null}updateModel(){const e=this.kvListFormGroup.get("keyVals").value;if(this.required&&!e.length||!this.kvListFormGroup.valid)this.propagateChange(null);else{const t={};e.forEach((e=>{t[e.key]=e.value})),this.propagateChange(t)}}}e("KvMapConfigComponent",un),un.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:un,deps:[{token:G.Store},{token:H.TranslateService},{token:t.Injector},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),un.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:un,selector:"tb-kv-map-config",inputs:{disabled:"disabled",uniqueKeyValuePairValidator:"uniqueKeyValuePairValidator",labelText:"labelText",requiredText:"requiredText",keyText:"keyText",keyRequiredText:"keyRequiredText",valText:"valText",valRequiredText:"valRequiredText",hintText:"hintText",popupHelpLink:"popupHelpLink",required:"required"},providers:[{provide:P,useExisting:a((()=>un)),multi:!0},{provide:w,useExisting:a((()=>un)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n
\n
{{ labelText }}
\n
\n tb.rulenode.map-fields-required\n
\n
\n
\n
\n
\n
{{ keyText }}
\n
{{ valText }}
\n
\n
\n
\n
\n \n \n \n \n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n',styles:[":host .field-space{flex:1 1 50%}:host .actions-header{width:40px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:ye.DefaultClassDirective,selector:" [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]",inputs:["ngClass","ngClass.xs","ngClass.sm","ngClass.md","ngClass.lg","ngClass.xl","ngClass.lt-sm","ngClass.lt-md","ngClass.lt-lg","ngClass.lt-xl","ngClass.gt-xs","ngClass.gt-sm","ngClass.gt-md","ngClass.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormControlDirective,selector:"[formControl]",inputs:["formControl","disabled","ngModel"],outputs:["ngModelChange"],exportAs:["ngForm"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:mn,selector:"tb-example-hint",inputs:["hintText","popupHelpLink"]},{kind:"pipe",type:R.AsyncPipe,name:"async"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),Se([h()],un.prototype,"disabled",void 0),Se([h()],un.prototype,"uniqueKeyValuePairValidator",void 0),Se([h()],un.prototype,"required",void 0),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:un,decorators:[{type:n,args:[{selector:"tb-kv-map-config",providers:[{provide:P,useExisting:a((()=>un)),multi:!0},{provide:w,useExisting:a((()=>un)),multi:!0}],template:'
\n
\n
{{ labelText }}
\n
\n tb.rulenode.map-fields-required\n
\n
\n
\n
\n
\n
{{ keyText }}
\n
{{ valText }}
\n
\n
\n
\n
\n \n \n \n \n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n',styles:[":host .field-space{flex:1 1 50%}:host .actions-header{width:40px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:t.Injector},{type:E.FormBuilder}]},propDecorators:{disabled:[{type:i}],uniqueKeyValuePairValidator:[{type:i}],labelText:[{type:i}],requiredText:[{type:i}],keyText:[{type:i}],keyRequiredText:[{type:i}],valText:[{type:i}],valRequiredText:[{type:i}],hintText:[{type:i}],popupHelpLink:[{type:i}],required:[{type:i}]}});class pn extends b{get required(){return this.requiredValue}set required(e){this.requiredValue=fe(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.values(g),this.directionTypeTranslations=y,this.entityType=x,this.propagateChange=null}ngOnInit(){this.deviceRelationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[D.required]],maxLevel:[null,[D.min(1)]],relationType:[null],deviceTypes:[null,[D.required]]}),this.deviceRelationsQueryFormGroup.valueChanges.subscribe((e=>{this.deviceRelationsQueryFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.deviceRelationsQueryFormGroup.disable({emitEvent:!1}):this.deviceRelationsQueryFormGroup.enable({emitEvent:!1})}writeValue(e){this.deviceRelationsQueryFormGroup.reset(e,{emitEvent:!1})}}e("DeviceRelationsQueryConfigComponent",pn),pn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:pn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),pn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:pn,selector:"tb-device-relations-query-config",inputs:{disabled:"disabled",required:"required"},providers:[{provide:P,useExisting:a((()=>pn)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n \n tb.rulenode.max-relation-level\n \n \n {{ \'tb.rulenode.max-relation-level-error\' | translate }}\n \n \n
\n
\n \n {{ \'alias.last-level-relation\' | translate }}\n \n
\n \n \n \n help\n \n
\n',styles:[":host .last-level-slide-toggle{margin:8px 0 24px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:Ee.EntitySubTypeListComponent,selector:"tb-entity-subtype-list",inputs:["required","floatLabel","label","disabled","entityType","emptyInputPlaceholder","filledInputPlaceholder"]},{kind:"component",type:De.RelationTypeAutocompleteComponent,selector:"tb-relation-type-autocomplete",inputs:["showLabel","additionalClasses","appearance","required","disabled","subscriptSizing"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:pn,decorators:[{type:n,args:[{selector:"tb-device-relations-query-config",providers:[{provide:P,useExisting:a((()=>pn)),multi:!0}],template:'
\n
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n \n tb.rulenode.max-relation-level\n \n \n {{ \'tb.rulenode.max-relation-level-error\' | translate }}\n \n \n
\n
\n \n {{ \'alias.last-level-relation\' | translate }}\n \n
\n \n \n \n help\n \n
\n',styles:[":host .last-level-slide-toggle{margin:8px 0 24px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]},propDecorators:{disabled:[{type:i}],required:[{type:i}]}});class dn extends b{get required(){return this.requiredValue}set required(e){this.requiredValue=fe(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.values(g),this.directionTypeTranslations=y,this.propagateChange=null}ngOnInit(){this.relationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[D.required]],maxLevel:[null,[D.min(1)]],filters:[null]}),this.relationsQueryFormGroup.valueChanges.subscribe((e=>{this.relationsQueryFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.relationsQueryFormGroup.disable({emitEvent:!1}):this.relationsQueryFormGroup.enable({emitEvent:!1})}writeValue(e){this.relationsQueryFormGroup.reset(e||{},{emitEvent:!1})}}e("RelationsQueryConfigComponent",dn),dn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:dn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),dn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:dn,selector:"tb-relations-query-config",inputs:{disabled:"disabled",required:"required"},providers:[{provide:P,useExisting:a((()=>dn)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n
tb.rulenode.relations-query
\n
\n
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n \n tb.rulenode.max-relation-level\n \n \n {{ \'tb.rulenode.max-relation-level-error\' | translate }}\n \n \n
\n
\n \n {{ \'alias.last-level-relation\' | translate }}\n \n
\n
\n
\n
relation.relation-filters
\n \n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"component",type:Ve.RelationFiltersComponent,selector:"tb-relation-filters",inputs:["disabled","allowedEntityTypes"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:dn,decorators:[{type:n,args:[{selector:"tb-relations-query-config",providers:[{provide:P,useExisting:a((()=>dn)),multi:!0}],template:'
\n
tb.rulenode.relations-query
\n
\n
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n \n tb.rulenode.max-relation-level\n \n \n {{ \'tb.rulenode.max-relation-level-error\' | translate }}\n \n \n
\n
\n \n {{ \'alias.last-level-relation\' | translate }}\n \n
\n
\n
\n
relation.relation-filters
\n \n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]},propDecorators:{disabled:[{type:i}],required:[{type:i}]}});class cn extends b{get required(){return this.requiredValue}set required(e){this.requiredValue=fe(e)}constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.truncate=n,this.fb=r,this.placeholder="tb.rulenode.add-message-type",this.separatorKeysCodes=[le,se,me],this.messageTypes=[],this.messageTypesList=[],this.searchText="",this.propagateChange=e=>{},this.messageTypeConfigForm=this.fb.group({messageType:[null]});for(const e of Object.keys(v))this.messageTypesList.push({name:C.get(v[e]),value:e})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}ngOnInit(){this.filteredMessageTypes=this.messageTypeConfigForm.get("messageType").valueChanges.pipe(Fe(""),ve((e=>e||"")),Ce((e=>this.fetchMessageTypes(e))),ke())}setDisabledState(e){this.disabled=e,this.disabled?this.messageTypeConfigForm.disable({emitEvent:!1}):this.messageTypeConfigForm.enable({emitEvent:!1})}writeValue(e){this.searchText="",this.messageTypes.length=0,e&&e.forEach((e=>{const t=this.messageTypesList.find((t=>t.value===e));t?this.messageTypes.push({name:t.name,value:t.value}):this.messageTypes.push({name:e,value:e})}))}displayMessageTypeFn(e){return e?e.name:void 0}textIsNotEmpty(e){return e&&e.length>0}createMessageType(e,t){e.preventDefault(),this.transformMessageType(t)}add(e){this.transformMessageType(e.value)}fetchMessageTypes(e){if(this.searchText=e,this.searchText&&this.searchText.length){const e=this.searchText.toUpperCase();return qe(this.messageTypesList.filter((t=>t.name.toUpperCase().includes(e))))}return qe(this.messageTypesList)}transformMessageType(e){if((e||"").trim()){let t;const n=e.trim(),r=this.messageTypesList.find((e=>e.name===n));t=r?{name:r.name,value:r.value}:{name:n,value:n},t&&this.addMessageType(t)}this.clear("")}remove(e){const t=this.messageTypes.indexOf(e);t>=0&&(this.messageTypes.splice(t,1),this.updateModel())}selected(e){this.addMessageType(e.option.value),this.clear("")}addMessageType(e){-1===this.messageTypes.findIndex((t=>t.value===e.value))&&(this.messageTypes.push(e),this.updateModel())}onFocus(){this.messageTypeConfigForm.get("messageType").updateValueAndValidity({onlySelf:!0,emitEvent:!0})}clear(e=""){this.messageTypeInput.nativeElement.value=e,this.messageTypeConfigForm.get("messageType").patchValue(null,{emitEvent:!0}),setTimeout((()=>{this.messageTypeInput.nativeElement.blur(),this.messageTypeInput.nativeElement.focus()}),0)}updateModel(){const e=this.messageTypes.map((e=>e.value));this.required?(this.chipList.errorState=!e.length,this.propagateChange(e.length>0?e:null)):(this.chipList.errorState=!1,this.propagateChange(e))}}e("MessageTypesConfigComponent",cn),cn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:cn,deps:[{token:G.Store},{token:H.TranslateService},{token:F.TruncatePipe},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),cn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:cn,selector:"tb-message-types-config",inputs:{required:"required",label:"label",placeholder:"placeholder",disabled:"disabled"},providers:[{provide:P,useExisting:a((()=>cn)),multi:!0}],viewQueries:[{propertyName:"chipList",first:!0,predicate:["chipList"],descendants:!0},{propertyName:"matAutocomplete",first:!0,predicate:["messageTypeAutocomplete"],descendants:!0},{propertyName:"messageTypeInput",first:!0,predicate:["messageTypeInput"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'\n {{ label }}\n \n \n {{messageType.name}}\n close\n \n \n \n \n \n \n \n \n
\n
\n tb.rulenode.no-message-types-found\n
\n \n \n {{ \'tb.rulenode.no-message-type-matching\' | translate :\n {messageType: truncate.transform(searchText, true, 6, '...')}\n }}\n \n \n \n tb.rulenode.create-new-message-type\n \n
\n
\n
\n help\n \n {{ \'tb.rulenode.select-message-types-required\' | translate }}\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"component",type:Te.MatAutocomplete,selector:"mat-autocomplete",inputs:["disableRipple","hideSingleSelectionIndicator"],exportAs:["matAutocomplete"]},{kind:"directive",type:Te.MatAutocompleteTrigger,selector:"input[matAutocomplete], textarea[matAutocomplete]",exportAs:["matAutocompleteTrigger"]},{kind:"directive",type:Te.MatAutocompleteOrigin,selector:"[matAutocompleteOrigin]",exportAs:["matAutocompleteOrigin"]},{kind:"component",type:ue.MatChipGrid,selector:"mat-chip-grid",inputs:["tabIndex","disabled","placeholder","required","value","errorStateMatcher"],outputs:["change","valueChange"]},{kind:"directive",type:ue.MatChipInput,selector:"input[matChipInputFor]",inputs:["matChipInputFor","matChipInputAddOnBlur","matChipInputSeparatorKeyCodes","placeholder","id","disabled"],outputs:["matChipInputTokenEnd"],exportAs:["matChipInput","matChipInputFor"]},{kind:"directive",type:ue.MatChipRemove,selector:"[matChipRemove]"},{kind:"component",type:ue.MatChipRow,selector:"mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]",inputs:["color","disabled","disableRipple","tabIndex","editable"],outputs:["edited"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:R.AsyncPipe,name:"async"},{kind:"pipe",type:Ie.HighlightPipe,name:"highlight"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:cn,decorators:[{type:n,args:[{selector:"tb-message-types-config",providers:[{provide:P,useExisting:a((()=>cn)),multi:!0}],template:'\n {{ label }}\n \n \n {{messageType.name}}\n close\n \n \n \n \n \n \n \n \n
\n
\n tb.rulenode.no-message-types-found\n
\n \n \n {{ \'tb.rulenode.no-message-type-matching\' | translate :\n {messageType: truncate.transform(searchText, true, 6, '...')}\n }}\n \n \n \n tb.rulenode.create-new-message-type\n \n
\n
\n
\n help\n \n {{ \'tb.rulenode.select-message-types-required\' | translate }}\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:F.TruncatePipe},{type:E.FormBuilder}]},propDecorators:{required:[{type:i}],label:[{type:i}],placeholder:[{type:i}],disabled:[{type:i}],chipList:[{type:o,args:["chipList",{static:!1}]}],matAutocomplete:[{type:o,args:["messageTypeAutocomplete",{static:!1}]}],messageTypeInput:[{type:o,args:["messageTypeInput",{static:!1}]}]}});class fn extends b{get required(){return this.requiredValue}set required(e){this.requiredValue=fe(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.subscriptions=[],this.disableCertPemCredentials=!1,this.passwordFieldRequired=!0,this.allCredentialsTypes=Tt,this.credentialsTypeTranslationsMap=It,this.propagateChange=e=>{}}ngOnInit(){this.credentialsConfigFormGroup=this.fb.group({type:[null,[D.required]],username:[null,[]],password:[null,[]],caCert:[null,[]],caCertFileName:[null,[]],privateKey:[null,[]],privateKeyFileName:[null,[]],cert:[null,[]],certFileName:[null,[]]}),this.subscriptions.push(this.credentialsConfigFormGroup.valueChanges.subscribe((()=>{this.updateView()}))),this.subscriptions.push(this.credentialsConfigFormGroup.get("type").valueChanges.subscribe((()=>{this.credentialsTypeChanged()})))}ngOnChanges(e){for(const t of Object.keys(e)){const n=e[t];if(!n.firstChange&&n.currentValue!==n.previousValue&&n.currentValue&&"disableCertPemCredentials"===t){"cert.PEM"===this.credentialsConfigFormGroup.get("type").value&&setTimeout((()=>{this.credentialsConfigFormGroup.get("type").patchValue("anonymous",{emitEvent:!0})}))}}}ngOnDestroy(){this.subscriptions.forEach((e=>e.unsubscribe()))}writeValue(e){X(e)&&(this.credentialsConfigFormGroup.reset(e,{emitEvent:!1}),this.updateValidators())}setDisabledState(e){e?this.credentialsConfigFormGroup.disable({emitEvent:!1}):(this.credentialsConfigFormGroup.enable({emitEvent:!1}),this.updateValidators())}updateView(){let e=this.credentialsConfigFormGroup.value;const t=e.type;switch(t){case"anonymous":e={type:t};break;case"basic":e={type:t,username:e.username,password:e.password};break;case"cert.PEM":delete e.username}this.propagateChange(e)}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}validate(e){return this.credentialsConfigFormGroup.valid?null:{credentialsConfig:{valid:!1}}}credentialsTypeChanged(){this.credentialsConfigFormGroup.patchValue({username:null,password:null,caCert:null,caCertFileName:null,privateKey:null,privateKeyFileName:null,cert:null,certFileName:null}),this.updateValidators()}updateValidators(e=!1){const t=this.credentialsConfigFormGroup.get("type").value;switch(e&&this.credentialsConfigFormGroup.reset({type:t},{emitEvent:!1}),this.credentialsConfigFormGroup.setValidators([]),this.credentialsConfigFormGroup.get("username").setValidators([]),this.credentialsConfigFormGroup.get("password").setValidators([]),t){case"anonymous":break;case"basic":this.credentialsConfigFormGroup.get("username").setValidators([D.required]),this.credentialsConfigFormGroup.get("password").setValidators(this.passwordFieldRequired?[D.required]:[]);break;case"cert.PEM":this.credentialsConfigFormGroup.setValidators([this.requiredFilesSelected(D.required,[["caCert","caCertFileName"],["privateKey","privateKeyFileName","cert","certFileName"]])])}this.credentialsConfigFormGroup.get("username").updateValueAndValidity({emitEvent:e}),this.credentialsConfigFormGroup.get("password").updateValueAndValidity({emitEvent:e}),this.credentialsConfigFormGroup.updateValueAndValidity({emitEvent:e})}requiredFilesSelected(e,t=null){return n=>{t||(t=[Object.keys(n.controls)]);return n?.controls&&t.some((t=>t.every((t=>!e(n.controls[t])))))?null:{notAllRequiredFilesSelected:!0}}}}e("CredentialsConfigComponent",fn),fn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:fn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),fn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:fn,selector:"tb-credentials-config",inputs:{required:"required",disableCertPemCredentials:"disableCertPemCredentials",passwordFieldRequired:"passwordFieldRequired"},providers:[{provide:P,useExisting:a((()=>fn)),multi:!0},{provide:w,useExisting:a((()=>fn)),multi:!0}],usesInheritance:!0,usesOnChanges:!0,ngImport:t,template:'
\n \n \n tb.rulenode.credentials\n \n {{ credentialsTypeTranslationsMap.get(credentialsConfigFormGroup.get(\'type\').value) | translate }}\n \n \n \n \n tb.rulenode.credentials-type\n \n \n {{ credentialsTypeTranslationsMap.get(credentialsType) | translate }}\n \n \n \n {{ \'tb.rulenode.credentials-type-required\' | translate }}\n \n \n
\n \n \n \n \n tb.rulenode.username\n \n \n {{ \'tb.rulenode.username-required\' | translate }}\n \n \n \n tb.rulenode.password\n \n \n \n {{ \'tb.rulenode.password-required\' | translate }}\n \n \n \n \n
{{ \'tb.rulenode.credentials-pem-hint\' | translate }}
\n \n \n \n \n \n \n \n tb.rulenode.private-key-password\n \n \n \n
\n
\n
\n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:R.NgSwitch,selector:"[ngSwitch]",inputs:["ngSwitch"]},{kind:"directive",type:R.NgSwitchCase,selector:"[ngSwitchCase]",inputs:["ngSwitchCase"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Ne.MatExpansionPanel,selector:"mat-expansion-panel",inputs:["disabled","expanded","hideToggle","togglePosition"],outputs:["opened","closed","expandedChange","afterExpand","afterCollapse"],exportAs:["matExpansionPanel"]},{kind:"component",type:Ne.MatExpansionPanelHeader,selector:"mat-expansion-panel-header",inputs:["tabIndex","expandedHeight","collapsedHeight"]},{kind:"directive",type:Ne.MatExpansionPanelTitle,selector:"mat-panel-title"},{kind:"directive",type:Ne.MatExpansionPanelDescription,selector:"mat-panel-description"},{kind:"directive",type:Ne.MatExpansionPanelContent,selector:"ng-template[matExpansionPanelContent]"},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:Pe.FileInputComponent,selector:"tb-file-input",inputs:["label","accept","noFileText","inputId","allowedExtensions","dropLabel","contentConvertFunction","required","requiredAsError","disabled","existingFileName","readAsBinary","workFromFileObj","multipleFile"],outputs:["fileNameChanged"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:we.TogglePasswordComponent,selector:"tb-toggle-password"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:fn,decorators:[{type:n,args:[{selector:"tb-credentials-config",providers:[{provide:P,useExisting:a((()=>fn)),multi:!0},{provide:w,useExisting:a((()=>fn)),multi:!0}],template:'
\n \n \n tb.rulenode.credentials\n \n {{ credentialsTypeTranslationsMap.get(credentialsConfigFormGroup.get(\'type\').value) | translate }}\n \n \n \n \n tb.rulenode.credentials-type\n \n \n {{ credentialsTypeTranslationsMap.get(credentialsType) | translate }}\n \n \n \n {{ \'tb.rulenode.credentials-type-required\' | translate }}\n \n \n
\n \n \n \n \n tb.rulenode.username\n \n \n {{ \'tb.rulenode.username-required\' | translate }}\n \n \n \n tb.rulenode.password\n \n \n \n {{ \'tb.rulenode.password-required\' | translate }}\n \n \n \n \n
{{ \'tb.rulenode.credentials-pem-hint\' | translate }}
\n \n \n \n \n \n \n \n tb.rulenode.private-key-password\n \n \n \n
\n
\n
\n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]},propDecorators:{required:[{type:i}],disableCertPemCredentials:[{type:i}],passwordFieldRequired:[{type:i}]}});class gn{constructor(e,t){this.fb=e,this.translate=t,this.propagateChange=e=>{},this.destroy$=new Ae,this.selectOptions=[];for(const e of wt.keys())this.selectOptions.push({value:e,name:this.translate.instant(wt.get(e))})}ngOnInit(){this.chipControlGroup=this.fb.group({chipControl:[null,[]]}),this.chipControlGroup.get("chipControl").valueChanges.pipe(Le(this.destroy$)).subscribe((e=>{e&&this.propagateChange(e)}))}writeValue(e){this.chipControlGroup.get("chipControl").patchValue(e,{emitEvent:!1})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){e?this.chipControlGroup.disable({emitEvent:!1}):this.chipControlGroup.enable({emitEvent:!1})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}}e("MsgMetadataChipComponent",gn),gn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:gn,deps:[{token:E.FormBuilder},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),gn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:gn,selector:"tb-msg-metadata-chip",inputs:{labelText:"labelText"},providers:[{provide:P,useExisting:a((()=>gn)),multi:!0}],ngImport:t,template:'
\n
{{ labelText }}
\n \n {{ option.name }}\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"component",type:ue.MatChipListbox,selector:"mat-chip-listbox",inputs:["tabIndex","multiple","aria-orientation","selectable","compareWith","required","hideSingleSelectionIndicator","value"],outputs:["change"]},{kind:"component",type:ue.MatChipOption,selector:"mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]",inputs:["color","disabled","disableRipple","tabIndex","selectable","selected"],outputs:["selectionChange"]},{kind:"directive",type:ye.DefaultClassDirective,selector:" [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]",inputs:["ngClass","ngClass.xs","ngClass.sm","ngClass.md","ngClass.lg","ngClass.xl","ngClass.lt-sm","ngClass.lt-md","ngClass.lt-lg","ngClass.lt-xl","ngClass.gt-xs","ngClass.gt-sm","ngClass.gt-md","ngClass.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:gn,decorators:[{type:n,args:[{selector:"tb-msg-metadata-chip",providers:[{provide:P,useExisting:a((()=>gn)),multi:!0}],template:'
\n
{{ labelText }}
\n \n {{ option.name }}\n \n
\n'}]}],ctorParameters:function(){return[{type:E.FormBuilder},{type:H.TranslateService}]},propDecorators:{labelText:[{type:i}]}});class yn extends b{constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.destroy$=new Ae,this.sourceFieldSubcritption=[],this.propagateChange=null,this.valueChangeSubscription=null,this.disabled=!1,this.required=!1}ngOnInit(){this.ngControl=this.injector.get(V),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.svListFormGroup=this.fb.group({}),this.svListFormGroup.addControl("keyVals",this.fb.array([]))}keyValsFormArray(){return this.svListFormGroup.get("keyVals")}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.svListFormGroup.disable({emitEvent:!1}):this.svListFormGroup.enable({emitEvent:!1})}writeValue(e){this.valueChangeSubscription&&this.valueChangeSubscription.unsubscribe();const t=[];if(e)for(const n of Object.keys(e))Object.prototype.hasOwnProperty.call(e,n)&&t.push(this.fb.group({key:[n,[D.required]],value:[e[n],[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]}));this.svListFormGroup.setControl("keyVals",this.fb.array(t));for(const e of this.keyValsFormArray().controls)this.keyChangeSubscribe(e);this.valueChangeSubscription=this.svListFormGroup.valueChanges.pipe(Le(this.destroy$)).subscribe((()=>{this.updateModel()}))}errorTrigger(){const e=this.keyValsFormArray();for(const t of e.controls)for(const e of Object.keys(t.value))if(t.get(e).touched&&t.get(e).invalid)return!0;return!1}filterSelectOptions(e){const t=[];for(const e of this.svListFormGroup.get("keyVals").value){const n=this.selectOptions.find((t=>t.value===e.key));n&&t.push(n)}const n=[];for(const r of this.selectOptions)X(t.find((e=>e.value===r.value)))&&r.value!==e?.get("key").value||n.push(r);return n}removeKeyVal(e){this.svListFormGroup.get("keyVals").removeAt(e),this.sourceFieldSubcritption[e].unsubscribe(),this.sourceFieldSubcritption.splice(e,1)}addKeyVal(){const e=this.svListFormGroup.get("keyVals");e.push(this.fb.group({key:["",[D.required]],value:["",[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]})),this.keyChangeSubscribe(e.at(e.length-1))}keyChangeSubscribe(e){this.sourceFieldSubcritption.push(e.get("key").valueChanges.pipe(Le(this.destroy$)).subscribe((t=>{e.get("value").patchValue(this.targetKeyPrefix+t[0].toUpperCase()+t.slice(1))})))}validate(e){return!this.svListFormGroup.get("keyVals").value.length&&this.required?{svMapRequired:!0}:this.svListFormGroup.valid?null:{svFieldsRequired:!0}}updateModel(){const e=this.svListFormGroup.get("keyVals").value;if(this.required&&!e.length||!this.svListFormGroup.valid)this.propagateChange(null);else{const t={};e.forEach((e=>{t[e.key]=e.value})),this.propagateChange(t)}}}e("SvMapConfigComponent",yn),yn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:yn,deps:[{token:G.Store},{token:H.TranslateService},{token:t.Injector},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),yn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:yn,selector:"tb-sv-map-config",inputs:{selectOptions:"selectOptions",disabled:"disabled",labelText:"labelText",requiredText:"requiredText",targetKeyPrefix:"targetKeyPrefix",selectText:"selectText",selectRequiredText:"selectRequiredText",valText:"valText",valRequiredText:"valRequiredText",hintText:"hintText",popupHelpLink:"popupHelpLink",required:"required"},providers:[{provide:P,useExisting:a((()=>yn)),multi:!0},{provide:w,useExisting:a((()=>yn)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n
\n
tb.rulenode.originator-fields-mapping
\n
\n tb.rulenode.map-fields-required\n
\n
\n
\n
\n
\n
{{ selectText }}
\n
{{ valText }}
\n
\n
\n
\n
\n \n \n \n {{option.name}}\n \n \n \n \n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n',styles:[":host .field-space{flex:1 1 50%}:host .actions-header{width:40px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:ye.DefaultClassDirective,selector:" [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]",inputs:["ngClass","ngClass.xs","ngClass.sm","ngClass.md","ngClass.lg","ngClass.xl","ngClass.lt-sm","ngClass.lt-md","ngClass.lt-lg","ngClass.lt-xl","ngClass.gt-xs","ngClass.gt-sm","ngClass.gt-md","ngClass.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormControlDirective,selector:"[formControl]",inputs:["formControl","disabled","ngModel"],outputs:["ngModelChange"],exportAs:["ngForm"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:mn,selector:"tb-example-hint",inputs:["hintText","popupHelpLink"]},{kind:"pipe",type:R.AsyncPipe,name:"async"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),Se([h()],yn.prototype,"disabled",void 0),Se([h()],yn.prototype,"required",void 0),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:yn,decorators:[{type:n,args:[{selector:"tb-sv-map-config",providers:[{provide:P,useExisting:a((()=>yn)),multi:!0},{provide:w,useExisting:a((()=>yn)),multi:!0}],template:'
\n
\n
tb.rulenode.originator-fields-mapping
\n
\n tb.rulenode.map-fields-required\n
\n
\n
\n
\n
\n
{{ selectText }}
\n
{{ valText }}
\n
\n
\n
\n
\n \n \n \n {{option.name}}\n \n \n \n \n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n',styles:[":host .field-space{flex:1 1 50%}:host .actions-header{width:40px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:t.Injector},{type:E.FormBuilder}]},propDecorators:{selectOptions:[{type:i}],disabled:[{type:i}],labelText:[{type:i}],requiredText:[{type:i}],targetKeyPrefix:[{type:i}],selectText:[{type:i}],selectRequiredText:[{type:i}],valText:[{type:i}],valRequiredText:[{type:i}],hintText:[{type:i}],popupHelpLink:[{type:i}],required:[{type:i}]}});class xn extends b{get required(){return this.requiredValue}set required(e){this.requiredValue=fe(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.keys(g),this.directionTypeTranslations=y,this.propagateChange=null}ngOnInit(){this.relationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[D.required]],maxLevel:[null,[]],filters:[null]}),this.relationsQueryFormGroup.valueChanges.subscribe((e=>{this.relationsQueryFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.relationsQueryFormGroup.disable({emitEvent:!1}):this.relationsQueryFormGroup.enable({emitEvent:!1})}writeValue(e){this.relationsQueryFormGroup.reset(e||{},{emitEvent:!1})}}e("RelationsQueryConfigOldComponent",xn),xn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:xn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),xn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:xn,selector:"tb-relations-query-config-old",inputs:{disabled:"disabled",required:"required"},providers:[{provide:P,useExisting:a((()=>xn)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n {{ \'alias.last-level-relation\' | translate }}\n \n
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n \n tb.rulenode.max-relation-level\n \n \n
\n
relation.relation-filters
\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:Ve.RelationFiltersComponent,selector:"tb-relation-filters",inputs:["disabled","allowedEntityTypes"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:xn,decorators:[{type:n,args:[{selector:"tb-relations-query-config-old",providers:[{provide:P,useExisting:a((()=>xn)),multi:!0}],template:'
\n \n {{ \'alias.last-level-relation\' | translate }}\n \n
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n \n tb.rulenode.max-relation-level\n \n \n
\n
relation.relation-filters
\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]},propDecorators:{disabled:[{type:i}],required:[{type:i}]}});class bn{constructor(e,t){this.translate=e,this.fb=t,this.propagateChange=e=>{},this.destroy$=new Ae,this.separatorKeysCodes=[le,se,me]}ngOnInit(){this.attributeControlGroup=this.fb.group({clientAttributeNames:[null,[]],sharedAttributeNames:[null,[]],serverAttributeNames:[null,[]],latestTsKeyNames:[null,[]],getLatestValueWithTs:[!1,[]]},{validators:this.atLeastOne(D.required,["clientAttributeNames","sharedAttributeNames","serverAttributeNames","latestTsKeyNames"])}),this.attributeControlGroup.valueChanges.pipe(Le(this.destroy$)).subscribe((e=>{this.propagateChange(e)}))}validate(){return this.attributeControlGroup.valid?null:{atLeastOneRequired:!0}}atLeastOne(e,t=null){return n=>{t||(t=Object.keys(n.controls));return n?.controls&&t.some((t=>!e(n.controls[t])))?null:{atLeastOne:!0}}}writeValue(e){this.attributeControlGroup.setValue(e,{emitEvent:!1})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){e?this.attributeControlGroup.disable({emitEvent:!1}):this.attributeControlGroup.enable({emitEvent:!1})}ngOnDestroy(){this.destroy$.next(null),this.destroy$.complete()}}e("SelectAttributesComponent",bn),bn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:bn,deps:[{token:H.TranslateService},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),bn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:bn,selector:"tb-select-attributes",inputs:{popupHelpLink:"popupHelpLink"},providers:[{provide:P,useExisting:a((()=>bn)),multi:!0},{provide:w,useExisting:bn,multi:!0}],ngImport:t,template:'
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n {{ \'tb.rulenode.fetch-latest-telemetry-with-timestamp\' | translate }}\n \n
\n
\n\n\n help\n\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:R.NgTemplateOutlet,selector:"[ngTemplateOutlet]",inputs:["ngTemplateOutletContext","ngTemplateOutlet","ngTemplateOutletInjector"]},{kind:"component",type:Re.StringItemsListComponent,selector:"tb-string-items-list",inputs:["required","disabled","label","placeholder","hint","requiredText","floatLabel","appearance","editable","subscriptSizing","predefinedValues"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"component",type:mn,selector:"tb-example-hint",inputs:["hintText","popupHelpLink"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:bn,decorators:[{type:n,args:[{selector:"tb-select-attributes",providers:[{provide:P,useExisting:a((()=>bn)),multi:!0},{provide:w,useExisting:bn,multi:!0}],template:'
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n {{ \'tb.rulenode.fetch-latest-telemetry-with-timestamp\' | translate }}\n \n
\n
\n\n\n help\n\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:H.TranslateService},{type:E.FormBuilder}]},propDecorators:{popupHelpLink:[{type:i}]}});class hn extends b{constructor(e,t){super(e),this.store=e,this.fb=t,this.propagateChange=null,this.destroy$=new Ae,this.alarmStatus=k,this.alarmStatusTranslations=L}ngOnInit(){this.alarmStatusGroup=this.fb.group({alarmStatus:[null,[]]}),this.alarmStatusGroup.get("alarmStatus").valueChanges.pipe(Le(this.destroy$)).subscribe((e=>{this.propagateChange(e)}))}setDisabledState(e){e?this.alarmStatusGroup.disable({emitEvent:!1}):this.alarmStatusGroup.enable({emitEvent:!1})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}writeValue(e){this.alarmStatusGroup.get("alarmStatus").patchValue(e,{emitEvent:!1})}}e("AlarmStatusSelectComponent",hn),hn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:hn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),hn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:hn,selector:"tb-alarm-status-select",providers:[{provide:P,useExisting:a((()=>hn)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n
\n \n {{ alarmStatusTranslations.get(alarmStatus.ACTIVE_UNACK) | translate }}\n \n \n {{ alarmStatusTranslations.get(alarmStatus.ACTIVE_ACK) | translate }}\n \n
\n
\n \n {{ alarmStatusTranslations.get(alarmStatus.CLEARED_UNACK) | translate }}\n \n \n {{ alarmStatusTranslations.get(alarmStatus.ACTIVE_UNACK) | translate }}\n \n
\n
\n
\n',styles:[":host .chip-listbox{max-width:460px;width:100%}:host .chip-listbox .toggle-column{display:flex;flex:1 1 100%;gap:8px}:host .chip-listbox .option{margin:0}@media screen and (max-width: 959px){:host .chip-listbox{max-width:360px}:host .chip-listbox .toggle-column{flex-direction:column}}:host ::ng-deep .chip-listbox .mdc-evolution-chip-set__chips{gap:8px}:host ::ng-deep .chip-listbox .option button{flex-basis:100%;justify-content:start}:host ::ng-deep .chip-listbox .option .mdc-evolution-chip__graphic{flex-grow:0}\n"],dependencies:[{kind:"component",type:ue.MatChipListbox,selector:"mat-chip-listbox",inputs:["tabIndex","multiple","aria-orientation","selectable","compareWith","required","hideSingleSelectionIndicator","value"],outputs:["change"]},{kind:"component",type:ue.MatChipOption,selector:"mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]",inputs:["color","disabled","disableRipple","tabIndex","selectable","selected"],outputs:["selectionChange"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutAlignDirective,selector:" [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]",inputs:["fxLayoutAlign","fxLayoutAlign.xs","fxLayoutAlign.sm","fxLayoutAlign.md","fxLayoutAlign.lg","fxLayoutAlign.xl","fxLayoutAlign.lt-sm","fxLayoutAlign.lt-md","fxLayoutAlign.lt-lg","fxLayoutAlign.lt-xl","fxLayoutAlign.gt-xs","fxLayoutAlign.gt-sm","fxLayoutAlign.gt-md","fxLayoutAlign.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:hn,decorators:[{type:n,args:[{selector:"tb-alarm-status-select",providers:[{provide:P,useExisting:a((()=>hn)),multi:!0}],template:'
\n \n
\n \n {{ alarmStatusTranslations.get(alarmStatus.ACTIVE_UNACK) | translate }}\n \n \n {{ alarmStatusTranslations.get(alarmStatus.ACTIVE_ACK) | translate }}\n \n
\n
\n \n {{ alarmStatusTranslations.get(alarmStatus.CLEARED_UNACK) | translate }}\n \n \n {{ alarmStatusTranslations.get(alarmStatus.ACTIVE_UNACK) | translate }}\n \n
\n
\n
\n',styles:[":host .chip-listbox{max-width:460px;width:100%}:host .chip-listbox .toggle-column{display:flex;flex:1 1 100%;gap:8px}:host .chip-listbox .option{margin:0}@media screen and (max-width: 959px){:host .chip-listbox{max-width:360px}:host .chip-listbox .toggle-column{flex-direction:column}}:host ::ng-deep .chip-listbox .mdc-evolution-chip-set__chips{gap:8px}:host ::ng-deep .chip-listbox .option button{flex-basis:100%;justify-content:start}:host ::ng-deep .chip-listbox .option .mdc-evolution-chip__graphic{flex-grow:0}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]}});class vn{}e("RulenodeCoreConfigCommonModule",vn),vn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:vn,deps:[],target:t.ɵɵFactoryTarget.NgModule}),vn.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:vn,declarations:[un,pn,dn,cn,fn,rn,on,ln,Xt,gn,yn,xn,bn,hn,mn],imports:[O,T,Me],exports:[un,pn,dn,cn,fn,rn,on,ln,Xt,gn,yn,xn,bn,hn,mn]}),vn.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:vn,imports:[O,T,Me]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:vn,decorators:[{type:l,args:[{declarations:[un,pn,dn,cn,fn,rn,on,ln,Xt,gn,yn,xn,bn,hn,mn],imports:[O,T,Me],exports:[un,pn,dn,cn,fn,rn,on,ln,Xt,gn,yn,xn,bn,hn,mn]}]}]});class Cn{}e("RuleNodeCoreConfigActionModule",Cn),Cn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Cn,deps:[],target:t.ɵɵFactoryTarget.NgModule}),Cn.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:Cn,declarations:[nn,We,en,Wt,zt,Ye,Ze,et,tt,Qt,nt,ot,Ht,jt,Yt,Zt,tn,Xe,rt,Jt,$t,an,sn],imports:[O,T,Me,vn],exports:[nn,We,en,Wt,zt,Ye,Ze,et,tt,Qt,nt,ot,Ht,jt,Yt,Zt,tn,Xe,rt,Jt,$t,an,sn]}),Cn.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Cn,imports:[O,T,Me,vn]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Cn,decorators:[{type:l,args:[{declarations:[nn,We,en,Wt,zt,Ye,Ze,et,tt,Qt,nt,ot,Ht,jt,Yt,Zt,tn,Xe,rt,Jt,$t,an,sn],imports:[O,T,Me,vn],exports:[nn,We,en,Wt,zt,Ye,Ze,et,tt,Qt,nt,ot,Ht,jt,Yt,Zt,tn,Xe,rt,Jt,$t,an,sn]}]}]});class Fn extends s{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n,this.separatorKeysCodes=[le,se,me]}configForm(){return this.calculateDeltaConfigForm}onConfigurationSet(e){this.calculateDeltaConfigForm=this.fb.group({inputValueKey:[e.inputValueKey,[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],outputValueKey:[e.outputValueKey,[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],useCache:[e.useCache,[]],addPeriodBetweenMsgs:[e.addPeriodBetweenMsgs,[]],periodValueKey:[e.periodValueKey,[]],round:[e.round,[D.min(0),D.max(15)]],tellFailureIfDeltaIsNegative:[e.tellFailureIfDeltaIsNegative,[]]})}prepareInputConfig(e){return{inputValueKey:X(e?.inputValueKey)?e.inputValueKey:null,outputValueKey:X(e?.outputValueKey)?e.outputValueKey:null,useCache:!X(e?.useCache)||e.useCache,addPeriodBetweenMsgs:!!X(e?.addPeriodBetweenMsgs)&&e.addPeriodBetweenMsgs,periodValueKey:X(e?.periodValueKey)?e.periodValueKey:null,round:X(e?.round)?e.round:null,tellFailureIfDeltaIsNegative:!X(e?.tellFailureIfDeltaIsNegative)||e.tellFailureIfDeltaIsNegative}}prepareOutputConfig(e){return Z(e)}updateValidators(e){this.calculateDeltaConfigForm.get("addPeriodBetweenMsgs").value?this.calculateDeltaConfigForm.get("periodValueKey").setValidators([D.required]):this.calculateDeltaConfigForm.get("periodValueKey").setValidators([]),this.calculateDeltaConfigForm.get("periodValueKey").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["addPeriodBetweenMsgs"]}}e("CalculateDeltaConfigComponent",Fn),Fn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Fn,deps:[{token:G.Store},{token:H.TranslateService},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Fn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Fn,selector:"tb-enrichment-node-calculate-delta-config",usesInheritance:!0,ngImport:t,template:"
\n
\n \n {{ 'tb.rulenode.input-value-key' | translate }}\n \n \n {{ 'tb.rulenode.input-value-key-required' | translate }}\n \n \n \n {{ 'tb.rulenode.output-value-key' | translate }}\n \n \n {{ 'tb.rulenode.output-value-key-required' | translate }}\n \n \n
\n \n {{ 'tb.rulenode.number-of-digits-after-floating-point' | translate }}\n \n \n {{ 'tb.rulenode.number-of-digits-after-floating-point-range' | translate }}\n \n \n {{ 'tb.rulenode.number-of-digits-after-floating-point-range' | translate }}\n \n \n
\n
\n \n {{ 'tb.rulenode.failure-if-delta-negative' | translate }}\n \n
\n
\n \n {{ 'tb.rulenode.use-caching' | translate }}\n \n
\n
\n
\n \n {{ 'tb.rulenode.add-time-difference-between-readings' | translate:\n { inputValueKey: calculateDeltaConfigForm.get('inputValueKey').valid ?\n calculateDeltaConfigForm.get('inputValueKey').value : 'tb.rulenode.input-value-key' | translate } }}\n \n
\n \n {{ 'tb.rulenode.period-value-key' | translate }}\n \n \n {{ 'tb.rulenode.period-value-key-required' | translate }}\n \n \n
\n
\n
\n",dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Fn,decorators:[{type:n,args:[{selector:"tb-enrichment-node-calculate-delta-config",template:"
\n
\n \n {{ 'tb.rulenode.input-value-key' | translate }}\n \n \n {{ 'tb.rulenode.input-value-key-required' | translate }}\n \n \n \n {{ 'tb.rulenode.output-value-key' | translate }}\n \n \n {{ 'tb.rulenode.output-value-key-required' | translate }}\n \n \n
\n \n {{ 'tb.rulenode.number-of-digits-after-floating-point' | translate }}\n \n \n {{ 'tb.rulenode.number-of-digits-after-floating-point-range' | translate }}\n \n \n {{ 'tb.rulenode.number-of-digits-after-floating-point-range' | translate }}\n \n \n
\n
\n \n {{ 'tb.rulenode.failure-if-delta-negative' | translate }}\n \n
\n
\n \n {{ 'tb.rulenode.use-caching' | translate }}\n \n
\n
\n
\n \n {{ 'tb.rulenode.add-time-difference-between-readings' | translate:\n { inputValueKey: calculateDeltaConfigForm.get('inputValueKey').valid ?\n calculateDeltaConfigForm.get('inputValueKey').value : 'tb.rulenode.input-value-key' | translate } }}\n \n
\n \n {{ 'tb.rulenode.period-value-key' | translate }}\n \n \n {{ 'tb.rulenode.period-value-key-required' | translate }}\n \n \n
\n
\n
\n"}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:E.FormBuilder}]}});class kn extends s{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.fetchToData=[],this.DataToFetch=ht;for(const e of vt.keys())e!==ht.FIELDS&&this.fetchToData.push({value:e,name:this.translate.instant(vt.get(e))})}configForm(){return this.customerAttributesConfigForm}prepareOutputConfig(e){const t={};for(const n of Object.keys(e.dataMapping))t[n.trim()]=e.dataMapping[n];return e.dataMapping=t,Z(e)}prepareInputConfig(e){let t,n;return t=X(e?.telemetry)?e.telemetry?ht.LATEST_TELEMETRY:ht.ATTRIBUTES:X(e?.dataToFetch)?e.dataToFetch:ht.ATTRIBUTES,n=X(e?.attrMapping)?e.attrMapping:X(e?.dataMapping)?e.dataMapping:null,{dataToFetch:t,dataMapping:n,fetchTo:X(e?.fetchTo)?e.fetchTo:Pt.METADATA}}selectTranslation(e,t){return this.customerAttributesConfigForm.get("dataToFetch").value===ht.LATEST_TELEMETRY?e:t}onConfigurationSet(e){this.customerAttributesConfigForm=this.fb.group({dataToFetch:[e.dataToFetch,[]],dataMapping:[e.dataMapping,[D.required]],fetchTo:[e.fetchTo]})}}e("CustomerAttributesConfigComponent",kn),kn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:kn,deps:[{token:G.Store},{token:E.FormBuilder},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),kn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:kn,selector:"tb-enrichment-node-customer-attributes-config",usesInheritance:!0,ngImport:t,template:'
\n
tb.rulenode.mapping-of-customers-fields
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n \n \n \n \n
\n',styles:[":host .fetch-to-data-toggle{max-width:420px;width:100%}\n"],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:_.DefaultLayoutAlignDirective,selector:" [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]",inputs:["fxLayoutAlign","fxLayoutAlign.xs","fxLayoutAlign.sm","fxLayoutAlign.md","fxLayoutAlign.lg","fxLayoutAlign.xl","fxLayoutAlign.lt-sm","fxLayoutAlign.lt-md","fxLayoutAlign.lt-lg","fxLayoutAlign.lt-xl","fxLayoutAlign.gt-xs","fxLayoutAlign.gt-sm","fxLayoutAlign.gt-md","fxLayoutAlign.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"directive",type:Oe.ToggleOption,selector:"tb-toggle-option",inputs:["value"]},{kind:"component",type:Be.ToggleSelectComponent,selector:"tb-toggle-select",inputs:["disabled","selectMediaBreakpoint","appearance","disablePagination"]},{kind:"component",type:un,selector:"tb-kv-map-config",inputs:["disabled","uniqueKeyValuePairValidator","labelText","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","popupHelpLink","required"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:kn,decorators:[{type:n,args:[{selector:"tb-enrichment-node-customer-attributes-config",template:'
\n
tb.rulenode.mapping-of-customers-fields
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n \n \n \n \n
\n',styles:[":host .fetch-to-data-toggle{max-width:420px;width:100%}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder},{type:H.TranslateService}]}});class Ln extends s{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n}configForm(){return this.deviceAttributesConfigForm}onConfigurationSet(e){this.deviceAttributesConfigForm=this.fb.group({deviceRelationsQuery:[e.deviceRelationsQuery,[D.required]],tellFailureIfAbsent:[e.tellFailureIfAbsent,[]],fetchTo:[e.fetchTo,[]],attributesControl:[e.attributesControl,[]]})}touched(){this.deviceAttributesConfigForm.get("attributesControl").markAsTouched()}prepareInputConfig(e){return ee(e)&&(e.attributesControl={clientAttributeNames:X(e?.clientAttributeNames)?e.clientAttributeNames:null,latestTsKeyNames:X(e?.latestTsKeyNames)?e.latestTsKeyNames:null,serverAttributeNames:X(e?.serverAttributeNames)?e.serverAttributeNames:null,sharedAttributeNames:X(e?.sharedAttributeNames)?e.sharedAttributeNames:null,getLatestValueWithTs:!!X(e?.getLatestValueWithTs)&&e.getLatestValueWithTs}),{deviceRelationsQuery:X(e?.deviceRelationsQuery)?e.deviceRelationsQuery:null,tellFailureIfAbsent:!X(e?.tellFailureIfAbsent)||e.tellFailureIfAbsent,fetchTo:X(e?.fetchTo)?e.fetchTo:Pt.METADATA,attributesControl:e?e.attributesControl:null}}prepareOutputConfig(e){for(const t of Object.keys(e.attributesControl))e[t]=e.attributesControl[t];return delete e.attributesControl,e}}e("DeviceAttributesConfigComponent",Ln),Ln.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ln,deps:[{token:G.Store},{token:H.TranslateService},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Ln.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Ln,selector:"tb-enrichment-node-device-attributes-config",usesInheritance:!0,ngImport:t,template:'
\n
\n
tb.rulenode.device-relations-query
\n \n \n
\n
\n
\n
tb.rulenode.related-device-attributes
\n
\n tb.rulenode.at-least-one-field-required\n
\n
\n \n \n
\n
\n \n {{ \'tb.rulenode.tell-failure\' | translate }}\n \n
\n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"component",type:pn,selector:"tb-device-relations-query-config",inputs:["disabled","required"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"component",type:bn,selector:"tb-select-attributes",inputs:["popupHelpLink"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ln,decorators:[{type:n,args:[{selector:"tb-enrichment-node-device-attributes-config",template:'
\n
\n
tb.rulenode.device-relations-query
\n \n \n
\n
\n
\n
tb.rulenode.related-device-attributes
\n
\n tb.rulenode.at-least-one-field-required\n
\n
\n \n \n
\n
\n \n {{ \'tb.rulenode.tell-failure\' | translate }}\n \n
\n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:E.FormBuilder}]}});class Tn extends s{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n,this.predefinedValues=[];for(const e of Object.keys(ct))this.predefinedValues.push({value:ct[e],name:this.translate.instant(ft.get(ct[e]))})}ngOnInit(){super.ngOnInit()}configForm(){return this.entityDetailsConfigForm}prepareInputConfig(e){let t;return t=X(e?.addToMetadata)?e.addToMetadata?Pt.METADATA:Pt.DATA:e?.fetchTo?e.fetchTo:Pt.DATA,{detailsList:X(e?.detailsList)?e.detailsList:null,fetchTo:t}}onConfigurationSet(e){this.entityDetailsConfigForm=this.fb.group({detailsList:[e.detailsList,[D.required]],fetchTo:[e.fetchTo,[]]})}}e("EntityDetailsConfigComponent",Tn),Tn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Tn,deps:[{token:G.Store},{token:H.TranslateService},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Tn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Tn,selector:"tb-enrichment-node-entity-details-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n help\n \n \n \n \n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"component",type:Re.StringItemsListComponent,selector:"tb-string-items-list",inputs:["required","disabled","label","placeholder","hint","requiredText","floatLabel","appearance","editable","subscriptSizing","predefinedValues"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Tn,decorators:[{type:n,args:[{selector:"tb-enrichment-node-entity-details-config",template:'
\n \n \n help\n \n \n \n \n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:E.FormBuilder}]}});class In extends s{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n,this.separatorKeysCodes=[le,se,me],this.aggregationTypes=I,this.aggregations=Object.values(I),this.aggregationTypesTranslations=N,this.fetchMode=gt,this.samplingOrders=Object.values(bt),this.samplingOrdersTranslate=Ft,this.timeUnits=Object.values(mt),this.timeUnitsTranslationMap=ut,this.deduplicationStrategiesHintTranslations=xt,this.headerOptions=[],this.timeUnitMap={[mt.MILLISECONDS]:1,[mt.SECONDS]:1e3,[mt.MINUTES]:6e4,[mt.HOURS]:36e5,[mt.DAYS]:864e5},this.intervalValidator=()=>e=>e.get("startInterval").value*this.timeUnitMap[e.get("startIntervalTimeUnit").value]<=e.get("endInterval").value*this.timeUnitMap[e.get("endIntervalTimeUnit").value]?{intervalError:!0}:null;for(const e of yt.keys())this.headerOptions.push({value:e,name:this.translate.instant(yt.get(e))})}configForm(){return this.getTelemetryFromDatabaseConfigForm}onConfigurationSet(e){this.getTelemetryFromDatabaseConfigForm=this.fb.group({latestTsKeyNames:[e.latestTsKeyNames,[D.required]],aggregation:[e.aggregation,[D.required]],fetchMode:[e.fetchMode,[D.required]],orderBy:[e.orderBy,[]],limit:[e.limit,[]],useMetadataIntervalPatterns:[e.useMetadataIntervalPatterns,[]],interval:this.fb.group({startInterval:[e.interval.startInterval,[]],startIntervalTimeUnit:[e.interval.startIntervalTimeUnit,[]],endInterval:[e.interval.endInterval,[]],endIntervalTimeUnit:[e.interval.endIntervalTimeUnit,[]]}),startIntervalPattern:[e.startIntervalPattern,[]],endIntervalPattern:[e.endIntervalPattern,[]]})}validatorTriggers(){return["fetchMode","useMetadataIntervalPatterns"]}toggleChange(e){this.getTelemetryFromDatabaseConfigForm.get("fetchMode").patchValue(e,{emitEvent:!0})}prepareOutputConfig(e){return e.startInterval=e.interval.startInterval,e.startIntervalTimeUnit=e.interval.startIntervalTimeUnit,e.endInterval=e.interval.endInterval,e.endIntervalTimeUnit=e.interval.endIntervalTimeUnit,delete e.interval,Z(e)}prepareInputConfig(e){return ee(e)&&(e.interval={startInterval:e.startInterval,startIntervalTimeUnit:e.startIntervalTimeUnit,endInterval:e.endInterval,endIntervalTimeUnit:e.endIntervalTimeUnit}),{latestTsKeyNames:X(e?.latestTsKeyNames)?e.latestTsKeyNames:null,aggregation:X(e?.aggregation)?e.aggregation:I.NONE,fetchMode:X(e?.fetchMode)?e.fetchMode:gt.FIRST,orderBy:X(e?.orderBy)?e.orderBy:bt.ASC,limit:X(e?.limit)?e.limit:1e3,useMetadataIntervalPatterns:!!X(e?.useMetadataIntervalPatterns)&&e.useMetadataIntervalPatterns,interval:{startInterval:X(e?.interval?.startInterval)?e.interval.startInterval:2,startIntervalTimeUnit:X(e?.interval?.startIntervalTimeUnit)?e.interval.startIntervalTimeUnit:mt.MINUTES,endInterval:X(e?.interval?.endInterval)?e.interval.endInterval:1,endIntervalTimeUnit:X(e?.interval?.endIntervalTimeUnit)?e.interval.endIntervalTimeUnit:mt.MINUTES},startIntervalPattern:X(e?.startIntervalPattern)?e.startIntervalPattern:null,endIntervalPattern:X(e?.endIntervalPattern)?e.endIntervalPattern:null}}updateValidators(e){const t=this.getTelemetryFromDatabaseConfigForm.get("fetchMode").value,n=this.getTelemetryFromDatabaseConfigForm.get("useMetadataIntervalPatterns").value;t&&t===gt.ALL?(this.getTelemetryFromDatabaseConfigForm.get("aggregation").setValidators([D.required]),this.getTelemetryFromDatabaseConfigForm.get("orderBy").setValidators([D.required]),this.getTelemetryFromDatabaseConfigForm.get("limit").setValidators([D.required,D.min(2),D.max(1e3)])):(this.getTelemetryFromDatabaseConfigForm.get("aggregation").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("orderBy").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("limit").setValidators([])),n?(this.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval.startIntervalTimeUnit").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval.endIntervalTimeUnit").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").setValidators([D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").setValidators([D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)])):(this.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").setValidators([D.required,D.min(1),D.max(2147483647)]),this.getTelemetryFromDatabaseConfigForm.get("interval.startIntervalTimeUnit").setValidators([D.required]),this.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").setValidators([D.required,D.min(1),D.max(2147483647)]),this.getTelemetryFromDatabaseConfigForm.get("interval.endIntervalTimeUnit").setValidators([D.required]),this.getTelemetryFromDatabaseConfigForm.get("interval").setValidators([this.intervalValidator()]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").setValidators([])),this.getTelemetryFromDatabaseConfigForm.get("aggregation").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("orderBy").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("limit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.startIntervalTimeUnit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.endIntervalTimeUnit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").updateValueAndValidity({emitEvent:e})}removeKey(e,t){const n=this.getTelemetryFromDatabaseConfigForm.get(t).value,r=n.indexOf(e);r>=0&&(n.splice(r,1),this.getTelemetryFromDatabaseConfigForm.get(t).setValue(n,{emitEvent:!0}))}clearChipGrid(){this.getTelemetryFromDatabaseConfigForm.get("latestTsKeyNames").patchValue([],{emitEvent:!0})}addKey(e,t){const n=e.input;let r=e.value;if((r||"").trim()){r=r.trim();let e=this.getTelemetryFromDatabaseConfigForm.get(t).value;e&&-1!==e.indexOf(r)||(e||(e=[]),e.push(r),this.getTelemetryFromDatabaseConfigForm.get(t).setValue(e,{emitEvent:!0}))}n&&(n.value="")}defaultPaddingEnable(){return this.getTelemetryFromDatabaseConfigForm.get("fetchMode").value===gt.ALL&&this.getTelemetryFromDatabaseConfigForm.get("aggregation").value===I.NONE}}e("GetTelemetryFromDatabaseConfigComponent",In),In.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:In,deps:[{token:G.Store},{token:H.TranslateService},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),In.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:In,selector:"tb-enrichment-node-get-telemetry-from-database",usesInheritance:!0,ngImport:t,template:'
\n \n
\n help\n \n
\n
\n
tb.rulenode.fetch-interval
\n
\n \n {{ \'tb.rulenode.use-metadata-dynamic-interval\' | translate }}\n \n
\n
\n
\n \n {{ \'tb.rulenode.interval-start\' | translate }}\n \n \n {{ \'tb.rulenode.start-interval-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n {{ \'tb.rulenode.time-unit\' | translate }}\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n \n {{ \'tb.rulenode.interval-end\' | translate }}\n \n \n {{ \'tb.rulenode.end-interval-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n {{ \'tb.rulenode.time-unit\' | translate }}\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n error_outline\n
\n \n {{ \'tb.rulenode.fetch-timeseries-from-to\' | translate:\n {\n startInterval: getTelemetryFromDatabaseConfigForm.get(\'interval.startInterval\').value,\n endInterval: getTelemetryFromDatabaseConfigForm.get(\'interval.endInterval\').value,\n startIntervalTimeUnit: getTelemetryFromDatabaseConfigForm.get(\'interval.startIntervalTimeUnit\').value.toLowerCase(),\n endIntervalTimeUnit: getTelemetryFromDatabaseConfigForm.get(\'interval.endIntervalTimeUnit\').value.toLowerCase()\n } }}\n \n \n {{ "tb.rulenode.fetch-timeseries-from-to-invalid" | translate }}\n \n
\n
\n
\n \n
\n \n {{ \'tb.rulenode.start-interval\' | translate }}\n \n \n {{ \'tb.rulenode.start-interval-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.end-interval\' | translate }}\n \n \n {{ \'tb.rulenode.end-interval-required\' | translate }}\n \n \n \n \n
\n
\n
\n
\n
tb.rulenode.fetch-strategy
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n {{ deduplicationStrategiesHintTranslations.get(getTelemetryFromDatabaseConfigForm.get(\'fetchMode\').value) | translate }}\n
\n
\n
\n \n {{ \'aggregation.function\' | translate }}\n \n \n {{ aggregationTypesTranslations.get(aggregationTypes[aggregation]) | translate }}\n \n \n \n
\n \n {{ "tb.rulenode.order-by-timestamp" | translate }} \n \n \n {{ samplingOrdersTranslate.get(order) | translate }}\n \n \n \n \n {{ "tb.rulenode.limit" | translate }}\n \n {{ "tb.rulenode.limit-hint" | translate }}\n \n {{ \'tb.rulenode.limit-required\' | translate }}\n \n \n {{ \'tb.rulenode.limit-range\' | translate }}\n \n \n {{ \'tb.rulenode.limit-range\' | translate }}\n \n \n
\n
\n
\n
\n',styles:[":host .see-example{display:inline-block}:host .tb-hint{padding-bottom:0}:host .description-block{display:flex;align-items:center;background:#F7F7F7;border-radius:6px;border:1px solid #EAEAEA}:host .description-block .description-icon{font-size:24px;height:24px;min-height:24px;width:24px;min-width:24px;line-height:24px;color:#d9d9d9;margin:4px}:host .description-block .description-text{font-size:12px;line-height:16px;letter-spacing:.25px;margin:6px}:host .description-block.error{background:#FDF7F7;color:var(--mdc-theme-error, #f44336)}:host .description-block.error .description-icon{color:var(--mdc-theme-error, #f44336)}:host .item-center{align-items:center}:host .item-center .fetch-mod-toggle{max-width:630px;width:100%}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:Ge.HelpPopupComponent,selector:"[tb-help-popup], [tb-help-popup-content]",inputs:["tb-help-popup","tb-help-popup-content","trigger-text","trigger-style","tb-help-popup-placement","tb-help-popup-style","hintMode"]},{kind:"component",type:Re.StringItemsListComponent,selector:"tb-string-items-list",inputs:["required","disabled","label","placeholder","hint","requiredText","floatLabel","appearance","editable","subscriptSizing","predefinedValues"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:E.FormGroupName,selector:"[formGroupName]",inputs:["formGroupName"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"directive",type:Oe.ToggleOption,selector:"tb-toggle-option",inputs:["value"]},{kind:"component",type:Be.ToggleSelectComponent,selector:"tb-toggle-select",inputs:["disabled","selectMediaBreakpoint","appearance","disablePagination"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"component",type:mn,selector:"tb-example-hint",inputs:["hintText","popupHelpLink"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:In,decorators:[{type:n,args:[{selector:"tb-enrichment-node-get-telemetry-from-database",template:'
\n \n
\n help\n \n
\n
\n
tb.rulenode.fetch-interval
\n
\n \n {{ \'tb.rulenode.use-metadata-dynamic-interval\' | translate }}\n \n
\n
\n
\n \n {{ \'tb.rulenode.interval-start\' | translate }}\n \n \n {{ \'tb.rulenode.start-interval-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n {{ \'tb.rulenode.time-unit\' | translate }}\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n \n {{ \'tb.rulenode.interval-end\' | translate }}\n \n \n {{ \'tb.rulenode.end-interval-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n {{ \'tb.rulenode.time-unit\' | translate }}\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n error_outline\n
\n \n {{ \'tb.rulenode.fetch-timeseries-from-to\' | translate:\n {\n startInterval: getTelemetryFromDatabaseConfigForm.get(\'interval.startInterval\').value,\n endInterval: getTelemetryFromDatabaseConfigForm.get(\'interval.endInterval\').value,\n startIntervalTimeUnit: getTelemetryFromDatabaseConfigForm.get(\'interval.startIntervalTimeUnit\').value.toLowerCase(),\n endIntervalTimeUnit: getTelemetryFromDatabaseConfigForm.get(\'interval.endIntervalTimeUnit\').value.toLowerCase()\n } }}\n \n \n {{ "tb.rulenode.fetch-timeseries-from-to-invalid" | translate }}\n \n
\n
\n
\n \n
\n \n {{ \'tb.rulenode.start-interval\' | translate }}\n \n \n {{ \'tb.rulenode.start-interval-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.end-interval\' | translate }}\n \n \n {{ \'tb.rulenode.end-interval-required\' | translate }}\n \n \n \n \n
\n
\n
\n
\n
tb.rulenode.fetch-strategy
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n {{ deduplicationStrategiesHintTranslations.get(getTelemetryFromDatabaseConfigForm.get(\'fetchMode\').value) | translate }}\n
\n
\n
\n \n {{ \'aggregation.function\' | translate }}\n \n \n {{ aggregationTypesTranslations.get(aggregationTypes[aggregation]) | translate }}\n \n \n \n
\n \n {{ "tb.rulenode.order-by-timestamp" | translate }} \n \n \n {{ samplingOrdersTranslate.get(order) | translate }}\n \n \n \n \n {{ "tb.rulenode.limit" | translate }}\n \n {{ "tb.rulenode.limit-hint" | translate }}\n \n {{ \'tb.rulenode.limit-required\' | translate }}\n \n \n {{ \'tb.rulenode.limit-range\' | translate }}\n \n \n {{ \'tb.rulenode.limit-range\' | translate }}\n \n \n
\n
\n
\n
\n',styles:[":host .see-example{display:inline-block}:host .tb-hint{padding-bottom:0}:host .description-block{display:flex;align-items:center;background:#F7F7F7;border-radius:6px;border:1px solid #EAEAEA}:host .description-block .description-icon{font-size:24px;height:24px;min-height:24px;width:24px;min-width:24px;line-height:24px;color:#d9d9d9;margin:4px}:host .description-block .description-text{font-size:12px;line-height:16px;letter-spacing:.25px;margin:6px}:host .description-block.error{background:#FDF7F7;color:var(--mdc-theme-error, #f44336)}:host .description-block.error .description-icon{color:var(--mdc-theme-error, #f44336)}:host .item-center{align-items:center}:host .item-center .fetch-mod-toggle{max-width:630px;width:100%}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:E.FormBuilder}]}});class Nn extends s{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n}configForm(){return this.originatorAttributesConfigForm}touched(){this.originatorAttributesConfigForm.get("attributesControl").markAsTouched()}onConfigurationSet(e){this.originatorAttributesConfigForm=this.fb.group({tellFailureIfAbsent:[e.tellFailureIfAbsent,[]],fetchTo:[e.fetchTo,[]],attributesControl:[e.attributesControl,[]]})}prepareInputConfig(e){return ee(e)&&(e.attributesControl={clientAttributeNames:X(e?.clientAttributeNames)?e.clientAttributeNames:null,latestTsKeyNames:X(e?.latestTsKeyNames)?e.latestTsKeyNames:null,serverAttributeNames:X(e?.serverAttributeNames)?e.serverAttributeNames:null,sharedAttributeNames:X(e?.sharedAttributeNames)?e.sharedAttributeNames:null,getLatestValueWithTs:!!X(e?.getLatestValueWithTs)&&e.getLatestValueWithTs}),{fetchTo:X(e?.fetchTo)?e.fetchTo:Pt.METADATA,tellFailureIfAbsent:!!X(e?.tellFailureIfAbsent)&&e.tellFailureIfAbsent,attributesControl:X(e?.attributesControl)?e.attributesControl:null}}prepareOutputConfig(e){for(const t of Object.keys(e.attributesControl))e[t]=e.attributesControl[t];return delete e.attributesControl,e}}e("OriginatorAttributesConfigComponent",Nn),Nn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Nn,deps:[{token:G.Store},{token:H.TranslateService},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Nn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Nn,selector:"tb-enrichment-node-originator-attributes-config",usesInheritance:!0,ngImport:t,template:'
\n
\n
\n
tb.rulenode.originator-attributes
\n
\n tb.rulenode.at-least-one-field-required\n
\n
\n \n \n \n \n
\n
\n \n {{ \'tb.rulenode.tell-failure\' | translate }}\n \n
\n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"component",type:bn,selector:"tb-select-attributes",inputs:["popupHelpLink"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Nn,decorators:[{type:n,args:[{selector:"tb-enrichment-node-originator-attributes-config",template:'
\n
\n
\n
tb.rulenode.originator-attributes
\n
\n tb.rulenode.at-least-one-field-required\n
\n
\n \n \n \n \n
\n
\n \n {{ \'tb.rulenode.tell-failure\' | translate }}\n \n
\n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:E.FormBuilder}]}});class Sn extends s{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.originatorFields=[];for(const e of Object.keys(S))this.originatorFields.push({value:S[e].value,name:this.translate.instant(S[e].name)})}configForm(){return this.originatorFieldsConfigForm}prepareOutputConfig(e){return Z(e)}prepareInputConfig(e){return{dataMapping:X(e?.dataMapping)?e.dataMapping:null,ignoreNullStrings:X(e?.ignoreNullStrings)?e.ignoreNullStrings:null,fetchTo:X(e?.fetchTo)?e.fetchTo:Pt.METADATA}}onConfigurationSet(e){this.originatorFieldsConfigForm=this.fb.group({dataMapping:[e.dataMapping,[D.required]],ignoreNullStrings:[e.ignoreNullStrings,[]],fetchTo:[e.fetchTo,[]]})}}e("OriginatorFieldsConfigComponent",Sn),Sn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Sn,deps:[{token:G.Store},{token:E.FormBuilder},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),Sn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Sn,selector:"tb-enrichment-node-originator-fields-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n \n \n
\n \n {{ \'tb.rulenode.skip-empty-fields\' | translate }}\n \n
\n
\n',dependencies:[{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"component",type:yn,selector:"tb-sv-map-config",inputs:["selectOptions","disabled","labelText","requiredText","targetKeyPrefix","selectText","selectRequiredText","valText","valRequiredText","hintText","popupHelpLink","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Sn,decorators:[{type:n,args:[{selector:"tb-enrichment-node-originator-fields-config",template:'
\n \n \n \n \n
\n \n {{ \'tb.rulenode.skip-empty-fields\' | translate }}\n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder},{type:H.TranslateService}]}});class qn extends s{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.DataToFetch=ht,this.msgMetadataLabelTranslations=Ct,this.originatorFields=[],this.fetchToData=[],this.destroy$=new Ae;for(const e of Object.keys(S))this.originatorFields.push({value:S[e].value,name:this.translate.instant(S[e].name)});for(const e of vt.keys())this.fetchToData.push({value:e,name:this.translate.instant(vt.get(e))})}configForm(){return this.relatedAttributesConfigForm}prepareOutputConfig(e){e.dataToFetch===ht.FIELDS?(e.dataMapping=e.svMap,delete e.svMap):(e.dataMapping=e.kvMap,delete e.kvMap);const t={};for(const n of Object.keys(e.dataMapping))t[n.trim()]=e.dataMapping[n];return e.dataMapping=t,delete e.svMap,delete e.kvMap,Z(e)}prepareInputConfig(e){let t,n,r={[S.name.value]:`relatedEntity${this.translate.instant(S.name.name)}`},o={serialNumber:"sn"};return t=X(e?.telemetry)?e.telemetry?ht.LATEST_TELEMETRY:ht.ATTRIBUTES:X(e?.dataToFetch)?e.dataToFetch:ht.ATTRIBUTES,n=X(e?.attrMapping)?e.attrMapping:X(e?.dataMapping)?e.dataMapping:null,t===ht.FIELDS?r=n:o=n,{relationsQuery:X(e?.relationsQuery)?e.relationsQuery:null,dataToFetch:t,svMap:r,kvMap:o,fetchTo:X(e?.fetchTo)?e.fetchTo:Pt.METADATA}}selectTranslation(e,t){return this.relatedAttributesConfigForm.get("dataToFetch").value===ht.LATEST_TELEMETRY?e:t}onConfigurationSet(e){this.relatedAttributesConfigForm=this.fb.group({relationsQuery:[e.relationsQuery,[D.required]],dataToFetch:[e.dataToFetch,[]],kvMap:[e.kvMap,[]],svMap:[e.svMap,[]],fetchTo:[e.fetchTo,[]]}),this.relatedAttributesConfigForm.get("dataToFetch").valueChanges.pipe(Le(this.destroy$)).subscribe((e=>{e===ht.FIELDS?(this.relatedAttributesConfigForm.get("svMap").setValidators(D.required),this.relatedAttributesConfigForm.get("svMap").updateValueAndValidity(),this.relatedAttributesConfigForm.get("kvMap").clearValidators(),this.relatedAttributesConfigForm.get("kvMap").updateValueAndValidity()):(this.relatedAttributesConfigForm.get("kvMap").setValidators(D.required),this.relatedAttributesConfigForm.get("kvMap").updateValueAndValidity(),this.relatedAttributesConfigForm.get("svMap").clearValidators(),this.relatedAttributesConfigForm.get("svMap").updateValueAndValidity())}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}}e("RelatedAttributesConfigComponent",qn),qn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:qn,deps:[{token:G.Store},{token:E.FormBuilder},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),qn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:qn,selector:"tb-enrichment-node-related-attributes-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n
\n
tb.rulenode.data-to-fetch
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n \n \n \n \n \n \n \n \n
\n
\n',styles:[":host .toggle-block{display:flex;place-content:center}:host .toggle-block .fetch-to-data-toggle{max-width:630px;width:100%}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"directive",type:Oe.ToggleOption,selector:"tb-toggle-option",inputs:["value"]},{kind:"component",type:Be.ToggleSelectComponent,selector:"tb-toggle-select",inputs:["disabled","selectMediaBreakpoint","appearance","disablePagination"]},{kind:"component",type:un,selector:"tb-kv-map-config",inputs:["disabled","uniqueKeyValuePairValidator","labelText","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","popupHelpLink","required"]},{kind:"component",type:dn,selector:"tb-relations-query-config",inputs:["disabled","required"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"component",type:yn,selector:"tb-sv-map-config",inputs:["selectOptions","disabled","labelText","requiredText","targetKeyPrefix","selectText","selectRequiredText","valText","valRequiredText","hintText","popupHelpLink","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:qn,decorators:[{type:n,args:[{selector:"tb-enrichment-node-related-attributes-config",template:'
\n \n \n
\n
tb.rulenode.data-to-fetch
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n \n \n \n \n \n \n \n \n
\n
\n',styles:[":host .toggle-block{display:flex;place-content:center}:host .toggle-block .fetch-to-data-toggle{max-width:630px;width:100%}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder},{type:H.TranslateService}]}});class An extends s{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.fetchToData=[],this.DataToFetch=ht;for(const e of vt.keys())e!==ht.FIELDS&&this.fetchToData.push({value:e,name:this.translate.instant(vt.get(e))})}configForm(){return this.tenantAttributesConfigForm}prepareInputConfig(e){let t,n;return t=X(e?.telemetry)?e.telemetry?ht.LATEST_TELEMETRY:ht.ATTRIBUTES:X(e?.dataToFetch)?e.dataToFetch:ht.ATTRIBUTES,n=X(e?.attrMapping)?e.attrMapping:X(e?.dataMapping)?e.dataMapping:null,{dataToFetch:t,dataMapping:n,fetchTo:X(e?.fetchTo)?e.fetchTo:Pt.METADATA}}selectTranslation(e,t){return this.tenantAttributesConfigForm.get("dataToFetch").value===ht.LATEST_TELEMETRY?e:t}onConfigurationSet(e){this.tenantAttributesConfigForm=this.fb.group({dataToFetch:[e.dataToFetch,[]],dataMapping:[e.dataMapping,[D.required]],fetchTo:[e.fetchTo,[]]})}}e("TenantAttributesConfigComponent",An),An.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:An,deps:[{token:G.Store},{token:E.FormBuilder},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),An.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:An,selector:"tb-enrichment-node-tenant-attributes-config",usesInheritance:!0,ngImport:t,template:'
\n
tb.rulenode.mapping-of-tenant-fields
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n \n \n \n \n
\n',styles:[":host .fetch-to-data-toggle{max-width:420px;width:100%}\n"],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:_.DefaultLayoutAlignDirective,selector:" [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]",inputs:["fxLayoutAlign","fxLayoutAlign.xs","fxLayoutAlign.sm","fxLayoutAlign.md","fxLayoutAlign.lg","fxLayoutAlign.xl","fxLayoutAlign.lt-sm","fxLayoutAlign.lt-md","fxLayoutAlign.lt-lg","fxLayoutAlign.lt-xl","fxLayoutAlign.gt-xs","fxLayoutAlign.gt-sm","fxLayoutAlign.gt-md","fxLayoutAlign.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"directive",type:Oe.ToggleOption,selector:"tb-toggle-option",inputs:["value"]},{kind:"component",type:Be.ToggleSelectComponent,selector:"tb-toggle-select",inputs:["disabled","selectMediaBreakpoint","appearance","disablePagination"]},{kind:"component",type:un,selector:"tb-kv-map-config",inputs:["disabled","uniqueKeyValuePairValidator","labelText","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","popupHelpLink","required"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:An,decorators:[{type:n,args:[{selector:"tb-enrichment-node-tenant-attributes-config",template:'
\n
tb.rulenode.mapping-of-tenant-fields
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n \n \n \n \n
\n',styles:[":host .fetch-to-data-toggle{max-width:420px;width:100%}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder},{type:H.TranslateService}]}});class Mn extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.fetchDeviceCredentialsConfigForm}prepareInputConfig(e){return{fetchTo:X(e?.fetchTo)?e.fetchTo:Pt.METADATA}}onConfigurationSet(e){this.fetchDeviceCredentialsConfigForm=this.fb.group({fetchTo:[e.fetchTo,[]]})}}e("FetchDeviceCredentialsConfigComponent",Mn),Mn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Mn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Mn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Mn,selector:"./tb-enrichment-node-fetch-device-credentials-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n
\n',dependencies:[{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Mn,decorators:[{type:n,args:[{selector:"./tb-enrichment-node-fetch-device-credentials-config",template:'
\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]}});class Gn{}e("RulenodeCoreConfigEnrichmentModule",Gn),Gn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Gn,deps:[],target:t.ɵɵFactoryTarget.NgModule}),Gn.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:Gn,declarations:[kn,Tn,Ln,Nn,Sn,In,qn,An,Fn,Mn],imports:[O,T,vn],exports:[kn,Tn,Ln,Nn,Sn,In,qn,An,Fn,Mn]}),Gn.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Gn,imports:[O,T,vn]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Gn,decorators:[{type:l,args:[{declarations:[kn,Tn,Ln,Nn,Sn,In,qn,An,Fn,Mn],imports:[O,T,vn],exports:[kn,Tn,Ln,Nn,Sn,In,qn,An,Fn,Mn]}]}]});class En extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.allAzureIotHubCredentialsTypes=Nt,this.azureIotHubCredentialsTypeTranslationsMap=St}configForm(){return this.azureIotHubConfigForm}onConfigurationSet(e){this.azureIotHubConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[D.required]],host:[e?e.host:null,[D.required]],port:[e?e.port:null,[D.required,D.min(1),D.max(65535)]],connectTimeoutSec:[e?e.connectTimeoutSec:null,[D.required,D.min(1),D.max(200)]],clientId:[e?e.clientId:null,[D.required]],cleanSession:[!!e&&e.cleanSession,[]],ssl:[!!e&&e.ssl,[]],credentials:this.fb.group({type:[e&&e.credentials?e.credentials.type:null,[D.required]],sasKey:[e&&e.credentials?e.credentials.sasKey:null,[]],caCert:[e&&e.credentials?e.credentials.caCert:null,[]],caCertFileName:[e&&e.credentials?e.credentials.caCertFileName:null,[]],privateKey:[e&&e.credentials?e.credentials.privateKey:null,[]],privateKeyFileName:[e&&e.credentials?e.credentials.privateKeyFileName:null,[]],cert:[e&&e.credentials?e.credentials.cert:null,[]],certFileName:[e&&e.credentials?e.credentials.certFileName:null,[]],password:[e&&e.credentials?e.credentials.password:null,[]]})})}prepareOutputConfig(e){const t=e.credentials.type;return"sas"===t&&(e.credentials={type:t,sasKey:e.credentials.sasKey,caCert:e.credentials.caCert,caCertFileName:e.credentials.caCertFileName}),e}validatorTriggers(){return["credentials.type"]}updateValidators(e){const t=this.azureIotHubConfigForm.get("credentials"),n=t.get("type").value;switch(e&&t.reset({type:n},{emitEvent:!1}),t.get("sasKey").setValidators([]),t.get("privateKey").setValidators([]),t.get("privateKeyFileName").setValidators([]),t.get("cert").setValidators([]),t.get("certFileName").setValidators([]),n){case"sas":t.get("sasKey").setValidators([D.required]);break;case"cert.PEM":t.get("privateKey").setValidators([D.required]),t.get("privateKeyFileName").setValidators([D.required]),t.get("cert").setValidators([D.required]),t.get("certFileName").setValidators([D.required])}t.get("sasKey").updateValueAndValidity({emitEvent:e}),t.get("privateKey").updateValueAndValidity({emitEvent:e}),t.get("privateKeyFileName").updateValueAndValidity({emitEvent:e}),t.get("cert").updateValueAndValidity({emitEvent:e}),t.get("certFileName").updateValueAndValidity({emitEvent:e})}}e("AzureIotHubConfigComponent",En),En.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:En,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),En.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:En,selector:"tb-external-node-azure-iot-hub-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.topic\n \n \n {{ \'tb.rulenode.topic-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.hostname\n \n \n {{ \'tb.rulenode.hostname-required\' | translate }}\n \n \n \n tb.rulenode.device-id\n \n \n {{ \'tb.rulenode.device-id-required\' | translate }}\n \n \n \n \n \n tb.rulenode.credentials\n \n {{ azureIotHubCredentialsTypeTranslationsMap.get(azureIotHubConfigForm.get(\'credentials.type\').value) | translate }}\n \n \n
\n \n tb.rulenode.credentials-type\n \n \n {{ azureIotHubCredentialsTypeTranslationsMap.get(credentialsType) | translate }}\n \n \n \n {{ \'tb.rulenode.credentials-type-required\' | translate }}\n \n \n
\n \n \n \n \n tb.rulenode.sas-key\n \n \n \n {{ \'tb.rulenode.sas-key-required\' | translate }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n tb.rulenode.private-key-password\n \n \n \n \n
\n
\n
\n
\n
\n',styles:[":host .tb-mqtt-credentials-panel-group{margin:0 6px}\n"],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:R.NgSwitch,selector:"[ngSwitch]",inputs:["ngSwitch"]},{kind:"directive",type:R.NgSwitchCase,selector:"[ngSwitchCase]",inputs:["ngSwitchCase"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:Ne.MatAccordion,selector:"mat-accordion",inputs:["multi","hideToggle","displayMode","togglePosition"],exportAs:["matAccordion"]},{kind:"component",type:Ne.MatExpansionPanel,selector:"mat-expansion-panel",inputs:["disabled","expanded","hideToggle","togglePosition"],outputs:["opened","closed","expandedChange","afterExpand","afterCollapse"],exportAs:["matExpansionPanel"]},{kind:"component",type:Ne.MatExpansionPanelHeader,selector:"mat-expansion-panel-header",inputs:["tabIndex","expandedHeight","collapsedHeight"]},{kind:"directive",type:Ne.MatExpansionPanelTitle,selector:"mat-panel-title"},{kind:"directive",type:Ne.MatExpansionPanelDescription,selector:"mat-panel-description"},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:E.FormGroupName,selector:"[formGroupName]",inputs:["formGroupName"]},{kind:"component",type:Pe.FileInputComponent,selector:"tb-file-input",inputs:["label","accept","noFileText","inputId","allowedExtensions","dropLabel","contentConvertFunction","required","requiredAsError","disabled","existingFileName","readAsBinary","workFromFileObj","multipleFile"],outputs:["fileNameChanged"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:we.TogglePasswordComponent,selector:"tb-toggle-password"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:En,decorators:[{type:n,args:[{selector:"tb-external-node-azure-iot-hub-config",template:'
\n \n tb.rulenode.topic\n \n \n {{ \'tb.rulenode.topic-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.hostname\n \n \n {{ \'tb.rulenode.hostname-required\' | translate }}\n \n \n \n tb.rulenode.device-id\n \n \n {{ \'tb.rulenode.device-id-required\' | translate }}\n \n \n \n \n \n tb.rulenode.credentials\n \n {{ azureIotHubCredentialsTypeTranslationsMap.get(azureIotHubConfigForm.get(\'credentials.type\').value) | translate }}\n \n \n
\n \n tb.rulenode.credentials-type\n \n \n {{ azureIotHubCredentialsTypeTranslationsMap.get(credentialsType) | translate }}\n \n \n \n {{ \'tb.rulenode.credentials-type-required\' | translate }}\n \n \n
\n \n \n \n \n tb.rulenode.sas-key\n \n \n \n {{ \'tb.rulenode.sas-key-required\' | translate }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n tb.rulenode.private-key-password\n \n \n \n \n
\n
\n
\n
\n
\n',styles:[":host .tb-mqtt-credentials-panel-group{margin:0 6px}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Dn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.ackValues=["all","-1","0","1"],this.ToByteStandartCharsetTypesValues=At,this.ToByteStandartCharsetTypeTranslationMap=Mt}configForm(){return this.kafkaConfigForm}onConfigurationSet(e){this.kafkaConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[D.required]],keyPattern:[e?e.keyPattern:null],bootstrapServers:[e?e.bootstrapServers:null,[D.required]],retries:[e?e.retries:null,[D.min(0)]],batchSize:[e?e.batchSize:null,[D.min(0)]],linger:[e?e.linger:null,[D.min(0)]],bufferMemory:[e?e.bufferMemory:null,[D.min(0)]],acks:[e?e.acks:null,[D.required]],keySerializer:[e?e.keySerializer:null,[D.required]],valueSerializer:[e?e.valueSerializer:null,[D.required]],otherProperties:[e?e.otherProperties:null,[]],addMetadataKeyValuesAsKafkaHeaders:[!!e&&e.addMetadataKeyValuesAsKafkaHeaders,[]],kafkaHeadersCharset:[e?e.kafkaHeadersCharset:null,[]]})}validatorTriggers(){return["addMetadataKeyValuesAsKafkaHeaders"]}updateValidators(e){this.kafkaConfigForm.get("addMetadataKeyValuesAsKafkaHeaders").value?this.kafkaConfigForm.get("kafkaHeadersCharset").setValidators([D.required]):this.kafkaConfigForm.get("kafkaHeadersCharset").setValidators([]),this.kafkaConfigForm.get("kafkaHeadersCharset").updateValueAndValidity({emitEvent:e})}}e("KafkaConfigComponent",Dn),Dn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Dn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Dn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Dn,selector:"tb-external-node-kafka-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.topic-pattern\n \n \n {{ \'tb.rulenode.topic-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.key-pattern\n \n tb.rulenode.general-pattern-hint\n \n
tb.rulenode.key-pattern-hint
\n \n tb.rulenode.bootstrap-servers\n \n \n {{ \'tb.rulenode.bootstrap-servers-required\' | translate }}\n \n \n \n tb.rulenode.retries\n \n \n {{ \'tb.rulenode.min-retries-message\' | translate }}\n \n \n \n tb.rulenode.batch-size-bytes\n \n \n {{ \'tb.rulenode.min-batch-size-bytes-message\' | translate }}\n \n \n \n tb.rulenode.linger-ms\n \n \n {{ \'tb.rulenode.min-linger-ms-message\' | translate }}\n \n \n \n tb.rulenode.buffer-memory-bytes\n \n \n {{ \'tb.rulenode.min-buffer-memory-bytes-message\' | translate }}\n \n \n \n tb.rulenode.acks\n \n \n {{ ackValue }}\n \n \n \n \n tb.rulenode.key-serializer\n \n \n {{ \'tb.rulenode.key-serializer-required\' | translate }}\n \n \n \n tb.rulenode.value-serializer\n \n \n {{ \'tb.rulenode.value-serializer-required\' | translate }}\n \n \n \n \n \n \n {{ \'tb.rulenode.add-metadata-key-values-as-kafka-headers\' | translate }}\n \n
tb.rulenode.add-metadata-key-values-as-kafka-headers-hint
\n \n tb.rulenode.charset-encoding\n \n \n {{ ToByteStandartCharsetTypeTranslationMap.get(charset) | translate }}\n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:Xt,selector:"tb-kv-map-config-old",inputs:["disabled","uniqueKeyValuePairValidator","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Dn,decorators:[{type:n,args:[{selector:"tb-external-node-kafka-config",template:'
\n \n tb.rulenode.topic-pattern\n \n \n {{ \'tb.rulenode.topic-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.key-pattern\n \n tb.rulenode.general-pattern-hint\n \n
tb.rulenode.key-pattern-hint
\n \n tb.rulenode.bootstrap-servers\n \n \n {{ \'tb.rulenode.bootstrap-servers-required\' | translate }}\n \n \n \n tb.rulenode.retries\n \n \n {{ \'tb.rulenode.min-retries-message\' | translate }}\n \n \n \n tb.rulenode.batch-size-bytes\n \n \n {{ \'tb.rulenode.min-batch-size-bytes-message\' | translate }}\n \n \n \n tb.rulenode.linger-ms\n \n \n {{ \'tb.rulenode.min-linger-ms-message\' | translate }}\n \n \n \n tb.rulenode.buffer-memory-bytes\n \n \n {{ \'tb.rulenode.min-buffer-memory-bytes-message\' | translate }}\n \n \n \n tb.rulenode.acks\n \n \n {{ ackValue }}\n \n \n \n \n tb.rulenode.key-serializer\n \n \n {{ \'tb.rulenode.key-serializer-required\' | translate }}\n \n \n \n tb.rulenode.value-serializer\n \n \n {{ \'tb.rulenode.value-serializer-required\' | translate }}\n \n \n \n \n \n \n {{ \'tb.rulenode.add-metadata-key-values-as-kafka-headers\' | translate }}\n \n
tb.rulenode.add-metadata-key-values-as-kafka-headers-hint
\n \n tb.rulenode.charset-encoding\n \n \n {{ ToByteStandartCharsetTypeTranslationMap.get(charset) | translate }}\n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Vn extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.mqttConfigForm}onConfigurationSet(e){this.mqttConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[D.required]],host:[e?e.host:null,[D.required]],port:[e?e.port:null,[D.required,D.min(1),D.max(65535)]],connectTimeoutSec:[e?e.connectTimeoutSec:null,[D.required,D.min(1),D.max(200)]],clientId:[e?e.clientId:null,[]],appendClientIdSuffix:[{value:!!e&&e.appendClientIdSuffix,disabled:!(e&&te(e.clientId))},[]],cleanSession:[!!e&&e.cleanSession,[]],retainedMessage:[!!e&&e.retainedMessage,[]],ssl:[!!e&&e.ssl,[]],credentials:[e?e.credentials:null,[]]})}updateValidators(e){te(this.mqttConfigForm.get("clientId").value)?this.mqttConfigForm.get("appendClientIdSuffix").enable({emitEvent:!1}):this.mqttConfigForm.get("appendClientIdSuffix").disable({emitEvent:!1}),this.mqttConfigForm.get("appendClientIdSuffix").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["clientId"]}}e("MqttConfigComponent",Vn),Vn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Vn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Vn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Vn,selector:"tb-external-node-mqtt-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.topic-pattern\n \n \n {{ \'tb.rulenode.topic-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n tb.rulenode.host\n \n \n {{ \'tb.rulenode.host-required\' | translate }}\n \n \n \n tb.rulenode.port\n \n \n {{ \'tb.rulenode.port-required\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n \n tb.rulenode.connect-timeout\n \n \n {{ \'tb.rulenode.connect-timeout-required\' | translate }}\n \n \n {{ \'tb.rulenode.connect-timeout-range\' | translate }}\n \n \n {{ \'tb.rulenode.connect-timeout-range\' | translate }}\n \n \n
\n \n tb.rulenode.client-id\n \n {{\'tb.rulenode.client-id-hint\' | translate}}\n \n \n {{ \'tb.rulenode.append-client-id-suffix\' | translate }}\n \n
{{ "tb.rulenode.client-id-suffix-hint" | translate }}
\n \n {{ \'tb.rulenode.clean-session\' | translate }}\n \n \n {{ "tb.rulenode.retained-message" | translate }}\n \n \n {{ \'tb.rulenode.enable-ssl\' | translate }}\n \n \n
\n',styles:[":host .tb-mqtt-credentials-panel-group{margin:0 6px}\n"],dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:fn,selector:"tb-credentials-config",inputs:["required","disableCertPemCredentials","passwordFieldRequired"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Vn,decorators:[{type:n,args:[{selector:"tb-external-node-mqtt-config",template:'
\n \n tb.rulenode.topic-pattern\n \n \n {{ \'tb.rulenode.topic-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n tb.rulenode.host\n \n \n {{ \'tb.rulenode.host-required\' | translate }}\n \n \n \n tb.rulenode.port\n \n \n {{ \'tb.rulenode.port-required\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n \n tb.rulenode.connect-timeout\n \n \n {{ \'tb.rulenode.connect-timeout-required\' | translate }}\n \n \n {{ \'tb.rulenode.connect-timeout-range\' | translate }}\n \n \n {{ \'tb.rulenode.connect-timeout-range\' | translate }}\n \n \n
\n \n tb.rulenode.client-id\n \n {{\'tb.rulenode.client-id-hint\' | translate}}\n \n \n {{ \'tb.rulenode.append-client-id-suffix\' | translate }}\n \n
{{ "tb.rulenode.client-id-suffix-hint" | translate }}
\n \n {{ \'tb.rulenode.clean-session\' | translate }}\n \n \n {{ "tb.rulenode.retained-message" | translate }}\n \n \n {{ \'tb.rulenode.enable-ssl\' | translate }}\n \n \n
\n',styles:[":host .tb-mqtt-credentials-panel-group{margin:0 6px}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Pn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.notificationType=q,this.entityType=x}configForm(){return this.notificationConfigForm}onConfigurationSet(e){this.notificationConfigForm=this.fb.group({templateId:[e?e.templateId:null,[D.required]],targets:[e?e.targets:[],[D.required]]})}}e("NotificationConfigComponent",Pn),Pn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Pn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Pn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Pn,selector:"tb-external-node-notification-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n \n \n
\n',dependencies:[{kind:"component",type:Ke.EntityListComponent,selector:"tb-entity-list",inputs:["entityType","subType","labelText","placeholderText","requiredText","required","disabled","subscriptSizing","hint"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:Ue.TemplateAutocompleteComponent,selector:"tb-template-autocomplete",inputs:["required","allowCreate","allowEdit","disabled","notificationTypes"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Pn,decorators:[{type:n,args:[{selector:"tb-external-node-notification-config",template:'
\n \n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]}});class wn extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.pubSubConfigForm}onConfigurationSet(e){this.pubSubConfigForm=this.fb.group({projectId:[e?e.projectId:null,[D.required]],topicName:[e?e.topicName:null,[D.required]],serviceAccountKey:[e?e.serviceAccountKey:null,[D.required]],serviceAccountKeyFileName:[e?e.serviceAccountKeyFileName:null,[D.required]],messageAttributes:[e?e.messageAttributes:null,[]]})}}e("PubSubConfigComponent",wn),wn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:wn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),wn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:wn,selector:"tb-external-node-pub-sub-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.gcp-project-id\n \n \n {{ \'tb.rulenode.gcp-project-id-required\' | translate }}\n \n \n \n tb.rulenode.pubsub-topic-name\n \n \n {{ \'tb.rulenode.pubsub-topic-name-required\' | translate }}\n \n \n \n \n \n
\n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:Pe.FileInputComponent,selector:"tb-file-input",inputs:["label","accept","noFileText","inputId","allowedExtensions","dropLabel","contentConvertFunction","required","requiredAsError","disabled","existingFileName","readAsBinary","workFromFileObj","multipleFile"],outputs:["fileNameChanged"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:Xt,selector:"tb-kv-map-config-old",inputs:["disabled","uniqueKeyValuePairValidator","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","required"]},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:wn,decorators:[{type:n,args:[{selector:"tb-external-node-pub-sub-config",template:'
\n \n tb.rulenode.gcp-project-id\n \n \n {{ \'tb.rulenode.gcp-project-id-required\' | translate }}\n \n \n \n tb.rulenode.pubsub-topic-name\n \n \n {{ \'tb.rulenode.pubsub-topic-name-required\' | translate }}\n \n \n \n \n \n
\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Rn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.messageProperties=[null,"BASIC","TEXT_PLAIN","MINIMAL_BASIC","MINIMAL_PERSISTENT_BASIC","PERSISTENT_BASIC","PERSISTENT_TEXT_PLAIN"]}configForm(){return this.rabbitMqConfigForm}onConfigurationSet(e){this.rabbitMqConfigForm=this.fb.group({exchangeNamePattern:[e?e.exchangeNamePattern:null,[]],routingKeyPattern:[e?e.routingKeyPattern:null,[]],messageProperties:[e?e.messageProperties:null,[]],host:[e?e.host:null,[D.required]],port:[e?e.port:null,[D.required,D.min(1),D.max(65535)]],virtualHost:[e?e.virtualHost:null,[]],username:[e?e.username:null,[]],password:[e?e.password:null,[]],automaticRecoveryEnabled:[!!e&&e.automaticRecoveryEnabled,[]],connectionTimeout:[e?e.connectionTimeout:null,[D.min(0)]],handshakeTimeout:[e?e.handshakeTimeout:null,[D.min(0)]],clientProperties:[e?e.clientProperties:null,[]]})}}e("RabbitMqConfigComponent",Rn),Rn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Rn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Rn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Rn,selector:"tb-external-node-rabbit-mq-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.exchange-name-pattern\n \n \n \n tb.rulenode.routing-key-pattern\n \n \n \n tb.rulenode.message-properties\n \n \n {{ property }}\n \n \n \n
\n \n tb.rulenode.host\n \n \n {{ \'tb.rulenode.host-required\' | translate }}\n \n \n \n tb.rulenode.port\n \n \n {{ \'tb.rulenode.port-required\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n
\n \n tb.rulenode.virtual-host\n \n \n \n tb.rulenode.username\n \n \n \n tb.rulenode.password\n \n \n \n \n {{ \'tb.rulenode.automatic-recovery\' | translate }}\n \n \n tb.rulenode.connection-timeout-ms\n \n \n {{ \'tb.rulenode.min-connection-timeout-ms-message\' | translate }}\n \n \n \n tb.rulenode.handshake-timeout-ms\n \n \n {{ \'tb.rulenode.min-handshake-timeout-ms-message\' | translate }}\n \n \n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:we.TogglePasswordComponent,selector:"tb-toggle-password"},{kind:"component",type:Xt,selector:"tb-kv-map-config-old",inputs:["disabled","uniqueKeyValuePairValidator","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Rn,decorators:[{type:n,args:[{selector:"tb-external-node-rabbit-mq-config",template:'
\n \n tb.rulenode.exchange-name-pattern\n \n \n \n tb.rulenode.routing-key-pattern\n \n \n \n tb.rulenode.message-properties\n \n \n {{ property }}\n \n \n \n
\n \n tb.rulenode.host\n \n \n {{ \'tb.rulenode.host-required\' | translate }}\n \n \n \n tb.rulenode.port\n \n \n {{ \'tb.rulenode.port-required\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n
\n \n tb.rulenode.virtual-host\n \n \n \n tb.rulenode.username\n \n \n \n tb.rulenode.password\n \n \n \n \n {{ \'tb.rulenode.automatic-recovery\' | translate }}\n \n \n tb.rulenode.connection-timeout-ms\n \n \n {{ \'tb.rulenode.min-connection-timeout-ms-message\' | translate }}\n \n \n \n tb.rulenode.handshake-timeout-ms\n \n \n {{ \'tb.rulenode.min-handshake-timeout-ms-message\' | translate }}\n \n \n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class On extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.proxySchemes=["http","https"],this.httpRequestTypes=Object.keys(qt)}configForm(){return this.restApiCallConfigForm}onConfigurationSet(e){this.restApiCallConfigForm=this.fb.group({restEndpointUrlPattern:[e?e.restEndpointUrlPattern:null,[D.required]],requestMethod:[e?e.requestMethod:null,[D.required]],useSimpleClientHttpFactory:[!!e&&e.useSimpleClientHttpFactory,[]],trimDoubleQuotes:[!!e&&e.trimDoubleQuotes,[]],ignoreRequestBody:[!!e&&e.ignoreRequestBody,[]],enableProxy:[!!e&&e.enableProxy,[]],useSystemProxyProperties:[!!e&&e.enableProxy,[]],proxyScheme:[e?e.proxyHost:null,[]],proxyHost:[e?e.proxyHost:null,[]],proxyPort:[e?e.proxyPort:null,[]],proxyUser:[e?e.proxyUser:null,[]],proxyPassword:[e?e.proxyPassword:null,[]],readTimeoutMs:[e?e.readTimeoutMs:null,[]],maxParallelRequestsCount:[e?e.maxParallelRequestsCount:null,[D.min(0)]],headers:[e?e.headers:null,[]],useRedisQueueForMsgPersistence:[!!e&&e.useRedisQueueForMsgPersistence,[]],trimQueue:[!!e&&e.trimQueue,[]],maxQueueSize:[e?e.maxQueueSize:null,[]],credentials:[e?e.credentials:null,[]]})}validatorTriggers(){return["useSimpleClientHttpFactory","useRedisQueueForMsgPersistence","enableProxy","useSystemProxyProperties"]}updateValidators(e){const t=this.restApiCallConfigForm.get("useSimpleClientHttpFactory").value,n=this.restApiCallConfigForm.get("useRedisQueueForMsgPersistence").value,r=this.restApiCallConfigForm.get("enableProxy").value,o=this.restApiCallConfigForm.get("useSystemProxyProperties").value;r&&!o?(this.restApiCallConfigForm.get("proxyHost").setValidators(r?[D.required]:[]),this.restApiCallConfigForm.get("proxyPort").setValidators(r?[D.required,D.min(1),D.max(65535)]:[])):(this.restApiCallConfigForm.get("proxyHost").setValidators([]),this.restApiCallConfigForm.get("proxyPort").setValidators([]),t?this.restApiCallConfigForm.get("readTimeoutMs").setValidators([]):this.restApiCallConfigForm.get("readTimeoutMs").setValidators([D.min(0)])),n?this.restApiCallConfigForm.get("maxQueueSize").setValidators([D.min(0)]):this.restApiCallConfigForm.get("maxQueueSize").setValidators([]),this.restApiCallConfigForm.get("readTimeoutMs").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("maxQueueSize").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("proxyHost").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("proxyPort").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("credentials").updateValueAndValidity({emitEvent:e})}}e("RestApiCallConfigComponent",On),On.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:On,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),On.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:On,selector:"tb-external-node-rest-api-call-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.endpoint-url-pattern\n \n \n {{ \'tb.rulenode.endpoint-url-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.request-method\n \n \n {{ requestType }}\n \n \n \n \n {{ \'tb.rulenode.enable-proxy\' | translate }}\n \n \n {{ \'tb.rulenode.use-simple-client-http-factory\' | translate }}\n \n \n {{ \'tb.rulenode.trim-double-quotes\' | translate }}\n \n
tb.rulenode.trim-double-quotes-hint
\n \n {{ \'tb.rulenode.ignore-request-body\' | translate }}\n \n
\n \n {{ \'tb.rulenode.use-system-proxy-properties\' | translate }}\n \n
\n
\n \n tb.rulenode.proxy-scheme\n \n \n {{ proxyScheme }}\n \n \n \n \n tb.rulenode.proxy-host\n \n \n {{ \'tb.rulenode.proxy-host-required\' | translate }}\n \n \n \n tb.rulenode.proxy-port\n \n \n {{ \'tb.rulenode.proxy-port-required\' | translate }}\n \n \n {{ \'tb.rulenode.proxy-port-range\' | translate }}\n \n \n
\n \n tb.rulenode.proxy-user\n \n \n \n tb.rulenode.proxy-password\n \n \n
\n
\n \n tb.rulenode.read-timeout\n \n tb.rulenode.read-timeout-hint\n \n \n tb.rulenode.max-parallel-requests-count\n \n tb.rulenode.max-parallel-requests-count-hint\n \n \n
\n \n \n \n {{ \'tb.rulenode.use-redis-queue\' | translate }}\n \n
\n \n {{ \'tb.rulenode.trim-redis-queue\' | translate }}\n \n \n tb.rulenode.redis-queue-max-size\n \n \n
\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:fn,selector:"tb-credentials-config",inputs:["required","disableCertPemCredentials","passwordFieldRequired"]},{kind:"component",type:Xt,selector:"tb-kv-map-config-old",inputs:["disabled","uniqueKeyValuePairValidator","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","required"]},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:On,decorators:[{type:n,args:[{selector:"tb-external-node-rest-api-call-config",template:'
\n \n tb.rulenode.endpoint-url-pattern\n \n \n {{ \'tb.rulenode.endpoint-url-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.request-method\n \n \n {{ requestType }}\n \n \n \n \n {{ \'tb.rulenode.enable-proxy\' | translate }}\n \n \n {{ \'tb.rulenode.use-simple-client-http-factory\' | translate }}\n \n \n {{ \'tb.rulenode.trim-double-quotes\' | translate }}\n \n
tb.rulenode.trim-double-quotes-hint
\n \n {{ \'tb.rulenode.ignore-request-body\' | translate }}\n \n
\n \n {{ \'tb.rulenode.use-system-proxy-properties\' | translate }}\n \n
\n
\n \n tb.rulenode.proxy-scheme\n \n \n {{ proxyScheme }}\n \n \n \n \n tb.rulenode.proxy-host\n \n \n {{ \'tb.rulenode.proxy-host-required\' | translate }}\n \n \n \n tb.rulenode.proxy-port\n \n \n {{ \'tb.rulenode.proxy-port-required\' | translate }}\n \n \n {{ \'tb.rulenode.proxy-port-range\' | translate }}\n \n \n
\n \n tb.rulenode.proxy-user\n \n \n \n tb.rulenode.proxy-password\n \n \n
\n
\n \n tb.rulenode.read-timeout\n \n tb.rulenode.read-timeout-hint\n \n \n tb.rulenode.max-parallel-requests-count\n \n tb.rulenode.max-parallel-requests-count-hint\n \n \n
\n \n \n \n {{ \'tb.rulenode.use-redis-queue\' | translate }}\n \n
\n \n {{ \'tb.rulenode.trim-redis-queue\' | translate }}\n \n \n tb.rulenode.redis-queue-max-size\n \n \n
\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Bn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.smtpProtocols=["smtp","smtps"],this.tlsVersions=["TLSv1","TLSv1.1","TLSv1.2","TLSv1.3"]}configForm(){return this.sendEmailConfigForm}onConfigurationSet(e){this.sendEmailConfigForm=this.fb.group({useSystemSmtpSettings:[!!e&&e.useSystemSmtpSettings,[]],smtpProtocol:[e?e.smtpProtocol:null,[]],smtpHost:[e?e.smtpHost:null,[]],smtpPort:[e?e.smtpPort:null,[]],timeout:[e?e.timeout:null,[]],enableTls:[!!e&&e.enableTls,[]],tlsVersion:[e?e.tlsVersion:null,[]],enableProxy:[!!e&&e.enableProxy,[]],proxyHost:[e?e.proxyHost:null,[]],proxyPort:[e?e.proxyPort:null,[]],proxyUser:[e?e.proxyUser:null,[]],proxyPassword:[e?e.proxyPassword:null,[]],username:[e?e.username:null,[]],password:[e?e.password:null,[]]})}validatorTriggers(){return["useSystemSmtpSettings","enableProxy"]}updateValidators(e){const t=this.sendEmailConfigForm.get("useSystemSmtpSettings").value,n=this.sendEmailConfigForm.get("enableProxy").value;t?(this.sendEmailConfigForm.get("smtpProtocol").setValidators([]),this.sendEmailConfigForm.get("smtpHost").setValidators([]),this.sendEmailConfigForm.get("smtpPort").setValidators([]),this.sendEmailConfigForm.get("timeout").setValidators([]),this.sendEmailConfigForm.get("proxyHost").setValidators([]),this.sendEmailConfigForm.get("proxyPort").setValidators([])):(this.sendEmailConfigForm.get("smtpProtocol").setValidators([D.required]),this.sendEmailConfigForm.get("smtpHost").setValidators([D.required]),this.sendEmailConfigForm.get("smtpPort").setValidators([D.required,D.min(1),D.max(65535)]),this.sendEmailConfigForm.get("timeout").setValidators([D.required,D.min(0)]),this.sendEmailConfigForm.get("proxyHost").setValidators(n?[D.required]:[]),this.sendEmailConfigForm.get("proxyPort").setValidators(n?[D.required,D.min(1),D.max(65535)]:[])),this.sendEmailConfigForm.get("smtpProtocol").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("smtpHost").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("smtpPort").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("timeout").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("proxyHost").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("proxyPort").updateValueAndValidity({emitEvent:e})}}e("SendEmailConfigComponent",Bn),Bn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Bn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Bn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Bn,selector:"tb-external-node-send-email-config",usesInheritance:!0,ngImport:t,template:'
\n \n {{ \'tb.rulenode.use-system-smtp-settings\' | translate }}\n \n
\n \n tb.rulenode.smtp-protocol\n \n \n {{ smtpProtocol.toUpperCase() }}\n \n \n \n
\n \n tb.rulenode.smtp-host\n \n \n {{ \'tb.rulenode.smtp-host-required\' | translate }}\n \n \n \n tb.rulenode.smtp-port\n \n \n {{ \'tb.rulenode.smtp-port-required\' | translate }}\n \n \n {{ \'tb.rulenode.smtp-port-range\' | translate }}\n \n \n {{ \'tb.rulenode.smtp-port-range\' | translate }}\n \n \n
\n \n tb.rulenode.timeout-msec\n \n \n {{ \'tb.rulenode.timeout-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-timeout-msec-message\' | translate }}\n \n \n \n {{ \'tb.rulenode.enable-tls\' | translate }}\n \n \n tb.rulenode.tls-version\n \n \n {{ tlsVersion }}\n \n \n \n \n {{ \'tb.rulenode.enable-proxy\' | translate }}\n \n
\n
\n \n tb.rulenode.proxy-host\n \n \n {{ \'tb.rulenode.proxy-host-required\' | translate }}\n \n \n \n tb.rulenode.proxy-port\n \n \n {{ \'tb.rulenode.proxy-port-required\' | translate }}\n \n \n {{ \'tb.rulenode.proxy-port-range\' | translate }}\n \n \n
\n \n tb.rulenode.proxy-user\n \n \n \n tb.rulenode.proxy-password\n \n \n
\n \n tb.rulenode.username\n \n \n \n tb.rulenode.password\n \n \n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:_e.TbCheckboxComponent,selector:"tb-checkbox",inputs:["disabled","trueValue","falseValue"],outputs:["valueChange"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:we.TogglePasswordComponent,selector:"tb-toggle-password"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Bn,decorators:[{type:n,args:[{selector:"tb-external-node-send-email-config",template:'
\n \n {{ \'tb.rulenode.use-system-smtp-settings\' | translate }}\n \n
\n \n tb.rulenode.smtp-protocol\n \n \n {{ smtpProtocol.toUpperCase() }}\n \n \n \n
\n \n tb.rulenode.smtp-host\n \n \n {{ \'tb.rulenode.smtp-host-required\' | translate }}\n \n \n \n tb.rulenode.smtp-port\n \n \n {{ \'tb.rulenode.smtp-port-required\' | translate }}\n \n \n {{ \'tb.rulenode.smtp-port-range\' | translate }}\n \n \n {{ \'tb.rulenode.smtp-port-range\' | translate }}\n \n \n
\n \n tb.rulenode.timeout-msec\n \n \n {{ \'tb.rulenode.timeout-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-timeout-msec-message\' | translate }}\n \n \n \n {{ \'tb.rulenode.enable-tls\' | translate }}\n \n \n tb.rulenode.tls-version\n \n \n {{ tlsVersion }}\n \n \n \n \n {{ \'tb.rulenode.enable-proxy\' | translate }}\n \n
\n
\n \n tb.rulenode.proxy-host\n \n \n {{ \'tb.rulenode.proxy-host-required\' | translate }}\n \n \n \n tb.rulenode.proxy-port\n \n \n {{ \'tb.rulenode.proxy-port-required\' | translate }}\n \n \n {{ \'tb.rulenode.proxy-port-range\' | translate }}\n \n \n
\n \n tb.rulenode.proxy-user\n \n \n \n tb.rulenode.proxy-password\n \n \n
\n \n tb.rulenode.username\n \n \n \n tb.rulenode.password\n \n \n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Kn extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.sendSmsConfigForm}onConfigurationSet(e){this.sendSmsConfigForm=this.fb.group({numbersToTemplate:[e?e.numbersToTemplate:null,[D.required]],smsMessageTemplate:[e?e.smsMessageTemplate:null,[D.required]],useSystemSmsSettings:[!!e&&e.useSystemSmsSettings,[]],smsProviderConfiguration:[e?e.smsProviderConfiguration:null,[]]})}validatorTriggers(){return["useSystemSmsSettings"]}updateValidators(e){this.sendSmsConfigForm.get("useSystemSmsSettings").value?this.sendSmsConfigForm.get("smsProviderConfiguration").setValidators([]):this.sendSmsConfigForm.get("smsProviderConfiguration").setValidators([D.required]),this.sendSmsConfigForm.get("smsProviderConfiguration").updateValueAndValidity({emitEvent:e})}}e("SendSmsConfigComponent",Kn),Kn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Kn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Kn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Kn,selector:"tb-external-node-send-sms-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.numbers-to-template\n \n \n {{ \'tb.rulenode.numbers-to-template-required\' | translate }}\n \n \n \n \n tb.rulenode.sms-message-template\n \n \n {{ \'tb.rulenode.sms-message-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.use-system-sms-settings\' | translate }}\n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:He.SmsProviderConfigurationComponent,selector:"tb-sms-provider-configuration",inputs:["required","disabled"]},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Kn,decorators:[{type:n,args:[{selector:"tb-external-node-send-sms-config",template:'
\n \n tb.rulenode.numbers-to-template\n \n \n {{ \'tb.rulenode.numbers-to-template-required\' | translate }}\n \n \n \n \n tb.rulenode.sms-message-template\n \n \n {{ \'tb.rulenode.sms-message-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.use-system-sms-settings\' | translate }}\n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Un extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.slackChanelTypes=Object.keys(A),this.slackChanelTypesTranslateMap=M}configForm(){return this.slackConfigForm}onConfigurationSet(e){this.slackConfigForm=this.fb.group({botToken:[e?e.botToken:null],useSystemSettings:[!!e&&e.useSystemSettings],messageTemplate:[e?e.messageTemplate:null,[D.required]],conversationType:[e?e.conversationType:null,[D.required]],conversation:[e?e.conversation:null,[D.required]]})}validatorTriggers(){return["useSystemSettings"]}updateValidators(e){this.slackConfigForm.get("useSystemSettings").value?this.slackConfigForm.get("botToken").clearValidators():this.slackConfigForm.get("botToken").setValidators([D.required]),this.slackConfigForm.get("botToken").updateValueAndValidity({emitEvent:e})}}e("SlackConfigComponent",Un),Un.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Un,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Un.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Un,selector:"tb-external-node-slack-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.message-template\n \n \n {{ \'tb.rulenode.message-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.use-system-slack-settings\' | translate }}\n \n \n tb.rulenode.slack-api-token\n \n \n {{ \'tb.rulenode.slack-api-token-required\' | translate }}\n \n \n \n \n \n {{ slackChanelTypesTranslateMap.get(slackChanelType) | translate }}\n \n \n \n \n
\n',styles:[":host .tb-title{display:block;padding-bottom:6px}:host ::ng-deep .mat-mdc-radio-group{display:flex;flex-direction:row;margin-bottom:22px;gap:12px}:host ::ng-deep .mat-mdc-radio-group .mat-mdc-radio-button{flex:1 1 100%;padding:4px;border:1px solid rgba(0,0,0,.12);border-radius:6px}@media screen and (max-width: 599px){:host ::ng-deep .mat-mdc-radio-group{flex-direction:column}}\n"],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:ze.MatRadioGroup,selector:"mat-radio-group",exportAs:["matRadioGroup"]},{kind:"component",type:ze.MatRadioButton,selector:"mat-radio-button",inputs:["disableRipple","tabIndex"],exportAs:["matRadioButton"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:je.SlackConversationAutocompleteComponent,selector:"tb-slack-conversation-autocomplete",inputs:["labelText","requiredText","required","disabled","slackChanelType","token"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Un,decorators:[{type:n,args:[{selector:"tb-external-node-slack-config",template:'
\n \n tb.rulenode.message-template\n \n \n {{ \'tb.rulenode.message-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.use-system-slack-settings\' | translate }}\n \n \n tb.rulenode.slack-api-token\n \n \n {{ \'tb.rulenode.slack-api-token-required\' | translate }}\n \n \n \n \n \n {{ slackChanelTypesTranslateMap.get(slackChanelType) | translate }}\n \n \n \n \n
\n',styles:[":host .tb-title{display:block;padding-bottom:6px}:host ::ng-deep .mat-mdc-radio-group{display:flex;flex-direction:row;margin-bottom:22px;gap:12px}:host ::ng-deep .mat-mdc-radio-group .mat-mdc-radio-button{flex:1 1 100%;padding:4px;border:1px solid rgba(0,0,0,.12);border-radius:6px}@media screen and (max-width: 599px){:host ::ng-deep .mat-mdc-radio-group{flex-direction:column}}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]}});class _n extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.snsConfigForm}onConfigurationSet(e){this.snsConfigForm=this.fb.group({topicArnPattern:[e?e.topicArnPattern:null,[D.required]],accessKeyId:[e?e.accessKeyId:null,[D.required]],secretAccessKey:[e?e.secretAccessKey:null,[D.required]],region:[e?e.region:null,[D.required]]})}}e("SnsConfigComponent",_n),_n.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:_n,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),_n.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:_n,selector:"tb-external-node-sns-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.topic-arn-pattern\n \n \n {{ \'tb.rulenode.topic-arn-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.aws-access-key-id\n \n \n {{ \'tb.rulenode.aws-access-key-id-required\' | translate }}\n \n \n \n tb.rulenode.aws-secret-access-key\n \n \n {{ \'tb.rulenode.aws-secret-access-key-required\' | translate }}\n \n \n \n tb.rulenode.aws-region\n \n \n {{ \'tb.rulenode.aws-region-required\' | translate }}\n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:_n,decorators:[{type:n,args:[{selector:"tb-external-node-sns-config",template:'
\n \n tb.rulenode.topic-arn-pattern\n \n \n {{ \'tb.rulenode.topic-arn-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.aws-access-key-id\n \n \n {{ \'tb.rulenode.aws-access-key-id-required\' | translate }}\n \n \n \n tb.rulenode.aws-secret-access-key\n \n \n {{ \'tb.rulenode.aws-secret-access-key-required\' | translate }}\n \n \n \n tb.rulenode.aws-region\n \n \n {{ \'tb.rulenode.aws-region-required\' | translate }}\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Hn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.sqsQueueType=kt,this.sqsQueueTypes=Object.keys(kt),this.sqsQueueTypeTranslationsMap=Lt}configForm(){return this.sqsConfigForm}onConfigurationSet(e){this.sqsConfigForm=this.fb.group({queueType:[e?e.queueType:null,[D.required]],queueUrlPattern:[e?e.queueUrlPattern:null,[D.required]],delaySeconds:[e?e.delaySeconds:null,[D.min(0),D.max(900)]],messageAttributes:[e?e.messageAttributes:null,[]],accessKeyId:[e?e.accessKeyId:null,[D.required]],secretAccessKey:[e?e.secretAccessKey:null,[D.required]],region:[e?e.region:null,[D.required]]})}}e("SqsConfigComponent",Hn),Hn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Hn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Hn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Hn,selector:"tb-external-node-sqs-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.queue-type\n \n \n {{ sqsQueueTypeTranslationsMap.get(type) | translate }}\n \n \n \n \n tb.rulenode.queue-url-pattern\n \n \n {{ \'tb.rulenode.queue-url-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.delay-seconds\n \n \n {{ \'tb.rulenode.min-delay-seconds-message\' | translate }}\n \n \n {{ \'tb.rulenode.max-delay-seconds-message\' | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.aws-access-key-id\n \n \n {{ \'tb.rulenode.aws-access-key-id-required\' | translate }}\n \n \n \n tb.rulenode.aws-secret-access-key\n \n \n {{ \'tb.rulenode.aws-secret-access-key-required\' | translate }}\n \n \n \n tb.rulenode.aws-region\n \n \n {{ \'tb.rulenode.aws-region-required\' | translate }}\n \n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:Xt,selector:"tb-kv-map-config-old",inputs:["disabled","uniqueKeyValuePairValidator","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","required"]},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Hn,decorators:[{type:n,args:[{selector:"tb-external-node-sqs-config",template:'
\n \n tb.rulenode.queue-type\n \n \n {{ sqsQueueTypeTranslationsMap.get(type) | translate }}\n \n \n \n \n tb.rulenode.queue-url-pattern\n \n \n {{ \'tb.rulenode.queue-url-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.delay-seconds\n \n \n {{ \'tb.rulenode.min-delay-seconds-message\' | translate }}\n \n \n {{ \'tb.rulenode.max-delay-seconds-message\' | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.aws-access-key-id\n \n \n {{ \'tb.rulenode.aws-access-key-id-required\' | translate }}\n \n \n \n tb.rulenode.aws-secret-access-key\n \n \n {{ \'tb.rulenode.aws-secret-access-key-required\' | translate }}\n \n \n \n tb.rulenode.aws-region\n \n \n {{ \'tb.rulenode.aws-region-required\' | translate }}\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class zn{}e("RulenodeCoreConfigExternalModule",zn),zn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:zn,deps:[],target:t.ɵɵFactoryTarget.NgModule}),zn.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:zn,declarations:[_n,Hn,wn,Dn,Vn,Pn,Rn,On,Bn,En,Kn,Un],imports:[O,T,Me,vn],exports:[_n,Hn,wn,Dn,Vn,Pn,Rn,On,Bn,En,Kn,Un]}),zn.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:zn,imports:[O,T,Me,vn]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:zn,decorators:[{type:l,args:[{declarations:[_n,Hn,wn,Dn,Vn,Pn,Rn,On,Bn,En,Kn,Un],imports:[O,T,Me,vn],exports:[_n,Hn,wn,Dn,Vn,Pn,Rn,On,Bn,En,Kn,Un]}]}]});class jn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.searchText=""}configForm(){return this.alarmStatusConfigForm}prepareInputConfig(e){return{alarmStatusList:X(e?.alarmStatusList)?e.alarmStatusList:null}}onConfigurationSet(e){this.alarmStatusConfigForm=this.fb.group({alarmStatusList:[e.alarmStatusList,[D.required]]})}}e("CheckAlarmStatusComponent",jn),jn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:jn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),jn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:jn,selector:"tb-filter-node-check-alarm-status-config",usesInheritance:!0,ngImport:t,template:'
\n
\n
tb.rulenode.alarm-status
\n
\n tb.rulenode.alarm-required\n
\n
\n \n
\n\n\n\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:hn,selector:"tb-alarm-status-select"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:jn,decorators:[{type:n,args:[{selector:"tb-filter-node-check-alarm-status-config",template:'
\n
\n
tb.rulenode.alarm-status
\n
\n tb.rulenode.alarm-required\n
\n
\n \n
\n\n\n\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]}});class Qn extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.checkMessageConfigForm}prepareInputConfig(e){return{messageNames:X(e?.messageNames)?e.messageNames:null,metadataNames:X(e?.metadataNames)?e.metadataNames:null,checkAllKeys:!!X(e?.checkAllKeys)&&e.checkAllKeys}}atLeastOne(e,t=null){return n=>{t||(t=Object.keys(n.controls));return n?.controls&&t.some((t=>!e(n.controls[t])))?null:{atLeastOne:!0}}}onConfigurationSet(e){this.checkMessageConfigForm=this.fb.group({messageNames:[e.messageNames,[]],metadataNames:[e.metadataNames,[]],checkAllKeys:[e.checkAllKeys,[]]},{validators:this.atLeastOne(D.required,["messageNames","metadataNames"])})}touched(){this.checkMessageConfigForm.markAsTouched(),this.checkMessageConfigForm.updateValueAndValidity({emitEvent:!0})}}e("CheckMessageConfigComponent",Qn),Qn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Qn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Qn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Qn,selector:"tb-filter-node-check-message-config",usesInheritance:!0,ngImport:t,template:'
\n
\n
tb.rulenode.fields-to-check
\n
\n tb.rulenode.at-least-one-field-required\n
\n
\n \n help\n \n \n help\n \n
\n \n {{ \'tb.rulenode.check-all-keys\' | translate }}\n \n
\n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"component",type:Re.StringItemsListComponent,selector:"tb-string-items-list",inputs:["required","disabled","label","placeholder","hint","requiredText","floatLabel","appearance","editable","subscriptSizing","predefinedValues"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Qn,decorators:[{type:n,args:[{selector:"tb-filter-node-check-message-config",template:'
\n
\n
tb.rulenode.fields-to-check
\n
\n tb.rulenode.at-least-one-field-required\n
\n
\n \n help\n \n \n help\n \n
\n \n {{ \'tb.rulenode.check-all-keys\' | translate }}\n \n
\n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]}});class $n extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.entitySearchDirection=Object.values(g),this.entitySearchDirectionTranslationsMap=y}configForm(){return this.checkRelationConfigForm}prepareInputConfig(e){return{checkForSingleEntity:!!X(e?.checkForSingleEntity)&&e.checkForSingleEntity,direction:X(e?.direction)?e.direction:null,entityType:X(e?.entityType)?e.entityType:null,entityId:X(e?.entityId)?e.entityId:null,relationType:X(e?.relationType)?e.relationType:null}}onConfigurationSet(e){this.checkRelationConfigForm=this.fb.group({checkForSingleEntity:[e.checkForSingleEntity,[]],direction:[e.direction,[]],entityType:[e.entityType,e&&e.checkForSingleEntity?[D.required]:[]],entityId:[e.entityId,e&&e.checkForSingleEntity?[D.required]:[]],relationType:[e.relationType,[D.required]]})}validatorTriggers(){return["checkForSingleEntity"]}updateValidators(e){const t=this.checkRelationConfigForm.get("checkForSingleEntity").value;this.checkRelationConfigForm.get("entityType").setValidators(t?[D.required]:[]),this.checkRelationConfigForm.get("entityType").updateValueAndValidity({emitEvent:e}),this.checkRelationConfigForm.get("entityId").setValidators(t?[D.required]:[]),this.checkRelationConfigForm.get("entityId").updateValueAndValidity({emitEvent:e})}}e("CheckRelationConfigComponent",$n),$n.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:$n,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),$n.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:$n,selector:"tb-filter-node-check-relation-config",usesInheritance:!0,ngImport:t,template:'
\n
tb.rulenode.relation-search-parameters
\n
\n \n {{ \'relation.direction\' | translate }}\n \n \n {{ entitySearchDirectionTranslationsMap.get(direction) | translate }}\n \n \n \n \n \n
\n \n {{ \'tb.rulenode.check-relation-to-specific-entity\' | translate }}\n \n
\n
\n \n \n \n \n
\n
\n
\n',styles:[":host .slide-toggle{margin-bottom:18px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:Qe.EntityAutocompleteComponent,selector:"tb-entity-autocomplete",inputs:["entityType","entitySubtype","excludeEntityIds","labelText","requiredText","useFullEntityId","appearance","required","disabled"],outputs:["entityChanged"]},{kind:"component",type:de.EntityTypeSelectComponent,selector:"tb-entity-type-select",inputs:["allowedEntityTypes","useAliasEntityTypes","filterAllowedEntityTypes","showLabel","required","disabled"]},{kind:"component",type:De.RelationTypeAutocompleteComponent,selector:"tb-relation-type-autocomplete",inputs:["showLabel","additionalClasses","appearance","required","disabled","subscriptSizing"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:$n,decorators:[{type:n,args:[{selector:"tb-filter-node-check-relation-config",template:'
\n
tb.rulenode.relation-search-parameters
\n
\n \n {{ \'relation.direction\' | translate }}\n \n \n {{ entitySearchDirectionTranslationsMap.get(direction) | translate }}\n \n \n \n \n \n
\n \n {{ \'tb.rulenode.check-relation-to-specific-entity\' | translate }}\n \n
\n
\n \n \n \n \n
\n
\n
\n',styles:[":host .slide-toggle{margin-bottom:18px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Jn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.perimeterType=lt,this.perimeterTypes=Object.values(lt),this.perimeterTypeTranslationMap=st,this.rangeUnits=Object.values(pt),this.rangeUnitTranslationMap=dt,this.defaultPaddingEnable=!0}configForm(){return this.geoFilterConfigForm}prepareInputConfig(e){return{latitudeKeyName:X(e?.latitudeKeyName)?e.latitudeKeyName:null,longitudeKeyName:X(e?.longitudeKeyName)?e.longitudeKeyName:null,perimeterType:X(e?.perimeterType)?e.perimeterType:null,fetchPerimeterInfoFromMessageMetadata:!!X(e?.fetchPerimeterInfoFromMessageMetadata)&&e.fetchPerimeterInfoFromMessageMetadata,perimeterKeyName:X(e?.perimeterKeyName)?e.perimeterKeyName:null,centerLatitude:X(e?.centerLatitude)?e.centerLatitude:null,centerLongitude:X(e?.centerLongitude)?e.centerLongitude:null,range:X(e?.range)?e.range:null,rangeUnit:X(e?.rangeUnit)?e.rangeUnit:null,polygonsDefinition:X(e?.polygonsDefinition)?e.polygonsDefinition:null}}onConfigurationSet(e){this.geoFilterConfigForm=this.fb.group({latitudeKeyName:[e.latitudeKeyName,[D.required]],longitudeKeyName:[e.longitudeKeyName,[D.required]],perimeterType:[e.perimeterType,[D.required]],fetchPerimeterInfoFromMessageMetadata:[e.fetchPerimeterInfoFromMessageMetadata,[]],perimeterKeyName:[e.perimeterKeyName,[]],centerLatitude:[e.centerLatitude,[]],centerLongitude:[e.centerLongitude,[]],range:[e.range,[]],rangeUnit:[e.rangeUnit,[]],polygonsDefinition:[e.polygonsDefinition,[]]})}validatorTriggers(){return["fetchPerimeterInfoFromMessageMetadata","perimeterType"]}updateValidators(e){const t=this.geoFilterConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value,n=this.geoFilterConfigForm.get("perimeterType").value;t?this.geoFilterConfigForm.get("perimeterKeyName").setValidators([D.required]):this.geoFilterConfigForm.get("perimeterKeyName").setValidators([]),t||n!==lt.CIRCLE?(this.geoFilterConfigForm.get("centerLatitude").setValidators([]),this.geoFilterConfigForm.get("centerLongitude").setValidators([]),this.geoFilterConfigForm.get("range").setValidators([]),this.geoFilterConfigForm.get("rangeUnit").setValidators([]),this.defaultPaddingEnable=!0):(this.geoFilterConfigForm.get("centerLatitude").setValidators([D.required,D.min(-90),D.max(90)]),this.geoFilterConfigForm.get("centerLongitude").setValidators([D.required,D.min(-180),D.max(180)]),this.geoFilterConfigForm.get("range").setValidators([D.required,D.min(0)]),this.geoFilterConfigForm.get("rangeUnit").setValidators([D.required]),this.defaultPaddingEnable=!1),t||n!==lt.POLYGON?this.geoFilterConfigForm.get("polygonsDefinition").setValidators([]):this.geoFilterConfigForm.get("polygonsDefinition").setValidators([D.required]),this.geoFilterConfigForm.get("perimeterKeyName").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("centerLatitude").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("centerLongitude").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("range").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("rangeUnit").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("polygonsDefinition").updateValueAndValidity({emitEvent:e})}}e("GpsGeoFilterConfigComponent",Jn),Jn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Jn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Jn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Jn,selector:"tb-filter-node-gps-geofencing-config",usesInheritance:!0,ngImport:t,template:'
\n
\n
tb.rulenode.coordinate-field-names
\n
\n
\n \n {{ \'tb.rulenode.latitude-field-name\' | translate }}\n \n \n {{ \'tb.rulenode.latitude-field-name-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.longitude-field-name\' | translate }}\n \n \n {{ \'tb.rulenode.longitude-field-name-required\' | translate }}\n \n \n
\n
{{ \'tb.rulenode.coordinate-field-hint\' | translate }}
\n
\n
\n
\n
tb.rulenode.geofence-configuration
\n
\n \n {{ \'tb.rulenode.perimeter-type\' | translate }}\n \n \n {{ perimeterTypeTranslationMap.get(type) | translate }}\n \n \n \n
\n \n {{ \'tb.rulenode.fetch-perimeter-info-from-metadata\' | translate }}\n \n
\n \n {{ \'tb.rulenode.perimeter-key-name\' | translate }}\n \n \n {{ \'tb.rulenode.perimeter-key-name-required\' | translate }}\n \n {{ \'tb.rulenode.perimeter-key-name-hint\' | translate }}\n \n
\n
\n \n {{ \'tb.rulenode.circle-center-latitude\' | translate }}\n \n \n {{ \'tb.rulenode.circle-center-latitude-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.circle-center-longitude\' | translate }}\n \n \n {{ \'tb.rulenode.circle-center-longitude-required\' | translate }}\n \n \n
\n
\n \n {{ \'tb.rulenode.range\' | translate }}\n \n \n {{ \'tb.rulenode.range-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.range-units\' | translate }}\n \n \n {{ rangeUnitTranslationMap.get(type) | translate }}\n \n \n \n {{ \'tb.rulenode.range-units-required\' | translate }}\n \n \n
\n
\n \n {{ \'tb.rulenode.polygon-definition\' | translate }}\n \n {{ \'tb.rulenode.polygon-definition-hint\' | translate }}\n \n {{ \'tb.rulenode.polygon-definition-required\' | translate }}\n \n \n
\n
\n
\n',styles:[":host .slide-toggle{margin-bottom:18px}:host .tb-hint{padding:0}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Jn,decorators:[{type:n,args:[{selector:"tb-filter-node-gps-geofencing-config",template:'
\n
\n
tb.rulenode.coordinate-field-names
\n
\n
\n \n {{ \'tb.rulenode.latitude-field-name\' | translate }}\n \n \n {{ \'tb.rulenode.latitude-field-name-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.longitude-field-name\' | translate }}\n \n \n {{ \'tb.rulenode.longitude-field-name-required\' | translate }}\n \n \n
\n
{{ \'tb.rulenode.coordinate-field-hint\' | translate }}
\n
\n
\n
\n
tb.rulenode.geofence-configuration
\n
\n \n {{ \'tb.rulenode.perimeter-type\' | translate }}\n \n \n {{ perimeterTypeTranslationMap.get(type) | translate }}\n \n \n \n
\n \n {{ \'tb.rulenode.fetch-perimeter-info-from-metadata\' | translate }}\n \n
\n \n {{ \'tb.rulenode.perimeter-key-name\' | translate }}\n \n \n {{ \'tb.rulenode.perimeter-key-name-required\' | translate }}\n \n {{ \'tb.rulenode.perimeter-key-name-hint\' | translate }}\n \n
\n
\n \n {{ \'tb.rulenode.circle-center-latitude\' | translate }}\n \n \n {{ \'tb.rulenode.circle-center-latitude-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.circle-center-longitude\' | translate }}\n \n \n {{ \'tb.rulenode.circle-center-longitude-required\' | translate }}\n \n \n
\n
\n \n {{ \'tb.rulenode.range\' | translate }}\n \n \n {{ \'tb.rulenode.range-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.range-units\' | translate }}\n \n \n {{ rangeUnitTranslationMap.get(type) | translate }}\n \n \n \n {{ \'tb.rulenode.range-units-required\' | translate }}\n \n \n
\n
\n \n {{ \'tb.rulenode.polygon-definition\' | translate }}\n \n {{ \'tb.rulenode.polygon-definition-hint\' | translate }}\n \n {{ \'tb.rulenode.polygon-definition-required\' | translate }}\n \n \n
\n
\n
\n',styles:[":host .slide-toggle{margin-bottom:18px}:host .tb-hint{padding:0}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]}});class Yn extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.messageTypeConfigForm}prepareInputConfig(e){return{messageTypes:X(e?.messageTypes)?e.messageTypes:null}}onConfigurationSet(e){this.messageTypeConfigForm=this.fb.group({messageTypes:[e.messageTypes,[D.required]]})}}e("MessageTypeConfigComponent",Yn),Yn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Yn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Yn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Yn,selector:"tb-filter-node-message-type-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n
\n',dependencies:[{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:cn,selector:"tb-message-types-config",inputs:["required","label","placeholder","disabled"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Yn,decorators:[{type:n,args:[{selector:"tb-filter-node-message-type-config",template:'
\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Wn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.allowedEntityTypes=[x.DEVICE,x.ASSET,x.ENTITY_VIEW,x.TENANT,x.CUSTOMER,x.USER,x.DASHBOARD,x.RULE_CHAIN,x.RULE_NODE]}configForm(){return this.originatorTypeConfigForm}prepareInputConfig(e){return{originatorTypes:X(e?.originatorTypes)?e.originatorTypes:null}}onConfigurationSet(e){this.originatorTypeConfigForm=this.fb.group({originatorTypes:[e.originatorTypes,[D.required]]})}}e("OriginatorTypeConfigComponent",Wn),Wn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Wn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Wn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Wn,selector:"tb-filter-node-originator-type-config",usesInheritance:!0,ngImport:t,template:'
\n \n help\n \n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"component",type:$e.EntityTypeListComponent,selector:"tb-entity-type-list",inputs:["required","additionalClasses","appearance","label","floatLabel","disabled","subscriptSizing","allowedEntityTypes","emptyInputPlaceholder","filledInputPlaceholder","ignoreAuthorityFilter"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Wn,decorators:[{type:n,args:[{selector:"tb-filter-node-originator-type-config",template:'
\n \n help\n \n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Xn extends s{constructor(e,t,n,o){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=n,this.translate=o,this.tbelEnabled=Y(this.store).tbelEnabled,this.scriptLanguage=d,this.changeScript=new r,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-filter-function"}configForm(){return this.scriptConfigForm}onConfigurationSet(e){this.scriptConfigForm=this.fb.group({scriptLang:[e.scriptLang,[D.required]],jsScript:[e.jsScript,[]],tbelScript:[e.tbelScript,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.scriptConfigForm.get("scriptLang").value;t!==d.TBEL||this.tbelEnabled||(t=d.JS,this.scriptConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.scriptConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.scriptConfigForm.get("jsScript").setValidators(t===d.JS?[D.required]:[]),this.scriptConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.scriptConfigForm.get("tbelScript").setValidators(t===d.TBEL?[D.required]:[]),this.scriptConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=d.JS)),{scriptLang:X(e?.scriptLang)?e.scriptLang:d.JS,jsScript:X(e?.jsScript)?e.jsScript:null,tbelScript:X(e?.tbelScript)?e.tbelScript:null}}testScript(e){const t=this.scriptConfigForm.get("scriptLang").value,n=t===d.JS?"jsScript":"tbelScript",r=t===d.JS?"rulenode/filter_node_script_fn":"rulenode/tbel/filter_node_script_fn",o=this.scriptConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(o,"filter",this.translate.instant("tb.rulenode.filter"),"Filter",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.scriptConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.scriptConfigForm.get("scriptLang").value===d.JS&&this.jsFuncComponent.validateOnSubmit()}}e("ScriptConfigComponent",Xn),Xn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Xn,deps:[{token:G.Store},{token:E.UntypedFormBuilder},{token:W.NodeScriptTestService},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),Xn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Xn,selector:"tb-filter-node-script-config",viewQueries:[{propertyName:"jsFuncComponent",first:!0,predicate:["jsFuncComponent"],descendants:!0},{propertyName:"tbelFuncComponent",first:!0,predicate:["tbelFuncComponent"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n \n \n \n \n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ne.JsFuncComponent,selector:"tb-js-func",inputs:["functionTitle","functionName","functionArgs","validationArgs","resultType","disabled","fillHeight","minHeight","editorCompleter","globalVariables","disableUndefinedCheck","helpId","scriptLanguage","noValidate","required"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:ie.TbScriptLangComponent,selector:"tb-script-lang",inputs:["disabled"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Xn,decorators:[{type:n,args:[{selector:"tb-filter-node-script-config",template:'
\n \n \n \n \n \n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder},{type:W.NodeScriptTestService},{type:H.TranslateService}]},propDecorators:{jsFuncComponent:[{type:o,args:["jsFuncComponent",{static:!1}]}],tbelFuncComponent:[{type:o,args:["tbelFuncComponent",{static:!1}]}]}});class Zn extends s{constructor(e,t,n,o){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=n,this.translate=o,this.tbelEnabled=Y(this.store).tbelEnabled,this.scriptLanguage=d,this.changeScript=new r,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-switch-function"}configForm(){return this.switchConfigForm}onConfigurationSet(e){this.switchConfigForm=this.fb.group({scriptLang:[e.scriptLang,[D.required]],jsScript:[e.jsScript,[]],tbelScript:[e.tbelScript,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.switchConfigForm.get("scriptLang").value;t!==d.TBEL||this.tbelEnabled||(t=d.JS,this.switchConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.switchConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.switchConfigForm.get("jsScript").setValidators(t===d.JS?[D.required]:[]),this.switchConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.switchConfigForm.get("tbelScript").setValidators(t===d.TBEL?[D.required]:[]),this.switchConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=d.JS)),{scriptLang:X(e?.scriptLang)?e.scriptLang:d.JS,jsScript:X(e?.jsScript)?e.jsScript:null,tbelScript:X(e?.tbelScript)?e.tbelScript:null}}testScript(e){const t=this.switchConfigForm.get("scriptLang").value,n=t===d.JS?"jsScript":"tbelScript",r=t===d.JS?"rulenode/switch_node_script_fn":"rulenode/tbel/switch_node_script_fn",o=this.switchConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(o,"switch",this.translate.instant("tb.rulenode.switch"),"Switch",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.switchConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.switchConfigForm.get("scriptLang").value===d.JS&&this.jsFuncComponent.validateOnSubmit()}}e("SwitchConfigComponent",Zn),Zn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Zn,deps:[{token:G.Store},{token:E.UntypedFormBuilder},{token:W.NodeScriptTestService},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),Zn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Zn,selector:"tb-filter-node-switch-config",viewQueries:[{propertyName:"jsFuncComponent",first:!0,predicate:["jsFuncComponent"],descendants:!0},{propertyName:"tbelFuncComponent",first:!0,predicate:["tbelFuncComponent"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n \n \n \n \n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ne.JsFuncComponent,selector:"tb-js-func",inputs:["functionTitle","functionName","functionArgs","validationArgs","resultType","disabled","fillHeight","minHeight","editorCompleter","globalVariables","disableUndefinedCheck","helpId","scriptLanguage","noValidate","required"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:ie.TbScriptLangComponent,selector:"tb-script-lang",inputs:["disabled"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Zn,decorators:[{type:n,args:[{selector:"tb-filter-node-switch-config",template:'
\n \n \n \n \n \n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder},{type:W.NodeScriptTestService},{type:H.TranslateService}]},propDecorators:{jsFuncComponent:[{type:o,args:["jsFuncComponent",{static:!1}]}],tbelFuncComponent:[{type:o,args:["tbelFuncComponent",{static:!1}]}]}});class er{}e("RuleNodeCoreConfigFilterModule",er),er.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:er,deps:[],target:t.ɵɵFactoryTarget.NgModule}),er.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:er,declarations:[Qn,$n,Jn,Yn,Wn,Xn,Zn,jn],imports:[O,T,vn],exports:[Qn,$n,Jn,Yn,Wn,Xn,Zn,jn]}),er.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:er,imports:[O,T,vn]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:er,decorators:[{type:l,args:[{declarations:[Qn,$n,Jn,Yn,Wn,Xn,Zn,jn],imports:[O,T,vn],exports:[Qn,$n,Jn,Yn,Wn,Xn,Zn,jn]}]}]});class tr extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.originatorSource=at,this.originatorSources=Object.keys(at),this.originatorSourceTranslationMap=it,this.allowedEntityTypes=[x.DEVICE,x.ASSET,x.ENTITY_VIEW,x.USER,x.EDGE]}configForm(){return this.changeOriginatorConfigForm}onConfigurationSet(e){this.changeOriginatorConfigForm=this.fb.group({originatorSource:[e?e.originatorSource:null,[D.required]],entityType:[e?e.entityType:null,[]],entityNamePattern:[e?e.entityNamePattern:null,[]],relationsQuery:[e?e.relationsQuery:null,[]]})}validatorTriggers(){return["originatorSource"]}updateValidators(e){const t=this.changeOriginatorConfigForm.get("originatorSource").value;t===at.RELATED?this.changeOriginatorConfigForm.get("relationsQuery").setValidators([D.required]):this.changeOriginatorConfigForm.get("relationsQuery").setValidators([]),t===at.ENTITY?(this.changeOriginatorConfigForm.get("entityType").setValidators([D.required]),this.changeOriginatorConfigForm.get("entityNamePattern").setValidators([D.required,D.pattern(/.*\S.*/)])):(this.changeOriginatorConfigForm.get("entityType").patchValue(null,{emitEvent:e}),this.changeOriginatorConfigForm.get("entityNamePattern").patchValue(null,{emitEvent:e}),this.changeOriginatorConfigForm.get("entityType").setValidators([]),this.changeOriginatorConfigForm.get("entityNamePattern").setValidators([])),this.changeOriginatorConfigForm.get("relationsQuery").updateValueAndValidity({emitEvent:e}),this.changeOriginatorConfigForm.get("entityType").updateValueAndValidity({emitEvent:e}),this.changeOriginatorConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e})}}e("ChangeOriginatorConfigComponent",tr),tr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:tr,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),tr.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:tr,selector:"tb-transformation-node-change-originator-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.originator-source\n \n \n {{ originatorSourceTranslationMap.get(source) | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.entity-name-pattern\n \n \n {{ \'tb.rulenode.entity-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n
\n \n \n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:de.EntityTypeSelectComponent,selector:"tb-entity-type-select",inputs:["allowedEntityTypes","useAliasEntityTypes","filterAllowedEntityTypes","showLabel","required","disabled"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:xn,selector:"tb-relations-query-config-old",inputs:["disabled","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:tr,decorators:[{type:n,args:[{selector:"tb-transformation-node-change-originator-config",template:'
\n \n tb.rulenode.originator-source\n \n \n {{ originatorSourceTranslationMap.get(source) | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.entity-name-pattern\n \n \n {{ \'tb.rulenode.entity-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n
\n \n \n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class nr extends s{constructor(e,t,n,o){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=n,this.translate=o,this.tbelEnabled=Y(this.store).tbelEnabled,this.scriptLanguage=d,this.changeScript=new r,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-transformer-function"}configForm(){return this.scriptConfigForm}onConfigurationSet(e){this.scriptConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:d.JS,[D.required]],jsScript:[e?e.jsScript:null,[D.required]],tbelScript:[e?e.tbelScript:null,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.scriptConfigForm.get("scriptLang").value;t!==d.TBEL||this.tbelEnabled||(t=d.JS,this.scriptConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.scriptConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.scriptConfigForm.get("jsScript").setValidators(t===d.JS?[D.required]:[]),this.scriptConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.scriptConfigForm.get("tbelScript").setValidators(t===d.TBEL?[D.required]:[]),this.scriptConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=d.JS)),e}testScript(e){const t=this.scriptConfigForm.get("scriptLang").value,n=t===d.JS?"jsScript":"tbelScript",r=t===d.JS?"rulenode/transformation_node_script_fn":"rulenode/tbel/transformation_node_script_fn",o=this.scriptConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(o,"update",this.translate.instant("tb.rulenode.transformer"),"Transform",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.scriptConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.scriptConfigForm.get("scriptLang").value===d.JS&&this.jsFuncComponent.validateOnSubmit()}}e("TransformScriptConfigComponent",nr),nr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:nr,deps:[{token:G.Store},{token:E.UntypedFormBuilder},{token:W.NodeScriptTestService},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),nr.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:nr,selector:"tb-transformation-node-script-config",viewQueries:[{propertyName:"jsFuncComponent",first:!0,predicate:["jsFuncComponent"],descendants:!0},{propertyName:"tbelFuncComponent",first:!0,predicate:["tbelFuncComponent"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n \n \n \n \n \n \n
\n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ne.JsFuncComponent,selector:"tb-js-func",inputs:["functionTitle","functionName","functionArgs","validationArgs","resultType","disabled","fillHeight","minHeight","editorCompleter","globalVariables","disableUndefinedCheck","helpId","scriptLanguage","noValidate","required"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:ie.TbScriptLangComponent,selector:"tb-script-lang",inputs:["disabled"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:nr,decorators:[{type:n,args:[{selector:"tb-transformation-node-script-config",template:'
\n \n \n \n \n \n \n \n
\n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder},{type:W.NodeScriptTestService},{type:H.TranslateService}]},propDecorators:{jsFuncComponent:[{type:o,args:["jsFuncComponent",{static:!1}]}],tbelFuncComponent:[{type:o,args:["tbelFuncComponent",{static:!1}]}]}});class rr extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.mailBodyTypes=[{name:"tb.mail-body-type.plain-text",value:"false"},{name:"tb.mail-body-type.html",value:"true"},{name:"tb.mail-body-type.dynamic",value:"dynamic"}]}configForm(){return this.toEmailConfigForm}onConfigurationSet(e){this.toEmailConfigForm=this.fb.group({fromTemplate:[e?e.fromTemplate:null,[D.required]],toTemplate:[e?e.toTemplate:null,[D.required]],ccTemplate:[e?e.ccTemplate:null,[]],bccTemplate:[e?e.bccTemplate:null,[]],subjectTemplate:[e?e.subjectTemplate:null,[D.required]],mailBodyType:[e?e.mailBodyType:null],isHtmlTemplate:[e?e.isHtmlTemplate:null,[D.required]],bodyTemplate:[e?e.bodyTemplate:null,[D.required]]})}updateValidators(e){"dynamic"===this.toEmailConfigForm.get("mailBodyType").value?this.toEmailConfigForm.get("isHtmlTemplate").enable({emitEvent:!1}):this.toEmailConfigForm.get("isHtmlTemplate").disable({emitEvent:!1}),this.toEmailConfigForm.get("isHtmlTemplate").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["mailBodyType"]}}e("ToEmailConfigComponent",rr),rr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:rr,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),rr.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:rr,selector:"tb-transformation-node-to-email-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.from-template\n \n \n {{ \'tb.rulenode.from-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.to-template\n \n \n {{ \'tb.rulenode.to-template-required\' | translate }}\n \n \n \n \n tb.rulenode.cc-template\n \n \n \n \n tb.rulenode.bcc-template\n \n \n \n \n tb.rulenode.subject-template\n \n \n {{ \'tb.rulenode.subject-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.mail-body-type\n \n \n {{ type.name | translate }}\n \n \n \n \n tb.rulenode.dynamic-mail-body-type\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.body-template\n \n \n {{ \'tb.rulenode.body-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:rr,decorators:[{type:n,args:[{selector:"tb-transformation-node-to-email-config",template:'
\n \n tb.rulenode.from-template\n \n \n {{ \'tb.rulenode.from-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.to-template\n \n \n {{ \'tb.rulenode.to-template-required\' | translate }}\n \n \n \n \n tb.rulenode.cc-template\n \n \n \n \n tb.rulenode.bcc-template\n \n \n \n \n tb.rulenode.subject-template\n \n \n {{ \'tb.rulenode.subject-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.mail-body-type\n \n \n {{ type.name | translate }}\n \n \n \n \n tb.rulenode.dynamic-mail-body-type\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.body-template\n \n \n {{ \'tb.rulenode.body-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class or extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.separatorKeysCodes=[le,se,me]}onConfigurationSet(e){this.copyKeysConfigForm=this.fb.group({fromMetadata:[e?e.fromMetadata:null,[D.required]],keys:[e?e.keys:null,[D.required]]})}configForm(){return this.copyKeysConfigForm}removeKey(e){const t=this.copyKeysConfigForm.get("keys").value,n=t.indexOf(e);n>=0&&(t.splice(n,1),this.copyKeysConfigForm.get("keys").patchValue(t,{emitEvent:!0}))}addKey(e){const t=e.input;let n=e.value;if((n||"").trim()){n=n.trim();let e=this.copyKeysConfigForm.get("keys").value;e&&-1!==e.indexOf(n)||(e||(e=[]),e.push(n),this.copyKeysConfigForm.get("keys").patchValue(e,{emitEvent:!0}))}t&&(t.value="")}}e("CopyKeysConfigComponent",or),or.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:or,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),or.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:or,selector:"tb-transformation-node-copy-keys-config",usesInheritance:!0,ngImport:t,template:'
\n
{{\'tb.rulenode.copy-from\' | translate}}
\n \n \n {{\'tb.rulenode.data-to-metadata\' | translate}}\n \n \n {{\'tb.rulenode.metadata-to-data\' | translate}}\n \n \n \n \n \n {{key}}\n close\n \n \n \n {{ \'tb.rulenode.keys-required\' | translate }}\n tb.rulenode.use-regular-expression-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:ze.MatRadioGroup,selector:"mat-radio-group",exportAs:["matRadioGroup"]},{kind:"component",type:ze.MatRadioButton,selector:"mat-radio-button",inputs:["disableRipple","tabIndex"],exportAs:["matRadioButton"]},{kind:"component",type:ue.MatChipGrid,selector:"mat-chip-grid",inputs:["tabIndex","disabled","placeholder","required","value","errorStateMatcher"],outputs:["change","valueChange"]},{kind:"directive",type:ue.MatChipInput,selector:"input[matChipInputFor]",inputs:["matChipInputFor","matChipInputAddOnBlur","matChipInputSeparatorKeyCodes","placeholder","id","disabled"],outputs:["matChipInputTokenEnd"],exportAs:["matChipInput","matChipInputFor"]},{kind:"directive",type:ue.MatChipRemove,selector:"[matChipRemove]"},{kind:"component",type:ue.MatChipRow,selector:"mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]",inputs:["color","disabled","disableRipple","tabIndex","editable"],outputs:["edited"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:or,decorators:[{type:n,args:[{selector:"tb-transformation-node-copy-keys-config",template:'
\n
{{\'tb.rulenode.copy-from\' | translate}}
\n \n \n {{\'tb.rulenode.data-to-metadata\' | translate}}\n \n \n {{\'tb.rulenode.metadata-to-data\' | translate}}\n \n \n \n \n \n {{key}}\n close\n \n \n \n {{ \'tb.rulenode.keys-required\' | translate }}\n tb.rulenode.use-regular-expression-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class ar extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.renameKeysConfigForm}onConfigurationSet(e){this.renameKeysConfigForm=this.fb.group({fromMetadata:[e?e.fromMetadata:null,[D.required]],renameKeysMapping:[e?e.renameKeysMapping:null,[D.required]]})}}e("RenameKeysConfigComponent",ar),ar.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ar,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),ar.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:ar,selector:"tb-transformation-node-rename-keys-config",usesInheritance:!0,ngImport:t,template:'
\n
{{ \'tb.rulenode.rename-keys-in\' | translate }}
\n \n \n {{\'tb.rulenode.data\' | translate}}\n \n \n {{\'tb.rulenode.metadata\' | translate}}\n \n \n \n \n
\n',dependencies:[{kind:"directive",type:ze.MatRadioGroup,selector:"mat-radio-group",exportAs:["matRadioGroup"]},{kind:"component",type:ze.MatRadioButton,selector:"mat-radio-button",inputs:["disableRipple","tabIndex"],exportAs:["matRadioButton"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:Xt,selector:"tb-kv-map-config-old",inputs:["disabled","uniqueKeyValuePairValidator","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ar,decorators:[{type:n,args:[{selector:"tb-transformation-node-rename-keys-config",template:'
\n
{{ \'tb.rulenode.rename-keys-in\' | translate }}
\n \n \n {{\'tb.rulenode.data\' | translate}}\n \n \n {{\'tb.rulenode.metadata\' | translate}}\n \n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class ir extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.jsonPathConfigForm}onConfigurationSet(e){this.jsonPathConfigForm=this.fb.group({jsonPath:[e?e.jsonPath:null,[D.required]]})}}e("NodeJsonPathConfigComponent",ir),ir.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ir,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),ir.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:ir,selector:"tb-transformation-node-json-path-config",usesInheritance:!0,ngImport:t,template:"
\n \n {{ 'tb.rulenode.json-path-expression' | translate }}\n \n {{ 'tb.rulenode.json-path-expression-hint' | translate }}\n {{ 'tb.rulenode.json-path-expression-required' | translate }}\n \n
\n\n",dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ir,decorators:[{type:n,args:[{selector:"tb-transformation-node-json-path-config",template:"
\n \n {{ 'tb.rulenode.json-path-expression' | translate }}\n \n {{ 'tb.rulenode.json-path-expression-hint' | translate }}\n {{ 'tb.rulenode.json-path-expression-required' | translate }}\n \n
\n\n"}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class lr extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.separatorKeysCodes=[le,se,me]}onConfigurationSet(e){this.deleteKeysConfigForm=this.fb.group({fromMetadata:[e?e.fromMetadata:null,[D.required]],keys:[e?e.keys:null,[D.required]]})}configForm(){return this.deleteKeysConfigForm}removeKey(e){const t=this.deleteKeysConfigForm.get("keys").value,n=t.indexOf(e);n>=0&&(t.splice(n,1),this.deleteKeysConfigForm.get("keys").patchValue(t,{emitEvent:!0}))}addKey(e){const t=e.input;let n=e.value;if((n||"").trim()){n=n.trim();let e=this.deleteKeysConfigForm.get("keys").value;e&&-1!==e.indexOf(n)||(e||(e=[]),e.push(n),this.deleteKeysConfigForm.get("keys").patchValue(e,{emitEvent:!0}))}t&&(t.value="")}}e("DeleteKeysConfigComponent",lr),lr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:lr,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),lr.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:lr,selector:"tb-transformation-node-delete-keys-config",usesInheritance:!0,ngImport:t,template:'
\n
{{\'tb.rulenode.delete-from\' | translate}}
\n \n \n {{\'tb.rulenode.data\' | translate}}\n \n \n {{\'tb.rulenode.metadata\' | translate}}\n \n \n \n \n \n {{key}}\n close\n \n \n \n {{ \'tb.rulenode.keys-required\' | translate }}\n tb.rulenode.use-regular-expression-delete-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:ze.MatRadioGroup,selector:"mat-radio-group",exportAs:["matRadioGroup"]},{kind:"component",type:ze.MatRadioButton,selector:"mat-radio-button",inputs:["disableRipple","tabIndex"],exportAs:["matRadioButton"]},{kind:"component",type:ue.MatChipGrid,selector:"mat-chip-grid",inputs:["tabIndex","disabled","placeholder","required","value","errorStateMatcher"],outputs:["change","valueChange"]},{kind:"directive",type:ue.MatChipInput,selector:"input[matChipInputFor]",inputs:["matChipInputFor","matChipInputAddOnBlur","matChipInputSeparatorKeyCodes","placeholder","id","disabled"],outputs:["matChipInputTokenEnd"],exportAs:["matChipInput","matChipInputFor"]},{kind:"directive",type:ue.MatChipRemove,selector:"[matChipRemove]"},{kind:"component",type:ue.MatChipRow,selector:"mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]",inputs:["color","disabled","disableRipple","tabIndex","editable"],outputs:["edited"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:lr,decorators:[{type:n,args:[{selector:"tb-transformation-node-delete-keys-config",template:'
\n
{{\'tb.rulenode.delete-from\' | translate}}
\n \n \n {{\'tb.rulenode.data\' | translate}}\n \n \n {{\'tb.rulenode.metadata\' | translate}}\n \n \n \n \n \n {{key}}\n close\n \n \n \n {{ \'tb.rulenode.keys-required\' | translate }}\n tb.rulenode.use-regular-expression-delete-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class sr{}e("RulenodeCoreConfigTransformModule",sr),sr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:sr,deps:[],target:t.ɵɵFactoryTarget.NgModule}),sr.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:sr,declarations:[tr,nr,rr,or,ar,ir,lr],imports:[O,T,vn],exports:[tr,nr,rr,or,ar,ir,lr]}),sr.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:sr,imports:[O,T,vn]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:sr,decorators:[{type:l,args:[{declarations:[tr,nr,rr,or,ar,ir,lr],imports:[O,T,vn],exports:[tr,nr,rr,or,ar,ir,lr]}]}]});class mr extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.entityType=x}configForm(){return this.ruleChainInputConfigForm}onConfigurationSet(e){this.ruleChainInputConfigForm=this.fb.group({ruleChainId:[e?e.ruleChainId:null,[D.required]]})}}e("RuleChainInputComponent",mr),mr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:mr,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),mr.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:mr,selector:"tb-flow-node-rule-chain-input-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n
\n',dependencies:[{kind:"component",type:Qe.EntityAutocompleteComponent,selector:"tb-entity-autocomplete",inputs:["entityType","entitySubtype","excludeEntityIds","labelText","requiredText","useFullEntityId","appearance","required","disabled"],outputs:["entityChanged"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:mr,decorators:[{type:n,args:[{selector:"tb-flow-node-rule-chain-input-config",template:'
\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class ur extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.ruleChainOutputConfigForm}onConfigurationSet(e){this.ruleChainOutputConfigForm=this.fb.group({})}}e("RuleChainOutputComponent",ur),ur.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ur,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),ur.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:ur,selector:"tb-flow-node-rule-chain-output-config",usesInheritance:!0,ngImport:t,template:'
\n
\n
\n',dependencies:[{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ur,decorators:[{type:n,args:[{selector:"tb-flow-node-rule-chain-output-config",template:'
\n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class pr{}e("RuleNodeCoreConfigFlowModule",pr),pr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:pr,deps:[],target:t.ɵɵFactoryTarget.NgModule}),pr.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:pr,declarations:[mr,ur],imports:[O,T,vn],exports:[mr,ur]}),pr.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:pr,imports:[O,T,vn]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:pr,decorators:[{type:l,args:[{declarations:[mr,ur],imports:[O,T,vn],exports:[mr,ur]}]}]});class dr{constructor(e){!function(e){e.setTranslation("en_US",{tb:{rulenode:{"create-entity-if-not-exists":"Create new entity if not exists","create-entity-if-not-exists-hint":"Create a new entity set above if it does not exist.","entity-name-pattern":"Name pattern","entity-name-pattern-required":"Name pattern is required","entity-type-pattern":"Type pattern","entity-type-pattern-required":"Type pattern is required","output-message-type":"Output message type","output-message-type-required":"Output message type is required","output-message-type-max-length":"Output message type should be less than 256","entity-cache-expiration":"Entities cache expiration time (sec)","entity-cache-expiration-hint":"Specifies maximum time interval allowed to store found entity records. 0 value means that records will never expire.","entity-cache-expiration-required":"Entities cache expiration time is required.","entity-cache-expiration-range":"Entities cache expiration time should be greater than or equal to 0.","customer-name-pattern":"Customer name pattern","customer-name-pattern-required":"Customer name pattern is required","create-customer-if-not-exists":"Create new customer if not exists","customer-cache-expiration":"Customers cache expiration time (sec)","customer-cache-expiration-hint":"Specifies maximum time interval allowed to store found customer records. 0 value means that records will never expire.","customer-cache-expiration-required":"Customers cache expiration time is required.","customer-cache-expiration-range":"Customers cache expiration time should be greater than or equal to 0.","interval-start":"Interval start","interval-end":"Interval end","time-unit":"Time unit","fetch-mode":"Fetch mode","order-by-timestamp":"Order by timestamp",limit:"Limit","limit-hint":"Min limit value is 2, max - 1000. If you want to fetch a single entry, select fetch mode 'First' or 'Last'.","limit-required":"Limit is required.","limit-range":"Limit should be in a range from 2 to 1000.","time-unit-milliseconds":"Milliseconds","time-unit-seconds":"Seconds","time-unit-minutes":"Minutes","time-unit-hours":"Hours","time-unit-days":"Days","time-value-range":"Allowing range from 1 to 2147483647.","start-interval-value-required":"Interval start is required.","end-interval-value-required":"Interval end is required.",filter:"Filter",switch:"Switch","math-templatization-tooltip":"This field support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","add-message-type":"Add message type","select-message-types-required":"At least one message type should be selected.","select-message-types":"Select message types","no-message-types-found":"No message types found","no-message-type-matching":"'{{messageType}}' not found.","create-new-message-type":"Create a new one.","message-types-required":"Message types are required.","client-attributes":"Client attributes","shared-attributes":"Shared attributes","server-attributes":"Server attributes","attributes-keys":"Attributes keys","attributes-keys-required":"Attributes keys are required","notify-device":"Notify device","send-attributes-updated-notification":"Send attributes updated notification","send-attributes-updated-notification-hint":"Send notification about updated attributes as a separate message to the rule engine queue.","send-attributes-deleted-notification":"Send attributes deleted notification","send-attributes-deleted-notification-hint":"Send notification about deleted attributes as a separate message to the rule engine queue.","update-attributes-only-on-value-change":"Save attributes only if the value changes","update-attributes-only-on-value-change-hint":"Updates the attributes on every incoming message disregarding if their value has changed. Increases API usage and reduces performance.","update-attributes-only-on-value-change-hint-enabled":"Updates the attributes only if their value has changed. If the value is not changed, no update to the attribute timestamp nor attribute change notification will be sent.","fetch-credentials-to-metadata":"Fetch credentials to metadata","notify-device-hint":"If the message arrives from the device, we will push it back to the device by default.","notify-device-delete-hint":"Send notification about deleted attributes to device.","latest-timeseries":"Latest time-series data keys","timeseries-keys":"Timeseries keys","timeseries-keys-required":"At least one timeseries key should be selected.","add-timeseries-key":"Add timeseries key","add-message-field":"Add message field","relation-search-parameters":"Relation search parameters","add-metadata-field":"Add metadata field","data-keys":"Message field names","copy-from":"Copy from","data-to-metadata":"Data to metadata","metadata-to-data":"Metadata to data","use-regular-expression-hint":"Use regular expression to copy keys by pattern",interval:"Interval","interval-required":"Interval is required","interval-hint":"Deduplication interval in seconds.","interval-min-error":"Min allowed value is 1","max-pending-msgs":"Max pending messages","max-pending-msgs-hint":"Maximum number of messages that are stored in memory for each unique deduplication id.","max-pending-msgs-required":"Max pending messages is required","max-pending-msgs-max-error":"Max allowed value is 1000","max-pending-msgs-min-error":"Min allowed value is 1","max-retries":"Max retries","max-retries-required":"Max retries is required","max-retries-hint":"Maximum number of retries to push the deduplicated messages into the queue. 10 seconds delay is used between retries","max-retries-max-error":"Max allowed value is 100","max-retries-min-error":"Min allowed value is 0",strategy:"Strategy","strategy-required":"Strategy is required","strategy-all-hint":"Return all messages that arrived during deduplication period as a single JSON array message. Where each element represents object with msg and metadata inner properties.","strategy-first-hint":"Return first message that arrived during deduplication period.","strategy-last-hint":"Return last message that arrived during deduplication period.",first:"First",last:"Last",all:"All","output-msg-type-hint":"The message type of the deduplication result.","queue-name-hint":"The queue name where the deduplication result will be published.",keys:"Keys","keys-required":"Keys are required","rename-keys-in":"Rename keys in",data:"Data",message:"Message",metadata:"Metadata","key-name":"Key name","key-name-required":"Key name is required","new-key-name":"New key name","new-key-name-required":"New key name is required","metadata-keys":"Metadata field names","json-path-expression":"JSON path expression","json-path-expression-required":"JSON path expression is required","json-path-expression-hint":"JSONPath specifies a path to an element or a set of elements in a JSON structure. '$' represents the root object or array.","relations-query":"Relations query","device-relations-query":"Device relations query","max-relation-level":"Max relation level","max-relation-level-error":"Value should be greater than 0 or unspecified.","relation-type":"Relation type","relation-type-pattern":"Relation type pattern","relation-type-pattern-required":"Relation type pattern is required","relation-types-list":"Relation types to propagate","relation-types-list-hint":"If Propagate relation types are not selected, alarms will be propagated without filtering by relation type.","unlimited-level":"Unlimited level","latest-telemetry":"Latest telemetry","add-telemetry-key":"Add telemetry key","delete-from":"Delete from","use-regular-expression-delete-hint":"Use regular expression to delete keys by pattern","fetch-into":"Fetch into","attr-mapping":"Attributes mapping:","source-attribute":"Source attribute key","source-attribute-required":"Source attribute key is required.","source-telemetry":"Source telemetry key","source-telemetry-required":"Source telemetry key is required.","target-key":"Target key","target-key-required":"Target key is required.","attr-mapping-required":"At least one mapping entry should be specified.","fields-mapping":"Fields mapping*","fields-mapping-required":"At least one field mapping should be specified.","at-least-one-field-required":"At least one input field must have a value(s) provided.","originator-fields-sv-map-hint":"Target key fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","sv-map-hint":"Only target key fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","source-field":"Source field","source-field-required":"Source field is required.","originator-source":"Originator source","originator-customer":"Customer","originator-tenant":"Tenant","originator-related":"Related","originator-alarm-originator":"Alarm Originator","originator-entity":"Entity","clone-message":"Clone message",transform:"Transform","default-ttl":"Default TTL in seconds","default-ttl-required":"Default TTL is required.","min-default-ttl-message":"Only 0 minimum TTL is allowed.","message-count":"Message count (0 - unlimited)","message-count-required":"Message count is required.","min-message-count-message":"Only 0 minimum message count is allowed.","period-seconds":"Period in seconds","period-seconds-required":"Period is required.","use-metadata-period-in-seconds-patterns":"Use period in seconds pattern","use-metadata-period-in-seconds-patterns-hint":"If selected, rule node use period in seconds interval pattern from message metadata or data assuming that intervals are in the seconds.","period-in-seconds-pattern":"Period in seconds pattern","period-in-seconds-pattern-required":"Period in seconds pattern is required","min-period-seconds-message":"Only 1 second minimum period is allowed.",originator:"Originator","message-body":"Message body","message-metadata":"Message metadata",generate:"Generate","test-generator-function":"Test generator function",generator:"Generator","test-filter-function":"Test filter function","test-switch-function":"Test switch function","test-transformer-function":"Test transformer function",transformer:"Transformer","alarm-create-condition":"Alarm create condition","test-condition-function":"Test condition function","alarm-clear-condition":"Alarm clear condition","alarm-details-builder":"Alarm details builder","test-details-function":"Test details function","alarm-type":"Alarm type","select-entity-types":"Select entity types","alarm-type-required":"Alarm type is required.","alarm-severity":"Alarm severity","alarm-severity-required":"Alarm severity is required","alarm-severity-pattern":"Alarm severity pattern","alarm-status-filter":"Alarm status filter","alarm-status-list-empty":"Alarm status list is empty","no-alarm-status-matching":"No alarm status matching were found.",propagate:"Propagate alarm to related entities","propagate-to-owner":"Propagate alarm to entity owner (Customer or Tenant)","propagate-to-tenant":"Propagate alarm to Tenant",condition:"Condition",details:"Details","to-string":"To string","test-to-string-function":"Test to string function","from-template":"From Template","from-template-required":"From Template is required","to-template":"To Template","to-template-required":"To Template is required","mail-address-list-template-hint":'Comma separated address list, use ${metadataKey} for value from metadata, $[messageKey] for value from message body',"cc-template":"Cc Template","bcc-template":"Bcc Template","subject-template":"Subject Template","subject-template-required":"Subject Template is required","body-template":"Body Template","body-template-required":"Body Template is required","dynamic-mail-body-type":"Dynamic mail body type","mail-body-type":"Mail body type","request-id-metadata-attribute":"Request Id Metadata attribute name","timeout-sec":"Timeout in seconds","timeout-required":"Timeout is required","min-timeout-message":"Only 0 minimum timeout value is allowed.","endpoint-url-pattern":"Endpoint URL pattern","endpoint-url-pattern-required":"Endpoint URL pattern is required","request-method":"Request method","use-simple-client-http-factory":"Use simple client HTTP factory","ignore-request-body":"Without request body","trim-double-quotes":"Message without quotes","trim-double-quotes-hint":"If selected, request body message payload will be sent without double quotes, i.e. msg = message body","read-timeout":"Read timeout in millis","read-timeout-hint":"The value of 0 means an infinite timeout","max-parallel-requests-count":"Max number of parallel requests","max-parallel-requests-count-hint":"The value of 0 specifies no limit in parallel processing",headers:"Headers","headers-hint":'Use ${metadataKey} for value from metadata, $[messageKey] for value from message body in header/value fields',header:"Header","header-required":"Header is required",value:"Value","value-required":"Value is required","topic-pattern":"Topic pattern","key-pattern":"Key pattern","key-pattern-hint":"Optional. If a valid partition number is specified, it will be used when sending the record. If no partition is specified, the key will be used instead. If neither is specified, a partition will be assigned in a round-robin fashion.","topic-pattern-required":"Topic pattern is required",topic:"Topic","topic-required":"Topic is required","bootstrap-servers":"Bootstrap servers","bootstrap-servers-required":"Bootstrap servers value is required","other-properties":"Other properties",key:"Key","key-required":"Key is required",retries:"Automatically retry times if fails","min-retries-message":"Only 0 minimum retries is allowed.","batch-size-bytes":"Produces batch size in bytes","min-batch-size-bytes-message":"Only 0 minimum batch size is allowed.","linger-ms":"Time to buffer locally (ms)","min-linger-ms-message":"Only 0 ms minimum value is allowed.","buffer-memory-bytes":"Client buffer max size in bytes","min-buffer-memory-message":"Only 0 minimum buffer size is allowed.",acks:"Number of acknowledgments","key-serializer":"Key serializer","key-serializer-required":"Key serializer is required","value-serializer":"Value serializer","value-serializer-required":"Value serializer is required","topic-arn-pattern":"Topic ARN pattern","topic-arn-pattern-required":"Topic ARN pattern is required","aws-access-key-id":"AWS Access Key ID","aws-access-key-id-required":"AWS Access Key ID is required","aws-secret-access-key":"AWS Secret Access Key","aws-secret-access-key-required":"AWS Secret Access Key is required","aws-region":"AWS Region","aws-region-required":"AWS Region is required","exchange-name-pattern":"Exchange name pattern","routing-key-pattern":"Routing key pattern","message-properties":"Message properties",host:"Host","host-required":"Host is required",port:"Port","port-required":"Port is required","port-range":"Port should be in a range from 1 to 65535.","virtual-host":"Virtual host",username:"Username",password:"Password","automatic-recovery":"Automatic recovery","connection-timeout-ms":"Connection timeout (ms)","min-connection-timeout-ms-message":"Only 0 ms minimum value is allowed.","handshake-timeout-ms":"Handshake timeout (ms)","min-handshake-timeout-ms-message":"Only 0 ms minimum value is allowed.","client-properties":"Client properties","queue-url-pattern":"Queue URL pattern","queue-url-pattern-required":"Queue URL pattern is required","delay-seconds":"Delay (seconds)","min-delay-seconds-message":"Only 0 seconds minimum value is allowed.","max-delay-seconds-message":"Only 900 seconds maximum value is allowed.",name:"Name","name-required":"Name is required","queue-type":"Queue type","sqs-queue-standard":"Standard","sqs-queue-fifo":"FIFO","gcp-project-id":"GCP project ID","gcp-project-id-required":"GCP project ID is required","gcp-service-account-key":"GCP service account key file","gcp-service-account-key-required":"GCP service account key file is required","pubsub-topic-name":"Topic name","pubsub-topic-name-required":"Topic name is required","message-attributes":"Message attributes","message-attributes-hint":'Use ${metadataKey} for value from metadata, $[messageKey] for value from message body in name/value fields',"connect-timeout":"Connection timeout (sec)","connect-timeout-required":"Connection timeout is required.","connect-timeout-range":"Connection timeout should be in a range from 1 to 200.","client-id":"Client ID","client-id-hint":'Optional. Leave empty for auto-generated Client ID. Be careful when specifying the Client ID. Majority of the MQTT brokers will not allow multiple connections with the same Client ID. To connect to such brokers, your mqtt Client ID must be unique. When platform is running in a micro-services mode, the copy of rule node is launched in each micro-service. This will automatically lead to multiple mqtt clients with the same ID and may cause failures of the rule node. To avoid such failures enable "Add Service ID as suffix to Client ID" option below.',"append-client-id-suffix":"Add Service ID as suffix to Client ID","client-id-suffix-hint":'Optional. Applied when "Client ID" specified explicitly. If selected then Service ID will be added to Client ID as a suffix. Helps to avoid failures when platform is running in a micro-services mode.',"device-id":"Device ID","device-id-required":"Device ID is required.","clean-session":"Clean session","enable-ssl":"Enable SSL",credentials:"Credentials","credentials-type":"Credentials type","credentials-type-required":"Credentials type is required.","credentials-anonymous":"Anonymous","credentials-basic":"Basic","credentials-pem":"PEM","credentials-pem-hint":"At least Server CA certificate file or a pair of Client certificate and Client private key files are required","credentials-sas":"Shared Access Signature","sas-key":"SAS Key","sas-key-required":"SAS Key is required.",hostname:"Hostname","hostname-required":"Hostname is required.","azure-ca-cert":"CA certificate file","username-required":"Username is required.","password-required":"Password is required.","ca-cert":"Server CA certificate file","private-key":"Client private key file",cert:"Client certificate file","no-file":"No file selected.","drop-file":"Drop a file or click to select a file to upload.","private-key-password":"Private key password","use-system-smtp-settings":"Use system SMTP settings","use-metadata-dynamic-interval":"Use dynamic interval","metadata-dynamic-interval-hint":"Interval start and end input fields support templatization. Note that the substituted template value should be set in milliseconds. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","use-metadata-interval-patterns-hint":"If selected, rule node use start and end interval patterns from message metadata or data assuming that intervals are in the milliseconds.","use-message-alarm-data":"Use message alarm data","overwrite-alarm-details":"Overwrite alarm details","use-alarm-severity-pattern":"Use alarm severity pattern","check-all-keys":"Check that all specified fields are present","check-all-keys-hint":"If selected, checks that all specified keys are present in the message data and metadata.","check-relation-to-specific-entity":"Check relation to specific entity","check-relation-to-specific-entity-tooltip":"If enabled, checks the presence of relation with a specific entity otherwise, checks the presence of relation with any entity. In both cases, relation lookup is based on configured direction and type.","check-relation-hint":"Checks existence of relation to specific entity or to any entity based on direction and relation type.","delete-relation-to-specific-entity":"Delete relation to specific entity","delete-relation-hint":"Deletes relation from the originator of the incoming message to the specified entity or list of entities based on direction and type.","remove-current-relations":"Remove current relations","remove-current-relations-hint":"Removes current relations from the originator of the incoming message based on direction and type.","change-originator-to-related-entity":"Change originator to related entity","change-originator-to-related-entity-hint":"Used to process submitted message as a message from another entity.","start-interval":"Interval start","end-interval":"Interval end","start-interval-required":"Interval start is required.","end-interval-required":"Interval end is required.","smtp-protocol":"Protocol","smtp-host":"SMTP host","smtp-host-required":"SMTP host is required.","smtp-port":"SMTP port","smtp-port-required":"You must supply a smtp port.","smtp-port-range":"SMTP port should be in a range from 1 to 65535.","timeout-msec":"Timeout ms","min-timeout-msec-message":"Only 0 ms minimum value is allowed.","enter-username":"Enter username","enter-password":"Enter password","enable-tls":"Enable TLS","tls-version":"TLS version","enable-proxy":"Enable proxy","use-system-proxy-properties":"Use system proxy properties","proxy-host":"Proxy host","proxy-host-required":"Proxy host is required.","proxy-port":"Proxy port","proxy-port-required":"Proxy port is required.","proxy-port-range":"Proxy port should be in a range from 1 to 65535.","proxy-user":"Proxy user","proxy-password":"Proxy password","proxy-scheme":"Proxy scheme","numbers-to-template":"Phone Numbers To Template","numbers-to-template-required":"Phone Numbers To Template is required","numbers-to-template-hint":'Comma separated Phone Numbers, use ${metadataKey} for value from metadata, $[messageKey] for value from message body',"sms-message-template":"SMS message Template","sms-message-template-required":"SMS message Template is required","use-system-sms-settings":"Use system SMS provider settings","min-period-0-seconds-message":"Only 0 second minimum period is allowed.","max-pending-messages":"Maximum pending messages","max-pending-messages-required":"Maximum pending messages is required.","max-pending-messages-range":"Maximum pending messages should be in a range from 1 to 100000.","originator-types-filter":"Originator types filter","interval-seconds":"Interval in seconds","interval-seconds-required":"Interval is required.","min-interval-seconds-message":"Only 1 second minimum interval is allowed.","output-timeseries-key-prefix":"Output timeseries key prefix","output-timeseries-key-prefix-required":"Output timeseries key prefix required.","separator-hint":'Press "Enter" to complete field input.',"select-details":"Select details","entity-details-id":"Id","entity-details-title":"Title","entity-details-country":"Country","entity-details-state":"State","entity-details-city":"City","entity-details-zip":"Zip","entity-details-address":"Address","entity-details-address2":"Address2","entity-details-additional_info":"Additional Info","entity-details-phone":"Phone","entity-details-email":"Email","fields-to-check":"Fields to check","add-detail":"Add detail","check-all-keys-tooltip":"If enabled, checks the presence of all fields listed in the message and metadata field names within the incoming message and its metadata.","fields-to-check-hint":'Press "Enter" to complete field name input. Multiple field names supported.',"entity-details-list-empty":"At least one detail should be selected.","alarm-status":"Alarm status","alarm-required":"At least one alarm status should be selected.","no-entity-details-matching":"No entity details matching were found.","custom-table-name":"Custom table name","custom-table-name-required":"Table Name is required","custom-table-hint":"Enter the table name without prefix 'cs_tb_'.","message-field":"Message field","message-field-required":"Message field is required.","table-col":"Table column","table-col-required":"Table column is required.","latitude-field-name":"Latitude field name","longitude-field-name":"Longitude field name","latitude-field-name-required":"Latitude field name is required.","longitude-field-name-required":"Longitude field name is required.","fetch-perimeter-info-from-metadata":"Fetch perimeter information from metadata","fetch-perimeter-info-from-metadata-tooltip":"If perimeter type is set to 'Polygon' the value of metadata field '{{perimeterKeyName}}' will be set as perimeter definition without additional parsing of the value. Otherwise, if perimeter type is set to 'Circle' the value of '{{perimeterKeyName}}' metadata field will be parsed to extract 'latitude', 'longitude', 'radius', 'radiusUnit' fields that uses for circle perimeter definition.","perimeter-key-name":"Perimeter key name","perimeter-key-name-hint":"Metadata field name that includes perimeter information.","perimeter-key-name-required":"Perimeter key name is required.","perimeter-circle":"Circle","perimeter-polygon":"Polygon","perimeter-type":"Perimeter type","circle-center-latitude":"Center latitude","circle-center-latitude-required":"Center latitude is required.","circle-center-longitude":"Center longitude","circle-center-longitude-required":"Center longitude is required.","range-unit-meter":"Meter","range-unit-kilometer":"Kilometer","range-unit-foot":"Foot","range-unit-mile":"Mile","range-unit-nautical-mile":"Nautical mile","range-units":"Range units","range-units-required":"Range units is required.",range:"Range","range-required":"Range is required.","polygon-definition":"Polygon definition","polygon-definition-required":"Polygon definition is required.","polygon-definition-hint":"Use the following format for manual definition of polygon: [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]].","min-inside-duration":"Minimal inside duration","min-inside-duration-value-required":"Minimal inside duration is required","min-inside-duration-time-unit":"Minimal inside duration time unit","min-outside-duration":"Minimal outside duration","min-outside-duration-value-required":"Minimal outside duration is required","min-outside-duration-time-unit":"Minimal outside duration time unit","tell-failure-if-absent":"Tell Failure","tell-failure-if-absent-hint":'If at least one selected key doesn\'t exist the outbound message will report "Failure".',"get-latest-value-with-ts":"Fetch timestamp for the latest telemetry values","get-latest-value-with-ts-hint":'If selected, the latest telemetry values will also include timestamp, e.g: "temp": "{"ts":1574329385897, "value":42}"',"use-redis-queue":"Use redis queue for message persistence","ignore-null-strings":"Ignore null strings","ignore-null-strings-hint":"If selected rule node will ignore entity fields with empty value.","trim-redis-queue":"Trim redis queue","redis-queue-max-size":"Redis queue max size","add-metadata-key-values-as-kafka-headers":"Add Message metadata key-value pairs to Kafka record headers","add-metadata-key-values-as-kafka-headers-hint":"If selected, key-value pairs from message metadata will be added to the outgoing records headers as byte arrays with predefined charset encoding.","charset-encoding":"Charset encoding","charset-encoding-required":"Charset encoding is required.","charset-us-ascii":"US-ASCII","charset-iso-8859-1":"ISO-8859-1","charset-utf-8":"UTF-8","charset-utf-16be":"UTF-16BE","charset-utf-16le":"UTF-16LE","charset-utf-16":"UTF-16","select-queue-hint":"The queue name can be selected from a drop-down list or add a custom name.","persist-alarm-rules":"Persist state of alarm rules","fetch-alarm-rules":"Fetch state of alarm rules","input-value-key":"Input value key","input-value-key-required":"Input value key is required.","output-value-key":"Output value key","output-value-key-required":"Output value key is required.","number-of-digits-after-floating-point":"Number of digits after floating point","number-of-digits-after-floating-point-range":"Number of digits after floating point should be in a range from 0 to 15.","failure-if-delta-negative":"Tell Failure if delta is negative","failure-if-delta-negative-tooltip":"Rule node forces failure of message processing if delta value is negative.","use-caching":"Use caching","use-caching-tooltip":'Rule node will cache the value of "{{inputValueKey}}" that arrives from the incoming message to improve performance. Note that the cache will not be updated if you modify the "{{inputValueKey}}" value elsewhere.',"add-time-difference-between-readings":'Add the time difference between "{{inputValueKey}}" readings',"add-time-difference-between-readings-tooltip":'If enabled, the rule node will add the "{{periodValueKey}}" to the outbound message.',"period-value-key":"Period value key","period-value-key-required":"Period value key is required.","general-pattern-hint":"Use ${metadataKey} for value from metadata, $[messageKey] for value from message body.","alarm-severity-pattern-hint":'Use ${metadataKey} for value from metadata, $[messageKey] for value from message body. Alarm severity should be system (CRITICAL, MAJOR etc.)',"output-node-name-hint":"The rule node name corresponds to the relation type of the output message, and it is used to forward messages to other rule nodes in the caller rule chain.","skip-latest-persistence":"Skip latest persistence","use-server-ts":"Use server ts","use-server-ts-hint":"Enable this setting to use the timestamp of the message processing instead of the timestamp from the message. Useful for all sorts of sequential processing if you merge messages from multiple sources (devices, assets, etc).","kv-map-pattern-hint":"All input fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","shared-scope":"Shared scope","server-scope":"Server scope","client-scope":"Client scope","attribute-type":"Attribute","constant-type":"Constant","time-series-type":"Time-series","message-body-type":"Message","message-metadata-type":"Metadata","argument-tile":"Arguments","no-arguments-prompt":"No arguments configured","result-title":"Result","functions-field-input":"Functions","no-option-found":"No option found","argument-source-field-input":"Source","argument-source-field-input-required":"Argument source is required.","argument-key-field-input":"Key","argument-key-field-input-required":"Argument key is required.","constant-value-field-input":"Constant value","constant-value-field-input-required":"Constant value is required.","attribute-scope-field-input":"Attribute scope","attribute-scope-field-input-required":"Attribute scope os required.","default-value-field-input":"Default value","type-field-input":"Type","type-field-input-required":"Type is required.","key-field-input":"Key","add-entity-type":"Add entity type","key-field-input-required":"Key is required.","number-floating-point-field-input":"Number of digits after floating point","number-floating-point-field-input-hint":"Use 0 to convert result to integer","add-to-message-field-input":"Add to message","add-to-metadata-field-input":"Add to metadata","custom-expression-field-input":"Mathematical Expression","custom-expression-field-input-required":"Mathematical expression is required","custom-expression-field-input-hint":"Specify a mathematical expression to evaluate. Default expression demonstrates how to transform Fahrenheit to Celsius","retained-message":"Retained","attributes-mapping":"Attributes mapping","latest-telemetry-mapping":"Latest telemetry mapping","add-mapped-attribute-to":"Add mapped attributes to","add-mapped-latest-telemetry-to":"Add mapped latest telemetry to","add-mapped-fields-to":"Add mapped fields to","add-selected-details-to":"Add selected details to","clear-selected-types":"Clear selected types","clear-selected-details":"Clear selected details","clear-selected-fields":"Clear selected fields","clear-selected-keys":"Clear selected keys","geofence-configuration":"Geofence configuration","coordinate-field-names":"Coordinate field names","coordinate-field-hint":"Rule node tries to retrieve the specified fields from the message. If they are not present, it will look them up in the metadata.","fetch-credentials-to":"Fetch credentials to","add-originator-attributes-to":"Add originator attributes to","originator-attributes":"Originator attributes","fetch-latest-telemetry-with-timestamp":"Fetch latest telemetry with timestamp","fetch-latest-telemetry-with-timestamp-tooltip":'If selected, latest telemetry values will be added to the outbound metadata with timestamp, e.g: "{{latestTsKeyName}}": "{"ts":1574329385897, "value":42}"',"tell-failure":"Tell failure if any of the attributes are missing","tell-failure-tooltip":'If at least one selected key doesn\'t exist the outbound message will report "Failure".',"created-time":"Created time","chip-help":"Press 'Enter' to complete {{inputName}} input. \nPress 'Backspace' to delete {{inputName}}. \nMultiple values supported.",detail:"detail","field-name":"field name","device-profile":"device profile","entity-type":"entity type","message-type":"message type","timeseries-key":"timeseries key",type:"Type","first-name":"First name","last-name":"Last name",label:"Label","originator-fields-mapping":"Originator fields mapping","add-mapped-originator-fields-to":"Add mapped originator fields to",fields:"Fields","skip-empty-fields":"Skip empty fields","skip-empty-fields-tooltip":"Fields with empty values will not be added to the output message/output metadata.","fetch-interval":"Fetch interval","fetch-strategy":"Fetch strategy","fetch-timeseries-from-to":"Fetch timeseries from {{startInterval}} {{startIntervalTimeUnit}} ago to {{endInterval}} {{endIntervalTimeUnit}} ago.","fetch-timeseries-from-to-invalid":'Fetch timeseries invalid ("Interval start" should be less than "Interval end").',"use-metadata-dynamic-interval-tooltip":"If selected, the rule node will use dynamic interval start and end based on the message and metadata patterns.","all-mode-hint":'If selected fetch mode "All" rule node will retrieve telemetry from the fetch interval with configurable query parameters.',"first-mode-hint":'If selected fetch mode "First" rule node will retrieve the closest telemetry to the fetch interval\'s start.',"last-mode-hint":'If selected fetch mode "Last" rule node will retrieve the closest telemetry to the fetch interval\'s end.',ascending:"Ascending",descending:"Descending",min:"Min",max:"Max",average:"Average",sum:"Sum",count:"Count",none:"None","last-level-relation-tooltip":"If selected, the rule node will search related entities only on the level set in the max relation level.","last-level-device-relation-tooltip":"If selected, the rule node will search related devices only on the level set in the max relation level.","data-to-fetch":"Data to fetch","mapping-of-customers-fields":"Mapping of customer's fields","map-fields-required":"All mapping fields are required.",attributes:"Attributes","related-device-attributes":"Related device attributes","add-selected-attributes-to":"Add selected attributes to","device-profiles":"Device profiles","mapping-of-tenant-fields":"Mapping of tenant's fields","add-attribute-key":"Add attribute key","message-template":"Message template","message-template-required":"Message template is required","use-system-slack-settings":"Use system slack settings","slack-api-token":"Slack API token","slack-api-token-required":"Slack API token is required"},"key-val":{key:"Key",value:"Value","see-examples":"See examples.","remove-entry":"Remove entry","remove-mapping-entry":"Remove mapping entry","add-mapping-entry":"Add mapping","add-entry":"Add entry","unique-key-value-pair-error":"'{{valText}}' must be different from the current '{{keyText}}'"},"mail-body-type":{"plain-text":"Plain Text",html:"HTML",dynamic:"Dynamic"}}},!0)}(e)}}e("RuleNodeCoreConfigModule",dr),dr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:dr,deps:[{token:H.TranslateService}],target:t.ɵɵFactoryTarget.NgModule}),dr.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:dr,declarations:[Je],imports:[O,T],exports:[Cn,er,Gn,zn,sr,pr,Je]}),dr.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:dr,imports:[O,T,Cn,er,Gn,zn,sr,pr]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:dr,decorators:[{type:l,args:[{declarations:[Je],imports:[O,T],exports:[Cn,er,Gn,zn,sr,pr,Je]}]}],ctorParameters:function(){return[{type:H.TranslateService}]}})}}}));//# sourceMappingURL=rulenode-core-config.js.map +System.register(["@angular/core","@shared/public-api","@ngrx/store","@angular/forms","@angular/common","@angular/material/checkbox","@angular/material/input","@angular/material/form-field","@angular/flex-layout/flex","@ngx-translate/core","@angular/material/select","@angular/material/core","@angular/material/slide-toggle","@shared/components/hint-tooltip-icon.component","@shared/components/queue/queue-autocomplete.component","@core/public-api","@shared/components/js-func.component","@angular/material/button","@angular/material/icon","@angular/material/tooltip","@shared/components/script-lang.component","@angular/cdk/keycodes","@angular/material/chips","@shared/pipe/safe.pipe","@shared/components/entity/entity-type-select.component","@shared/components/entity/entity-select.component","@angular/cdk/coercion","@shared/components/tb-error.component","@angular/flex-layout/extended","@angular/material/list","@angular/cdk/drag-drop","rxjs/operators","@angular/material/autocomplete","@shared/pipe/highlight.pipe","@angular/material/expansion","tslib","rxjs","@home/components/public-api","@shared/components/help-popup.component","@shared/components/entity/entity-subtype-list.component","@shared/components/relation/relation-type-autocomplete.component","@home/components/relation/relation-filters.component","@shared/components/file-input.component","@shared/components/button/toggle-password.component","@shared/components/string-items-list.component","@shared/components/toggle-header.component","@shared/components/toggle-select.component","@shared/components/entity/entity-list.component","@shared/components/notification/template-autocomplete.component","@shared/components/tb-checkbox.component","@home/components/sms/sms-provider-configuration.component","@angular/material/radio","@shared/components/slack-conversation-autocomplete.component","@shared/components/entity/entity-autocomplete.component","@shared/components/entity/entity-type-list.component"],(function(e){"use strict";var t,n,r,o,a,i,l,s,m,u,p,d,c,f,g,y,x,b,h,v,C,F,k,L,T,I,N,S,q,A,M,G,E,D,V,P,w,R,O,B,K,U,_,H,z,j,Q,$,J,Y,W,X,Z,ee,te,ne,re,oe,ae,ie,le,se,me,ue,pe,de,ce,fe,ge,ye,xe,be,he,ve,Ce,Fe,ke,Le,Te,Ie,Ne,Se,qe,Ae,Me,Ge,Ee,De,Ve,Pe,we,Re,Oe,Be,Ke,Ue,_e,He,ze,je,Qe,$e;return{setters:[function(e){t=e,n=e.Component,r=e.EventEmitter,o=e.ViewChild,a=e.forwardRef,i=e.Input,l=e.NgModule},function(e){s=e.RuleNodeConfigurationComponent,m=e.AttributeScope,u=e.telemetryTypeTranslations,p=e.ServiceType,d=e.ScriptLanguage,c=e.AlarmSeverity,f=e.alarmSeverityTranslations,g=e.EntitySearchDirection,y=e.entitySearchDirectionTranslations,x=e.EntityType,b=e.PageComponent,h=e.coerceBoolean,v=e.MessageType,C=e.messageTypeNames,F=e,k=e.AlarmStatus,L=e.alarmStatusTranslations,T=e.SharedModule,I=e.AggregationType,N=e.aggregationTranslations,S=e.entityFields,q=e.NotificationType,A=e.SlackChanelType,M=e.SlackChanelTypesTranslateMap},function(e){G=e},function(e){E=e,D=e.Validators,V=e.NgControl,P=e.NG_VALUE_ACCESSOR,w=e.NG_VALIDATORS},function(e){R=e,O=e.CommonModule},function(e){B=e},function(e){K=e},function(e){U=e},function(e){_=e},function(e){H=e},function(e){z=e},function(e){j=e},function(e){Q=e},function(e){$=e},function(e){J=e},function(e){Y=e.getCurrentAuthState,W=e,X=e.isDefinedAndNotNull,Z=e.deepTrim,ee=e.isObject,te=e.isNotEmptyStr},function(e){ne=e},function(e){re=e},function(e){oe=e},function(e){ae=e},function(e){ie=e},function(e){le=e.ENTER,se=e.COMMA,me=e.SEMICOLON},function(e){ue=e},function(e){pe=e},function(e){de=e},function(e){ce=e},function(e){fe=e.coerceBooleanProperty},function(e){ge=e},function(e){ye=e},function(e){xe=e},function(e){be=e},function(e){he=e.tap,ve=e.map,Ce=e.mergeMap,Fe=e.startWith,ke=e.share,Le=e.takeUntil},function(e){Te=e},function(e){Ie=e},function(e){Ne=e},function(e){Se=e.__decorate},function(e){qe=e.of,Ae=e.Subject},function(e){Me=e.HomeComponentsModule},function(e){Ge=e},function(e){Ee=e},function(e){De=e},function(e){Ve=e},function(e){Pe=e},function(e){we=e},function(e){Re=e},function(e){Oe=e},function(e){Be=e},function(e){Ke=e},function(e){Ue=e},function(e){_e=e},function(e){He=e},function(e){ze=e},function(e){je=e},function(e){Qe=e},function(e){$e=e}],execute:function(){class Je extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.emptyConfigForm}onConfigurationSet(e){this.emptyConfigForm=this.fb.group({})}}e("EmptyConfigComponent",Je),Je.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Je,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Je.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Je,selector:"tb-node-empty-config",usesInheritance:!0,ngImport:t,template:"
",isInline:!0}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Je,decorators:[{type:n,args:[{selector:"tb-node-empty-config",template:"
"}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Ye extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.assignCustomerConfigForm}onConfigurationSet(e){this.assignCustomerConfigForm=this.fb.group({customerNamePattern:[e?e.customerNamePattern:null,[D.required,D.pattern(/.*\S.*/)]],createCustomerIfNotExists:[!!e&&e.createCustomerIfNotExists,[]],customerCacheExpiration:[e?e.customerCacheExpiration:null,[D.required,D.min(0)]]})}prepareOutputConfig(e){return e.customerNamePattern=e.customerNamePattern.trim(),e}}e("AssignCustomerConfigComponent",Ye),Ye.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ye,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Ye.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Ye,selector:"tb-action-node-assign-to-customer-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.customer-name-pattern\n \n \n {{ \'tb.rulenode.customer-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.create-customer-if-not-exists\' | translate }}\n \n \n tb.rulenode.customer-cache-expiration\n \n \n {{ \'tb.rulenode.customer-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.customer-cache-expiration-range\' | translate }}\n \n tb.rulenode.customer-cache-expiration-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ye,decorators:[{type:n,args:[{selector:"tb-action-node-assign-to-customer-config",template:'
\n \n tb.rulenode.customer-name-pattern\n \n \n {{ \'tb.rulenode.customer-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.create-customer-if-not-exists\' | translate }}\n \n \n tb.rulenode.customer-cache-expiration\n \n \n {{ \'tb.rulenode.customer-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.customer-cache-expiration-range\' | translate }}\n \n tb.rulenode.customer-cache-expiration-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class We extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopeMap=m,this.attributeScopes=Object.keys(m),this.telemetryTypeTranslationsMap=u}configForm(){return this.attributesConfigForm}onConfigurationSet(e){this.attributesConfigForm=this.fb.group({scope:[e?e.scope:null,[D.required]],notifyDevice:[!e||e.notifyDevice,[]],sendAttributesUpdatedNotification:[!!e&&e.sendAttributesUpdatedNotification,[]],updateAttributesOnlyOnValueChange:[!!e&&e.updateAttributesOnlyOnValueChange,[]]}),this.attributesConfigForm.get("scope").valueChanges.subscribe((e=>{e!==m.SHARED_SCOPE&&this.attributesConfigForm.get("notifyDevice").patchValue(!1,{emitEvent:!1}),e===m.CLIENT_SCOPE&&this.attributesConfigForm.get("sendAttributesUpdatedNotification").patchValue(!1,{emitEvent:!1}),this.attributesConfigForm.get("updateAttributesOnlyOnValueChange").patchValue(!1,{emitEvent:!1})}))}}e("AttributesConfigComponent",We),We.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:We,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),We.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:We,selector:"tb-action-node-attributes-config",usesInheritance:!0,ngImport:t,template:'
\n \n attribute.attributes-scope\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n
\n
\n \n {{ \'tb.rulenode.update-attributes-only-on-value-change\' | translate }}\n \n
\n
\n \n {{ \'tb.rulenode.send-attributes-updated-notification\' | translate }}\n \n
\n
\n \n {{ \'tb.rulenode.notify-device\' | translate }}\n \n
\n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:We,decorators:[{type:n,args:[{selector:"tb-action-node-attributes-config",template:'
\n \n attribute.attributes-scope\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n
\n
\n \n {{ \'tb.rulenode.update-attributes-only-on-value-change\' | translate }}\n \n
\n
\n \n {{ \'tb.rulenode.send-attributes-updated-notification\' | translate }}\n \n
\n
\n \n {{ \'tb.rulenode.notify-device\' | translate }}\n \n
\n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Xe extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.serviceType=p.TB_RULE_ENGINE}configForm(){return this.checkPointConfigForm}onConfigurationSet(e){this.checkPointConfigForm=this.fb.group({queueName:[e?e.queueName:null,[D.required]]})}}e("CheckPointConfigComponent",Xe),Xe.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Xe,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Xe.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Xe,selector:"tb-action-node-check-point-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n
\n',dependencies:[{kind:"component",type:J.QueueAutocompleteComponent,selector:"tb-queue-autocomplete",inputs:["labelText","requiredText","autocompleteHint","subscriptSizing","required","queueType","disabled"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Xe,decorators:[{type:n,args:[{selector:"tb-action-node-check-point-config",template:'
\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Ze extends s{constructor(e,t,n,o){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=n,this.translate=o,this.tbelEnabled=Y(this.store).tbelEnabled,this.scriptLanguage=d,this.changeScript=new r,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-details-function"}configForm(){return this.clearAlarmConfigForm}onConfigurationSet(e){this.clearAlarmConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:d.JS,[D.required]],alarmDetailsBuildJs:[e?e.alarmDetailsBuildJs:null,[]],alarmDetailsBuildTbel:[e?e.alarmDetailsBuildTbel:null,[]],alarmType:[e?e.alarmType:null,[D.required]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.clearAlarmConfigForm.get("scriptLang").value;t!==d.TBEL||this.tbelEnabled||(t=d.JS,this.clearAlarmConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.clearAlarmConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.clearAlarmConfigForm.get("alarmDetailsBuildJs").setValidators(t===d.JS?[D.required]:[]),this.clearAlarmConfigForm.get("alarmDetailsBuildJs").updateValueAndValidity({emitEvent:e}),this.clearAlarmConfigForm.get("alarmDetailsBuildTbel").setValidators(t===d.TBEL?[D.required]:[]),this.clearAlarmConfigForm.get("alarmDetailsBuildTbel").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=d.JS)),e}testScript(e){const t=this.clearAlarmConfigForm.get("scriptLang").value,n=t===d.JS?"alarmDetailsBuildJs":"alarmDetailsBuildTbel",r=t===d.JS?"rulenode/clear_alarm_node_script_fn":"rulenode/tbel/clear_alarm_node_script_fn",o=this.clearAlarmConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(o,"json",this.translate.instant("tb.rulenode.details"),"Details",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.clearAlarmConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.clearAlarmConfigForm.get("scriptLang").value===d.JS&&this.jsFuncComponent.validateOnSubmit()}}e("ClearAlarmConfigComponent",Ze),Ze.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ze,deps:[{token:G.Store},{token:E.UntypedFormBuilder},{token:W.NodeScriptTestService},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),Ze.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Ze,selector:"tb-action-node-clear-alarm-config",viewQueries:[{propertyName:"jsFuncComponent",first:!0,predicate:["jsFuncComponent"],descendants:!0},{propertyName:"tbelFuncComponent",first:!0,predicate:["tbelFuncComponent"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n \n \n \n \n \n \n
\n \n
\n \n tb.rulenode.alarm-type\n \n \n {{ \'tb.rulenode.alarm-type-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ne.JsFuncComponent,selector:"tb-js-func",inputs:["functionTitle","functionName","functionArgs","validationArgs","resultType","disabled","fillHeight","minHeight","editorCompleter","globalVariables","disableUndefinedCheck","helpId","scriptLanguage","noValidate","required"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:ie.TbScriptLangComponent,selector:"tb-script-lang",inputs:["disabled"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ze,decorators:[{type:n,args:[{selector:"tb-action-node-clear-alarm-config",template:'
\n \n \n \n \n \n \n \n
\n \n
\n \n tb.rulenode.alarm-type\n \n \n {{ \'tb.rulenode.alarm-type-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder},{type:W.NodeScriptTestService},{type:H.TranslateService}]},propDecorators:{jsFuncComponent:[{type:o,args:["jsFuncComponent",{static:!1}]}],tbelFuncComponent:[{type:o,args:["tbelFuncComponent",{static:!1}]}]}});class et extends s{constructor(e,t,n,o){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=n,this.translate=o,this.alarmSeverities=Object.keys(c),this.alarmSeverityTranslationMap=f,this.separatorKeysCodes=[le,se,me],this.tbelEnabled=Y(this.store).tbelEnabled,this.scriptLanguage=d,this.changeScript=new r,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-details-function"}configForm(){return this.createAlarmConfigForm}onConfigurationSet(e){this.createAlarmConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:d.JS,[D.required]],alarmDetailsBuildJs:[e?e.alarmDetailsBuildJs:null,[]],alarmDetailsBuildTbel:[e?e.alarmDetailsBuildTbel:null,[]],useMessageAlarmData:[!!e&&e.useMessageAlarmData,[]],overwriteAlarmDetails:[!!e&&e.overwriteAlarmDetails,[]],alarmType:[e?e.alarmType:null,[]],severity:[e?e.severity:null,[]],propagate:[!!e&&e.propagate,[]],relationTypes:[e?e.relationTypes:null,[]],propagateToOwner:[!!e&&e.propagateToOwner,[]],propagateToTenant:[!!e&&e.propagateToTenant,[]],dynamicSeverity:!1}),this.createAlarmConfigForm.get("dynamicSeverity").valueChanges.subscribe((e=>{e?this.createAlarmConfigForm.get("severity").patchValue("",{emitEvent:!1}):this.createAlarmConfigForm.get("severity").patchValue(this.alarmSeverities[0],{emitEvent:!1})}))}validatorTriggers(){return["useMessageAlarmData","overwriteAlarmDetails","scriptLang"]}updateValidators(e){const t=this.createAlarmConfigForm.get("useMessageAlarmData").value,n=this.createAlarmConfigForm.get("overwriteAlarmDetails").value;t?(this.createAlarmConfigForm.get("alarmType").setValidators([]),this.createAlarmConfigForm.get("severity").setValidators([])):(this.createAlarmConfigForm.get("alarmType").setValidators([D.required]),this.createAlarmConfigForm.get("severity").setValidators([D.required])),this.createAlarmConfigForm.get("alarmType").updateValueAndValidity({emitEvent:e}),this.createAlarmConfigForm.get("severity").updateValueAndValidity({emitEvent:e});let r=this.createAlarmConfigForm.get("scriptLang").value;r!==d.TBEL||this.tbelEnabled||(r=d.JS,this.createAlarmConfigForm.get("scriptLang").patchValue(r,{emitEvent:!1}),setTimeout((()=>{this.createAlarmConfigForm.updateValueAndValidity({emitEvent:!0})})));const o=!1===t||!0===n;this.createAlarmConfigForm.get("alarmDetailsBuildJs").setValidators(o&&r===d.JS?[D.required]:[]),this.createAlarmConfigForm.get("alarmDetailsBuildTbel").setValidators(o&&r===d.TBEL?[D.required]:[]),this.createAlarmConfigForm.get("alarmDetailsBuildJs").updateValueAndValidity({emitEvent:e}),this.createAlarmConfigForm.get("alarmDetailsBuildTbel").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=d.JS)),e}testScript(e){const t=this.createAlarmConfigForm.get("scriptLang").value,n=t===d.JS?"alarmDetailsBuildJs":"alarmDetailsBuildTbel",r=t===d.JS?"rulenode/create_alarm_node_script_fn":"rulenode/tbel/create_alarm_node_script_fn",o=this.createAlarmConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(o,"json",this.translate.instant("tb.rulenode.details"),"Details",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.createAlarmConfigForm.get(n).setValue(e),this.changeScript.emit())}))}removeKey(e,t){const n=this.createAlarmConfigForm.get(t).value,r=n.indexOf(e);r>=0&&(n.splice(r,1),this.createAlarmConfigForm.get(t).setValue(n,{emitEvent:!0}))}addKey(e,t){const n=e.input;let r=e.value;if((r||"").trim()){r=r.trim();let e=this.createAlarmConfigForm.get(t).value;e&&-1!==e.indexOf(r)||(e||(e=[]),e.push(r),this.createAlarmConfigForm.get(t).setValue(e,{emitEvent:!0}))}n&&(n.value="")}onValidate(){const e=this.createAlarmConfigForm.get("useMessageAlarmData").value,t=this.createAlarmConfigForm.get("overwriteAlarmDetails").value;if(!e||t){this.createAlarmConfigForm.get("scriptLang").value===d.JS&&this.jsFuncComponent.validateOnSubmit()}}}e("CreateAlarmConfigComponent",et),et.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:et,deps:[{token:G.Store},{token:E.UntypedFormBuilder},{token:W.NodeScriptTestService},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),et.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:et,selector:"tb-action-node-create-alarm-config",viewQueries:[{propertyName:"jsFuncComponent",first:!0,predicate:["jsFuncComponent"],descendants:!0},{propertyName:"tbelFuncComponent",first:!0,predicate:["tbelFuncComponent"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n {{ \'tb.rulenode.use-message-alarm-data\' | translate }}\n \n \n {{ \'tb.rulenode.overwrite-alarm-details\' | translate }}\n \n
\n \n \n \n \n \n \n \n
\n \n
\n
\n
\n \n tb.rulenode.alarm-type\n \n \n {{ \'tb.rulenode.alarm-type-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.use-alarm-severity-pattern\' | translate }}\n \n \n tb.rulenode.alarm-severity\n \n \n {{ alarmSeverityTranslationMap.get(severity) | translate }}\n \n \n \n {{ \'tb.rulenode.alarm-severity-required\' | translate }}\n \n \n \n tb.rulenode.alarm-severity-pattern\n \n \n {{ \'tb.rulenode.alarm-severity-required\' | translate }}\n \n \n \n \n {{ \'tb.rulenode.propagate\' | translate }}\n \n
\n \n tb.rulenode.relation-types-list\n \n \n {{key}}\n close\n \n \n \n tb.rulenode.relation-types-list-hint\n \n
\n \n {{ \'tb.rulenode.propagate-to-owner\' | translate }}\n \n \n {{ \'tb.rulenode.propagate-to-tenant\' | translate }}\n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ne.JsFuncComponent,selector:"tb-js-func",inputs:["functionTitle","functionName","functionArgs","validationArgs","resultType","disabled","fillHeight","minHeight","editorCompleter","globalVariables","disableUndefinedCheck","helpId","scriptLanguage","noValidate","required"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"component",type:ue.MatChipGrid,selector:"mat-chip-grid",inputs:["tabIndex","disabled","placeholder","required","value","errorStateMatcher"],outputs:["change","valueChange"]},{kind:"directive",type:ue.MatChipInput,selector:"input[matChipInputFor]",inputs:["matChipInputFor","matChipInputAddOnBlur","matChipInputSeparatorKeyCodes","placeholder","id","disabled"],outputs:["matChipInputTokenEnd"],exportAs:["matChipInput","matChipInputFor"]},{kind:"directive",type:ue.MatChipRemove,selector:"[matChipRemove]"},{kind:"component",type:ue.MatChipRow,selector:"mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]",inputs:["color","disabled","disableRipple","tabIndex","editable"],outputs:["edited"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:ie.TbScriptLangComponent,selector:"tb-script-lang",inputs:["disabled"]},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:et,decorators:[{type:n,args:[{selector:"tb-action-node-create-alarm-config",template:'
\n \n {{ \'tb.rulenode.use-message-alarm-data\' | translate }}\n \n \n {{ \'tb.rulenode.overwrite-alarm-details\' | translate }}\n \n
\n \n \n \n \n \n \n \n
\n \n
\n
\n
\n \n tb.rulenode.alarm-type\n \n \n {{ \'tb.rulenode.alarm-type-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.use-alarm-severity-pattern\' | translate }}\n \n \n tb.rulenode.alarm-severity\n \n \n {{ alarmSeverityTranslationMap.get(severity) | translate }}\n \n \n \n {{ \'tb.rulenode.alarm-severity-required\' | translate }}\n \n \n \n tb.rulenode.alarm-severity-pattern\n \n \n {{ \'tb.rulenode.alarm-severity-required\' | translate }}\n \n \n \n \n {{ \'tb.rulenode.propagate\' | translate }}\n \n
\n \n tb.rulenode.relation-types-list\n \n \n {{key}}\n close\n \n \n \n tb.rulenode.relation-types-list-hint\n \n
\n \n {{ \'tb.rulenode.propagate-to-owner\' | translate }}\n \n \n {{ \'tb.rulenode.propagate-to-tenant\' | translate }}\n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder},{type:W.NodeScriptTestService},{type:H.TranslateService}]},propDecorators:{jsFuncComponent:[{type:o,args:["jsFuncComponent",{static:!1}]}],tbelFuncComponent:[{type:o,args:["tbelFuncComponent",{static:!1}]}]}});class tt extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.keys(g),this.directionTypeTranslations=y,this.entityType=x}configForm(){return this.createRelationConfigForm}onConfigurationSet(e){this.createRelationConfigForm=this.fb.group({direction:[e?e.direction:null,[D.required]],entityType:[e?e.entityType:null,[D.required]],entityNamePattern:[e?e.entityNamePattern:null,[]],entityTypePattern:[e?e.entityTypePattern:null,[]],relationType:[e?e.relationType:null,[D.required]],createEntityIfNotExists:[!!e&&e.createEntityIfNotExists,[]],removeCurrentRelations:[!!e&&e.removeCurrentRelations,[]],changeOriginatorToRelatedEntity:[!!e&&e.changeOriginatorToRelatedEntity,[]],entityCacheExpiration:[e?e.entityCacheExpiration:null,[D.required,D.min(0)]]})}validatorTriggers(){return["entityType"]}updateValidators(e){const t=this.createRelationConfigForm.get("entityType").value;t?this.createRelationConfigForm.get("entityNamePattern").setValidators([D.required,D.pattern(/.*\S.*/)]):this.createRelationConfigForm.get("entityNamePattern").setValidators([]),!t||t!==x.DEVICE&&t!==x.ASSET?this.createRelationConfigForm.get("entityTypePattern").setValidators([]):this.createRelationConfigForm.get("entityTypePattern").setValidators([D.required,D.pattern(/.*\S.*/)]),this.createRelationConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e}),this.createRelationConfigForm.get("entityTypePattern").updateValueAndValidity({emitEvent:e})}prepareOutputConfig(e){return e.entityNamePattern=e.entityNamePattern?e.entityNamePattern.trim():null,e.entityTypePattern=e.entityTypePattern?e.entityTypePattern.trim():null,e}}e("CreateRelationConfigComponent",tt),tt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:tt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),tt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:tt,selector:"tb-action-node-create-relation-config",usesInheritance:!0,ngImport:t,template:'
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.entity-name-pattern\n \n \n {{ \'tb.rulenode.entity-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.entity-type-pattern\n \n \n {{ \'tb.rulenode.entity-type-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n tb.rulenode.relation-type-pattern\n \n \n {{ \'tb.rulenode.relation-type-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n {{ \'tb.rulenode.create-entity-if-not-exists\' | translate }}\n \n
tb.rulenode.create-entity-if-not-exists-hint
\n
\n \n {{ \'tb.rulenode.remove-current-relations\' | translate }}\n \n
tb.rulenode.remove-current-relations-hint
\n \n {{ \'tb.rulenode.change-originator-to-related-entity\' | translate }}\n \n
tb.rulenode.change-originator-to-related-entity-hint
\n \n tb.rulenode.entity-cache-expiration\n \n \n {{ \'tb.rulenode.entity-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.entity-cache-expiration-range\' | translate }}\n \n tb.rulenode.entity-cache-expiration-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:de.EntityTypeSelectComponent,selector:"tb-entity-type-select",inputs:["allowedEntityTypes","useAliasEntityTypes","filterAllowedEntityTypes","showLabel","required","disabled"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:tt,decorators:[{type:n,args:[{selector:"tb-action-node-create-relation-config",template:'
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.entity-name-pattern\n \n \n {{ \'tb.rulenode.entity-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.entity-type-pattern\n \n \n {{ \'tb.rulenode.entity-type-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n tb.rulenode.relation-type-pattern\n \n \n {{ \'tb.rulenode.relation-type-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n {{ \'tb.rulenode.create-entity-if-not-exists\' | translate }}\n \n
tb.rulenode.create-entity-if-not-exists-hint
\n
\n \n {{ \'tb.rulenode.remove-current-relations\' | translate }}\n \n
tb.rulenode.remove-current-relations-hint
\n \n {{ \'tb.rulenode.change-originator-to-related-entity\' | translate }}\n \n
tb.rulenode.change-originator-to-related-entity-hint
\n \n tb.rulenode.entity-cache-expiration\n \n \n {{ \'tb.rulenode.entity-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.entity-cache-expiration-range\' | translate }}\n \n tb.rulenode.entity-cache-expiration-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class nt extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.keys(g),this.directionTypeTranslations=y,this.entityType=x}configForm(){return this.deleteRelationConfigForm}onConfigurationSet(e){this.deleteRelationConfigForm=this.fb.group({deleteForSingleEntity:[!!e&&e.deleteForSingleEntity,[]],direction:[e?e.direction:null,[D.required]],entityType:[e?e.entityType:null,[]],entityNamePattern:[e?e.entityNamePattern:null,[]],relationType:[e?e.relationType:null,[D.required]],entityCacheExpiration:[e?e.entityCacheExpiration:null,[D.required,D.min(0)]]})}validatorTriggers(){return["deleteForSingleEntity","entityType"]}updateValidators(e){const t=this.deleteRelationConfigForm.get("deleteForSingleEntity").value,n=this.deleteRelationConfigForm.get("entityType").value;t?this.deleteRelationConfigForm.get("entityType").setValidators([D.required]):this.deleteRelationConfigForm.get("entityType").setValidators([]),t&&n?this.deleteRelationConfigForm.get("entityNamePattern").setValidators([D.required,D.pattern(/.*\S.*/)]):this.deleteRelationConfigForm.get("entityNamePattern").setValidators([]),this.deleteRelationConfigForm.get("entityType").updateValueAndValidity({emitEvent:!1}),this.deleteRelationConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e})}prepareOutputConfig(e){return e.entityNamePattern=e.entityNamePattern?e.entityNamePattern.trim():null,e}}e("DeleteRelationConfigComponent",nt),nt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:nt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),nt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:nt,selector:"tb-action-node-delete-relation-config",usesInheritance:!0,ngImport:t,template:'
\n \n {{ \'tb.rulenode.delete-relation-to-specific-entity\' | translate }}\n \n
tb.rulenode.delete-relation-hint
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.entity-name-pattern\n \n \n {{ \'tb.rulenode.entity-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n tb.rulenode.relation-type-pattern\n \n \n {{ \'tb.rulenode.relation-type-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.entity-cache-expiration\n \n \n {{ \'tb.rulenode.entity-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.entity-cache-expiration-range\' | translate }}\n \n tb.rulenode.entity-cache-expiration-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:de.EntityTypeSelectComponent,selector:"tb-entity-type-select",inputs:["allowedEntityTypes","useAliasEntityTypes","filterAllowedEntityTypes","showLabel","required","disabled"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:nt,decorators:[{type:n,args:[{selector:"tb-action-node-delete-relation-config",template:'
\n \n {{ \'tb.rulenode.delete-relation-to-specific-entity\' | translate }}\n \n
tb.rulenode.delete-relation-hint
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.entity-name-pattern\n \n \n {{ \'tb.rulenode.entity-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n tb.rulenode.relation-type-pattern\n \n \n {{ \'tb.rulenode.relation-type-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.entity-cache-expiration\n \n \n {{ \'tb.rulenode.entity-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.entity-cache-expiration-range\' | translate }}\n \n tb.rulenode.entity-cache-expiration-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class rt extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.deviceProfile}onConfigurationSet(e){this.deviceProfile=this.fb.group({persistAlarmRulesState:[!!e&&e.persistAlarmRulesState,D.required],fetchAlarmRulesStateOnStart:[!!e&&e.fetchAlarmRulesStateOnStart,D.required]})}}e("DeviceProfileConfigComponent",rt),rt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:rt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),rt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:rt,selector:"tb-device-profile-config",usesInheritance:!0,ngImport:t,template:'
\n \n {{ \'tb.rulenode.persist-alarm-rules\' | translate }}\n \n \n {{ \'tb.rulenode.fetch-alarm-rules\' | translate }}\n \n
\n',dependencies:[{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:rt,decorators:[{type:n,args:[{selector:"tb-device-profile-config",template:'
\n \n {{ \'tb.rulenode.persist-alarm-rules\' | translate }}\n \n \n {{ \'tb.rulenode.fetch-alarm-rules\' | translate }}\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class ot extends s{constructor(e,t,n,o){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=n,this.translate=o,this.tbelEnabled=Y(this.store).tbelEnabled,this.scriptLanguage=d,this.changeScript=new r,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-generator-function",this.serviceType=p.TB_RULE_ENGINE}configForm(){return this.generatorConfigForm}onConfigurationSet(e){this.generatorConfigForm=this.fb.group({msgCount:[e?e.msgCount:null,[D.required,D.min(0)]],periodInSeconds:[e?e.periodInSeconds:null,[D.required,D.min(1)]],originator:[e?e.originator:null,[]],scriptLang:[e?e.scriptLang:d.JS,[D.required]],jsScript:[e?e.jsScript:null,[]],tbelScript:[e?e.tbelScript:null,[]],queueName:[e?e.queueName:null,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.generatorConfigForm.get("scriptLang").value;t!==d.TBEL||this.tbelEnabled||(t=d.JS,this.generatorConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.generatorConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.generatorConfigForm.get("jsScript").setValidators(t===d.JS?[D.required]:[]),this.generatorConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.generatorConfigForm.get("tbelScript").setValidators(t===d.TBEL?[D.required]:[]),this.generatorConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=d.JS),e.originatorId&&e.originatorType?e.originator={id:e.originatorId,entityType:e.originatorType}:e.originator=null,delete e.originatorId,delete e.originatorType),e}prepareOutputConfig(e){return e.originator?(e.originatorId=e.originator.id,e.originatorType=e.originator.entityType):(e.originatorId=null,e.originatorType=null),delete e.originator,e}testScript(e){const t=this.generatorConfigForm.get("scriptLang").value,n=t===d.JS?"jsScript":"tbelScript",r=t===d.JS?"rulenode/generator_node_script_fn":"rulenode/tbel/generator_node_script_fn",o=this.generatorConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(o,"generate",this.translate.instant("tb.rulenode.generator"),"Generate",["prevMsg","prevMetadata","prevMsgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.generatorConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.generatorConfigForm.get("scriptLang").value===d.JS&&this.jsFuncComponent.validateOnSubmit()}}var at;e("GeneratorConfigComponent",ot),ot.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ot,deps:[{token:G.Store},{token:E.UntypedFormBuilder},{token:W.NodeScriptTestService},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),ot.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:ot,selector:"tb-action-node-generator-config",viewQueries:[{propertyName:"jsFuncComponent",first:!0,predicate:["jsFuncComponent"],descendants:!0},{propertyName:"tbelFuncComponent",first:!0,predicate:["tbelFuncComponent"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.message-count\n \n \n {{ \'tb.rulenode.message-count-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-message-count-message\' | translate }}\n \n \n \n tb.rulenode.period-seconds\n \n \n {{ \'tb.rulenode.period-seconds-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-period-seconds-message\' | translate }}\n \n \n
\n \n \n \n
\n\n \n \n\n \n \n \n \n \n \n \n
\n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ce.EntitySelectComponent,selector:"tb-entity-select",inputs:["allowedEntityTypes","useAliasEntityTypes","required","disabled"]},{kind:"component",type:J.QueueAutocompleteComponent,selector:"tb-queue-autocomplete",inputs:["labelText","requiredText","autocompleteHint","subscriptSizing","required","queueType","disabled"]},{kind:"component",type:ne.JsFuncComponent,selector:"tb-js-func",inputs:["functionTitle","functionName","functionArgs","validationArgs","resultType","disabled","fillHeight","minHeight","editorCompleter","globalVariables","disableUndefinedCheck","helpId","scriptLanguage","noValidate","required"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:ie.TbScriptLangComponent,selector:"tb-script-lang",inputs:["disabled"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ot,decorators:[{type:n,args:[{selector:"tb-action-node-generator-config",template:'
\n \n tb.rulenode.message-count\n \n \n {{ \'tb.rulenode.message-count-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-message-count-message\' | translate }}\n \n \n \n tb.rulenode.period-seconds\n \n \n {{ \'tb.rulenode.period-seconds-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-period-seconds-message\' | translate }}\n \n \n
\n \n \n \n
\n\n \n \n\n \n \n \n \n \n \n \n
\n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder},{type:W.NodeScriptTestService},{type:H.TranslateService}]},propDecorators:{jsFuncComponent:[{type:o,args:["jsFuncComponent",{static:!1}]}],tbelFuncComponent:[{type:o,args:["tbelFuncComponent",{static:!1}]}]}}),function(e){e.CUSTOMER="CUSTOMER",e.TENANT="TENANT",e.RELATED="RELATED",e.ALARM_ORIGINATOR="ALARM_ORIGINATOR",e.ENTITY="ENTITY"}(at||(at={}));const it=new Map([[at.CUSTOMER,"tb.rulenode.originator-customer"],[at.TENANT,"tb.rulenode.originator-tenant"],[at.RELATED,"tb.rulenode.originator-related"],[at.ALARM_ORIGINATOR,"tb.rulenode.originator-alarm-originator"],[at.ENTITY,"tb.rulenode.originator-entity"]]);var lt;!function(e){e.CIRCLE="CIRCLE",e.POLYGON="POLYGON"}(lt||(lt={}));const st=new Map([[lt.CIRCLE,"tb.rulenode.perimeter-circle"],[lt.POLYGON,"tb.rulenode.perimeter-polygon"]]);var mt;!function(e){e.MILLISECONDS="MILLISECONDS",e.SECONDS="SECONDS",e.MINUTES="MINUTES",e.HOURS="HOURS",e.DAYS="DAYS"}(mt||(mt={}));const ut=new Map([[mt.MILLISECONDS,"tb.rulenode.time-unit-milliseconds"],[mt.SECONDS,"tb.rulenode.time-unit-seconds"],[mt.MINUTES,"tb.rulenode.time-unit-minutes"],[mt.HOURS,"tb.rulenode.time-unit-hours"],[mt.DAYS,"tb.rulenode.time-unit-days"]]);var pt;!function(e){e.METER="METER",e.KILOMETER="KILOMETER",e.FOOT="FOOT",e.MILE="MILE",e.NAUTICAL_MILE="NAUTICAL_MILE"}(pt||(pt={}));const dt=new Map([[pt.METER,"tb.rulenode.range-unit-meter"],[pt.KILOMETER,"tb.rulenode.range-unit-kilometer"],[pt.FOOT,"tb.rulenode.range-unit-foot"],[pt.MILE,"tb.rulenode.range-unit-mile"],[pt.NAUTICAL_MILE,"tb.rulenode.range-unit-nautical-mile"]]);var ct;!function(e){e.ID="ID",e.TITLE="TITLE",e.COUNTRY="COUNTRY",e.STATE="STATE",e.CITY="CITY",e.ZIP="ZIP",e.ADDRESS="ADDRESS",e.ADDRESS2="ADDRESS2",e.PHONE="PHONE",e.EMAIL="EMAIL",e.ADDITIONAL_INFO="ADDITIONAL_INFO"}(ct||(ct={}));const ft=new Map([[ct.ID,"tb.rulenode.entity-details-id"],[ct.TITLE,"tb.rulenode.entity-details-title"],[ct.COUNTRY,"tb.rulenode.entity-details-country"],[ct.STATE,"tb.rulenode.entity-details-state"],[ct.CITY,"tb.rulenode.entity-details-city"],[ct.ZIP,"tb.rulenode.entity-details-zip"],[ct.ADDRESS,"tb.rulenode.entity-details-address"],[ct.ADDRESS2,"tb.rulenode.entity-details-address2"],[ct.PHONE,"tb.rulenode.entity-details-phone"],[ct.EMAIL,"tb.rulenode.entity-details-email"],[ct.ADDITIONAL_INFO,"tb.rulenode.entity-details-additional_info"]]);var gt;!function(e){e.FIRST="FIRST",e.LAST="LAST",e.ALL="ALL"}(gt||(gt={}));const yt=new Map([[gt.FIRST,"tb.rulenode.first"],[gt.LAST,"tb.rulenode.last"],[gt.ALL,"tb.rulenode.all"]]),xt=new Map([[gt.FIRST,"tb.rulenode.first-mode-hint"],[gt.LAST,"tb.rulenode.last-mode-hint"],[gt.ALL,"tb.rulenode.all-mode-hint"]]);var bt,ht;!function(e){e.ASC="ASC",e.DESC="DESC"}(bt||(bt={})),function(e){e.ATTRIBUTES="ATTRIBUTES",e.LATEST_TELEMETRY="LATEST_TELEMETRY",e.FIELDS="FIELDS"}(ht||(ht={}));const vt=new Map([[ht.ATTRIBUTES,"tb.rulenode.attributes"],[ht.LATEST_TELEMETRY,"tb.rulenode.latest-telemetry"],[ht.FIELDS,"tb.rulenode.fields"]]),Ct=new Map([[ht.ATTRIBUTES,"tb.rulenode.add-mapped-attribute-to"],[ht.LATEST_TELEMETRY,"tb.rulenode.add-mapped-latest-telemetry-to"],[ht.FIELDS,"tb.rulenode.add-mapped-fields-to"]]),Ft=new Map([[bt.ASC,"tb.rulenode.ascending"],[bt.DESC,"tb.rulenode.descending"]]);var kt;!function(e){e.STANDARD="STANDARD",e.FIFO="FIFO"}(kt||(kt={}));const Lt=new Map([[kt.STANDARD,"tb.rulenode.sqs-queue-standard"],[kt.FIFO,"tb.rulenode.sqs-queue-fifo"]]),Tt=["anonymous","basic","cert.PEM"],It=new Map([["anonymous","tb.rulenode.credentials-anonymous"],["basic","tb.rulenode.credentials-basic"],["cert.PEM","tb.rulenode.credentials-pem"]]),Nt=["sas","cert.PEM"],St=new Map([["sas","tb.rulenode.credentials-sas"],["cert.PEM","tb.rulenode.credentials-pem"]]);var qt;!function(e){e.GET="GET",e.POST="POST",e.PUT="PUT",e.DELETE="DELETE"}(qt||(qt={}));const At=["US-ASCII","ISO-8859-1","UTF-8","UTF-16BE","UTF-16LE","UTF-16"],Mt=new Map([["US-ASCII","tb.rulenode.charset-us-ascii"],["ISO-8859-1","tb.rulenode.charset-iso-8859-1"],["UTF-8","tb.rulenode.charset-utf-8"],["UTF-16BE","tb.rulenode.charset-utf-16be"],["UTF-16LE","tb.rulenode.charset-utf-16le"],["UTF-16","tb.rulenode.charset-utf-16"]]);var Gt;!function(e){e.CUSTOM="CUSTOM",e.ADD="ADD",e.SUB="SUB",e.MULT="MULT",e.DIV="DIV",e.SIN="SIN",e.SINH="SINH",e.COS="COS",e.COSH="COSH",e.TAN="TAN",e.TANH="TANH",e.ACOS="ACOS",e.ASIN="ASIN",e.ATAN="ATAN",e.ATAN2="ATAN2",e.EXP="EXP",e.EXPM1="EXPM1",e.SQRT="SQRT",e.CBRT="CBRT",e.GET_EXP="GET_EXP",e.HYPOT="HYPOT",e.LOG="LOG",e.LOG10="LOG10",e.LOG1P="LOG1P",e.CEIL="CEIL",e.FLOOR="FLOOR",e.FLOOR_DIV="FLOOR_DIV",e.FLOOR_MOD="FLOOR_MOD",e.ABS="ABS",e.MIN="MIN",e.MAX="MAX",e.POW="POW",e.SIGNUM="SIGNUM",e.RAD="RAD",e.DEG="DEG"}(Gt||(Gt={}));const Et=new Map([[Gt.CUSTOM,{value:Gt.CUSTOM,name:"Custom Function",description:"Use this function to specify complex mathematical expression.",minArgs:1,maxArgs:16}],[Gt.ADD,{value:Gt.ADD,name:"Addition",description:"x + y",minArgs:2,maxArgs:2}],[Gt.SUB,{value:Gt.SUB,name:"Subtraction",description:"x - y",minArgs:2,maxArgs:2}],[Gt.MULT,{value:Gt.MULT,name:"Multiplication",description:"x * y",minArgs:2,maxArgs:2}],[Gt.DIV,{value:Gt.DIV,name:"Division",description:"x / y",minArgs:2,maxArgs:2}],[Gt.SIN,{value:Gt.SIN,name:"Sine",description:"Returns the trigonometric sine of an angle in radians.",minArgs:1,maxArgs:1}],[Gt.SINH,{value:Gt.SINH,name:"Hyperbolic sine",description:"Returns the hyperbolic sine of an argument.",minArgs:1,maxArgs:1}],[Gt.COS,{value:Gt.COS,name:"Cosine",description:"Returns the trigonometric cosine of an angle in radians.",minArgs:1,maxArgs:1}],[Gt.COSH,{value:Gt.COSH,name:"Hyperbolic cosine",description:"Returns the hyperbolic cosine of an argument.",minArgs:1,maxArgs:1}],[Gt.TAN,{value:Gt.TAN,name:"Tangent",description:"Returns the trigonometric tangent of an angle in radians",minArgs:1,maxArgs:1}],[Gt.TANH,{value:Gt.TANH,name:"Hyperbolic tangent",description:"Returns the hyperbolic tangent of an argument",minArgs:1,maxArgs:1}],[Gt.ACOS,{value:Gt.ACOS,name:"Arc cosine",description:"Returns the arc cosine of an argument",minArgs:1,maxArgs:1}],[Gt.ASIN,{value:Gt.ASIN,name:"Arc sine",description:"Returns the arc sine of an argument",minArgs:1,maxArgs:1}],[Gt.ATAN,{value:Gt.ATAN,name:"Arc tangent",description:"Returns the arc tangent of an argument",minArgs:1,maxArgs:1}],[Gt.ATAN2,{value:Gt.ATAN2,name:"2-argument arc tangent",description:"Returns the angle theta from the conversion of rectangular coordinates (x, y) to polar coordinates (r, theta)",minArgs:2,maxArgs:2}],[Gt.EXP,{value:Gt.EXP,name:"Exponential",description:"Returns Euler's number e raised to the power of an argument",minArgs:1,maxArgs:1}],[Gt.EXPM1,{value:Gt.EXPM1,name:"Exponential minus one",description:"Returns Euler's number e raised to the power of an argument minus one",minArgs:1,maxArgs:1}],[Gt.SQRT,{value:Gt.SQRT,name:"Square",description:"Returns the correctly rounded positive square root of an argument",minArgs:1,maxArgs:1}],[Gt.CBRT,{value:Gt.CBRT,name:"Cube root",description:"Returns the cube root of an argument",minArgs:1,maxArgs:1}],[Gt.GET_EXP,{value:Gt.GET_EXP,name:"Get exponent",description:"Returns the unbiased exponent used in the representation of an argument",minArgs:1,maxArgs:1}],[Gt.HYPOT,{value:Gt.HYPOT,name:"Square root",description:"Returns the square root of the squares of the arguments",minArgs:2,maxArgs:2}],[Gt.LOG,{value:Gt.LOG,name:"Logarithm",description:"Returns the natural logarithm of an argument",minArgs:1,maxArgs:1}],[Gt.LOG10,{value:Gt.LOG10,name:"Base 10 logarithm",description:"Returns the base 10 logarithm of an argument",minArgs:1,maxArgs:1}],[Gt.LOG1P,{value:Gt.LOG1P,name:"Logarithm of the sum",description:"Returns the natural logarithm of the sum of an argument",minArgs:1,maxArgs:1}],[Gt.CEIL,{value:Gt.CEIL,name:"Ceiling",description:"Returns the smallest (closest to negative infinity) of an argument",minArgs:1,maxArgs:1}],[Gt.FLOOR,{value:Gt.FLOOR,name:"Floor",description:"Returns the largest (closest to positive infinity) of an argument",minArgs:1,maxArgs:1}],[Gt.FLOOR_DIV,{value:Gt.FLOOR_DIV,name:"Floor division",description:"Returns the largest (closest to positive infinity) of the arguments",minArgs:2,maxArgs:2}],[Gt.FLOOR_MOD,{value:Gt.FLOOR_MOD,name:"Floor modulus",description:"Returns the floor modulus of the arguments",minArgs:2,maxArgs:2}],[Gt.ABS,{value:Gt.ABS,name:"Absolute",description:"Returns the absolute value of an argument",minArgs:1,maxArgs:1}],[Gt.MIN,{value:Gt.MIN,name:"Min",description:"Returns the smaller of the arguments",minArgs:2,maxArgs:2}],[Gt.MAX,{value:Gt.MAX,name:"Max",description:"Returns the greater of the arguments",minArgs:2,maxArgs:2}],[Gt.POW,{value:Gt.POW,name:"Raise to a power",description:"Returns the value of the first argument raised to the power of the second argument",minArgs:2,maxArgs:2}],[Gt.SIGNUM,{value:Gt.SIGNUM,name:"Sign of a real number",description:"Returns the signum function of the argument",minArgs:1,maxArgs:1}],[Gt.RAD,{value:Gt.RAD,name:"Radian",description:"Converts an angle measured in degrees to an approximately equivalent angle measured in radians",minArgs:1,maxArgs:1}],[Gt.DEG,{value:Gt.DEG,name:"Degrees",description:"Converts an angle measured in radians to an approximately equivalent angle measured in degrees.",minArgs:1,maxArgs:1}]]);var Dt,Vt,Pt;!function(e){e.MESSAGE_BODY="MESSAGE_BODY",e.MESSAGE_METADATA="MESSAGE_METADATA",e.ATTRIBUTE="ATTRIBUTE",e.TIME_SERIES="TIME_SERIES",e.CONSTANT="CONSTANT"}(Dt||(Dt={})),function(e){e.MESSAGE_BODY="MESSAGE_BODY",e.MESSAGE_METADATA="MESSAGE_METADATA",e.ATTRIBUTE="ATTRIBUTE",e.TIME_SERIES="TIME_SERIES"}(Vt||(Vt={})),function(e){e.DATA="DATA",e.METADATA="METADATA"}(Pt||(Pt={}));const wt=new Map([[Pt.DATA,"tb.rulenode.message"],[Pt.METADATA,"tb.rulenode.metadata"]]),Rt=new Map([[Dt.MESSAGE_BODY,{name:"tb.rulenode.message-body-type",description:"Fetch argument value from incoming message"}],[Dt.MESSAGE_METADATA,{name:"tb.rulenode.message-metadata-type",description:"Fetch argument value from incoming message metadata"}],[Dt.ATTRIBUTE,{name:"tb.rulenode.attribute-type",description:"Fetch attribute value from database"}],[Dt.TIME_SERIES,{name:"tb.rulenode.time-series-type",description:"Fetch latest time-series value from database"}],[Dt.CONSTANT,{name:"tb.rulenode.constant-type",description:"Define constant value"}]]),Ot=new Map([[Vt.MESSAGE_BODY,{name:"tb.rulenode.message-body-type",description:"Add result to the outgoing message"}],[Vt.MESSAGE_METADATA,{name:"tb.rulenode.message-metadata-type",description:"Add result to the outgoing message metadata"}],[Vt.ATTRIBUTE,{name:"tb.rulenode.attribute-type",description:"Store result as an entity attribute in the database"}],[Vt.TIME_SERIES,{name:"tb.rulenode.time-series-type",description:"Store result as an entity time-series in the database"}]]),Bt=["x","y","z","a","b","c","d","k","l","m","n","o","p","r","s","t"];var Kt,Ut;!function(e){e.SHARED_SCOPE="SHARED_SCOPE",e.SERVER_SCOPE="SERVER_SCOPE",e.CLIENT_SCOPE="CLIENT_SCOPE"}(Kt||(Kt={})),function(e){e.SHARED_SCOPE="SHARED_SCOPE",e.SERVER_SCOPE="SERVER_SCOPE"}(Ut||(Ut={}));const _t=new Map([[Kt.SHARED_SCOPE,"tb.rulenode.shared-scope"],[Kt.SERVER_SCOPE,"tb.rulenode.server-scope"],[Kt.CLIENT_SCOPE,"tb.rulenode.client-scope"]]);class Ht extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.perimeterType=lt,this.perimeterTypes=Object.keys(lt),this.perimeterTypeTranslationMap=st,this.rangeUnits=Object.keys(pt),this.rangeUnitTranslationMap=dt,this.timeUnits=Object.keys(mt),this.timeUnitsTranslationMap=ut}configForm(){return this.geoActionConfigForm}onConfigurationSet(e){this.geoActionConfigForm=this.fb.group({latitudeKeyName:[e?e.latitudeKeyName:null,[D.required]],longitudeKeyName:[e?e.longitudeKeyName:null,[D.required]],perimeterType:[e?e.perimeterType:null,[D.required]],fetchPerimeterInfoFromMessageMetadata:[!!e&&e.fetchPerimeterInfoFromMessageMetadata,[]],perimeterKeyName:[e?e.perimeterKeyName:null,[]],centerLatitude:[e?e.centerLatitude:null,[]],centerLongitude:[e?e.centerLatitude:null,[]],range:[e?e.range:null,[]],rangeUnit:[e?e.rangeUnit:null,[]],polygonsDefinition:[e?e.polygonsDefinition:null,[]],minInsideDuration:[e?e.minInsideDuration:null,[D.required,D.min(1),D.max(2147483647)]],minInsideDurationTimeUnit:[e?e.minInsideDurationTimeUnit:null,[D.required]],minOutsideDuration:[e?e.minOutsideDuration:null,[D.required,D.min(1),D.max(2147483647)]],minOutsideDurationTimeUnit:[e?e.minOutsideDurationTimeUnit:null,[D.required]]})}validatorTriggers(){return["fetchPerimeterInfoFromMessageMetadata","perimeterType"]}updateValidators(e){const t=this.geoActionConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value,n=this.geoActionConfigForm.get("perimeterType").value;t?this.geoActionConfigForm.get("perimeterKeyName").setValidators([D.required]):this.geoActionConfigForm.get("perimeterKeyName").setValidators([]),t||n!==lt.CIRCLE?(this.geoActionConfigForm.get("centerLatitude").setValidators([]),this.geoActionConfigForm.get("centerLongitude").setValidators([]),this.geoActionConfigForm.get("range").setValidators([]),this.geoActionConfigForm.get("rangeUnit").setValidators([])):(this.geoActionConfigForm.get("centerLatitude").setValidators([D.required,D.min(-90),D.max(90)]),this.geoActionConfigForm.get("centerLongitude").setValidators([D.required,D.min(-180),D.max(180)]),this.geoActionConfigForm.get("range").setValidators([D.required,D.min(0)]),this.geoActionConfigForm.get("rangeUnit").setValidators([D.required])),t||n!==lt.POLYGON?this.geoActionConfigForm.get("polygonsDefinition").setValidators([]):this.geoActionConfigForm.get("polygonsDefinition").setValidators([D.required]),this.geoActionConfigForm.get("perimeterKeyName").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("centerLatitude").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("centerLongitude").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("range").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("rangeUnit").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("polygonsDefinition").updateValueAndValidity({emitEvent:e})}}e("GpsGeoActionConfigComponent",Ht),Ht.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ht,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Ht.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Ht,selector:"tb-action-node-gps-geofencing-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.latitude-key-name\n \n \n {{ \'tb.rulenode.latitude-key-name-required\' | translate }}\n \n \n \n tb.rulenode.longitude-key-name\n \n \n {{ \'tb.rulenode.longitude-key-name-required\' | translate }}\n \n \n \n tb.rulenode.perimeter-type\n \n \n {{ perimeterTypeTranslationMap.get(type) | translate }}\n \n \n \n \n {{ \'tb.rulenode.fetch-perimeter-info-from-metadata\' | translate }}\n \n \n tb.rulenode.perimeter-key-name\n \n \n {{ \'tb.rulenode.perimeter-key-name-required\' | translate }}\n \n \n
\n
\n \n tb.rulenode.circle-center-latitude\n \n \n {{ \'tb.rulenode.circle-center-latitude-required\' | translate }}\n \n \n \n tb.rulenode.circle-center-longitude\n \n \n {{ \'tb.rulenode.circle-center-longitude-required\' | translate }}\n \n \n
\n
\n \n tb.rulenode.range\n \n \n {{ \'tb.rulenode.range-required\' | translate }}\n \n \n \n tb.rulenode.range-units\n \n \n {{ rangeUnitTranslationMap.get(type) | translate }}\n \n \n \n
\n
\n
\n \n tb.rulenode.polygon-definition\n \n \n {{ \'tb.rulenode.polygon-definition-required\' | translate }}\n \n \n
\n
\n \n tb.rulenode.min-inside-duration\n \n \n {{ \'tb.rulenode.min-inside-duration-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n tb.rulenode.min-inside-duration-time-unit\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n \n tb.rulenode.min-outside-duration\n \n \n {{ \'tb.rulenode.min-outside-duration-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n tb.rulenode.min-outside-duration-time-unit\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ht,decorators:[{type:n,args:[{selector:"tb-action-node-gps-geofencing-config",template:'
\n \n tb.rulenode.latitude-key-name\n \n \n {{ \'tb.rulenode.latitude-key-name-required\' | translate }}\n \n \n \n tb.rulenode.longitude-key-name\n \n \n {{ \'tb.rulenode.longitude-key-name-required\' | translate }}\n \n \n \n tb.rulenode.perimeter-type\n \n \n {{ perimeterTypeTranslationMap.get(type) | translate }}\n \n \n \n \n {{ \'tb.rulenode.fetch-perimeter-info-from-metadata\' | translate }}\n \n \n tb.rulenode.perimeter-key-name\n \n \n {{ \'tb.rulenode.perimeter-key-name-required\' | translate }}\n \n \n
\n
\n \n tb.rulenode.circle-center-latitude\n \n \n {{ \'tb.rulenode.circle-center-latitude-required\' | translate }}\n \n \n \n tb.rulenode.circle-center-longitude\n \n \n {{ \'tb.rulenode.circle-center-longitude-required\' | translate }}\n \n \n
\n
\n \n tb.rulenode.range\n \n \n {{ \'tb.rulenode.range-required\' | translate }}\n \n \n \n tb.rulenode.range-units\n \n \n {{ rangeUnitTranslationMap.get(type) | translate }}\n \n \n \n
\n
\n
\n \n tb.rulenode.polygon-definition\n \n \n {{ \'tb.rulenode.polygon-definition-required\' | translate }}\n \n \n
\n
\n \n tb.rulenode.min-inside-duration\n \n \n {{ \'tb.rulenode.min-inside-duration-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n tb.rulenode.min-inside-duration-time-unit\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n \n tb.rulenode.min-outside-duration\n \n \n {{ \'tb.rulenode.min-outside-duration-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n tb.rulenode.min-outside-duration-time-unit\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class zt extends s{constructor(e,t,n,o){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=n,this.translate=o,this.tbelEnabled=Y(this.store).tbelEnabled,this.scriptLanguage=d,this.changeScript=new r,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-to-string-function"}configForm(){return this.logConfigForm}onConfigurationSet(e){this.logConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:d.JS,[D.required]],jsScript:[e?e.jsScript:null,[]],tbelScript:[e?e.tbelScript:null,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.logConfigForm.get("scriptLang").value;t!==d.TBEL||this.tbelEnabled||(t=d.JS,this.logConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.logConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.logConfigForm.get("jsScript").setValidators(t===d.JS?[D.required]:[]),this.logConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.logConfigForm.get("tbelScript").setValidators(t===d.TBEL?[D.required]:[]),this.logConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=d.JS)),e}testScript(e){const t=this.logConfigForm.get("scriptLang").value,n=t===d.JS?"jsScript":"tbelScript",r=t===d.JS?"rulenode/log_node_script_fn":"rulenode/tbel/log_node_script_fn",o=this.logConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(o,"string",this.translate.instant("tb.rulenode.to-string"),"ToString",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.logConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.logConfigForm.get("scriptLang").value===d.JS&&this.jsFuncComponent.validateOnSubmit()}}e("LogConfigComponent",zt),zt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:zt,deps:[{token:G.Store},{token:E.UntypedFormBuilder},{token:W.NodeScriptTestService},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),zt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:zt,selector:"tb-action-node-log-config",viewQueries:[{propertyName:"jsFuncComponent",first:!0,predicate:["jsFuncComponent"],descendants:!0},{propertyName:"tbelFuncComponent",first:!0,predicate:["tbelFuncComponent"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n \n \n \n \n \n \n
\n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ne.JsFuncComponent,selector:"tb-js-func",inputs:["functionTitle","functionName","functionArgs","validationArgs","resultType","disabled","fillHeight","minHeight","editorCompleter","globalVariables","disableUndefinedCheck","helpId","scriptLanguage","noValidate","required"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:ie.TbScriptLangComponent,selector:"tb-script-lang",inputs:["disabled"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:zt,decorators:[{type:n,args:[{selector:"tb-action-node-log-config",template:'
\n \n \n \n \n \n \n \n
\n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder},{type:W.NodeScriptTestService},{type:H.TranslateService}]},propDecorators:{jsFuncComponent:[{type:o,args:["jsFuncComponent",{static:!1}]}],tbelFuncComponent:[{type:o,args:["tbelFuncComponent",{static:!1}]}]}});class jt extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.msgCountConfigForm}onConfigurationSet(e){this.msgCountConfigForm=this.fb.group({interval:[e?e.interval:null,[D.required,D.min(1)]],telemetryPrefix:[e?e.telemetryPrefix:null,[D.required]]})}}e("MsgCountConfigComponent",jt),jt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:jt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),jt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:jt,selector:"tb-action-node-msg-count-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.interval-seconds\n \n \n {{ \'tb.rulenode.interval-seconds-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-interval-seconds-message\' | translate }}\n \n \n \n tb.rulenode.output-timeseries-key-prefix\n \n \n {{ \'tb.rulenode.output-timeseries-key-prefix-required\' | translate }}\n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:jt,decorators:[{type:n,args:[{selector:"tb-action-node-msg-count-config",template:'
\n \n tb.rulenode.interval-seconds\n \n \n {{ \'tb.rulenode.interval-seconds-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-interval-seconds-message\' | translate }}\n \n \n \n tb.rulenode.output-timeseries-key-prefix\n \n \n {{ \'tb.rulenode.output-timeseries-key-prefix-required\' | translate }}\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Qt extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.msgDelayConfigForm}onConfigurationSet(e){this.msgDelayConfigForm=this.fb.group({useMetadataPeriodInSecondsPatterns:[!!e&&e.useMetadataPeriodInSecondsPatterns,[]],periodInSeconds:[e?e.periodInSeconds:null,[]],periodInSecondsPattern:[e?e.periodInSecondsPattern:null,[]],maxPendingMsgs:[e?e.maxPendingMsgs:null,[D.required,D.min(1),D.max(1e5)]]})}validatorTriggers(){return["useMetadataPeriodInSecondsPatterns"]}updateValidators(e){this.msgDelayConfigForm.get("useMetadataPeriodInSecondsPatterns").value?(this.msgDelayConfigForm.get("periodInSecondsPattern").setValidators([D.required]),this.msgDelayConfigForm.get("periodInSeconds").setValidators([])):(this.msgDelayConfigForm.get("periodInSecondsPattern").setValidators([]),this.msgDelayConfigForm.get("periodInSeconds").setValidators([D.required,D.min(0)])),this.msgDelayConfigForm.get("periodInSecondsPattern").updateValueAndValidity({emitEvent:e}),this.msgDelayConfigForm.get("periodInSeconds").updateValueAndValidity({emitEvent:e})}}e("MsgDelayConfigComponent",Qt),Qt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Qt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Qt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Qt,selector:"tb-action-node-msg-delay-config",usesInheritance:!0,ngImport:t,template:'
\n \n {{ \'tb.rulenode.use-metadata-period-in-seconds-patterns\' | translate }}\n \n
tb.rulenode.use-metadata-period-in-seconds-patterns-hint
\n \n tb.rulenode.period-seconds\n \n \n {{ \'tb.rulenode.period-seconds-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-period-0-seconds-message\' | translate }}\n \n \n \n \n tb.rulenode.period-in-seconds-pattern\n \n \n {{ \'tb.rulenode.period-in-seconds-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n \n tb.rulenode.max-pending-messages\n \n \n {{ \'tb.rulenode.max-pending-messages-required\' | translate }}\n \n \n {{ \'tb.rulenode.max-pending-messages-range\' | translate }}\n \n \n {{ \'tb.rulenode.max-pending-messages-range\' | translate }}\n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Qt,decorators:[{type:n,args:[{selector:"tb-action-node-msg-delay-config",template:'
\n \n {{ \'tb.rulenode.use-metadata-period-in-seconds-patterns\' | translate }}\n \n
tb.rulenode.use-metadata-period-in-seconds-patterns-hint
\n \n tb.rulenode.period-seconds\n \n \n {{ \'tb.rulenode.period-seconds-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-period-0-seconds-message\' | translate }}\n \n \n \n \n tb.rulenode.period-in-seconds-pattern\n \n \n {{ \'tb.rulenode.period-in-seconds-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n \n tb.rulenode.max-pending-messages\n \n \n {{ \'tb.rulenode.max-pending-messages-required\' | translate }}\n \n \n {{ \'tb.rulenode.max-pending-messages-range\' | translate }}\n \n \n {{ \'tb.rulenode.max-pending-messages-range\' | translate }}\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class $t extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopes=Object.keys(m),this.telemetryTypeTranslationsMap=u}configForm(){return this.pushToCloudConfigForm}onConfigurationSet(e){this.pushToCloudConfigForm=this.fb.group({scope:[e?e.scope:null,[D.required]]})}}e("PushToCloudConfigComponent",$t),$t.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:$t,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),$t.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:$t,selector:"tb-action-node-push-to-cloud-config",usesInheritance:!0,ngImport:t,template:'
\n \n attribute.attributes-scope\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:$t,decorators:[{type:n,args:[{selector:"tb-action-node-push-to-cloud-config",template:'
\n \n attribute.attributes-scope\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Jt extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopes=Object.keys(m),this.telemetryTypeTranslationsMap=u}configForm(){return this.pushToEdgeConfigForm}onConfigurationSet(e){this.pushToEdgeConfigForm=this.fb.group({scope:[e?e.scope:null,[D.required]]})}}e("PushToEdgeConfigComponent",Jt),Jt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Jt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Jt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Jt,selector:"tb-action-node-push-to-edge-config",usesInheritance:!0,ngImport:t,template:'
\n \n attribute.attributes-scope\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Jt,decorators:[{type:n,args:[{selector:"tb-action-node-push-to-edge-config",template:'
\n \n attribute.attributes-scope\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Yt extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.rpcReplyConfigForm}onConfigurationSet(e){this.rpcReplyConfigForm=this.fb.group({requestIdMetaDataAttribute:[e?e.requestIdMetaDataAttribute:null,[]]})}}e("RpcReplyConfigComponent",Yt),Yt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Yt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Yt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Yt,selector:"tb-action-node-rpc-reply-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.request-id-metadata-attribute\n \n \n
\n',dependencies:[{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Yt,decorators:[{type:n,args:[{selector:"tb-action-node-rpc-reply-config",template:'
\n \n tb.rulenode.request-id-metadata-attribute\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Wt extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.rpcRequestConfigForm}onConfigurationSet(e){this.rpcRequestConfigForm=this.fb.group({timeoutInSeconds:[e?e.timeoutInSeconds:null,[D.required,D.min(0)]]})}}e("RpcRequestConfigComponent",Wt),Wt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Wt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Wt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Wt,selector:"tb-action-node-rpc-request-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.timeout-sec\n \n \n {{ \'tb.rulenode.timeout-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-timeout-message\' | translate }}\n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Wt,decorators:[{type:n,args:[{selector:"tb-action-node-rpc-request-config",template:'
\n \n tb.rulenode.timeout-sec\n \n \n {{ \'tb.rulenode.timeout-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-timeout-message\' | translate }}\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Xt extends b{get required(){return this.requiredValue}set required(e){this.requiredValue=fe(e)}constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.propagateChange=null,this.valueChangeSubscription=null}ngOnInit(){this.ngControl=this.injector.get(V),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.kvListFormGroup=this.fb.group({}),this.kvListFormGroup.addControl("keyVals",this.fb.array([]))}keyValsFormArray(){return this.kvListFormGroup.get("keyVals")}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.kvListFormGroup.disable({emitEvent:!1}):this.kvListFormGroup.enable({emitEvent:!1})}writeValue(e){this.valueChangeSubscription&&this.valueChangeSubscription.unsubscribe();const t=[];if(e)for(const n of Object.keys(e))Object.prototype.hasOwnProperty.call(e,n)&&t.push(this.fb.group({key:[n,[D.required]],value:[e[n],[D.required]]}));this.kvListFormGroup.setControl("keyVals",this.fb.array(t)),this.valueChangeSubscription=this.kvListFormGroup.valueChanges.subscribe((()=>{this.updateModel()}))}removeKeyVal(e){this.kvListFormGroup.get("keyVals").removeAt(e)}addKeyVal(){this.kvListFormGroup.get("keyVals").push(this.fb.group({key:["",[D.required]],value:["",[D.required]]}))}validate(e){const t=this.kvListFormGroup.get("keyVals").value;if(!t.length&&this.required)return{kvMapRequired:!0};if(!this.kvListFormGroup.valid)return{kvFieldsRequired:!0};if(this.uniqueKeyValuePairValidator)for(const e of t)if(e.key===e.value)return{uniqueKeyValuePair:!0};return null}updateModel(){const e=this.kvListFormGroup.get("keyVals").value;if(this.required&&!e.length||!this.kvListFormGroup.valid)this.propagateChange(null);else{const t={};e.forEach((e=>{t[e.key]=e.value})),this.propagateChange(t)}}}e("KvMapConfigOldComponent",Xt),Xt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Xt,deps:[{token:G.Store},{token:H.TranslateService},{token:t.Injector},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Xt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Xt,selector:"tb-kv-map-config-old",inputs:{disabled:"disabled",uniqueKeyValuePairValidator:"uniqueKeyValuePairValidator",requiredText:"requiredText",keyText:"keyText",keyRequiredText:"keyRequiredText",valText:"valText",valRequiredText:"valRequiredText",hintText:"hintText",required:"required"},providers:[{provide:P,useExisting:a((()=>Xt)),multi:!0},{provide:w,useExisting:a((()=>Xt)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n
\n {{ keyText | translate }}\n {{ valText | translate }}\n \n
\n
\n
\n \n \n \n {{ keyRequiredText | translate }}\n \n \n \n \n \n {{ valRequiredText | translate }}\n \n \n \n
\n
\n
\n \n
\n \n
\n
\n',styles:[":host .tb-kv-map-config{margin-bottom:16px}:host .tb-kv-map-config .header{padding-left:5px;padding-right:5px;padding-bottom:5px}:host .tb-kv-map-config .header .cell{padding-left:5px;padding-right:5px;color:#757575;font-size:12px;font-weight:700;white-space:nowrap}:host .tb-kv-map-config .body{padding-left:5px;padding-right:5px;padding-bottom:0;max-height:300px;overflow:auto}:host .tb-kv-map-config .body .cell{padding-left:5px;padding-right:5px}:host .tb-kv-map-config tb-error{display:block;margin-top:-12px}\n"],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ge.TbErrorComponent,selector:"tb-error",inputs:["noMargin","error"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultLayoutAlignDirective,selector:" [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]",inputs:["fxLayoutAlign","fxLayoutAlign.xs","fxLayoutAlign.sm","fxLayoutAlign.md","fxLayoutAlign.lg","fxLayoutAlign.xl","fxLayoutAlign.lt-sm","fxLayoutAlign.lt-md","fxLayoutAlign.lt-lg","fxLayoutAlign.lt-xl","fxLayoutAlign.gt-xs","fxLayoutAlign.gt-sm","fxLayoutAlign.gt-md","fxLayoutAlign.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:ye.DefaultShowHideDirective,selector:" [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]",inputs:["fxShow","fxShow.print","fxShow.xs","fxShow.sm","fxShow.md","fxShow.lg","fxShow.xl","fxShow.lt-sm","fxShow.lt-md","fxShow.lt-lg","fxShow.lt-xl","fxShow.gt-xs","fxShow.gt-sm","fxShow.gt-md","fxShow.gt-lg","fxHide","fxHide.print","fxHide.xs","fxHide.sm","fxHide.md","fxHide.lg","fxHide.xl","fxHide.lt-sm","fxHide.lt-md","fxHide.lt-lg","fxHide.lt-xl","fxHide.gt-xs","fxHide.gt-sm","fxHide.gt-md","fxHide.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormControlDirective,selector:"[formControl]",inputs:["formControl","disabled","ngModel"],outputs:["ngModelChange"],exportAs:["ngForm"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormArrayName,selector:"[formArrayName]",inputs:["formArrayName"]},{kind:"pipe",type:R.AsyncPipe,name:"async"},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Xt,decorators:[{type:n,args:[{selector:"tb-kv-map-config-old",providers:[{provide:P,useExisting:a((()=>Xt)),multi:!0},{provide:w,useExisting:a((()=>Xt)),multi:!0}],template:'
\n
\n {{ keyText | translate }}\n {{ valText | translate }}\n \n
\n
\n
\n \n \n \n {{ keyRequiredText | translate }}\n \n \n \n \n \n {{ valRequiredText | translate }}\n \n \n \n
\n
\n
\n \n
\n \n
\n
\n',styles:[":host .tb-kv-map-config{margin-bottom:16px}:host .tb-kv-map-config .header{padding-left:5px;padding-right:5px;padding-bottom:5px}:host .tb-kv-map-config .header .cell{padding-left:5px;padding-right:5px;color:#757575;font-size:12px;font-weight:700;white-space:nowrap}:host .tb-kv-map-config .body{padding-left:5px;padding-right:5px;padding-bottom:0;max-height:300px;overflow:auto}:host .tb-kv-map-config .body .cell{padding-left:5px;padding-right:5px}:host .tb-kv-map-config tb-error{display:block;margin-top:-12px}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:t.Injector},{type:E.FormBuilder}]},propDecorators:{disabled:[{type:i}],uniqueKeyValuePairValidator:[{type:i}],requiredText:[{type:i}],keyText:[{type:i}],keyRequiredText:[{type:i}],valText:[{type:i}],valRequiredText:[{type:i}],hintText:[{type:i}],required:[{type:i}]}});class Zt extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.saveToCustomTableConfigForm}onConfigurationSet(e){this.saveToCustomTableConfigForm=this.fb.group({tableName:[e?e.tableName:null,[D.required,D.pattern(/.*\S.*/)]],fieldsMapping:[e?e.fieldsMapping:null,[D.required]]})}prepareOutputConfig(e){return e.tableName=e.tableName.trim(),e}}e("SaveToCustomTableConfigComponent",Zt),Zt.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Zt,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Zt.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Zt,selector:"tb-action-node-custom-table-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.custom-table-name\n \n \n {{ \'tb.rulenode.custom-table-name-required\' | translate }}\n \n tb.rulenode.custom-table-hint\n \n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:Xt,selector:"tb-kv-map-config-old",inputs:["disabled","uniqueKeyValuePairValidator","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Zt,decorators:[{type:n,args:[{selector:"tb-action-node-custom-table-config",template:'
\n \n tb.rulenode.custom-table-name\n \n \n {{ \'tb.rulenode.custom-table-name-required\' | translate }}\n \n tb.rulenode.custom-table-hint\n \n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class en extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.timeseriesConfigForm}onConfigurationSet(e){this.timeseriesConfigForm=this.fb.group({defaultTTL:[e?e.defaultTTL:null,[D.required,D.min(0)]],skipLatestPersistence:[!!e&&e.skipLatestPersistence,[]],useServerTs:[!!e&&e.useServerTs,[]]})}}e("TimeseriesConfigComponent",en),en.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:en,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),en.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:en,selector:"tb-action-node-timeseries-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.default-ttl\n \n \n {{ \'tb.rulenode.default-ttl-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-default-ttl-message\' | translate }}\n \n \n \n {{ \'tb.rulenode.skip-latest-persistence\' | translate }}\n \n \n {{ \'tb.rulenode.use-server-ts\' | translate }}\n \n
tb.rulenode.use-server-ts-hint
\n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:en,decorators:[{type:n,args:[{selector:"tb-action-node-timeseries-config",template:'
\n \n tb.rulenode.default-ttl\n \n \n {{ \'tb.rulenode.default-ttl-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-default-ttl-message\' | translate }}\n \n \n \n {{ \'tb.rulenode.skip-latest-persistence\' | translate }}\n \n \n {{ \'tb.rulenode.use-server-ts\' | translate }}\n \n
tb.rulenode.use-server-ts-hint
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class tn extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.unassignCustomerConfigForm}onConfigurationSet(e){this.unassignCustomerConfigForm=this.fb.group({customerNamePattern:[e?e.customerNamePattern:null,[D.required,D.pattern(/.*\S.*/)]],customerCacheExpiration:[e?e.customerCacheExpiration:null,[D.required,D.min(0)]]})}prepareOutputConfig(e){return e.customerNamePattern=e.customerNamePattern.trim(),e}}e("UnassignCustomerConfigComponent",tn),tn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:tn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),tn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:tn,selector:"tb-action-node-un-assign-to-customer-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.customer-name-pattern\n \n \n {{ \'tb.rulenode.customer-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.customer-cache-expiration\n \n \n {{ \'tb.rulenode.customer-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.customer-cache-expiration-range\' | translate }}\n \n tb.rulenode.customer-cache-expiration-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:tn,decorators:[{type:n,args:[{selector:"tb-action-node-un-assign-to-customer-config",template:'
\n \n tb.rulenode.customer-name-pattern\n \n \n {{ \'tb.rulenode.customer-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.customer-cache-expiration\n \n \n {{ \'tb.rulenode.customer-cache-expiration-required\' | translate }}\n \n \n {{ \'tb.rulenode.customer-cache-expiration-range\' | translate }}\n \n tb.rulenode.customer-cache-expiration-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class nn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopeMap=m,this.attributeScopes=Object.keys(m),this.telemetryTypeTranslationsMap=u,this.separatorKeysCodes=[le,se,me]}configForm(){return this.deleteAttributesConfigForm}onConfigurationSet(e){this.deleteAttributesConfigForm=this.fb.group({scope:[e?e.scope:null,[D.required]],keys:[e?e.keys:null,[D.required]],sendAttributesDeletedNotification:[!!e&&e.sendAttributesDeletedNotification,[]],notifyDevice:[!!e&&e.notifyDevice,[]]}),this.deleteAttributesConfigForm.get("scope").valueChanges.subscribe((e=>{e!==m.SHARED_SCOPE&&this.deleteAttributesConfigForm.get("notifyDevice").patchValue(!1,{emitEvent:!1})}))}removeKey(e){const t=this.deleteAttributesConfigForm.get("keys").value,n=t.indexOf(e);n>=0&&(t.splice(n,1),this.deleteAttributesConfigForm.get("keys").patchValue(t,{emitEvent:!0}))}addKey(e){const t=e.input;let n=e.value;if((n||"").trim()){n=n.trim();let e=this.deleteAttributesConfigForm.get("keys").value;e&&-1!==e.indexOf(n)||(e||(e=[]),e.push(n),this.deleteAttributesConfigForm.get("keys").patchValue(e,{emitEvent:!0}))}t&&(t.value="")}}e("DeleteAttributesConfigComponent",nn),nn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:nn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),nn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:nn,selector:"tb-action-node-delete-attributes-config",viewQueries:[{propertyName:"attributeChipList",first:!0,predicate:["attributeChipList"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n {{ \'attribute.attributes-scope\' | translate }}\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n \n \n \n {{key}}\n close\n \n \n \n {{ \'tb.rulenode.attributes-keys-required\' | translate }}\n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.send-attributes-deleted-notification\' | translate }}\n \n
tb.rulenode.send-attributes-deleted-notification-hint
\n
\n \n {{ \'tb.rulenode.notify-device\' | translate }}\n \n
tb.rulenode.notify-device-delete-hint
\n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:ue.MatChipGrid,selector:"mat-chip-grid",inputs:["tabIndex","disabled","placeholder","required","value","errorStateMatcher"],outputs:["change","valueChange"]},{kind:"directive",type:ue.MatChipInput,selector:"input[matChipInputFor]",inputs:["matChipInputFor","matChipInputAddOnBlur","matChipInputSeparatorKeyCodes","placeholder","id","disabled"],outputs:["matChipInputTokenEnd"],exportAs:["matChipInput","matChipInputFor"]},{kind:"directive",type:ue.MatChipRemove,selector:"[matChipRemove]"},{kind:"component",type:ue.MatChipRow,selector:"mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]",inputs:["color","disabled","disableRipple","tabIndex","editable"],outputs:["edited"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:nn,decorators:[{type:n,args:[{selector:"tb-action-node-delete-attributes-config",template:'
\n \n {{ \'attribute.attributes-scope\' | translate }}\n \n \n {{ telemetryTypeTranslationsMap.get(scope) | translate }}\n \n \n \n \n \n \n {{key}}\n close\n \n \n \n {{ \'tb.rulenode.attributes-keys-required\' | translate }}\n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.send-attributes-deleted-notification\' | translate }}\n \n
tb.rulenode.send-attributes-deleted-notification-hint
\n
\n \n {{ \'tb.rulenode.notify-device\' | translate }}\n \n
tb.rulenode.notify-device-delete-hint
\n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]},propDecorators:{attributeChipList:[{type:o,args:["attributeChipList"]}]}});class rn extends b{get function(){return this.functionValue}set function(e){e&&this.functionValue!==e&&(this.functionValue=e,this.setupArgumentsFormGroup(!0))}constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.maxArgs=16,this.minArgs=1,this.displayArgumentName=!1,this.mathFunctionMap=Et,this.ArgumentType=Dt,this.attributeScopeMap=_t,this.argumentTypeMap=Rt,this.arguments=Object.values(Dt),this.attributeScope=Object.values(Kt),this.propagateChange=null,this.valueChangeSubscription=[]}ngOnInit(){this.ngControl=this.injector.get(V),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.argumentsFormGroup=this.fb.group({arguments:this.fb.array([])}),this.valueChangeSubscription.push(this.argumentsFormGroup.valueChanges.subscribe((()=>{this.updateModel()}))),this.setupArgumentsFormGroup()}onDrop(e){const t=this.argumentsFormArray(),n=t.at(e.previousIndex);t.removeAt(e.previousIndex),t.insert(e.currentIndex,n),this.updateArgumentNames()}argumentsFormArray(){return this.argumentsFormGroup.get("arguments")}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.argumentsFormGroup.disable({emitEvent:!1}):(this.argumentsFormGroup.enable({emitEvent:!1}),this.argumentsFormGroup.get("arguments").controls.forEach((e=>this.updateArgumentControlValidators(e))))}ngOnDestroy(){this.valueChangeSubscription.length&&this.valueChangeSubscription.forEach((e=>e.unsubscribe()))}writeValue(e){const t=[];e&&e.forEach(((e,n)=>{t.push(this.createArgumentControl(e,n))})),this.argumentsFormGroup.setControl("arguments",this.fb.array(t),{emitEvent:!1}),this.setupArgumentsFormGroup()}removeArgument(e){this.argumentsFormGroup.get("arguments").removeAt(e),this.updateArgumentNames()}addArgument(e=!0){const t=this.argumentsFormGroup.get("arguments"),n=this.createArgumentControl(null,t.length);t.push(n,{emitEvent:e})}validate(e){return this.argumentsFormGroup.valid?null:{argumentsRequired:!0}}setupArgumentsFormGroup(e=!1){if(this.function&&(this.maxArgs=this.mathFunctionMap.get(this.function).maxArgs,this.minArgs=this.mathFunctionMap.get(this.function).minArgs,this.displayArgumentName=this.function===Gt.CUSTOM),this.argumentsFormGroup){for(this.argumentsFormGroup.get("arguments").setValidators([D.minLength(this.minArgs),D.maxLength(this.maxArgs)]),this.argumentsFormGroup.get("arguments").value.length>this.maxArgs&&(this.argumentsFormGroup.get("arguments").controls.length=this.maxArgs);this.argumentsFormGroup.get("arguments").value.length{this.updateArgumentControlValidators(n),n.get("attributeScope").updateValueAndValidity({emitEvent:!1}),n.get("defaultValue").updateValueAndValidity({emitEvent:!1})}))),n}updateArgumentControlValidators(e){const t=e.get("type").value;t===Dt.ATTRIBUTE?e.get("attributeScope").enable({emitEvent:!1}):e.get("attributeScope").disable({emitEvent:!1}),t&&t!==Dt.CONSTANT?e.get("defaultValue").enable({emitEvent:!1}):e.get("defaultValue").disable({emitEvent:!1})}updateArgumentNames(){this.argumentsFormGroup.get("arguments").controls.forEach(((e,t)=>{e.get("name").setValue(Bt[t])}))}updateModel(){const e=this.argumentsFormGroup.get("arguments").value;e.length&&this.argumentsFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}}e("ArgumentsMapConfigComponent",rn),rn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:rn,deps:[{token:G.Store},{token:H.TranslateService},{token:t.Injector},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),rn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:rn,selector:"tb-arguments-map-config",inputs:{disabled:"disabled",function:"function"},providers:[{provide:P,useExisting:a((()=>rn)),multi:!0},{provide:w,useExisting:a((()=>rn)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n\n
\n \n \n
\n \n
\n {{argumentControl.get(\'name\').value}}.\n
\n \n tb.rulenode.argument-source-field-input\n \n \n {{ argumentTypeMap.get(argumentControl.get(\'type\').value)?.name | translate }}\n \n \n {{ argumentTypeMap.get(argument).name | translate }}\n \n {{ argumentTypeMap.get(argument).description }}\n \n \n \n \n tb.rulenode.argument-source-field-input-required\n \n \n
\n \n tb.rulenode.argument-key-field-input\n \n \n help\n \n \n tb.rulenode.argument-key-field-input-required\n \n \n \n tb.rulenode.constant-value-field-input\n \n \n tb.rulenode.constant-value-field-input-required\n \n \n \n tb.rulenode.default-value-field-input\n \n \n
\n \n tb.rulenode.attribute-scope-field-input\n \n \n {{ attributeScopeMap.get(scope) | translate }}\n \n \n \n tb.rulenode.attribute-scope-field-input-required\n \n \n
\n \n
\n
\n
\n
\n
\n
\n tb.rulenode.no-arguments-prompt\n
\n \n
\n',styles:[":host .mat-mdc-list-item.tb-argument{border:solid rgba(0,0,0,.25) 1px;border-radius:4px;padding:10px 0;margin-bottom:16px}:host .arguments-list{padding:0}\n"],dependencies:[{kind:"directive",type:R.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"directive",type:z.MatSelectTrigger,selector:"mat-select-trigger"},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"component",type:xe.MatList,selector:"mat-list",exportAs:["matList"]},{kind:"component",type:xe.MatListItem,selector:"mat-list-item, a[mat-list-item], button[mat-list-item]",inputs:["activated"],exportAs:["matListItem"]},{kind:"directive",type:be.CdkDropList,selector:"[cdkDropList], cdk-drop-list",inputs:["cdkDropListConnectedTo","cdkDropListData","cdkDropListOrientation","id","cdkDropListLockAxis","cdkDropListDisabled","cdkDropListSortingDisabled","cdkDropListEnterPredicate","cdkDropListSortPredicate","cdkDropListAutoScrollDisabled","cdkDropListAutoScrollStep"],outputs:["cdkDropListDropped","cdkDropListEntered","cdkDropListExited","cdkDropListSorted"],exportAs:["cdkDropList"]},{kind:"directive",type:be.CdkDrag,selector:"[cdkDrag]",inputs:["cdkDragData","cdkDragLockAxis","cdkDragRootElement","cdkDragBoundary","cdkDragStartDelay","cdkDragFreeDragPosition","cdkDragDisabled","cdkDragConstrainPosition","cdkDragPreviewClass","cdkDragPreviewContainer"],outputs:["cdkDragStarted","cdkDragReleased","cdkDragEnded","cdkDragEntered","cdkDragExited","cdkDragDropped","cdkDragMoved"],exportAs:["cdkDrag"]},{kind:"directive",type:be.CdkDragHandle,selector:"[cdkDragHandle]",inputs:["cdkDragHandleDisabled"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultLayoutAlignDirective,selector:" [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]",inputs:["fxLayoutAlign","fxLayoutAlign.xs","fxLayoutAlign.sm","fxLayoutAlign.md","fxLayoutAlign.lg","fxLayoutAlign.xl","fxLayoutAlign.lt-sm","fxLayoutAlign.lt-md","fxLayoutAlign.lt-lg","fxLayoutAlign.lt-xl","fxLayoutAlign.gt-xs","fxLayoutAlign.gt-sm","fxLayoutAlign.gt-md","fxLayoutAlign.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:ye.DefaultClassDirective,selector:" [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]",inputs:["ngClass","ngClass.xs","ngClass.sm","ngClass.md","ngClass.lg","ngClass.xl","ngClass.lt-sm","ngClass.lt-md","ngClass.lt-lg","ngClass.lt-xl","ngClass.gt-xs","ngClass.gt-sm","ngClass.gt-md","ngClass.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormControlDirective,selector:"[formControl]",inputs:["formControl","disabled","ngModel"],outputs:["ngModelChange"],exportAs:["ngForm"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormArrayName,selector:"[formArrayName]",inputs:["formArrayName"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:rn,decorators:[{type:n,args:[{selector:"tb-arguments-map-config",providers:[{provide:P,useExisting:a((()=>rn)),multi:!0},{provide:w,useExisting:a((()=>rn)),multi:!0}],template:'
\n\n
\n \n \n
\n \n
\n {{argumentControl.get(\'name\').value}}.\n
\n \n tb.rulenode.argument-source-field-input\n \n \n {{ argumentTypeMap.get(argumentControl.get(\'type\').value)?.name | translate }}\n \n \n {{ argumentTypeMap.get(argument).name | translate }}\n \n {{ argumentTypeMap.get(argument).description }}\n \n \n \n \n tb.rulenode.argument-source-field-input-required\n \n \n
\n \n tb.rulenode.argument-key-field-input\n \n \n help\n \n \n tb.rulenode.argument-key-field-input-required\n \n \n \n tb.rulenode.constant-value-field-input\n \n \n tb.rulenode.constant-value-field-input-required\n \n \n \n tb.rulenode.default-value-field-input\n \n \n
\n \n tb.rulenode.attribute-scope-field-input\n \n \n {{ attributeScopeMap.get(scope) | translate }}\n \n \n \n tb.rulenode.attribute-scope-field-input-required\n \n \n
\n \n
\n
\n
\n
\n
\n
\n tb.rulenode.no-arguments-prompt\n
\n \n
\n',styles:[":host .mat-mdc-list-item.tb-argument{border:solid rgba(0,0,0,.25) 1px;border-radius:4px;padding:10px 0;margin-bottom:16px}:host .arguments-list{padding:0}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:t.Injector},{type:E.FormBuilder}]},propDecorators:{disabled:[{type:i}],function:[{type:i}]}});class on extends b{get required(){return this.requiredValue}set required(e){this.requiredValue=fe(e)}constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.searchText="",this.dirty=!1,this.mathOperation=[...Et.values()],this.propagateChange=null}ngOnInit(){this.mathFunctionForm=this.fb.group({operation:[""]}),this.filteredOptions=this.mathFunctionForm.get("operation").valueChanges.pipe(he((e=>{let t;t="string"==typeof e&&Gt[e]?Gt[e]:null,this.updateView(t)})),ve((e=>(this.searchText=e||"",e?this._filter(e):this.mathOperation.slice()))))}_filter(e){const t=e.toLowerCase();return this.mathOperation.filter((e=>e.name.toLowerCase().includes(t)||e.value.toLowerCase().includes(t)))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.mathFunctionForm.disable({emitEvent:!1}):this.mathFunctionForm.enable({emitEvent:!1})}mathFunctionDisplayFn(e){if(e){const t=Et.get(e);return t.value+" | "+t.name}return""}writeValue(e){this.modelValue=e,this.mathFunctionForm.get("operation").setValue(e,{emitEvent:!1}),this.dirty=!0}updateView(e){this.modelValue!==e&&(this.modelValue=e,this.propagateChange(this.modelValue))}onFocus(){this.dirty&&(this.mathFunctionForm.get("operation").updateValueAndValidity({onlySelf:!0}),this.dirty=!1)}clear(){this.mathFunctionForm.get("operation").patchValue(""),setTimeout((()=>{this.operationInput.nativeElement.blur(),this.operationInput.nativeElement.focus()}),0)}}e("MathFunctionAutocompleteComponent",on),on.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:on,deps:[{token:G.Store},{token:H.TranslateService},{token:t.Injector},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),on.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:on,selector:"tb-math-function-autocomplete",inputs:{required:"required",disabled:"disabled"},providers:[{provide:P,useExisting:a((()=>on)),multi:!0}],viewQueries:[{propertyName:"operationInput",first:!0,predicate:["operationInput"],descendants:!0,static:!0}],usesInheritance:!0,ngImport:t,template:'\n tb.rulenode.functions-field-input\n \n \n \n \n \n \n {{ option.description }}\n \n \n \n tb.rulenode.no-option-found\n \n \n\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Te.MatAutocomplete,selector:"mat-autocomplete",inputs:["disableRipple","hideSingleSelectionIndicator"],exportAs:["matAutocomplete"]},{kind:"directive",type:Te.MatAutocompleteTrigger,selector:"input[matAutocomplete], textarea[matAutocomplete]",exportAs:["matAutocompleteTrigger"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:R.AsyncPipe,name:"async"},{kind:"pipe",type:Ie.HighlightPipe,name:"highlight"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:on,decorators:[{type:n,args:[{selector:"tb-math-function-autocomplete",providers:[{provide:P,useExisting:a((()=>on)),multi:!0}],template:'\n tb.rulenode.functions-field-input\n \n \n \n \n \n \n {{ option.description }}\n \n \n \n tb.rulenode.no-option-found\n \n \n\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:t.Injector},{type:E.UntypedFormBuilder}]},propDecorators:{required:[{type:i}],disabled:[{type:i}],operationInput:[{type:o,args:["operationInput",{static:!0}]}]}});class an extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.MathFunction=Gt,this.ArgumentTypeResult=Vt,this.argumentTypeResultMap=Ot,this.attributeScopeMap=_t,this.argumentsResult=Object.values(Vt),this.attributeScopeResult=Object.values(Ut)}configForm(){return this.mathFunctionConfigForm}onConfigurationSet(e){this.mathFunctionConfigForm=this.fb.group({operation:[e?e.operation:null,[D.required]],arguments:[e?e.arguments:null,[D.required]],customFunction:[e?e.customFunction:"",[D.required]],result:this.fb.group({type:[e?e.result.type:null,[D.required]],attributeScope:[e?e.result.attributeScope:null,[D.required]],key:[e?e.result.key:"",[D.required]],resultValuePrecision:[e?e.result.resultValuePrecision:0],addToBody:[!!e&&e.result.addToBody],addToMetadata:[!!e&&e.result.addToMetadata]})})}updateValidators(e){const t=this.mathFunctionConfigForm.get("operation").value,n=this.mathFunctionConfigForm.get("result.type").value;t===Gt.CUSTOM?this.mathFunctionConfigForm.get("customFunction").enable({emitEvent:!1}):this.mathFunctionConfigForm.get("customFunction").disable({emitEvent:!1}),n===Vt.ATTRIBUTE?this.mathFunctionConfigForm.get("result.attributeScope").enable({emitEvent:!1}):this.mathFunctionConfigForm.get("result.attributeScope").disable({emitEvent:!1}),this.mathFunctionConfigForm.get("customFunction").updateValueAndValidity({emitEvent:e}),this.mathFunctionConfigForm.get("result.attributeScope").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["operation","result.type"]}}e("MathFunctionConfigComponent",an),an.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:an,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),an.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:an,selector:"tb-action-node-math-function-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n
\n tb.rulenode.argument-tile\n \n \n
\n
\n {{\'tb.rulenode.custom-expression-field-input\' | translate }} *\n \n \n \n tb.rulenode.custom-expression-field-input-required\n \n tb.rulenode.custom-expression-field-input-hint\n \n
\n
\n tb.rulenode.result-title\n
\n \n tb.rulenode.type-field-input\n \n \n {{ argumentTypeResultMap.get(mathFunctionConfigForm.get(\'result.type\').value)?.name | translate }}\n \n \n {{ argumentTypeResultMap.get(argument).name | translate }}\n \n {{ argumentTypeResultMap.get(argument).description }}\n \n \n \n \n tb.rulenode.type-field-input-required\n \n \n
\n \n tb.rulenode.attribute-scope-field-input\n \n \n {{ attributeScopeMap.get(scope) | translate }}\n \n \n \n \n tb.rulenode.key-field-input\n \n help\n \n tb.rulenode.key-field-input-required\n \n \n
\n
\n \n tb.rulenode.number-floating-point-field-input\n \n \n \n
\n
\n \n {{\'tb.rulenode.add-to-message-field-input\' | translate }}\n \n \n {{\'tb.rulenode.add-to-metadata-field-input\' | translate}}\n \n
\n
\n
\n
\n',styles:[":host ::ng-deep .fields-group{padding:0 16px 8px;margin:10px 0;border:1px groove rgba(0,0,0,.25);border-radius:4px}:host ::ng-deep .fields-group .mat-mdc-form-field .mat-mdc-form-field-infix{width:100%}:host ::ng-deep .fields-group legend{color:#000000b3;width:-moz-fit-content;width:fit-content}:host ::ng-deep .fields-group legend+*{display:block}:host ::ng-deep .fields-group legend+*.no-margin-top{margin-top:0}\n"],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"directive",type:z.MatSelectTrigger,selector:"mat-select-trigger"},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultLayoutAlignDirective,selector:" [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]",inputs:["fxLayoutAlign","fxLayoutAlign.xs","fxLayoutAlign.sm","fxLayoutAlign.md","fxLayoutAlign.lg","fxLayoutAlign.xl","fxLayoutAlign.lt-sm","fxLayoutAlign.lt-md","fxLayoutAlign.lt-lg","fxLayoutAlign.lt-xl","fxLayoutAlign.gt-xs","fxLayoutAlign.gt-sm","fxLayoutAlign.gt-md","fxLayoutAlign.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:E.FormGroupName,selector:"[formGroupName]",inputs:["formGroupName"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:rn,selector:"tb-arguments-map-config",inputs:["disabled","function"]},{kind:"component",type:on,selector:"tb-math-function-autocomplete",inputs:["required","disabled"]},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:an,decorators:[{type:n,args:[{selector:"tb-action-node-math-function-config",template:'
\n \n \n
\n tb.rulenode.argument-tile\n \n \n
\n
\n {{\'tb.rulenode.custom-expression-field-input\' | translate }} *\n \n \n \n tb.rulenode.custom-expression-field-input-required\n \n tb.rulenode.custom-expression-field-input-hint\n \n
\n
\n tb.rulenode.result-title\n
\n \n tb.rulenode.type-field-input\n \n \n {{ argumentTypeResultMap.get(mathFunctionConfigForm.get(\'result.type\').value)?.name | translate }}\n \n \n {{ argumentTypeResultMap.get(argument).name | translate }}\n \n {{ argumentTypeResultMap.get(argument).description }}\n \n \n \n \n tb.rulenode.type-field-input-required\n \n \n
\n \n tb.rulenode.attribute-scope-field-input\n \n \n {{ attributeScopeMap.get(scope) | translate }}\n \n \n \n \n tb.rulenode.key-field-input\n \n help\n \n tb.rulenode.key-field-input-required\n \n \n
\n
\n \n tb.rulenode.number-floating-point-field-input\n \n \n \n
\n
\n \n {{\'tb.rulenode.add-to-message-field-input\' | translate }}\n \n \n {{\'tb.rulenode.add-to-metadata-field-input\' | translate}}\n \n
\n
\n
\n
\n',styles:[":host ::ng-deep .fields-group{padding:0 16px 8px;margin:10px 0;border:1px groove rgba(0,0,0,.25);border-radius:4px}:host ::ng-deep .fields-group .mat-mdc-form-field .mat-mdc-form-field-infix{width:100%}:host ::ng-deep .fields-group legend{color:#000000b3;width:-moz-fit-content;width:fit-content}:host ::ng-deep .fields-group legend+*{display:block}:host ::ng-deep .fields-group legend+*.no-margin-top{margin-top:0}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class ln extends b{set required(e){this.requiredValue!==e&&(this.requiredValue=e,this.updateValidators())}get required(){return this.requiredValue}constructor(e,t){super(e),this.store=e,this.fb=t,this.subscriptSizing="fixed",this.searchText="",this.dirty=!1,this.messageTypes=["POST_ATTRIBUTES_REQUEST","POST_TELEMETRY_REQUEST"],this.propagateChange=e=>{},this.messageTypeFormGroup=this.fb.group({messageType:[null,[D.maxLength(255)]]})}registerOnTouched(e){}registerOnChange(e){this.propagateChange=e}ngOnInit(){this.outputMessageTypes=this.messageTypeFormGroup.get("messageType").valueChanges.pipe(he((e=>{this.updateView(e)})),ve((e=>e||"")),Ce((e=>this.fetchMessageTypes(e))))}writeValue(e){this.searchText="",this.modelValue=e,this.messageTypeFormGroup.get("messageType").patchValue(e,{emitEvent:!1}),this.dirty=!0}onFocus(){this.dirty&&(this.messageTypeFormGroup.get("messageType").updateValueAndValidity({onlySelf:!0,emitEvent:!0}),this.dirty=!1)}updateView(e){this.modelValue!==e&&(this.modelValue=e,this.propagateChange(this.modelValue))}displayMessageTypeFn(e){return e||void 0}fetchMessageTypes(e,t=!1){return this.searchText=e,qe(this.messageTypes).pipe(ve((n=>n.filter((n=>t?!!e&&n===e:!e||n.toUpperCase().startsWith(e.toUpperCase()))))))}clear(){this.messageTypeFormGroup.get("messageType").patchValue(null,{emitEvent:!0}),setTimeout((()=>{this.messageTypeInput.nativeElement.blur(),this.messageTypeInput.nativeElement.focus()}),0)}setDisabledState(e){e?this.messageTypeFormGroup.disable({emitEvent:!1}):this.messageTypeFormGroup.enable({emitEvent:!1})}updateValidators(){this.messageTypeFormGroup.get("messageType").setValidators(this.required?[D.required,D.maxLength(255)]:[D.maxLength(255)]),this.messageTypeFormGroup.get("messageType").updateValueAndValidity({emitEvent:!1})}}e("OutputMessageTypeAutocompleteComponent",ln),ln.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ln,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),ln.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:ln,selector:"tb-output-message-type-autocomplete",inputs:{autocompleteHint:"autocompleteHint",subscriptSizing:"subscriptSizing",required:"required"},providers:[{provide:P,useExisting:a((()=>ln)),multi:!0}],viewQueries:[{propertyName:"messageTypeInput",first:!0,predicate:["messageTypeInput"],descendants:!0,static:!0}],usesInheritance:!0,ngImport:t,template:'\n {{\'tb.rulenode.output-message-type\' | translate}}\n \n \n \n \n \n \n \n {{autocompleteHint | translate}}\n \n {{ \'tb.rulenode.output-message-type-required\' | translate }}\n \n \n {{ \'tb.rulenode.output-message-type-max-length\' | translate }}\n \n\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Te.MatAutocomplete,selector:"mat-autocomplete",inputs:["disableRipple","hideSingleSelectionIndicator"],exportAs:["matAutocomplete"]},{kind:"directive",type:Te.MatAutocompleteTrigger,selector:"input[matAutocomplete], textarea[matAutocomplete]",exportAs:["matAutocompleteTrigger"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"pipe",type:R.AsyncPipe,name:"async"},{kind:"pipe",type:Ie.HighlightPipe,name:"highlight"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),Se([h()],ln.prototype,"required",null),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ln,decorators:[{type:n,args:[{selector:"tb-output-message-type-autocomplete",providers:[{provide:P,useExisting:a((()=>ln)),multi:!0}],template:'\n {{\'tb.rulenode.output-message-type\' | translate}}\n \n \n \n \n \n \n \n {{autocompleteHint | translate}}\n \n {{ \'tb.rulenode.output-message-type-required\' | translate }}\n \n \n {{ \'tb.rulenode.output-message-type-max-length\' | translate }}\n \n\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]},propDecorators:{messageTypeInput:[{type:o,args:["messageTypeInput",{static:!0}]}],autocompleteHint:[{type:i}],subscriptSizing:[{type:i}],required:[{type:i}]}});class sn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.serviceType=p.TB_RULE_ENGINE,this.deduplicationStrategie=gt,this.deduplicationStrategies=Object.keys(this.deduplicationStrategie),this.deduplicationStrategiesTranslations=yt}configForm(){return this.deduplicationConfigForm}onConfigurationSet(e){this.deduplicationConfigForm=this.fb.group({interval:[X(e?.interval)?e.interval:null,[D.required,D.min(1)]],strategy:[X(e?.strategy)?e.strategy:null,[D.required]],outMsgType:[X(e?.outMsgType)?e.outMsgType:null,[D.required]],queueName:[X(e?.queueName)?e.queueName:null,[D.required]],maxPendingMsgs:[X(e?.maxPendingMsgs)?e.maxPendingMsgs:null,[D.required,D.min(1),D.max(1e3)]],maxRetries:[X(e?.maxRetries)?e.maxRetries:null,[D.required,D.min(0),D.max(100)]]})}updateValidators(e){this.deduplicationConfigForm.get("strategy").value===this.deduplicationStrategie.ALL?(this.deduplicationConfigForm.get("outMsgType").enable({emitEvent:!1}),this.deduplicationConfigForm.get("queueName").enable({emitEvent:!1})):(this.deduplicationConfigForm.get("outMsgType").disable({emitEvent:!1}),this.deduplicationConfigForm.get("queueName").disable({emitEvent:!1})),this.deduplicationConfigForm.get("outMsgType").updateValueAndValidity({emitEvent:e}),this.deduplicationConfigForm.get("queueName").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["strategy"]}}e("DeduplicationConfigComponent",sn),sn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:sn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),sn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:sn,selector:"tb-action-node-msg-deduplication-config",usesInheritance:!0,ngImport:t,template:"
\n \n {{'tb.rulenode.interval' | translate}}\n \n {{'tb.rulenode.interval-hint' | translate}}\n \n {{'tb.rulenode.interval-required' | translate}}\n \n \n {{'tb.rulenode.interval-min-error' | translate}}\n \n \n \n {{'tb.rulenode.strategy' | translate}}\n \n \n {{ deduplicationStrategiesTranslations.get(strategy) | translate }}\n \n \n \n {{'tb.rulenode.strategy-first-hint' | translate}}\n {{'tb.rulenode.strategy-last-hint' | translate}}\n \n {{'tb.rulenode.strategy-required' | translate}}\n \n \n
\n \n \n \n \n
\n \n \n \n
\n
Advanced settings
\n
\n
\n
\n \n \n {{'tb.rulenode.max-pending-msgs' | translate}}\n \n {{'tb.rulenode.max-pending-msgs-hint' | translate}}\n \n {{'tb.rulenode.max-pending-msgs-required' | translate}}\n \n \n {{'tb.rulenode.max-pending-msgs-max-error' | translate}}\n \n \n {{'tb.rulenode.max-pending-msgs-min-error' | translate}}\n \n \n \n {{'tb.rulenode.max-retries' | translate}}\n \n {{'tb.rulenode.max-retries-hint' | translate}}\n \n {{'tb.rulenode.max-retries-required' | translate}}\n \n \n {{'tb.rulenode.max-retries-max-error' | translate}}\n \n \n {{'tb.rulenode.max-retries-min-error' | translate}}\n \n \n \n
\n
\n",styles:[":host ::ng-deep .mat-expansion-panel.advanced-settings{border:none;box-shadow:none;padding:0}:host ::ng-deep .mat-expansion-panel.advanced-settings .mat-expansion-panel-body{padding:0}:host ::ng-deep .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:white}\n"],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:J.QueueAutocompleteComponent,selector:"tb-queue-autocomplete",inputs:["labelText","requiredText","autocompleteHint","subscriptSizing","required","queueType","disabled"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Ne.MatExpansionPanel,selector:"mat-expansion-panel",inputs:["disabled","expanded","hideToggle","togglePosition"],outputs:["opened","closed","expandedChange","afterExpand","afterCollapse"],exportAs:["matExpansionPanel"]},{kind:"component",type:Ne.MatExpansionPanelHeader,selector:"mat-expansion-panel-header",inputs:["tabIndex","expandedHeight","collapsedHeight"]},{kind:"directive",type:Ne.MatExpansionPanelTitle,selector:"mat-panel-title"},{kind:"directive",type:Ne.MatExpansionPanelContent,selector:"ng-template[matExpansionPanelContent]"},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutAlignDirective,selector:" [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]",inputs:["fxLayoutAlign","fxLayoutAlign.xs","fxLayoutAlign.sm","fxLayoutAlign.md","fxLayoutAlign.lg","fxLayoutAlign.xl","fxLayoutAlign.lt-sm","fxLayoutAlign.lt-md","fxLayoutAlign.lt-lg","fxLayoutAlign.lt-xl","fxLayoutAlign.gt-xs","fxLayoutAlign.gt-sm","fxLayoutAlign.gt-md","fxLayoutAlign.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:ln,selector:"tb-output-message-type-autocomplete",inputs:["autocompleteHint","subscriptSizing","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:sn,decorators:[{type:n,args:[{selector:"tb-action-node-msg-deduplication-config",template:"
\n \n {{'tb.rulenode.interval' | translate}}\n \n {{'tb.rulenode.interval-hint' | translate}}\n \n {{'tb.rulenode.interval-required' | translate}}\n \n \n {{'tb.rulenode.interval-min-error' | translate}}\n \n \n \n {{'tb.rulenode.strategy' | translate}}\n \n \n {{ deduplicationStrategiesTranslations.get(strategy) | translate }}\n \n \n \n {{'tb.rulenode.strategy-first-hint' | translate}}\n {{'tb.rulenode.strategy-last-hint' | translate}}\n \n {{'tb.rulenode.strategy-required' | translate}}\n \n \n
\n \n \n \n \n
\n \n \n \n
\n
Advanced settings
\n
\n
\n
\n \n \n {{'tb.rulenode.max-pending-msgs' | translate}}\n \n {{'tb.rulenode.max-pending-msgs-hint' | translate}}\n \n {{'tb.rulenode.max-pending-msgs-required' | translate}}\n \n \n {{'tb.rulenode.max-pending-msgs-max-error' | translate}}\n \n \n {{'tb.rulenode.max-pending-msgs-min-error' | translate}}\n \n \n \n {{'tb.rulenode.max-retries' | translate}}\n \n {{'tb.rulenode.max-retries-hint' | translate}}\n \n {{'tb.rulenode.max-retries-required' | translate}}\n \n \n {{'tb.rulenode.max-retries-max-error' | translate}}\n \n \n {{'tb.rulenode.max-retries-min-error' | translate}}\n \n \n \n
\n
\n",styles:[":host ::ng-deep .mat-expansion-panel.advanced-settings{border:none;box-shadow:none;padding:0}:host ::ng-deep .mat-expansion-panel.advanced-settings .mat-expansion-panel-body{padding:0}:host ::ng-deep .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:white}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class mn{}e("ExampleHintComponent",mn),mn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:mn,deps:[],target:t.ɵɵFactoryTarget.Component}),mn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:mn,selector:"tb-example-hint",inputs:{hintText:"hintText",popupHelpLink:"popupHelpLink"},ngImport:t,template:'
\n
{{ hintText }}
\n
\n
\n
\n',styles:[":host .space-between{display:flex;justify-content:space-between;gap:20px}:host .space-between .see-example{display:flex;flex-shrink:0}\n"],dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:Ge.HelpPopupComponent,selector:"[tb-help-popup], [tb-help-popup-content]",inputs:["tb-help-popup","tb-help-popup-content","trigger-text","trigger-style","tb-help-popup-placement","tb-help-popup-style","hintMode"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:mn,decorators:[{type:n,args:[{selector:"tb-example-hint",template:'
\n
{{ hintText }}
\n
\n
\n
\n',styles:[":host .space-between{display:flex;justify-content:space-between;gap:20px}:host .space-between .see-example{display:flex;flex-shrink:0}\n"]}]}],propDecorators:{hintText:[{type:i}],popupHelpLink:[{type:i}]}});class un extends b{constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.propagateChange=null,this.valueChangeSubscription=null,this.disabled=!1,this.uniqueKeyValuePairValidator=!1,this.required=!1}ngOnInit(){this.ngControl=this.injector.get(V),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.kvListFormGroup=this.fb.group({}),this.kvListFormGroup.addControl("keyVals",this.fb.array([]))}keyValsFormArray(){return this.kvListFormGroup.get("keyVals")}errorTrigger(){const e=this.keyValsFormArray();for(const t of e.controls)for(const e of Object.keys(t.value))if(t.get(e).touched&&t.get(e).invalid)return!0;return!1}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.kvListFormGroup.disable({emitEvent:!1}):this.kvListFormGroup.enable({emitEvent:!1})}writeValue(e){this.valueChangeSubscription&&this.valueChangeSubscription.unsubscribe();const t=[];if(e)for(const n of Object.keys(e))Object.prototype.hasOwnProperty.call(e,n)&&t.push(this.fb.group({key:[n,[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],value:[e[n],[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]}));this.kvListFormGroup.setControl("keyVals",this.fb.array(t)),this.valueChangeSubscription=this.kvListFormGroup.valueChanges.subscribe((()=>{this.updateModel()}))}removeKeyVal(e){this.kvListFormGroup.get("keyVals").removeAt(e)}addKeyVal(){this.kvListFormGroup.get("keyVals").push(this.fb.group({key:["",[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],value:["",[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]}))}validate(e){const t=this.kvListFormGroup.get("keyVals").value;if(!t.length&&this.required)return{kvMapRequired:!0};if(!this.kvListFormGroup.valid)return{kvFieldsRequired:!0};if(this.uniqueKeyValuePairValidator)for(const e of t)if(e.key===e.value)return{uniqueKeyValuePair:!0};return null}updateModel(){const e=this.kvListFormGroup.get("keyVals").value;if(this.required&&!e.length||!this.kvListFormGroup.valid)this.propagateChange(null);else{const t={};e.forEach((e=>{t[e.key]=e.value})),this.propagateChange(t)}}}e("KvMapConfigComponent",un),un.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:un,deps:[{token:G.Store},{token:H.TranslateService},{token:t.Injector},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),un.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:un,selector:"tb-kv-map-config",inputs:{disabled:"disabled",uniqueKeyValuePairValidator:"uniqueKeyValuePairValidator",labelText:"labelText",requiredText:"requiredText",keyText:"keyText",keyRequiredText:"keyRequiredText",valText:"valText",valRequiredText:"valRequiredText",hintText:"hintText",popupHelpLink:"popupHelpLink",required:"required"},providers:[{provide:P,useExisting:a((()=>un)),multi:!0},{provide:w,useExisting:a((()=>un)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n
\n
{{ labelText }}
\n
\n tb.rulenode.map-fields-required\n
\n
\n
\n
\n
\n
{{ keyText }}
\n
{{ valText }}
\n
\n
\n
\n
\n \n \n \n \n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n',styles:[":host .field-space{flex:1 1 50%}:host .actions-header{width:40px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:ye.DefaultClassDirective,selector:" [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]",inputs:["ngClass","ngClass.xs","ngClass.sm","ngClass.md","ngClass.lg","ngClass.xl","ngClass.lt-sm","ngClass.lt-md","ngClass.lt-lg","ngClass.lt-xl","ngClass.gt-xs","ngClass.gt-sm","ngClass.gt-md","ngClass.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormControlDirective,selector:"[formControl]",inputs:["formControl","disabled","ngModel"],outputs:["ngModelChange"],exportAs:["ngForm"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:mn,selector:"tb-example-hint",inputs:["hintText","popupHelpLink"]},{kind:"pipe",type:R.AsyncPipe,name:"async"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),Se([h()],un.prototype,"disabled",void 0),Se([h()],un.prototype,"uniqueKeyValuePairValidator",void 0),Se([h()],un.prototype,"required",void 0),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:un,decorators:[{type:n,args:[{selector:"tb-kv-map-config",providers:[{provide:P,useExisting:a((()=>un)),multi:!0},{provide:w,useExisting:a((()=>un)),multi:!0}],template:'
\n
\n
{{ labelText }}
\n
\n tb.rulenode.map-fields-required\n
\n
\n
\n
\n
\n
{{ keyText }}
\n
{{ valText }}
\n
\n
\n
\n
\n \n \n \n \n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n',styles:[":host .field-space{flex:1 1 50%}:host .actions-header{width:40px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:t.Injector},{type:E.FormBuilder}]},propDecorators:{disabled:[{type:i}],uniqueKeyValuePairValidator:[{type:i}],labelText:[{type:i}],requiredText:[{type:i}],keyText:[{type:i}],keyRequiredText:[{type:i}],valText:[{type:i}],valRequiredText:[{type:i}],hintText:[{type:i}],popupHelpLink:[{type:i}],required:[{type:i}]}});class pn extends b{get required(){return this.requiredValue}set required(e){this.requiredValue=fe(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.values(g),this.directionTypeTranslations=y,this.entityType=x,this.propagateChange=null}ngOnInit(){this.deviceRelationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[D.required]],maxLevel:[null,[D.min(1)]],relationType:[null],deviceTypes:[null,[D.required]]}),this.deviceRelationsQueryFormGroup.valueChanges.subscribe((e=>{this.deviceRelationsQueryFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.deviceRelationsQueryFormGroup.disable({emitEvent:!1}):this.deviceRelationsQueryFormGroup.enable({emitEvent:!1})}writeValue(e){this.deviceRelationsQueryFormGroup.reset(e,{emitEvent:!1})}}e("DeviceRelationsQueryConfigComponent",pn),pn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:pn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),pn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:pn,selector:"tb-device-relations-query-config",inputs:{disabled:"disabled",required:"required"},providers:[{provide:P,useExisting:a((()=>pn)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n \n tb.rulenode.max-relation-level\n \n \n {{ \'tb.rulenode.max-relation-level-error\' | translate }}\n \n \n
\n
\n \n {{ \'alias.last-level-relation\' | translate }}\n \n
\n \n \n \n help\n \n
\n',styles:[":host .last-level-slide-toggle{margin:8px 0 24px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:Ee.EntitySubTypeListComponent,selector:"tb-entity-subtype-list",inputs:["required","floatLabel","label","disabled","entityType","emptyInputPlaceholder","filledInputPlaceholder"]},{kind:"component",type:De.RelationTypeAutocompleteComponent,selector:"tb-relation-type-autocomplete",inputs:["showLabel","additionalClasses","appearance","required","disabled","subscriptSizing"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:pn,decorators:[{type:n,args:[{selector:"tb-device-relations-query-config",providers:[{provide:P,useExisting:a((()=>pn)),multi:!0}],template:'
\n
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n \n tb.rulenode.max-relation-level\n \n \n {{ \'tb.rulenode.max-relation-level-error\' | translate }}\n \n \n
\n
\n \n {{ \'alias.last-level-relation\' | translate }}\n \n
\n \n \n \n help\n \n
\n',styles:[":host .last-level-slide-toggle{margin:8px 0 24px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]},propDecorators:{disabled:[{type:i}],required:[{type:i}]}});class dn extends b{get required(){return this.requiredValue}set required(e){this.requiredValue=fe(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.values(g),this.directionTypeTranslations=y,this.propagateChange=null}ngOnInit(){this.relationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[D.required]],maxLevel:[null,[D.min(1)]],filters:[null]}),this.relationsQueryFormGroup.valueChanges.subscribe((e=>{this.relationsQueryFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.relationsQueryFormGroup.disable({emitEvent:!1}):this.relationsQueryFormGroup.enable({emitEvent:!1})}writeValue(e){this.relationsQueryFormGroup.reset(e||{},{emitEvent:!1})}}e("RelationsQueryConfigComponent",dn),dn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:dn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),dn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:dn,selector:"tb-relations-query-config",inputs:{disabled:"disabled",required:"required"},providers:[{provide:P,useExisting:a((()=>dn)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n
tb.rulenode.relations-query
\n
\n
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n \n tb.rulenode.max-relation-level\n \n \n {{ \'tb.rulenode.max-relation-level-error\' | translate }}\n \n \n
\n
\n \n {{ \'alias.last-level-relation\' | translate }}\n \n
\n
\n
\n
relation.relation-filters
\n \n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"component",type:Ve.RelationFiltersComponent,selector:"tb-relation-filters",inputs:["disabled","allowedEntityTypes"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:dn,decorators:[{type:n,args:[{selector:"tb-relations-query-config",providers:[{provide:P,useExisting:a((()=>dn)),multi:!0}],template:'
\n
tb.rulenode.relations-query
\n
\n
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n \n tb.rulenode.max-relation-level\n \n \n {{ \'tb.rulenode.max-relation-level-error\' | translate }}\n \n \n
\n
\n \n {{ \'alias.last-level-relation\' | translate }}\n \n
\n
\n
\n
relation.relation-filters
\n \n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]},propDecorators:{disabled:[{type:i}],required:[{type:i}]}});class cn extends b{get required(){return this.requiredValue}set required(e){this.requiredValue=fe(e)}constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.truncate=n,this.fb=r,this.placeholder="tb.rulenode.add-message-type",this.separatorKeysCodes=[le,se,me],this.messageTypes=[],this.messageTypesList=[],this.searchText="",this.propagateChange=e=>{},this.messageTypeConfigForm=this.fb.group({messageType:[null]});for(const e of Object.keys(v))this.messageTypesList.push({name:C.get(v[e]),value:e})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}ngOnInit(){this.filteredMessageTypes=this.messageTypeConfigForm.get("messageType").valueChanges.pipe(Fe(""),ve((e=>e||"")),Ce((e=>this.fetchMessageTypes(e))),ke())}setDisabledState(e){this.disabled=e,this.disabled?this.messageTypeConfigForm.disable({emitEvent:!1}):this.messageTypeConfigForm.enable({emitEvent:!1})}writeValue(e){this.searchText="",this.messageTypes.length=0,e&&e.forEach((e=>{const t=this.messageTypesList.find((t=>t.value===e));t?this.messageTypes.push({name:t.name,value:t.value}):this.messageTypes.push({name:e,value:e})}))}displayMessageTypeFn(e){return e?e.name:void 0}textIsNotEmpty(e){return e&&e.length>0}createMessageType(e,t){e.preventDefault(),this.transformMessageType(t)}add(e){this.transformMessageType(e.value)}fetchMessageTypes(e){if(this.searchText=e,this.searchText&&this.searchText.length){const e=this.searchText.toUpperCase();return qe(this.messageTypesList.filter((t=>t.name.toUpperCase().includes(e))))}return qe(this.messageTypesList)}transformMessageType(e){if((e||"").trim()){let t;const n=e.trim(),r=this.messageTypesList.find((e=>e.name===n));t=r?{name:r.name,value:r.value}:{name:n,value:n},t&&this.addMessageType(t)}this.clear("")}remove(e){const t=this.messageTypes.indexOf(e);t>=0&&(this.messageTypes.splice(t,1),this.updateModel())}selected(e){this.addMessageType(e.option.value),this.clear("")}addMessageType(e){-1===this.messageTypes.findIndex((t=>t.value===e.value))&&(this.messageTypes.push(e),this.updateModel())}onFocus(){this.messageTypeConfigForm.get("messageType").updateValueAndValidity({onlySelf:!0,emitEvent:!0})}clear(e=""){this.messageTypeInput.nativeElement.value=e,this.messageTypeConfigForm.get("messageType").patchValue(null,{emitEvent:!0}),setTimeout((()=>{this.messageTypeInput.nativeElement.blur(),this.messageTypeInput.nativeElement.focus()}),0)}updateModel(){const e=this.messageTypes.map((e=>e.value));this.required?(this.chipList.errorState=!e.length,this.propagateChange(e.length>0?e:null)):(this.chipList.errorState=!1,this.propagateChange(e))}}e("MessageTypesConfigComponent",cn),cn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:cn,deps:[{token:G.Store},{token:H.TranslateService},{token:F.TruncatePipe},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),cn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:cn,selector:"tb-message-types-config",inputs:{required:"required",label:"label",placeholder:"placeholder",disabled:"disabled"},providers:[{provide:P,useExisting:a((()=>cn)),multi:!0}],viewQueries:[{propertyName:"chipList",first:!0,predicate:["chipList"],descendants:!0},{propertyName:"matAutocomplete",first:!0,predicate:["messageTypeAutocomplete"],descendants:!0},{propertyName:"messageTypeInput",first:!0,predicate:["messageTypeInput"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'\n {{ label }}\n \n \n {{messageType.name}}\n close\n \n \n \n \n \n \n \n \n
\n
\n tb.rulenode.no-message-types-found\n
\n \n \n {{ \'tb.rulenode.no-message-type-matching\' | translate :\n {messageType: truncate.transform(searchText, true, 6, '...')}\n }}\n \n \n \n tb.rulenode.create-new-message-type\n \n
\n
\n
\n help\n \n {{ \'tb.rulenode.select-message-types-required\' | translate }}\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"component",type:Te.MatAutocomplete,selector:"mat-autocomplete",inputs:["disableRipple","hideSingleSelectionIndicator"],exportAs:["matAutocomplete"]},{kind:"directive",type:Te.MatAutocompleteTrigger,selector:"input[matAutocomplete], textarea[matAutocomplete]",exportAs:["matAutocompleteTrigger"]},{kind:"directive",type:Te.MatAutocompleteOrigin,selector:"[matAutocompleteOrigin]",exportAs:["matAutocompleteOrigin"]},{kind:"component",type:ue.MatChipGrid,selector:"mat-chip-grid",inputs:["tabIndex","disabled","placeholder","required","value","errorStateMatcher"],outputs:["change","valueChange"]},{kind:"directive",type:ue.MatChipInput,selector:"input[matChipInputFor]",inputs:["matChipInputFor","matChipInputAddOnBlur","matChipInputSeparatorKeyCodes","placeholder","id","disabled"],outputs:["matChipInputTokenEnd"],exportAs:["matChipInput","matChipInputFor"]},{kind:"directive",type:ue.MatChipRemove,selector:"[matChipRemove]"},{kind:"component",type:ue.MatChipRow,selector:"mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]",inputs:["color","disabled","disableRipple","tabIndex","editable"],outputs:["edited"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:R.AsyncPipe,name:"async"},{kind:"pipe",type:Ie.HighlightPipe,name:"highlight"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:cn,decorators:[{type:n,args:[{selector:"tb-message-types-config",providers:[{provide:P,useExisting:a((()=>cn)),multi:!0}],template:'\n {{ label }}\n \n \n {{messageType.name}}\n close\n \n \n \n \n \n \n \n \n
\n
\n tb.rulenode.no-message-types-found\n
\n \n \n {{ \'tb.rulenode.no-message-type-matching\' | translate :\n {messageType: truncate.transform(searchText, true, 6, '...')}\n }}\n \n \n \n tb.rulenode.create-new-message-type\n \n
\n
\n
\n help\n \n {{ \'tb.rulenode.select-message-types-required\' | translate }}\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:F.TruncatePipe},{type:E.FormBuilder}]},propDecorators:{required:[{type:i}],label:[{type:i}],placeholder:[{type:i}],disabled:[{type:i}],chipList:[{type:o,args:["chipList",{static:!1}]}],matAutocomplete:[{type:o,args:["messageTypeAutocomplete",{static:!1}]}],messageTypeInput:[{type:o,args:["messageTypeInput",{static:!1}]}]}});class fn extends b{get required(){return this.requiredValue}set required(e){this.requiredValue=fe(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.subscriptions=[],this.disableCertPemCredentials=!1,this.passwordFieldRequired=!0,this.allCredentialsTypes=Tt,this.credentialsTypeTranslationsMap=It,this.propagateChange=e=>{}}ngOnInit(){this.credentialsConfigFormGroup=this.fb.group({type:[null,[D.required]],username:[null,[]],password:[null,[]],caCert:[null,[]],caCertFileName:[null,[]],privateKey:[null,[]],privateKeyFileName:[null,[]],cert:[null,[]],certFileName:[null,[]]}),this.subscriptions.push(this.credentialsConfigFormGroup.valueChanges.subscribe((()=>{this.updateView()}))),this.subscriptions.push(this.credentialsConfigFormGroup.get("type").valueChanges.subscribe((()=>{this.credentialsTypeChanged()})))}ngOnChanges(e){for(const t of Object.keys(e)){const n=e[t];if(!n.firstChange&&n.currentValue!==n.previousValue&&n.currentValue&&"disableCertPemCredentials"===t){"cert.PEM"===this.credentialsConfigFormGroup.get("type").value&&setTimeout((()=>{this.credentialsConfigFormGroup.get("type").patchValue("anonymous",{emitEvent:!0})}))}}}ngOnDestroy(){this.subscriptions.forEach((e=>e.unsubscribe()))}writeValue(e){X(e)&&(this.credentialsConfigFormGroup.reset(e,{emitEvent:!1}),this.updateValidators())}setDisabledState(e){e?this.credentialsConfigFormGroup.disable({emitEvent:!1}):(this.credentialsConfigFormGroup.enable({emitEvent:!1}),this.updateValidators())}updateView(){let e=this.credentialsConfigFormGroup.value;const t=e.type;switch(t){case"anonymous":e={type:t};break;case"basic":e={type:t,username:e.username,password:e.password};break;case"cert.PEM":delete e.username}this.propagateChange(e)}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}validate(e){return this.credentialsConfigFormGroup.valid?null:{credentialsConfig:{valid:!1}}}credentialsTypeChanged(){this.credentialsConfigFormGroup.patchValue({username:null,password:null,caCert:null,caCertFileName:null,privateKey:null,privateKeyFileName:null,cert:null,certFileName:null}),this.updateValidators()}updateValidators(e=!1){const t=this.credentialsConfigFormGroup.get("type").value;switch(e&&this.credentialsConfigFormGroup.reset({type:t},{emitEvent:!1}),this.credentialsConfigFormGroup.setValidators([]),this.credentialsConfigFormGroup.get("username").setValidators([]),this.credentialsConfigFormGroup.get("password").setValidators([]),t){case"anonymous":break;case"basic":this.credentialsConfigFormGroup.get("username").setValidators([D.required]),this.credentialsConfigFormGroup.get("password").setValidators(this.passwordFieldRequired?[D.required]:[]);break;case"cert.PEM":this.credentialsConfigFormGroup.setValidators([this.requiredFilesSelected(D.required,[["caCert","caCertFileName"],["privateKey","privateKeyFileName","cert","certFileName"]])])}this.credentialsConfigFormGroup.get("username").updateValueAndValidity({emitEvent:e}),this.credentialsConfigFormGroup.get("password").updateValueAndValidity({emitEvent:e}),this.credentialsConfigFormGroup.updateValueAndValidity({emitEvent:e})}requiredFilesSelected(e,t=null){return n=>{t||(t=[Object.keys(n.controls)]);return n?.controls&&t.some((t=>t.every((t=>!e(n.controls[t])))))?null:{notAllRequiredFilesSelected:!0}}}}e("CredentialsConfigComponent",fn),fn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:fn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),fn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:fn,selector:"tb-credentials-config",inputs:{required:"required",disableCertPemCredentials:"disableCertPemCredentials",passwordFieldRequired:"passwordFieldRequired"},providers:[{provide:P,useExisting:a((()=>fn)),multi:!0},{provide:w,useExisting:a((()=>fn)),multi:!0}],usesInheritance:!0,usesOnChanges:!0,ngImport:t,template:'
\n \n \n tb.rulenode.credentials\n \n {{ credentialsTypeTranslationsMap.get(credentialsConfigFormGroup.get(\'type\').value) | translate }}\n \n \n \n \n tb.rulenode.credentials-type\n \n \n {{ credentialsTypeTranslationsMap.get(credentialsType) | translate }}\n \n \n \n {{ \'tb.rulenode.credentials-type-required\' | translate }}\n \n \n
\n \n \n \n \n tb.rulenode.username\n \n \n {{ \'tb.rulenode.username-required\' | translate }}\n \n \n \n tb.rulenode.password\n \n \n \n {{ \'tb.rulenode.password-required\' | translate }}\n \n \n \n \n
{{ \'tb.rulenode.credentials-pem-hint\' | translate }}
\n \n \n \n \n \n \n \n tb.rulenode.private-key-password\n \n \n \n
\n
\n
\n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:R.NgSwitch,selector:"[ngSwitch]",inputs:["ngSwitch"]},{kind:"directive",type:R.NgSwitchCase,selector:"[ngSwitchCase]",inputs:["ngSwitchCase"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Ne.MatExpansionPanel,selector:"mat-expansion-panel",inputs:["disabled","expanded","hideToggle","togglePosition"],outputs:["opened","closed","expandedChange","afterExpand","afterCollapse"],exportAs:["matExpansionPanel"]},{kind:"component",type:Ne.MatExpansionPanelHeader,selector:"mat-expansion-panel-header",inputs:["tabIndex","expandedHeight","collapsedHeight"]},{kind:"directive",type:Ne.MatExpansionPanelTitle,selector:"mat-panel-title"},{kind:"directive",type:Ne.MatExpansionPanelDescription,selector:"mat-panel-description"},{kind:"directive",type:Ne.MatExpansionPanelContent,selector:"ng-template[matExpansionPanelContent]"},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:Pe.FileInputComponent,selector:"tb-file-input",inputs:["label","accept","noFileText","inputId","allowedExtensions","dropLabel","contentConvertFunction","required","requiredAsError","disabled","existingFileName","readAsBinary","workFromFileObj","multipleFile"],outputs:["fileNameChanged"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:we.TogglePasswordComponent,selector:"tb-toggle-password"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:fn,decorators:[{type:n,args:[{selector:"tb-credentials-config",providers:[{provide:P,useExisting:a((()=>fn)),multi:!0},{provide:w,useExisting:a((()=>fn)),multi:!0}],template:'
\n \n \n tb.rulenode.credentials\n \n {{ credentialsTypeTranslationsMap.get(credentialsConfigFormGroup.get(\'type\').value) | translate }}\n \n \n \n \n tb.rulenode.credentials-type\n \n \n {{ credentialsTypeTranslationsMap.get(credentialsType) | translate }}\n \n \n \n {{ \'tb.rulenode.credentials-type-required\' | translate }}\n \n \n
\n \n \n \n \n tb.rulenode.username\n \n \n {{ \'tb.rulenode.username-required\' | translate }}\n \n \n \n tb.rulenode.password\n \n \n \n {{ \'tb.rulenode.password-required\' | translate }}\n \n \n \n \n
{{ \'tb.rulenode.credentials-pem-hint\' | translate }}
\n \n \n \n \n \n \n \n tb.rulenode.private-key-password\n \n \n \n
\n
\n
\n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]},propDecorators:{required:[{type:i}],disableCertPemCredentials:[{type:i}],passwordFieldRequired:[{type:i}]}});class gn{constructor(e,t){this.fb=e,this.translate=t,this.propagateChange=e=>{},this.destroy$=new Ae,this.selectOptions=[];for(const e of wt.keys())this.selectOptions.push({value:e,name:this.translate.instant(wt.get(e))})}ngOnInit(){this.chipControlGroup=this.fb.group({chipControl:[null,[]]}),this.chipControlGroup.get("chipControl").valueChanges.pipe(Le(this.destroy$)).subscribe((e=>{e&&this.propagateChange(e)}))}writeValue(e){this.chipControlGroup.get("chipControl").patchValue(e,{emitEvent:!1})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){e?this.chipControlGroup.disable({emitEvent:!1}):this.chipControlGroup.enable({emitEvent:!1})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}}e("MsgMetadataChipComponent",gn),gn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:gn,deps:[{token:E.FormBuilder},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),gn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:gn,selector:"tb-msg-metadata-chip",inputs:{labelText:"labelText"},providers:[{provide:P,useExisting:a((()=>gn)),multi:!0}],ngImport:t,template:'
\n
{{ labelText }}
\n \n {{ option.name }}\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"component",type:ue.MatChipListbox,selector:"mat-chip-listbox",inputs:["tabIndex","multiple","aria-orientation","selectable","compareWith","required","hideSingleSelectionIndicator","value"],outputs:["change"]},{kind:"component",type:ue.MatChipOption,selector:"mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]",inputs:["color","disabled","disableRipple","tabIndex","selectable","selected"],outputs:["selectionChange"]},{kind:"directive",type:ye.DefaultClassDirective,selector:" [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]",inputs:["ngClass","ngClass.xs","ngClass.sm","ngClass.md","ngClass.lg","ngClass.xl","ngClass.lt-sm","ngClass.lt-md","ngClass.lt-lg","ngClass.lt-xl","ngClass.gt-xs","ngClass.gt-sm","ngClass.gt-md","ngClass.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:gn,decorators:[{type:n,args:[{selector:"tb-msg-metadata-chip",providers:[{provide:P,useExisting:a((()=>gn)),multi:!0}],template:'
\n
{{ labelText }}
\n \n {{ option.name }}\n \n
\n'}]}],ctorParameters:function(){return[{type:E.FormBuilder},{type:H.TranslateService}]},propDecorators:{labelText:[{type:i}]}});class yn extends b{constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.destroy$=new Ae,this.sourceFieldSubcritption=[],this.propagateChange=null,this.valueChangeSubscription=null,this.disabled=!1,this.required=!1}ngOnInit(){this.ngControl=this.injector.get(V),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.svListFormGroup=this.fb.group({}),this.svListFormGroup.addControl("keyVals",this.fb.array([]))}keyValsFormArray(){return this.svListFormGroup.get("keyVals")}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.svListFormGroup.disable({emitEvent:!1}):this.svListFormGroup.enable({emitEvent:!1})}writeValue(e){this.valueChangeSubscription&&this.valueChangeSubscription.unsubscribe();const t=[];if(e)for(const n of Object.keys(e))Object.prototype.hasOwnProperty.call(e,n)&&t.push(this.fb.group({key:[n,[D.required]],value:[e[n],[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]}));this.svListFormGroup.setControl("keyVals",this.fb.array(t));for(const e of this.keyValsFormArray().controls)this.keyChangeSubscribe(e);this.valueChangeSubscription=this.svListFormGroup.valueChanges.pipe(Le(this.destroy$)).subscribe((()=>{this.updateModel()}))}errorTrigger(){const e=this.keyValsFormArray();for(const t of e.controls)for(const e of Object.keys(t.value))if(t.get(e).touched&&t.get(e).invalid)return!0;return!1}filterSelectOptions(e){const t=[];for(const e of this.svListFormGroup.get("keyVals").value){const n=this.selectOptions.find((t=>t.value===e.key));n&&t.push(n)}const n=[];for(const r of this.selectOptions)X(t.find((e=>e.value===r.value)))&&r.value!==e?.get("key").value||n.push(r);return n}removeKeyVal(e){this.svListFormGroup.get("keyVals").removeAt(e),this.sourceFieldSubcritption[e].unsubscribe(),this.sourceFieldSubcritption.splice(e,1)}addKeyVal(){const e=this.svListFormGroup.get("keyVals");e.push(this.fb.group({key:["",[D.required]],value:["",[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]})),this.keyChangeSubscribe(e.at(e.length-1))}keyChangeSubscribe(e){this.sourceFieldSubcritption.push(e.get("key").valueChanges.pipe(Le(this.destroy$)).subscribe((t=>{e.get("value").patchValue(this.targetKeyPrefix+t[0].toUpperCase()+t.slice(1))})))}validate(e){return!this.svListFormGroup.get("keyVals").value.length&&this.required?{svMapRequired:!0}:this.svListFormGroup.valid?null:{svFieldsRequired:!0}}updateModel(){const e=this.svListFormGroup.get("keyVals").value;if(this.required&&!e.length||!this.svListFormGroup.valid)this.propagateChange(null);else{const t={};e.forEach((e=>{t[e.key]=e.value})),this.propagateChange(t)}}}e("SvMapConfigComponent",yn),yn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:yn,deps:[{token:G.Store},{token:H.TranslateService},{token:t.Injector},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),yn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:yn,selector:"tb-sv-map-config",inputs:{selectOptions:"selectOptions",disabled:"disabled",labelText:"labelText",requiredText:"requiredText",targetKeyPrefix:"targetKeyPrefix",selectText:"selectText",selectRequiredText:"selectRequiredText",valText:"valText",valRequiredText:"valRequiredText",hintText:"hintText",popupHelpLink:"popupHelpLink",required:"required"},providers:[{provide:P,useExisting:a((()=>yn)),multi:!0},{provide:w,useExisting:a((()=>yn)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n
\n
tb.rulenode.originator-fields-mapping
\n
\n tb.rulenode.map-fields-required\n
\n
\n
\n
\n
\n
{{ selectText }}
\n
{{ valText }}
\n
\n
\n
\n
\n \n \n \n {{option.name}}\n \n \n \n \n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n',styles:[":host .field-space{flex:1 1 50%}:host .actions-header{width:40px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgClass,selector:"[ngClass]",inputs:["class","ngClass"]},{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:ye.DefaultClassDirective,selector:" [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]",inputs:["ngClass","ngClass.xs","ngClass.sm","ngClass.md","ngClass.lg","ngClass.xl","ngClass.lt-sm","ngClass.lt-md","ngClass.lt-lg","ngClass.lt-xl","ngClass.gt-xs","ngClass.gt-sm","ngClass.gt-md","ngClass.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormControlDirective,selector:"[formControl]",inputs:["formControl","disabled","ngModel"],outputs:["ngModelChange"],exportAs:["ngForm"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:mn,selector:"tb-example-hint",inputs:["hintText","popupHelpLink"]},{kind:"pipe",type:R.AsyncPipe,name:"async"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),Se([h()],yn.prototype,"disabled",void 0),Se([h()],yn.prototype,"required",void 0),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:yn,decorators:[{type:n,args:[{selector:"tb-sv-map-config",providers:[{provide:P,useExisting:a((()=>yn)),multi:!0},{provide:w,useExisting:a((()=>yn)),multi:!0}],template:'
\n
\n
tb.rulenode.originator-fields-mapping
\n
\n tb.rulenode.map-fields-required\n
\n
\n
\n
\n
\n
{{ selectText }}
\n
{{ valText }}
\n
\n
\n
\n
\n \n \n \n {{option.name}}\n \n \n \n \n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n',styles:[":host .field-space{flex:1 1 50%}:host .actions-header{width:40px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:t.Injector},{type:E.FormBuilder}]},propDecorators:{selectOptions:[{type:i}],disabled:[{type:i}],labelText:[{type:i}],requiredText:[{type:i}],targetKeyPrefix:[{type:i}],selectText:[{type:i}],selectRequiredText:[{type:i}],valText:[{type:i}],valRequiredText:[{type:i}],hintText:[{type:i}],popupHelpLink:[{type:i}],required:[{type:i}]}});class xn extends b{get required(){return this.requiredValue}set required(e){this.requiredValue=fe(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.keys(g),this.directionTypeTranslations=y,this.propagateChange=null}ngOnInit(){this.relationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[D.required]],maxLevel:[null,[]],filters:[null]}),this.relationsQueryFormGroup.valueChanges.subscribe((e=>{this.relationsQueryFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.relationsQueryFormGroup.disable({emitEvent:!1}):this.relationsQueryFormGroup.enable({emitEvent:!1})}writeValue(e){this.relationsQueryFormGroup.reset(e||{},{emitEvent:!1})}}e("RelationsQueryConfigOldComponent",xn),xn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:xn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),xn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:xn,selector:"tb-relations-query-config-old",inputs:{disabled:"disabled",required:"required"},providers:[{provide:P,useExisting:a((()=>xn)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n {{ \'alias.last-level-relation\' | translate }}\n \n
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n \n tb.rulenode.max-relation-level\n \n \n
\n
relation.relation-filters
\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:Ve.RelationFiltersComponent,selector:"tb-relation-filters",inputs:["disabled","allowedEntityTypes"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:xn,decorators:[{type:n,args:[{selector:"tb-relations-query-config-old",providers:[{provide:P,useExisting:a((()=>xn)),multi:!0}],template:'
\n \n {{ \'alias.last-level-relation\' | translate }}\n \n
\n \n relation.direction\n \n \n {{ directionTypeTranslations.get(type) | translate }}\n \n \n \n \n tb.rulenode.max-relation-level\n \n \n
\n
relation.relation-filters
\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]},propDecorators:{disabled:[{type:i}],required:[{type:i}]}});class bn{constructor(e,t){this.translate=e,this.fb=t,this.propagateChange=e=>{},this.destroy$=new Ae,this.separatorKeysCodes=[le,se,me],this.onTouched=()=>{}}ngOnInit(){this.attributeControlGroup=this.fb.group({clientAttributeNames:[null,[]],sharedAttributeNames:[null,[]],serverAttributeNames:[null,[]],latestTsKeyNames:[null,[]],getLatestValueWithTs:[!1,[]]},{validators:this.atLeastOne(D.required,["clientAttributeNames","sharedAttributeNames","serverAttributeNames","latestTsKeyNames"])}),this.attributeControlGroup.valueChanges.pipe(Le(this.destroy$)).subscribe((e=>{this.propagateChange(e)}))}validate(){return this.attributeControlGroup.valid?null:{atLeastOneRequired:!0}}atLeastOne(e,t=null){return n=>{t||(t=Object.keys(n.controls));return n?.controls&&t.some((t=>!e(n.controls[t])))?null:{atLeastOne:!0}}}writeValue(e){this.attributeControlGroup.setValue(e,{emitEvent:!1})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){this.onTouched=e}setDisabledState(e){e?this.attributeControlGroup.disable({emitEvent:!1}):this.attributeControlGroup.enable({emitEvent:!1})}ngOnDestroy(){this.destroy$.next(null),this.destroy$.complete()}}e("SelectAttributesComponent",bn),bn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:bn,deps:[{token:H.TranslateService},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),bn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:bn,selector:"tb-select-attributes",inputs:{popupHelpLink:"popupHelpLink"},providers:[{provide:P,useExisting:a((()=>bn)),multi:!0},{provide:w,useExisting:bn,multi:!0}],ngImport:t,template:'
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n {{ \'tb.rulenode.fetch-latest-telemetry-with-timestamp\' | translate }}\n \n
\n
\n\n\n help\n\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:R.NgTemplateOutlet,selector:"[ngTemplateOutlet]",inputs:["ngTemplateOutletContext","ngTemplateOutlet","ngTemplateOutletInjector"]},{kind:"component",type:Re.StringItemsListComponent,selector:"tb-string-items-list",inputs:["required","disabled","label","placeholder","hint","requiredText","floatLabel","appearance","editable","subscriptSizing","predefinedValues"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"component",type:mn,selector:"tb-example-hint",inputs:["hintText","popupHelpLink"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:bn,decorators:[{type:n,args:[{selector:"tb-select-attributes",providers:[{provide:P,useExisting:a((()=>bn)),multi:!0},{provide:w,useExisting:bn,multi:!0}],template:'
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n {{ \'tb.rulenode.fetch-latest-telemetry-with-timestamp\' | translate }}\n \n
\n
\n\n\n help\n\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:H.TranslateService},{type:E.FormBuilder}]},propDecorators:{popupHelpLink:[{type:i}]}});class hn extends b{constructor(e,t){super(e),this.store=e,this.fb=t,this.propagateChange=null,this.destroy$=new Ae,this.alarmStatus=k,this.alarmStatusTranslations=L}ngOnInit(){this.alarmStatusGroup=this.fb.group({alarmStatus:[null,[]]}),this.alarmStatusGroup.get("alarmStatus").valueChanges.pipe(Le(this.destroy$)).subscribe((e=>{this.propagateChange(e)}))}setDisabledState(e){e?this.alarmStatusGroup.disable({emitEvent:!1}):this.alarmStatusGroup.enable({emitEvent:!1})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}writeValue(e){this.alarmStatusGroup.get("alarmStatus").patchValue(e,{emitEvent:!1})}}e("AlarmStatusSelectComponent",hn),hn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:hn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),hn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:hn,selector:"tb-alarm-status-select",providers:[{provide:P,useExisting:a((()=>hn)),multi:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n
\n \n {{ alarmStatusTranslations.get(alarmStatus.ACTIVE_UNACK) | translate }}\n \n \n {{ alarmStatusTranslations.get(alarmStatus.ACTIVE_ACK) | translate }}\n \n
\n
\n \n {{ alarmStatusTranslations.get(alarmStatus.CLEARED_UNACK) | translate }}\n \n \n {{ alarmStatusTranslations.get(alarmStatus.ACTIVE_UNACK) | translate }}\n \n
\n
\n
\n',styles:[":host .chip-listbox{max-width:460px;width:100%}:host .chip-listbox .toggle-column{display:flex;flex:1 1 100%;gap:8px}:host .chip-listbox .option{margin:0}@media screen and (max-width: 959px){:host .chip-listbox{max-width:360px}:host .chip-listbox .toggle-column{flex-direction:column}}:host ::ng-deep .chip-listbox .mdc-evolution-chip-set__chips{gap:8px}:host ::ng-deep .chip-listbox .option button{flex-basis:100%;justify-content:start}:host ::ng-deep .chip-listbox .option .mdc-evolution-chip__graphic{flex-grow:0}\n"],dependencies:[{kind:"component",type:ue.MatChipListbox,selector:"mat-chip-listbox",inputs:["tabIndex","multiple","aria-orientation","selectable","compareWith","required","hideSingleSelectionIndicator","value"],outputs:["change"]},{kind:"component",type:ue.MatChipOption,selector:"mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]",inputs:["color","disabled","disableRipple","tabIndex","selectable","selected"],outputs:["selectionChange"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutAlignDirective,selector:" [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]",inputs:["fxLayoutAlign","fxLayoutAlign.xs","fxLayoutAlign.sm","fxLayoutAlign.md","fxLayoutAlign.lg","fxLayoutAlign.xl","fxLayoutAlign.lt-sm","fxLayoutAlign.lt-md","fxLayoutAlign.lt-lg","fxLayoutAlign.lt-xl","fxLayoutAlign.gt-xs","fxLayoutAlign.gt-sm","fxLayoutAlign.gt-md","fxLayoutAlign.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:hn,decorators:[{type:n,args:[{selector:"tb-alarm-status-select",providers:[{provide:P,useExisting:a((()=>hn)),multi:!0}],template:'
\n \n
\n \n {{ alarmStatusTranslations.get(alarmStatus.ACTIVE_UNACK) | translate }}\n \n \n {{ alarmStatusTranslations.get(alarmStatus.ACTIVE_ACK) | translate }}\n \n
\n
\n \n {{ alarmStatusTranslations.get(alarmStatus.CLEARED_UNACK) | translate }}\n \n \n {{ alarmStatusTranslations.get(alarmStatus.ACTIVE_UNACK) | translate }}\n \n
\n
\n
\n',styles:[":host .chip-listbox{max-width:460px;width:100%}:host .chip-listbox .toggle-column{display:flex;flex:1 1 100%;gap:8px}:host .chip-listbox .option{margin:0}@media screen and (max-width: 959px){:host .chip-listbox{max-width:360px}:host .chip-listbox .toggle-column{flex-direction:column}}:host ::ng-deep .chip-listbox .mdc-evolution-chip-set__chips{gap:8px}:host ::ng-deep .chip-listbox .option button{flex-basis:100%;justify-content:start}:host ::ng-deep .chip-listbox .option .mdc-evolution-chip__graphic{flex-grow:0}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]}});class vn{}e("RulenodeCoreConfigCommonModule",vn),vn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:vn,deps:[],target:t.ɵɵFactoryTarget.NgModule}),vn.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:vn,declarations:[un,pn,dn,cn,fn,rn,on,ln,Xt,gn,yn,xn,bn,hn,mn],imports:[O,T,Me],exports:[un,pn,dn,cn,fn,rn,on,ln,Xt,gn,yn,xn,bn,hn,mn]}),vn.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:vn,imports:[O,T,Me]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:vn,decorators:[{type:l,args:[{declarations:[un,pn,dn,cn,fn,rn,on,ln,Xt,gn,yn,xn,bn,hn,mn],imports:[O,T,Me],exports:[un,pn,dn,cn,fn,rn,on,ln,Xt,gn,yn,xn,bn,hn,mn]}]}]});class Cn{}e("RuleNodeCoreConfigActionModule",Cn),Cn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Cn,deps:[],target:t.ɵɵFactoryTarget.NgModule}),Cn.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:Cn,declarations:[nn,We,en,Wt,zt,Ye,Ze,et,tt,Qt,nt,ot,Ht,jt,Yt,Zt,tn,Xe,rt,Jt,$t,an,sn],imports:[O,T,Me,vn],exports:[nn,We,en,Wt,zt,Ye,Ze,et,tt,Qt,nt,ot,Ht,jt,Yt,Zt,tn,Xe,rt,Jt,$t,an,sn]}),Cn.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Cn,imports:[O,T,Me,vn]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Cn,decorators:[{type:l,args:[{declarations:[nn,We,en,Wt,zt,Ye,Ze,et,tt,Qt,nt,ot,Ht,jt,Yt,Zt,tn,Xe,rt,Jt,$t,an,sn],imports:[O,T,Me,vn],exports:[nn,We,en,Wt,zt,Ye,Ze,et,tt,Qt,nt,ot,Ht,jt,Yt,Zt,tn,Xe,rt,Jt,$t,an,sn]}]}]});class Fn extends s{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n,this.separatorKeysCodes=[le,se,me]}configForm(){return this.calculateDeltaConfigForm}onConfigurationSet(e){this.calculateDeltaConfigForm=this.fb.group({inputValueKey:[e.inputValueKey,[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],outputValueKey:[e.outputValueKey,[D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],useCache:[e.useCache,[]],addPeriodBetweenMsgs:[e.addPeriodBetweenMsgs,[]],periodValueKey:[e.periodValueKey,[]],round:[e.round,[D.min(0),D.max(15)]],tellFailureIfDeltaIsNegative:[e.tellFailureIfDeltaIsNegative,[]]})}prepareInputConfig(e){return{inputValueKey:X(e?.inputValueKey)?e.inputValueKey:null,outputValueKey:X(e?.outputValueKey)?e.outputValueKey:null,useCache:!X(e?.useCache)||e.useCache,addPeriodBetweenMsgs:!!X(e?.addPeriodBetweenMsgs)&&e.addPeriodBetweenMsgs,periodValueKey:X(e?.periodValueKey)?e.periodValueKey:null,round:X(e?.round)?e.round:null,tellFailureIfDeltaIsNegative:!X(e?.tellFailureIfDeltaIsNegative)||e.tellFailureIfDeltaIsNegative}}prepareOutputConfig(e){return Z(e)}updateValidators(e){this.calculateDeltaConfigForm.get("addPeriodBetweenMsgs").value?this.calculateDeltaConfigForm.get("periodValueKey").setValidators([D.required]):this.calculateDeltaConfigForm.get("periodValueKey").setValidators([]),this.calculateDeltaConfigForm.get("periodValueKey").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["addPeriodBetweenMsgs"]}}e("CalculateDeltaConfigComponent",Fn),Fn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Fn,deps:[{token:G.Store},{token:H.TranslateService},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Fn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Fn,selector:"tb-enrichment-node-calculate-delta-config",usesInheritance:!0,ngImport:t,template:"
\n
\n \n {{ 'tb.rulenode.input-value-key' | translate }}\n \n \n {{ 'tb.rulenode.input-value-key-required' | translate }}\n \n \n \n {{ 'tb.rulenode.output-value-key' | translate }}\n \n \n {{ 'tb.rulenode.output-value-key-required' | translate }}\n \n \n
\n \n {{ 'tb.rulenode.number-of-digits-after-floating-point' | translate }}\n \n \n {{ 'tb.rulenode.number-of-digits-after-floating-point-range' | translate }}\n \n \n {{ 'tb.rulenode.number-of-digits-after-floating-point-range' | translate }}\n \n \n
\n
\n \n {{ 'tb.rulenode.failure-if-delta-negative' | translate }}\n \n
\n
\n \n {{ 'tb.rulenode.use-caching' | translate }}\n \n
\n
\n
\n \n {{ 'tb.rulenode.add-time-difference-between-readings' | translate:\n { inputValueKey: calculateDeltaConfigForm.get('inputValueKey').valid ?\n calculateDeltaConfigForm.get('inputValueKey').value : 'tb.rulenode.input-value-key' | translate } }}\n \n
\n \n {{ 'tb.rulenode.period-value-key' | translate }}\n \n \n {{ 'tb.rulenode.period-value-key-required' | translate }}\n \n \n
\n
\n
\n",dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Fn,decorators:[{type:n,args:[{selector:"tb-enrichment-node-calculate-delta-config",template:"
\n
\n \n {{ 'tb.rulenode.input-value-key' | translate }}\n \n \n {{ 'tb.rulenode.input-value-key-required' | translate }}\n \n \n \n {{ 'tb.rulenode.output-value-key' | translate }}\n \n \n {{ 'tb.rulenode.output-value-key-required' | translate }}\n \n \n
\n \n {{ 'tb.rulenode.number-of-digits-after-floating-point' | translate }}\n \n \n {{ 'tb.rulenode.number-of-digits-after-floating-point-range' | translate }}\n \n \n {{ 'tb.rulenode.number-of-digits-after-floating-point-range' | translate }}\n \n \n
\n
\n \n {{ 'tb.rulenode.failure-if-delta-negative' | translate }}\n \n
\n
\n \n {{ 'tb.rulenode.use-caching' | translate }}\n \n
\n
\n
\n \n {{ 'tb.rulenode.add-time-difference-between-readings' | translate:\n { inputValueKey: calculateDeltaConfigForm.get('inputValueKey').valid ?\n calculateDeltaConfigForm.get('inputValueKey').value : 'tb.rulenode.input-value-key' | translate } }}\n \n
\n \n {{ 'tb.rulenode.period-value-key' | translate }}\n \n \n {{ 'tb.rulenode.period-value-key-required' | translate }}\n \n \n
\n
\n
\n"}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:E.FormBuilder}]}});class kn extends s{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.fetchToData=[],this.DataToFetch=ht;for(const e of vt.keys())e!==ht.FIELDS&&this.fetchToData.push({value:e,name:this.translate.instant(vt.get(e))})}configForm(){return this.customerAttributesConfigForm}prepareOutputConfig(e){const t={};for(const n of Object.keys(e.dataMapping))t[n.trim()]=e.dataMapping[n];return e.dataMapping=t,Z(e)}prepareInputConfig(e){let t,n;return t=X(e?.telemetry)?e.telemetry?ht.LATEST_TELEMETRY:ht.ATTRIBUTES:X(e?.dataToFetch)?e.dataToFetch:ht.ATTRIBUTES,n=X(e?.attrMapping)?e.attrMapping:X(e?.dataMapping)?e.dataMapping:null,{dataToFetch:t,dataMapping:n,fetchTo:X(e?.fetchTo)?e.fetchTo:Pt.METADATA}}selectTranslation(e,t){return this.customerAttributesConfigForm.get("dataToFetch").value===ht.LATEST_TELEMETRY?e:t}onConfigurationSet(e){this.customerAttributesConfigForm=this.fb.group({dataToFetch:[e.dataToFetch,[]],dataMapping:[e.dataMapping,[D.required]],fetchTo:[e.fetchTo]})}}e("CustomerAttributesConfigComponent",kn),kn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:kn,deps:[{token:G.Store},{token:E.FormBuilder},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),kn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:kn,selector:"tb-enrichment-node-customer-attributes-config",usesInheritance:!0,ngImport:t,template:'
\n
tb.rulenode.mapping-of-customers-fields
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n \n \n \n \n
\n',styles:[":host .fetch-to-data-toggle{max-width:420px;width:100%}\n"],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:_.DefaultLayoutAlignDirective,selector:" [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]",inputs:["fxLayoutAlign","fxLayoutAlign.xs","fxLayoutAlign.sm","fxLayoutAlign.md","fxLayoutAlign.lg","fxLayoutAlign.xl","fxLayoutAlign.lt-sm","fxLayoutAlign.lt-md","fxLayoutAlign.lt-lg","fxLayoutAlign.lt-xl","fxLayoutAlign.gt-xs","fxLayoutAlign.gt-sm","fxLayoutAlign.gt-md","fxLayoutAlign.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"directive",type:Oe.ToggleOption,selector:"tb-toggle-option",inputs:["value"]},{kind:"component",type:Be.ToggleSelectComponent,selector:"tb-toggle-select",inputs:["disabled","selectMediaBreakpoint","appearance","disablePagination"]},{kind:"component",type:un,selector:"tb-kv-map-config",inputs:["disabled","uniqueKeyValuePairValidator","labelText","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","popupHelpLink","required"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:kn,decorators:[{type:n,args:[{selector:"tb-enrichment-node-customer-attributes-config",template:'
\n
tb.rulenode.mapping-of-customers-fields
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n \n \n \n \n
\n',styles:[":host .fetch-to-data-toggle{max-width:420px;width:100%}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder},{type:H.TranslateService}]}});class Ln extends s{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n}configForm(){return this.deviceAttributesConfigForm}onConfigurationSet(e){this.deviceAttributesConfigForm=this.fb.group({deviceRelationsQuery:[e.deviceRelationsQuery,[D.required]],tellFailureIfAbsent:[e.tellFailureIfAbsent,[]],fetchTo:[e.fetchTo,[]],attributesControl:[e.attributesControl,[]]})}prepareInputConfig(e){return ee(e)&&(e.attributesControl={clientAttributeNames:X(e?.clientAttributeNames)?e.clientAttributeNames:null,latestTsKeyNames:X(e?.latestTsKeyNames)?e.latestTsKeyNames:null,serverAttributeNames:X(e?.serverAttributeNames)?e.serverAttributeNames:null,sharedAttributeNames:X(e?.sharedAttributeNames)?e.sharedAttributeNames:null,getLatestValueWithTs:!!X(e?.getLatestValueWithTs)&&e.getLatestValueWithTs}),{deviceRelationsQuery:X(e?.deviceRelationsQuery)?e.deviceRelationsQuery:null,tellFailureIfAbsent:!X(e?.tellFailureIfAbsent)||e.tellFailureIfAbsent,fetchTo:X(e?.fetchTo)?e.fetchTo:Pt.METADATA,attributesControl:e?e.attributesControl:null}}prepareOutputConfig(e){for(const t of Object.keys(e.attributesControl))e[t]=e.attributesControl[t];return delete e.attributesControl,e}}e("DeviceAttributesConfigComponent",Ln),Ln.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ln,deps:[{token:G.Store},{token:H.TranslateService},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Ln.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Ln,selector:"tb-enrichment-node-device-attributes-config",usesInheritance:!0,ngImport:t,template:'
\n
\n
tb.rulenode.device-relations-query
\n \n \n
\n
\n
\n
tb.rulenode.related-device-attributes
\n
\n tb.rulenode.at-least-one-field-required\n
\n
\n \n \n
\n
\n \n {{ \'tb.rulenode.tell-failure\' | translate }}\n \n
\n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"component",type:pn,selector:"tb-device-relations-query-config",inputs:["disabled","required"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"component",type:bn,selector:"tb-select-attributes",inputs:["popupHelpLink"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Ln,decorators:[{type:n,args:[{selector:"tb-enrichment-node-device-attributes-config",template:'
\n
\n
tb.rulenode.device-relations-query
\n \n \n
\n
\n
\n
tb.rulenode.related-device-attributes
\n
\n tb.rulenode.at-least-one-field-required\n
\n
\n \n \n
\n
\n \n {{ \'tb.rulenode.tell-failure\' | translate }}\n \n
\n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:E.FormBuilder}]}});class Tn extends s{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n,this.predefinedValues=[];for(const e of Object.keys(ct))this.predefinedValues.push({value:ct[e],name:this.translate.instant(ft.get(ct[e]))})}ngOnInit(){super.ngOnInit()}configForm(){return this.entityDetailsConfigForm}prepareInputConfig(e){let t;return t=X(e?.addToMetadata)?e.addToMetadata?Pt.METADATA:Pt.DATA:e?.fetchTo?e.fetchTo:Pt.DATA,{detailsList:X(e?.detailsList)?e.detailsList:null,fetchTo:t}}onConfigurationSet(e){this.entityDetailsConfigForm=this.fb.group({detailsList:[e.detailsList,[D.required]],fetchTo:[e.fetchTo,[]]})}}e("EntityDetailsConfigComponent",Tn),Tn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Tn,deps:[{token:G.Store},{token:H.TranslateService},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Tn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Tn,selector:"tb-enrichment-node-entity-details-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n help\n \n \n \n \n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"component",type:Re.StringItemsListComponent,selector:"tb-string-items-list",inputs:["required","disabled","label","placeholder","hint","requiredText","floatLabel","appearance","editable","subscriptSizing","predefinedValues"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Tn,decorators:[{type:n,args:[{selector:"tb-enrichment-node-entity-details-config",template:'
\n \n \n help\n \n \n \n \n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:E.FormBuilder}]}});class In extends s{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n,this.separatorKeysCodes=[le,se,me],this.aggregationTypes=I,this.aggregations=Object.values(I),this.aggregationTypesTranslations=N,this.fetchMode=gt,this.samplingOrders=Object.values(bt),this.samplingOrdersTranslate=Ft,this.timeUnits=Object.values(mt),this.timeUnitsTranslationMap=ut,this.deduplicationStrategiesHintTranslations=xt,this.headerOptions=[],this.timeUnitMap={[mt.MILLISECONDS]:1,[mt.SECONDS]:1e3,[mt.MINUTES]:6e4,[mt.HOURS]:36e5,[mt.DAYS]:864e5},this.intervalValidator=()=>e=>e.get("startInterval").value*this.timeUnitMap[e.get("startIntervalTimeUnit").value]<=e.get("endInterval").value*this.timeUnitMap[e.get("endIntervalTimeUnit").value]?{intervalError:!0}:null;for(const e of yt.keys())this.headerOptions.push({value:e,name:this.translate.instant(yt.get(e))})}configForm(){return this.getTelemetryFromDatabaseConfigForm}onConfigurationSet(e){this.getTelemetryFromDatabaseConfigForm=this.fb.group({latestTsKeyNames:[e.latestTsKeyNames,[D.required]],aggregation:[e.aggregation,[D.required]],fetchMode:[e.fetchMode,[D.required]],orderBy:[e.orderBy,[]],limit:[e.limit,[]],useMetadataIntervalPatterns:[e.useMetadataIntervalPatterns,[]],interval:this.fb.group({startInterval:[e.interval.startInterval,[]],startIntervalTimeUnit:[e.interval.startIntervalTimeUnit,[]],endInterval:[e.interval.endInterval,[]],endIntervalTimeUnit:[e.interval.endIntervalTimeUnit,[]]}),startIntervalPattern:[e.startIntervalPattern,[]],endIntervalPattern:[e.endIntervalPattern,[]]})}validatorTriggers(){return["fetchMode","useMetadataIntervalPatterns"]}toggleChange(e){this.getTelemetryFromDatabaseConfigForm.get("fetchMode").patchValue(e,{emitEvent:!0})}prepareOutputConfig(e){return e.startInterval=e.interval.startInterval,e.startIntervalTimeUnit=e.interval.startIntervalTimeUnit,e.endInterval=e.interval.endInterval,e.endIntervalTimeUnit=e.interval.endIntervalTimeUnit,delete e.interval,Z(e)}prepareInputConfig(e){return ee(e)&&(e.interval={startInterval:e.startInterval,startIntervalTimeUnit:e.startIntervalTimeUnit,endInterval:e.endInterval,endIntervalTimeUnit:e.endIntervalTimeUnit}),{latestTsKeyNames:X(e?.latestTsKeyNames)?e.latestTsKeyNames:null,aggregation:X(e?.aggregation)?e.aggregation:I.NONE,fetchMode:X(e?.fetchMode)?e.fetchMode:gt.FIRST,orderBy:X(e?.orderBy)?e.orderBy:bt.ASC,limit:X(e?.limit)?e.limit:1e3,useMetadataIntervalPatterns:!!X(e?.useMetadataIntervalPatterns)&&e.useMetadataIntervalPatterns,interval:{startInterval:X(e?.interval?.startInterval)?e.interval.startInterval:2,startIntervalTimeUnit:X(e?.interval?.startIntervalTimeUnit)?e.interval.startIntervalTimeUnit:mt.MINUTES,endInterval:X(e?.interval?.endInterval)?e.interval.endInterval:1,endIntervalTimeUnit:X(e?.interval?.endIntervalTimeUnit)?e.interval.endIntervalTimeUnit:mt.MINUTES},startIntervalPattern:X(e?.startIntervalPattern)?e.startIntervalPattern:null,endIntervalPattern:X(e?.endIntervalPattern)?e.endIntervalPattern:null}}updateValidators(e){const t=this.getTelemetryFromDatabaseConfigForm.get("fetchMode").value,n=this.getTelemetryFromDatabaseConfigForm.get("useMetadataIntervalPatterns").value;t&&t===gt.ALL?(this.getTelemetryFromDatabaseConfigForm.get("aggregation").setValidators([D.required]),this.getTelemetryFromDatabaseConfigForm.get("orderBy").setValidators([D.required]),this.getTelemetryFromDatabaseConfigForm.get("limit").setValidators([D.required,D.min(2),D.max(1e3)])):(this.getTelemetryFromDatabaseConfigForm.get("aggregation").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("orderBy").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("limit").setValidators([])),n?(this.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval.startIntervalTimeUnit").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval.endIntervalTimeUnit").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").setValidators([D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").setValidators([D.required,D.pattern(/(?:.|\s)*\S(&:.|\s)*/)])):(this.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").setValidators([D.required,D.min(1),D.max(2147483647)]),this.getTelemetryFromDatabaseConfigForm.get("interval.startIntervalTimeUnit").setValidators([D.required]),this.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").setValidators([D.required,D.min(1),D.max(2147483647)]),this.getTelemetryFromDatabaseConfigForm.get("interval.endIntervalTimeUnit").setValidators([D.required]),this.getTelemetryFromDatabaseConfigForm.get("interval").setValidators([this.intervalValidator()]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").setValidators([])),this.getTelemetryFromDatabaseConfigForm.get("aggregation").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("orderBy").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("limit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.startIntervalTimeUnit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.endIntervalTimeUnit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").updateValueAndValidity({emitEvent:e})}removeKey(e,t){const n=this.getTelemetryFromDatabaseConfigForm.get(t).value,r=n.indexOf(e);r>=0&&(n.splice(r,1),this.getTelemetryFromDatabaseConfigForm.get(t).setValue(n,{emitEvent:!0}))}clearChipGrid(){this.getTelemetryFromDatabaseConfigForm.get("latestTsKeyNames").patchValue([],{emitEvent:!0})}addKey(e,t){const n=e.input;let r=e.value;if((r||"").trim()){r=r.trim();let e=this.getTelemetryFromDatabaseConfigForm.get(t).value;e&&-1!==e.indexOf(r)||(e||(e=[]),e.push(r),this.getTelemetryFromDatabaseConfigForm.get(t).setValue(e,{emitEvent:!0}))}n&&(n.value="")}defaultPaddingEnable(){return this.getTelemetryFromDatabaseConfigForm.get("fetchMode").value===gt.ALL&&this.getTelemetryFromDatabaseConfigForm.get("aggregation").value===I.NONE}}e("GetTelemetryFromDatabaseConfigComponent",In),In.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:In,deps:[{token:G.Store},{token:H.TranslateService},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),In.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:In,selector:"tb-enrichment-node-get-telemetry-from-database",usesInheritance:!0,ngImport:t,template:'
\n \n
\n help\n \n
\n
\n
tb.rulenode.fetch-interval
\n
\n \n {{ \'tb.rulenode.use-metadata-dynamic-interval\' | translate }}\n \n
\n
\n
\n \n {{ \'tb.rulenode.interval-start\' | translate }}\n \n \n {{ \'tb.rulenode.start-interval-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n {{ \'tb.rulenode.time-unit\' | translate }}\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n \n {{ \'tb.rulenode.interval-end\' | translate }}\n \n \n {{ \'tb.rulenode.end-interval-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n {{ \'tb.rulenode.time-unit\' | translate }}\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n error_outline\n
\n \n {{ \'tb.rulenode.fetch-timeseries-from-to\' | translate:\n {\n startInterval: getTelemetryFromDatabaseConfigForm.get(\'interval.startInterval\').value,\n endInterval: getTelemetryFromDatabaseConfigForm.get(\'interval.endInterval\').value,\n startIntervalTimeUnit: getTelemetryFromDatabaseConfigForm.get(\'interval.startIntervalTimeUnit\').value.toLowerCase(),\n endIntervalTimeUnit: getTelemetryFromDatabaseConfigForm.get(\'interval.endIntervalTimeUnit\').value.toLowerCase()\n } }}\n \n \n {{ "tb.rulenode.fetch-timeseries-from-to-invalid" | translate }}\n \n
\n
\n
\n \n
\n \n {{ \'tb.rulenode.start-interval\' | translate }}\n \n \n {{ \'tb.rulenode.start-interval-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.end-interval\' | translate }}\n \n \n {{ \'tb.rulenode.end-interval-required\' | translate }}\n \n \n \n \n
\n
\n
\n
\n
tb.rulenode.fetch-strategy
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n {{ deduplicationStrategiesHintTranslations.get(getTelemetryFromDatabaseConfigForm.get(\'fetchMode\').value) | translate }}\n
\n
\n
\n \n {{ \'aggregation.function\' | translate }}\n \n \n {{ aggregationTypesTranslations.get(aggregationTypes[aggregation]) | translate }}\n \n \n \n
\n \n {{ "tb.rulenode.order-by-timestamp" | translate }} \n \n \n {{ samplingOrdersTranslate.get(order) | translate }}\n \n \n \n \n {{ "tb.rulenode.limit" | translate }}\n \n {{ "tb.rulenode.limit-hint" | translate }}\n \n {{ \'tb.rulenode.limit-required\' | translate }}\n \n \n {{ \'tb.rulenode.limit-range\' | translate }}\n \n \n {{ \'tb.rulenode.limit-range\' | translate }}\n \n \n
\n
\n
\n
\n',styles:[":host .see-example{display:inline-block}:host .description-block{display:flex;align-items:center;border-radius:6px;border:1px solid #EAEAEA}:host .description-block .description-icon{font-size:24px;height:24px;min-height:24px;width:24px;min-width:24px;line-height:24px;color:#d9d9d9;margin:4px}:host .description-block .description-text{font-size:12px;line-height:16px;letter-spacing:.25px;margin:6px}:host .description-block.error{color:var(--mdc-theme-error, #f44336)}:host .description-block.error .description-icon{color:var(--mdc-theme-error, #f44336)}:host .item-center{align-items:center}:host .item-center .fetch-mod-toggle{max-width:630px;width:100%}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:Ge.HelpPopupComponent,selector:"[tb-help-popup], [tb-help-popup-content]",inputs:["tb-help-popup","tb-help-popup-content","trigger-text","trigger-style","tb-help-popup-placement","tb-help-popup-style","hintMode"]},{kind:"component",type:Re.StringItemsListComponent,selector:"tb-string-items-list",inputs:["required","disabled","label","placeholder","hint","requiredText","floatLabel","appearance","editable","subscriptSizing","predefinedValues"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:E.FormGroupName,selector:"[formGroupName]",inputs:["formGroupName"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"directive",type:Oe.ToggleOption,selector:"tb-toggle-option",inputs:["value"]},{kind:"component",type:Be.ToggleSelectComponent,selector:"tb-toggle-select",inputs:["disabled","selectMediaBreakpoint","appearance","disablePagination"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"component",type:mn,selector:"tb-example-hint",inputs:["hintText","popupHelpLink"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:In,decorators:[{type:n,args:[{selector:"tb-enrichment-node-get-telemetry-from-database",template:'
\n \n
\n help\n \n
\n
\n
tb.rulenode.fetch-interval
\n
\n \n {{ \'tb.rulenode.use-metadata-dynamic-interval\' | translate }}\n \n
\n
\n
\n \n {{ \'tb.rulenode.interval-start\' | translate }}\n \n \n {{ \'tb.rulenode.start-interval-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n {{ \'tb.rulenode.time-unit\' | translate }}\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n \n {{ \'tb.rulenode.interval-end\' | translate }}\n \n \n {{ \'tb.rulenode.end-interval-value-required\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n {{ \'tb.rulenode.time-value-range\' | translate }}\n \n \n \n {{ \'tb.rulenode.time-unit\' | translate }}\n \n \n {{ timeUnitsTranslationMap.get(timeUnit) | translate }}\n \n \n \n
\n
\n error_outline\n
\n \n {{ \'tb.rulenode.fetch-timeseries-from-to\' | translate:\n {\n startInterval: getTelemetryFromDatabaseConfigForm.get(\'interval.startInterval\').value,\n endInterval: getTelemetryFromDatabaseConfigForm.get(\'interval.endInterval\').value,\n startIntervalTimeUnit: getTelemetryFromDatabaseConfigForm.get(\'interval.startIntervalTimeUnit\').value.toLowerCase(),\n endIntervalTimeUnit: getTelemetryFromDatabaseConfigForm.get(\'interval.endIntervalTimeUnit\').value.toLowerCase()\n } }}\n \n \n {{ "tb.rulenode.fetch-timeseries-from-to-invalid" | translate }}\n \n
\n
\n
\n \n
\n \n {{ \'tb.rulenode.start-interval\' | translate }}\n \n \n {{ \'tb.rulenode.start-interval-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.end-interval\' | translate }}\n \n \n {{ \'tb.rulenode.end-interval-required\' | translate }}\n \n \n \n \n
\n
\n
\n
\n
tb.rulenode.fetch-strategy
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n {{ deduplicationStrategiesHintTranslations.get(getTelemetryFromDatabaseConfigForm.get(\'fetchMode\').value) | translate }}\n
\n
\n
\n \n {{ \'aggregation.function\' | translate }}\n \n \n {{ aggregationTypesTranslations.get(aggregationTypes[aggregation]) | translate }}\n \n \n \n
\n \n {{ "tb.rulenode.order-by-timestamp" | translate }} \n \n \n {{ samplingOrdersTranslate.get(order) | translate }}\n \n \n \n \n {{ "tb.rulenode.limit" | translate }}\n \n {{ "tb.rulenode.limit-hint" | translate }}\n \n {{ \'tb.rulenode.limit-required\' | translate }}\n \n \n {{ \'tb.rulenode.limit-range\' | translate }}\n \n \n {{ \'tb.rulenode.limit-range\' | translate }}\n \n \n
\n
\n
\n
\n',styles:[":host .see-example{display:inline-block}:host .description-block{display:flex;align-items:center;border-radius:6px;border:1px solid #EAEAEA}:host .description-block .description-icon{font-size:24px;height:24px;min-height:24px;width:24px;min-width:24px;line-height:24px;color:#d9d9d9;margin:4px}:host .description-block .description-text{font-size:12px;line-height:16px;letter-spacing:.25px;margin:6px}:host .description-block.error{color:var(--mdc-theme-error, #f44336)}:host .description-block.error .description-icon{color:var(--mdc-theme-error, #f44336)}:host .item-center{align-items:center}:host .item-center .fetch-mod-toggle{max-width:630px;width:100%}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:E.FormBuilder}]}});class Nn extends s{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n}configForm(){return this.originatorAttributesConfigForm}onConfigurationSet(e){this.originatorAttributesConfigForm=this.fb.group({tellFailureIfAbsent:[e.tellFailureIfAbsent,[]],fetchTo:[e.fetchTo,[]],attributesControl:[e.attributesControl,[]]})}prepareInputConfig(e){return ee(e)&&(e.attributesControl={clientAttributeNames:X(e?.clientAttributeNames)?e.clientAttributeNames:null,latestTsKeyNames:X(e?.latestTsKeyNames)?e.latestTsKeyNames:null,serverAttributeNames:X(e?.serverAttributeNames)?e.serverAttributeNames:null,sharedAttributeNames:X(e?.sharedAttributeNames)?e.sharedAttributeNames:null,getLatestValueWithTs:!!X(e?.getLatestValueWithTs)&&e.getLatestValueWithTs}),{fetchTo:X(e?.fetchTo)?e.fetchTo:Pt.METADATA,tellFailureIfAbsent:!!X(e?.tellFailureIfAbsent)&&e.tellFailureIfAbsent,attributesControl:X(e?.attributesControl)?e.attributesControl:null}}prepareOutputConfig(e){for(const t of Object.keys(e.attributesControl))e[t]=e.attributesControl[t];return delete e.attributesControl,e}}e("OriginatorAttributesConfigComponent",Nn),Nn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Nn,deps:[{token:G.Store},{token:H.TranslateService},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Nn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Nn,selector:"tb-enrichment-node-originator-attributes-config",usesInheritance:!0,ngImport:t,template:'
\n
\n
\n
tb.rulenode.originator-attributes
\n
\n tb.rulenode.at-least-one-field-required\n
\n
\n \n \n \n \n
\n
\n \n {{ \'tb.rulenode.tell-failure\' | translate }}\n \n
\n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"component",type:bn,selector:"tb-select-attributes",inputs:["popupHelpLink"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Nn,decorators:[{type:n,args:[{selector:"tb-enrichment-node-originator-attributes-config",template:'
\n
\n
\n
tb.rulenode.originator-attributes
\n
\n tb.rulenode.at-least-one-field-required\n
\n
\n \n \n \n \n
\n
\n \n {{ \'tb.rulenode.tell-failure\' | translate }}\n \n
\n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:H.TranslateService},{type:E.FormBuilder}]}});class Sn extends s{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.originatorFields=[];for(const e of Object.keys(S))this.originatorFields.push({value:S[e].value,name:this.translate.instant(S[e].name)})}configForm(){return this.originatorFieldsConfigForm}prepareOutputConfig(e){return Z(e)}prepareInputConfig(e){return{dataMapping:X(e?.dataMapping)?e.dataMapping:null,ignoreNullStrings:X(e?.ignoreNullStrings)?e.ignoreNullStrings:null,fetchTo:X(e?.fetchTo)?e.fetchTo:Pt.METADATA}}onConfigurationSet(e){this.originatorFieldsConfigForm=this.fb.group({dataMapping:[e.dataMapping,[D.required]],ignoreNullStrings:[e.ignoreNullStrings,[]],fetchTo:[e.fetchTo,[]]})}}e("OriginatorFieldsConfigComponent",Sn),Sn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Sn,deps:[{token:G.Store},{token:E.FormBuilder},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),Sn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Sn,selector:"tb-enrichment-node-originator-fields-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n \n \n
\n \n {{ \'tb.rulenode.skip-empty-fields\' | translate }}\n \n
\n
\n',dependencies:[{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"component",type:yn,selector:"tb-sv-map-config",inputs:["selectOptions","disabled","labelText","requiredText","targetKeyPrefix","selectText","selectRequiredText","valText","valRequiredText","hintText","popupHelpLink","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Sn,decorators:[{type:n,args:[{selector:"tb-enrichment-node-originator-fields-config",template:'
\n \n \n \n \n
\n \n {{ \'tb.rulenode.skip-empty-fields\' | translate }}\n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder},{type:H.TranslateService}]}});class qn extends s{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.DataToFetch=ht,this.msgMetadataLabelTranslations=Ct,this.originatorFields=[],this.fetchToData=[],this.destroy$=new Ae;for(const e of Object.keys(S))this.originatorFields.push({value:S[e].value,name:this.translate.instant(S[e].name)});for(const e of vt.keys())this.fetchToData.push({value:e,name:this.translate.instant(vt.get(e))})}configForm(){return this.relatedAttributesConfigForm}prepareOutputConfig(e){e.dataToFetch===ht.FIELDS?(e.dataMapping=e.svMap,delete e.svMap):(e.dataMapping=e.kvMap,delete e.kvMap);const t={};for(const n of Object.keys(e.dataMapping))t[n.trim()]=e.dataMapping[n];return e.dataMapping=t,delete e.svMap,delete e.kvMap,Z(e)}prepareInputConfig(e){let t,n,r={[S.name.value]:`relatedEntity${this.translate.instant(S.name.name)}`},o={serialNumber:"sn"};return t=X(e?.telemetry)?e.telemetry?ht.LATEST_TELEMETRY:ht.ATTRIBUTES:X(e?.dataToFetch)?e.dataToFetch:ht.ATTRIBUTES,n=X(e?.attrMapping)?e.attrMapping:X(e?.dataMapping)?e.dataMapping:null,t===ht.FIELDS?r=n:o=n,{relationsQuery:X(e?.relationsQuery)?e.relationsQuery:null,dataToFetch:t,svMap:r,kvMap:o,fetchTo:X(e?.fetchTo)?e.fetchTo:Pt.METADATA}}selectTranslation(e,t){return this.relatedAttributesConfigForm.get("dataToFetch").value===ht.LATEST_TELEMETRY?e:t}onConfigurationSet(e){this.relatedAttributesConfigForm=this.fb.group({relationsQuery:[e.relationsQuery,[D.required]],dataToFetch:[e.dataToFetch,[]],kvMap:[e.kvMap,[]],svMap:[e.svMap,[]],fetchTo:[e.fetchTo,[]]}),this.relatedAttributesConfigForm.get("dataToFetch").valueChanges.pipe(Le(this.destroy$)).subscribe((e=>{e===ht.FIELDS?(this.relatedAttributesConfigForm.get("svMap").setValidators(D.required),this.relatedAttributesConfigForm.get("svMap").updateValueAndValidity(),this.relatedAttributesConfigForm.get("kvMap").clearValidators(),this.relatedAttributesConfigForm.get("kvMap").updateValueAndValidity()):(this.relatedAttributesConfigForm.get("kvMap").setValidators(D.required),this.relatedAttributesConfigForm.get("kvMap").updateValueAndValidity(),this.relatedAttributesConfigForm.get("svMap").clearValidators(),this.relatedAttributesConfigForm.get("svMap").updateValueAndValidity())}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}}e("RelatedAttributesConfigComponent",qn),qn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:qn,deps:[{token:G.Store},{token:E.FormBuilder},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),qn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:qn,selector:"tb-enrichment-node-related-attributes-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n
\n
tb.rulenode.data-to-fetch
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n \n \n \n \n \n \n \n \n
\n
\n',styles:[":host .toggle-block{display:flex;place-content:center}:host .toggle-block .fetch-to-data-toggle{max-width:630px;width:100%}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"directive",type:Oe.ToggleOption,selector:"tb-toggle-option",inputs:["value"]},{kind:"component",type:Be.ToggleSelectComponent,selector:"tb-toggle-select",inputs:["disabled","selectMediaBreakpoint","appearance","disablePagination"]},{kind:"component",type:un,selector:"tb-kv-map-config",inputs:["disabled","uniqueKeyValuePairValidator","labelText","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","popupHelpLink","required"]},{kind:"component",type:dn,selector:"tb-relations-query-config",inputs:["disabled","required"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"component",type:yn,selector:"tb-sv-map-config",inputs:["selectOptions","disabled","labelText","requiredText","targetKeyPrefix","selectText","selectRequiredText","valText","valRequiredText","hintText","popupHelpLink","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:qn,decorators:[{type:n,args:[{selector:"tb-enrichment-node-related-attributes-config",template:'
\n \n \n
\n
tb.rulenode.data-to-fetch
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n \n \n \n \n \n \n \n \n
\n
\n',styles:[":host .toggle-block{display:flex;place-content:center}:host .toggle-block .fetch-to-data-toggle{max-width:630px;width:100%}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder},{type:H.TranslateService}]}});class An extends s{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.fetchToData=[],this.DataToFetch=ht;for(const e of vt.keys())e!==ht.FIELDS&&this.fetchToData.push({value:e,name:this.translate.instant(vt.get(e))})}configForm(){return this.tenantAttributesConfigForm}prepareInputConfig(e){let t,n;return t=X(e?.telemetry)?e.telemetry?ht.LATEST_TELEMETRY:ht.ATTRIBUTES:X(e?.dataToFetch)?e.dataToFetch:ht.ATTRIBUTES,n=X(e?.attrMapping)?e.attrMapping:X(e?.dataMapping)?e.dataMapping:null,{dataToFetch:t,dataMapping:n,fetchTo:X(e?.fetchTo)?e.fetchTo:Pt.METADATA}}selectTranslation(e,t){return this.tenantAttributesConfigForm.get("dataToFetch").value===ht.LATEST_TELEMETRY?e:t}onConfigurationSet(e){this.tenantAttributesConfigForm=this.fb.group({dataToFetch:[e.dataToFetch,[]],dataMapping:[e.dataMapping,[D.required]],fetchTo:[e.fetchTo,[]]})}}e("TenantAttributesConfigComponent",An),An.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:An,deps:[{token:G.Store},{token:E.FormBuilder},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),An.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:An,selector:"tb-enrichment-node-tenant-attributes-config",usesInheritance:!0,ngImport:t,template:'
\n
tb.rulenode.mapping-of-tenant-fields
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n \n \n \n \n
\n',styles:[":host .fetch-to-data-toggle{max-width:420px;width:100%}\n"],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:_.DefaultLayoutAlignDirective,selector:" [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]",inputs:["fxLayoutAlign","fxLayoutAlign.xs","fxLayoutAlign.sm","fxLayoutAlign.md","fxLayoutAlign.lg","fxLayoutAlign.xl","fxLayoutAlign.lt-sm","fxLayoutAlign.lt-md","fxLayoutAlign.lt-lg","fxLayoutAlign.lt-xl","fxLayoutAlign.gt-xs","fxLayoutAlign.gt-sm","fxLayoutAlign.gt-md","fxLayoutAlign.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"directive",type:Oe.ToggleOption,selector:"tb-toggle-option",inputs:["value"]},{kind:"component",type:Be.ToggleSelectComponent,selector:"tb-toggle-select",inputs:["disabled","selectMediaBreakpoint","appearance","disablePagination"]},{kind:"component",type:un,selector:"tb-kv-map-config",inputs:["disabled","uniqueKeyValuePairValidator","labelText","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","popupHelpLink","required"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:An,decorators:[{type:n,args:[{selector:"tb-enrichment-node-tenant-attributes-config",template:'
\n
tb.rulenode.mapping-of-tenant-fields
\n
\n
\n \n \n {{ data.name }}\n \n \n
\n
\n \n \n \n \n
\n',styles:[":host .fetch-to-data-toggle{max-width:420px;width:100%}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder},{type:H.TranslateService}]}});class Mn extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.fetchDeviceCredentialsConfigForm}prepareInputConfig(e){return{fetchTo:X(e?.fetchTo)?e.fetchTo:Pt.METADATA}}onConfigurationSet(e){this.fetchDeviceCredentialsConfigForm=this.fb.group({fetchTo:[e.fetchTo,[]]})}}e("FetchDeviceCredentialsConfigComponent",Mn),Mn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Mn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Mn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Mn,selector:"./tb-enrichment-node-fetch-device-credentials-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n
\n',dependencies:[{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:gn,selector:"tb-msg-metadata-chip",inputs:["labelText"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Mn,decorators:[{type:n,args:[{selector:"./tb-enrichment-node-fetch-device-credentials-config",template:'
\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]}});class Gn{}e("RulenodeCoreConfigEnrichmentModule",Gn),Gn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Gn,deps:[],target:t.ɵɵFactoryTarget.NgModule}),Gn.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:Gn,declarations:[kn,Tn,Ln,Nn,Sn,In,qn,An,Fn,Mn],imports:[O,T,vn],exports:[kn,Tn,Ln,Nn,Sn,In,qn,An,Fn,Mn]}),Gn.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Gn,imports:[O,T,vn]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Gn,decorators:[{type:l,args:[{declarations:[kn,Tn,Ln,Nn,Sn,In,qn,An,Fn,Mn],imports:[O,T,vn],exports:[kn,Tn,Ln,Nn,Sn,In,qn,An,Fn,Mn]}]}]});class En extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.allAzureIotHubCredentialsTypes=Nt,this.azureIotHubCredentialsTypeTranslationsMap=St}configForm(){return this.azureIotHubConfigForm}onConfigurationSet(e){this.azureIotHubConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[D.required]],host:[e?e.host:null,[D.required]],port:[e?e.port:null,[D.required,D.min(1),D.max(65535)]],connectTimeoutSec:[e?e.connectTimeoutSec:null,[D.required,D.min(1),D.max(200)]],clientId:[e?e.clientId:null,[D.required]],cleanSession:[!!e&&e.cleanSession,[]],ssl:[!!e&&e.ssl,[]],credentials:this.fb.group({type:[e&&e.credentials?e.credentials.type:null,[D.required]],sasKey:[e&&e.credentials?e.credentials.sasKey:null,[]],caCert:[e&&e.credentials?e.credentials.caCert:null,[]],caCertFileName:[e&&e.credentials?e.credentials.caCertFileName:null,[]],privateKey:[e&&e.credentials?e.credentials.privateKey:null,[]],privateKeyFileName:[e&&e.credentials?e.credentials.privateKeyFileName:null,[]],cert:[e&&e.credentials?e.credentials.cert:null,[]],certFileName:[e&&e.credentials?e.credentials.certFileName:null,[]],password:[e&&e.credentials?e.credentials.password:null,[]]})})}prepareOutputConfig(e){const t=e.credentials.type;return"sas"===t&&(e.credentials={type:t,sasKey:e.credentials.sasKey,caCert:e.credentials.caCert,caCertFileName:e.credentials.caCertFileName}),e}validatorTriggers(){return["credentials.type"]}updateValidators(e){const t=this.azureIotHubConfigForm.get("credentials"),n=t.get("type").value;switch(e&&t.reset({type:n},{emitEvent:!1}),t.get("sasKey").setValidators([]),t.get("privateKey").setValidators([]),t.get("privateKeyFileName").setValidators([]),t.get("cert").setValidators([]),t.get("certFileName").setValidators([]),n){case"sas":t.get("sasKey").setValidators([D.required]);break;case"cert.PEM":t.get("privateKey").setValidators([D.required]),t.get("privateKeyFileName").setValidators([D.required]),t.get("cert").setValidators([D.required]),t.get("certFileName").setValidators([D.required])}t.get("sasKey").updateValueAndValidity({emitEvent:e}),t.get("privateKey").updateValueAndValidity({emitEvent:e}),t.get("privateKeyFileName").updateValueAndValidity({emitEvent:e}),t.get("cert").updateValueAndValidity({emitEvent:e}),t.get("certFileName").updateValueAndValidity({emitEvent:e})}}e("AzureIotHubConfigComponent",En),En.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:En,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),En.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:En,selector:"tb-external-node-azure-iot-hub-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.topic\n \n \n {{ \'tb.rulenode.topic-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.hostname\n \n \n {{ \'tb.rulenode.hostname-required\' | translate }}\n \n \n \n tb.rulenode.device-id\n \n \n {{ \'tb.rulenode.device-id-required\' | translate }}\n \n \n \n \n \n tb.rulenode.credentials\n \n {{ azureIotHubCredentialsTypeTranslationsMap.get(azureIotHubConfigForm.get(\'credentials.type\').value) | translate }}\n \n \n
\n \n tb.rulenode.credentials-type\n \n \n {{ azureIotHubCredentialsTypeTranslationsMap.get(credentialsType) | translate }}\n \n \n \n {{ \'tb.rulenode.credentials-type-required\' | translate }}\n \n \n
\n \n \n \n \n tb.rulenode.sas-key\n \n \n \n {{ \'tb.rulenode.sas-key-required\' | translate }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n tb.rulenode.private-key-password\n \n \n \n \n
\n
\n
\n
\n
\n',styles:[":host .tb-mqtt-credentials-panel-group{margin:0 6px}\n"],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:R.NgSwitch,selector:"[ngSwitch]",inputs:["ngSwitch"]},{kind:"directive",type:R.NgSwitchCase,selector:"[ngSwitchCase]",inputs:["ngSwitchCase"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:Ne.MatAccordion,selector:"mat-accordion",inputs:["multi","hideToggle","displayMode","togglePosition"],exportAs:["matAccordion"]},{kind:"component",type:Ne.MatExpansionPanel,selector:"mat-expansion-panel",inputs:["disabled","expanded","hideToggle","togglePosition"],outputs:["opened","closed","expandedChange","afterExpand","afterCollapse"],exportAs:["matExpansionPanel"]},{kind:"component",type:Ne.MatExpansionPanelHeader,selector:"mat-expansion-panel-header",inputs:["tabIndex","expandedHeight","collapsedHeight"]},{kind:"directive",type:Ne.MatExpansionPanelTitle,selector:"mat-panel-title"},{kind:"directive",type:Ne.MatExpansionPanelDescription,selector:"mat-panel-description"},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:E.FormGroupName,selector:"[formGroupName]",inputs:["formGroupName"]},{kind:"component",type:Pe.FileInputComponent,selector:"tb-file-input",inputs:["label","accept","noFileText","inputId","allowedExtensions","dropLabel","contentConvertFunction","required","requiredAsError","disabled","existingFileName","readAsBinary","workFromFileObj","multipleFile"],outputs:["fileNameChanged"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:we.TogglePasswordComponent,selector:"tb-toggle-password"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:En,decorators:[{type:n,args:[{selector:"tb-external-node-azure-iot-hub-config",template:'
\n \n tb.rulenode.topic\n \n \n {{ \'tb.rulenode.topic-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.hostname\n \n \n {{ \'tb.rulenode.hostname-required\' | translate }}\n \n \n \n tb.rulenode.device-id\n \n \n {{ \'tb.rulenode.device-id-required\' | translate }}\n \n \n \n \n \n tb.rulenode.credentials\n \n {{ azureIotHubCredentialsTypeTranslationsMap.get(azureIotHubConfigForm.get(\'credentials.type\').value) | translate }}\n \n \n
\n \n tb.rulenode.credentials-type\n \n \n {{ azureIotHubCredentialsTypeTranslationsMap.get(credentialsType) | translate }}\n \n \n \n {{ \'tb.rulenode.credentials-type-required\' | translate }}\n \n \n
\n \n \n \n \n tb.rulenode.sas-key\n \n \n \n {{ \'tb.rulenode.sas-key-required\' | translate }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n tb.rulenode.private-key-password\n \n \n \n \n
\n
\n
\n
\n
\n',styles:[":host .tb-mqtt-credentials-panel-group{margin:0 6px}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Dn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.ackValues=["all","-1","0","1"],this.ToByteStandartCharsetTypesValues=At,this.ToByteStandartCharsetTypeTranslationMap=Mt}configForm(){return this.kafkaConfigForm}onConfigurationSet(e){this.kafkaConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[D.required]],keyPattern:[e?e.keyPattern:null],bootstrapServers:[e?e.bootstrapServers:null,[D.required]],retries:[e?e.retries:null,[D.min(0)]],batchSize:[e?e.batchSize:null,[D.min(0)]],linger:[e?e.linger:null,[D.min(0)]],bufferMemory:[e?e.bufferMemory:null,[D.min(0)]],acks:[e?e.acks:null,[D.required]],keySerializer:[e?e.keySerializer:null,[D.required]],valueSerializer:[e?e.valueSerializer:null,[D.required]],otherProperties:[e?e.otherProperties:null,[]],addMetadataKeyValuesAsKafkaHeaders:[!!e&&e.addMetadataKeyValuesAsKafkaHeaders,[]],kafkaHeadersCharset:[e?e.kafkaHeadersCharset:null,[]]})}validatorTriggers(){return["addMetadataKeyValuesAsKafkaHeaders"]}updateValidators(e){this.kafkaConfigForm.get("addMetadataKeyValuesAsKafkaHeaders").value?this.kafkaConfigForm.get("kafkaHeadersCharset").setValidators([D.required]):this.kafkaConfigForm.get("kafkaHeadersCharset").setValidators([]),this.kafkaConfigForm.get("kafkaHeadersCharset").updateValueAndValidity({emitEvent:e})}}e("KafkaConfigComponent",Dn),Dn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Dn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Dn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Dn,selector:"tb-external-node-kafka-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.topic-pattern\n \n \n {{ \'tb.rulenode.topic-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.key-pattern\n \n tb.rulenode.general-pattern-hint\n \n
tb.rulenode.key-pattern-hint
\n \n tb.rulenode.bootstrap-servers\n \n \n {{ \'tb.rulenode.bootstrap-servers-required\' | translate }}\n \n \n \n tb.rulenode.retries\n \n \n {{ \'tb.rulenode.min-retries-message\' | translate }}\n \n \n \n tb.rulenode.batch-size-bytes\n \n \n {{ \'tb.rulenode.min-batch-size-bytes-message\' | translate }}\n \n \n \n tb.rulenode.linger-ms\n \n \n {{ \'tb.rulenode.min-linger-ms-message\' | translate }}\n \n \n \n tb.rulenode.buffer-memory-bytes\n \n \n {{ \'tb.rulenode.min-buffer-memory-bytes-message\' | translate }}\n \n \n \n tb.rulenode.acks\n \n \n {{ ackValue }}\n \n \n \n \n tb.rulenode.key-serializer\n \n \n {{ \'tb.rulenode.key-serializer-required\' | translate }}\n \n \n \n tb.rulenode.value-serializer\n \n \n {{ \'tb.rulenode.value-serializer-required\' | translate }}\n \n \n \n \n \n \n {{ \'tb.rulenode.add-metadata-key-values-as-kafka-headers\' | translate }}\n \n
tb.rulenode.add-metadata-key-values-as-kafka-headers-hint
\n \n tb.rulenode.charset-encoding\n \n \n {{ ToByteStandartCharsetTypeTranslationMap.get(charset) | translate }}\n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:Xt,selector:"tb-kv-map-config-old",inputs:["disabled","uniqueKeyValuePairValidator","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Dn,decorators:[{type:n,args:[{selector:"tb-external-node-kafka-config",template:'
\n \n tb.rulenode.topic-pattern\n \n \n {{ \'tb.rulenode.topic-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.key-pattern\n \n tb.rulenode.general-pattern-hint\n \n
tb.rulenode.key-pattern-hint
\n \n tb.rulenode.bootstrap-servers\n \n \n {{ \'tb.rulenode.bootstrap-servers-required\' | translate }}\n \n \n \n tb.rulenode.retries\n \n \n {{ \'tb.rulenode.min-retries-message\' | translate }}\n \n \n \n tb.rulenode.batch-size-bytes\n \n \n {{ \'tb.rulenode.min-batch-size-bytes-message\' | translate }}\n \n \n \n tb.rulenode.linger-ms\n \n \n {{ \'tb.rulenode.min-linger-ms-message\' | translate }}\n \n \n \n tb.rulenode.buffer-memory-bytes\n \n \n {{ \'tb.rulenode.min-buffer-memory-bytes-message\' | translate }}\n \n \n \n tb.rulenode.acks\n \n \n {{ ackValue }}\n \n \n \n \n tb.rulenode.key-serializer\n \n \n {{ \'tb.rulenode.key-serializer-required\' | translate }}\n \n \n \n tb.rulenode.value-serializer\n \n \n {{ \'tb.rulenode.value-serializer-required\' | translate }}\n \n \n \n \n \n \n {{ \'tb.rulenode.add-metadata-key-values-as-kafka-headers\' | translate }}\n \n
tb.rulenode.add-metadata-key-values-as-kafka-headers-hint
\n \n tb.rulenode.charset-encoding\n \n \n {{ ToByteStandartCharsetTypeTranslationMap.get(charset) | translate }}\n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Vn extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.mqttConfigForm}onConfigurationSet(e){this.mqttConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[D.required]],host:[e?e.host:null,[D.required]],port:[e?e.port:null,[D.required,D.min(1),D.max(65535)]],connectTimeoutSec:[e?e.connectTimeoutSec:null,[D.required,D.min(1),D.max(200)]],clientId:[e?e.clientId:null,[]],appendClientIdSuffix:[{value:!!e&&e.appendClientIdSuffix,disabled:!(e&&te(e.clientId))},[]],cleanSession:[!!e&&e.cleanSession,[]],retainedMessage:[!!e&&e.retainedMessage,[]],ssl:[!!e&&e.ssl,[]],credentials:[e?e.credentials:null,[]]})}updateValidators(e){te(this.mqttConfigForm.get("clientId").value)?this.mqttConfigForm.get("appendClientIdSuffix").enable({emitEvent:!1}):this.mqttConfigForm.get("appendClientIdSuffix").disable({emitEvent:!1}),this.mqttConfigForm.get("appendClientIdSuffix").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["clientId"]}}e("MqttConfigComponent",Vn),Vn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Vn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Vn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Vn,selector:"tb-external-node-mqtt-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.topic-pattern\n \n \n {{ \'tb.rulenode.topic-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n tb.rulenode.host\n \n \n {{ \'tb.rulenode.host-required\' | translate }}\n \n \n \n tb.rulenode.port\n \n \n {{ \'tb.rulenode.port-required\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n \n tb.rulenode.connect-timeout\n \n \n {{ \'tb.rulenode.connect-timeout-required\' | translate }}\n \n \n {{ \'tb.rulenode.connect-timeout-range\' | translate }}\n \n \n {{ \'tb.rulenode.connect-timeout-range\' | translate }}\n \n \n
\n \n tb.rulenode.client-id\n \n {{\'tb.rulenode.client-id-hint\' | translate}}\n \n \n {{ \'tb.rulenode.append-client-id-suffix\' | translate }}\n \n
{{ "tb.rulenode.client-id-suffix-hint" | translate }}
\n \n {{ \'tb.rulenode.clean-session\' | translate }}\n \n \n {{ "tb.rulenode.retained-message" | translate }}\n \n \n {{ \'tb.rulenode.enable-ssl\' | translate }}\n \n \n
\n',styles:[":host .tb-mqtt-credentials-panel-group{margin:0 6px}\n"],dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:fn,selector:"tb-credentials-config",inputs:["required","disableCertPemCredentials","passwordFieldRequired"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Vn,decorators:[{type:n,args:[{selector:"tb-external-node-mqtt-config",template:'
\n \n tb.rulenode.topic-pattern\n \n \n {{ \'tb.rulenode.topic-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n \n tb.rulenode.host\n \n \n {{ \'tb.rulenode.host-required\' | translate }}\n \n \n \n tb.rulenode.port\n \n \n {{ \'tb.rulenode.port-required\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n \n tb.rulenode.connect-timeout\n \n \n {{ \'tb.rulenode.connect-timeout-required\' | translate }}\n \n \n {{ \'tb.rulenode.connect-timeout-range\' | translate }}\n \n \n {{ \'tb.rulenode.connect-timeout-range\' | translate }}\n \n \n
\n \n tb.rulenode.client-id\n \n {{\'tb.rulenode.client-id-hint\' | translate}}\n \n \n {{ \'tb.rulenode.append-client-id-suffix\' | translate }}\n \n
{{ "tb.rulenode.client-id-suffix-hint" | translate }}
\n \n {{ \'tb.rulenode.clean-session\' | translate }}\n \n \n {{ "tb.rulenode.retained-message" | translate }}\n \n \n {{ \'tb.rulenode.enable-ssl\' | translate }}\n \n \n
\n',styles:[":host .tb-mqtt-credentials-panel-group{margin:0 6px}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Pn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.notificationType=q,this.entityType=x}configForm(){return this.notificationConfigForm}onConfigurationSet(e){this.notificationConfigForm=this.fb.group({templateId:[e?e.templateId:null,[D.required]],targets:[e?e.targets:[],[D.required]]})}}e("NotificationConfigComponent",Pn),Pn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Pn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Pn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Pn,selector:"tb-external-node-notification-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n \n \n
\n',dependencies:[{kind:"component",type:Ke.EntityListComponent,selector:"tb-entity-list",inputs:["entityType","subType","labelText","placeholderText","requiredText","required","disabled","subscriptSizing","hint"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:Ue.TemplateAutocompleteComponent,selector:"tb-template-autocomplete",inputs:["required","allowCreate","allowEdit","disabled","notificationTypes"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Pn,decorators:[{type:n,args:[{selector:"tb-external-node-notification-config",template:'
\n \n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]}});class wn extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.pubSubConfigForm}onConfigurationSet(e){this.pubSubConfigForm=this.fb.group({projectId:[e?e.projectId:null,[D.required]],topicName:[e?e.topicName:null,[D.required]],serviceAccountKey:[e?e.serviceAccountKey:null,[D.required]],serviceAccountKeyFileName:[e?e.serviceAccountKeyFileName:null,[D.required]],messageAttributes:[e?e.messageAttributes:null,[]]})}}e("PubSubConfigComponent",wn),wn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:wn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),wn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:wn,selector:"tb-external-node-pub-sub-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.gcp-project-id\n \n \n {{ \'tb.rulenode.gcp-project-id-required\' | translate }}\n \n \n \n tb.rulenode.pubsub-topic-name\n \n \n {{ \'tb.rulenode.pubsub-topic-name-required\' | translate }}\n \n \n \n \n \n
\n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:Pe.FileInputComponent,selector:"tb-file-input",inputs:["label","accept","noFileText","inputId","allowedExtensions","dropLabel","contentConvertFunction","required","requiredAsError","disabled","existingFileName","readAsBinary","workFromFileObj","multipleFile"],outputs:["fileNameChanged"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:Xt,selector:"tb-kv-map-config-old",inputs:["disabled","uniqueKeyValuePairValidator","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","required"]},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:wn,decorators:[{type:n,args:[{selector:"tb-external-node-pub-sub-config",template:'
\n \n tb.rulenode.gcp-project-id\n \n \n {{ \'tb.rulenode.gcp-project-id-required\' | translate }}\n \n \n \n tb.rulenode.pubsub-topic-name\n \n \n {{ \'tb.rulenode.pubsub-topic-name-required\' | translate }}\n \n \n \n \n \n
\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Rn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.messageProperties=[null,"BASIC","TEXT_PLAIN","MINIMAL_BASIC","MINIMAL_PERSISTENT_BASIC","PERSISTENT_BASIC","PERSISTENT_TEXT_PLAIN"]}configForm(){return this.rabbitMqConfigForm}onConfigurationSet(e){this.rabbitMqConfigForm=this.fb.group({exchangeNamePattern:[e?e.exchangeNamePattern:null,[]],routingKeyPattern:[e?e.routingKeyPattern:null,[]],messageProperties:[e?e.messageProperties:null,[]],host:[e?e.host:null,[D.required]],port:[e?e.port:null,[D.required,D.min(1),D.max(65535)]],virtualHost:[e?e.virtualHost:null,[]],username:[e?e.username:null,[]],password:[e?e.password:null,[]],automaticRecoveryEnabled:[!!e&&e.automaticRecoveryEnabled,[]],connectionTimeout:[e?e.connectionTimeout:null,[D.min(0)]],handshakeTimeout:[e?e.handshakeTimeout:null,[D.min(0)]],clientProperties:[e?e.clientProperties:null,[]]})}}e("RabbitMqConfigComponent",Rn),Rn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Rn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Rn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Rn,selector:"tb-external-node-rabbit-mq-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.exchange-name-pattern\n \n \n \n tb.rulenode.routing-key-pattern\n \n \n \n tb.rulenode.message-properties\n \n \n {{ property }}\n \n \n \n
\n \n tb.rulenode.host\n \n \n {{ \'tb.rulenode.host-required\' | translate }}\n \n \n \n tb.rulenode.port\n \n \n {{ \'tb.rulenode.port-required\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n
\n \n tb.rulenode.virtual-host\n \n \n \n tb.rulenode.username\n \n \n \n tb.rulenode.password\n \n \n \n \n {{ \'tb.rulenode.automatic-recovery\' | translate }}\n \n \n tb.rulenode.connection-timeout-ms\n \n \n {{ \'tb.rulenode.min-connection-timeout-ms-message\' | translate }}\n \n \n \n tb.rulenode.handshake-timeout-ms\n \n \n {{ \'tb.rulenode.min-handshake-timeout-ms-message\' | translate }}\n \n \n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:we.TogglePasswordComponent,selector:"tb-toggle-password"},{kind:"component",type:Xt,selector:"tb-kv-map-config-old",inputs:["disabled","uniqueKeyValuePairValidator","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Rn,decorators:[{type:n,args:[{selector:"tb-external-node-rabbit-mq-config",template:'
\n \n tb.rulenode.exchange-name-pattern\n \n \n \n tb.rulenode.routing-key-pattern\n \n \n \n tb.rulenode.message-properties\n \n \n {{ property }}\n \n \n \n
\n \n tb.rulenode.host\n \n \n {{ \'tb.rulenode.host-required\' | translate }}\n \n \n \n tb.rulenode.port\n \n \n {{ \'tb.rulenode.port-required\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n {{ \'tb.rulenode.port-range\' | translate }}\n \n \n
\n \n tb.rulenode.virtual-host\n \n \n \n tb.rulenode.username\n \n \n \n tb.rulenode.password\n \n \n \n \n {{ \'tb.rulenode.automatic-recovery\' | translate }}\n \n \n tb.rulenode.connection-timeout-ms\n \n \n {{ \'tb.rulenode.min-connection-timeout-ms-message\' | translate }}\n \n \n \n tb.rulenode.handshake-timeout-ms\n \n \n {{ \'tb.rulenode.min-handshake-timeout-ms-message\' | translate }}\n \n \n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class On extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.proxySchemes=["http","https"],this.httpRequestTypes=Object.keys(qt)}configForm(){return this.restApiCallConfigForm}onConfigurationSet(e){this.restApiCallConfigForm=this.fb.group({restEndpointUrlPattern:[e?e.restEndpointUrlPattern:null,[D.required]],requestMethod:[e?e.requestMethod:null,[D.required]],useSimpleClientHttpFactory:[!!e&&e.useSimpleClientHttpFactory,[]],trimDoubleQuotes:[!!e&&e.trimDoubleQuotes,[]],ignoreRequestBody:[!!e&&e.ignoreRequestBody,[]],enableProxy:[!!e&&e.enableProxy,[]],useSystemProxyProperties:[!!e&&e.enableProxy,[]],proxyScheme:[e?e.proxyHost:null,[]],proxyHost:[e?e.proxyHost:null,[]],proxyPort:[e?e.proxyPort:null,[]],proxyUser:[e?e.proxyUser:null,[]],proxyPassword:[e?e.proxyPassword:null,[]],readTimeoutMs:[e?e.readTimeoutMs:null,[]],maxParallelRequestsCount:[e?e.maxParallelRequestsCount:null,[D.min(0)]],headers:[e?e.headers:null,[]],useRedisQueueForMsgPersistence:[!!e&&e.useRedisQueueForMsgPersistence,[]],trimQueue:[!!e&&e.trimQueue,[]],maxQueueSize:[e?e.maxQueueSize:null,[]],credentials:[e?e.credentials:null,[]]})}validatorTriggers(){return["useSimpleClientHttpFactory","useRedisQueueForMsgPersistence","enableProxy","useSystemProxyProperties"]}updateValidators(e){const t=this.restApiCallConfigForm.get("useSimpleClientHttpFactory").value,n=this.restApiCallConfigForm.get("useRedisQueueForMsgPersistence").value,r=this.restApiCallConfigForm.get("enableProxy").value,o=this.restApiCallConfigForm.get("useSystemProxyProperties").value;r&&!o?(this.restApiCallConfigForm.get("proxyHost").setValidators(r?[D.required]:[]),this.restApiCallConfigForm.get("proxyPort").setValidators(r?[D.required,D.min(1),D.max(65535)]:[])):(this.restApiCallConfigForm.get("proxyHost").setValidators([]),this.restApiCallConfigForm.get("proxyPort").setValidators([]),t?this.restApiCallConfigForm.get("readTimeoutMs").setValidators([]):this.restApiCallConfigForm.get("readTimeoutMs").setValidators([D.min(0)])),n?this.restApiCallConfigForm.get("maxQueueSize").setValidators([D.min(0)]):this.restApiCallConfigForm.get("maxQueueSize").setValidators([]),this.restApiCallConfigForm.get("readTimeoutMs").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("maxQueueSize").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("proxyHost").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("proxyPort").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("credentials").updateValueAndValidity({emitEvent:e})}}e("RestApiCallConfigComponent",On),On.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:On,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),On.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:On,selector:"tb-external-node-rest-api-call-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.endpoint-url-pattern\n \n \n {{ \'tb.rulenode.endpoint-url-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.request-method\n \n \n {{ requestType }}\n \n \n \n \n {{ \'tb.rulenode.enable-proxy\' | translate }}\n \n \n {{ \'tb.rulenode.use-simple-client-http-factory\' | translate }}\n \n \n {{ \'tb.rulenode.trim-double-quotes\' | translate }}\n \n
tb.rulenode.trim-double-quotes-hint
\n \n {{ \'tb.rulenode.ignore-request-body\' | translate }}\n \n
\n \n {{ \'tb.rulenode.use-system-proxy-properties\' | translate }}\n \n
\n
\n \n tb.rulenode.proxy-scheme\n \n \n {{ proxyScheme }}\n \n \n \n \n tb.rulenode.proxy-host\n \n \n {{ \'tb.rulenode.proxy-host-required\' | translate }}\n \n \n \n tb.rulenode.proxy-port\n \n \n {{ \'tb.rulenode.proxy-port-required\' | translate }}\n \n \n {{ \'tb.rulenode.proxy-port-range\' | translate }}\n \n \n
\n \n tb.rulenode.proxy-user\n \n \n \n tb.rulenode.proxy-password\n \n \n
\n
\n \n tb.rulenode.read-timeout\n \n tb.rulenode.read-timeout-hint\n \n \n tb.rulenode.max-parallel-requests-count\n \n tb.rulenode.max-parallel-requests-count-hint\n \n \n
\n \n \n \n {{ \'tb.rulenode.use-redis-queue\' | translate }}\n \n
\n \n {{ \'tb.rulenode.trim-redis-queue\' | translate }}\n \n \n tb.rulenode.redis-queue-max-size\n \n \n
\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:fn,selector:"tb-credentials-config",inputs:["required","disableCertPemCredentials","passwordFieldRequired"]},{kind:"component",type:Xt,selector:"tb-kv-map-config-old",inputs:["disabled","uniqueKeyValuePairValidator","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","required"]},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:On,decorators:[{type:n,args:[{selector:"tb-external-node-rest-api-call-config",template:'
\n \n tb.rulenode.endpoint-url-pattern\n \n \n {{ \'tb.rulenode.endpoint-url-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.request-method\n \n \n {{ requestType }}\n \n \n \n \n {{ \'tb.rulenode.enable-proxy\' | translate }}\n \n \n {{ \'tb.rulenode.use-simple-client-http-factory\' | translate }}\n \n \n {{ \'tb.rulenode.trim-double-quotes\' | translate }}\n \n
tb.rulenode.trim-double-quotes-hint
\n \n {{ \'tb.rulenode.ignore-request-body\' | translate }}\n \n
\n \n {{ \'tb.rulenode.use-system-proxy-properties\' | translate }}\n \n
\n
\n \n tb.rulenode.proxy-scheme\n \n \n {{ proxyScheme }}\n \n \n \n \n tb.rulenode.proxy-host\n \n \n {{ \'tb.rulenode.proxy-host-required\' | translate }}\n \n \n \n tb.rulenode.proxy-port\n \n \n {{ \'tb.rulenode.proxy-port-required\' | translate }}\n \n \n {{ \'tb.rulenode.proxy-port-range\' | translate }}\n \n \n
\n \n tb.rulenode.proxy-user\n \n \n \n tb.rulenode.proxy-password\n \n \n
\n
\n \n tb.rulenode.read-timeout\n \n tb.rulenode.read-timeout-hint\n \n \n tb.rulenode.max-parallel-requests-count\n \n tb.rulenode.max-parallel-requests-count-hint\n \n \n
\n \n \n \n {{ \'tb.rulenode.use-redis-queue\' | translate }}\n \n
\n \n {{ \'tb.rulenode.trim-redis-queue\' | translate }}\n \n \n tb.rulenode.redis-queue-max-size\n \n \n
\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Bn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.smtpProtocols=["smtp","smtps"],this.tlsVersions=["TLSv1","TLSv1.1","TLSv1.2","TLSv1.3"]}configForm(){return this.sendEmailConfigForm}onConfigurationSet(e){this.sendEmailConfigForm=this.fb.group({useSystemSmtpSettings:[!!e&&e.useSystemSmtpSettings,[]],smtpProtocol:[e?e.smtpProtocol:null,[]],smtpHost:[e?e.smtpHost:null,[]],smtpPort:[e?e.smtpPort:null,[]],timeout:[e?e.timeout:null,[]],enableTls:[!!e&&e.enableTls,[]],tlsVersion:[e?e.tlsVersion:null,[]],enableProxy:[!!e&&e.enableProxy,[]],proxyHost:[e?e.proxyHost:null,[]],proxyPort:[e?e.proxyPort:null,[]],proxyUser:[e?e.proxyUser:null,[]],proxyPassword:[e?e.proxyPassword:null,[]],username:[e?e.username:null,[]],password:[e?e.password:null,[]]})}validatorTriggers(){return["useSystemSmtpSettings","enableProxy"]}updateValidators(e){const t=this.sendEmailConfigForm.get("useSystemSmtpSettings").value,n=this.sendEmailConfigForm.get("enableProxy").value;t?(this.sendEmailConfigForm.get("smtpProtocol").setValidators([]),this.sendEmailConfigForm.get("smtpHost").setValidators([]),this.sendEmailConfigForm.get("smtpPort").setValidators([]),this.sendEmailConfigForm.get("timeout").setValidators([]),this.sendEmailConfigForm.get("proxyHost").setValidators([]),this.sendEmailConfigForm.get("proxyPort").setValidators([])):(this.sendEmailConfigForm.get("smtpProtocol").setValidators([D.required]),this.sendEmailConfigForm.get("smtpHost").setValidators([D.required]),this.sendEmailConfigForm.get("smtpPort").setValidators([D.required,D.min(1),D.max(65535)]),this.sendEmailConfigForm.get("timeout").setValidators([D.required,D.min(0)]),this.sendEmailConfigForm.get("proxyHost").setValidators(n?[D.required]:[]),this.sendEmailConfigForm.get("proxyPort").setValidators(n?[D.required,D.min(1),D.max(65535)]:[])),this.sendEmailConfigForm.get("smtpProtocol").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("smtpHost").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("smtpPort").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("timeout").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("proxyHost").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("proxyPort").updateValueAndValidity({emitEvent:e})}}e("SendEmailConfigComponent",Bn),Bn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Bn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Bn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Bn,selector:"tb-external-node-send-email-config",usesInheritance:!0,ngImport:t,template:'
\n \n {{ \'tb.rulenode.use-system-smtp-settings\' | translate }}\n \n
\n \n tb.rulenode.smtp-protocol\n \n \n {{ smtpProtocol.toUpperCase() }}\n \n \n \n
\n \n tb.rulenode.smtp-host\n \n \n {{ \'tb.rulenode.smtp-host-required\' | translate }}\n \n \n \n tb.rulenode.smtp-port\n \n \n {{ \'tb.rulenode.smtp-port-required\' | translate }}\n \n \n {{ \'tb.rulenode.smtp-port-range\' | translate }}\n \n \n {{ \'tb.rulenode.smtp-port-range\' | translate }}\n \n \n
\n \n tb.rulenode.timeout-msec\n \n \n {{ \'tb.rulenode.timeout-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-timeout-msec-message\' | translate }}\n \n \n \n {{ \'tb.rulenode.enable-tls\' | translate }}\n \n \n tb.rulenode.tls-version\n \n \n {{ tlsVersion }}\n \n \n \n \n {{ \'tb.rulenode.enable-proxy\' | translate }}\n \n
\n
\n \n tb.rulenode.proxy-host\n \n \n {{ \'tb.rulenode.proxy-host-required\' | translate }}\n \n \n \n tb.rulenode.proxy-port\n \n \n {{ \'tb.rulenode.proxy-port-required\' | translate }}\n \n \n {{ \'tb.rulenode.proxy-port-range\' | translate }}\n \n \n
\n \n tb.rulenode.proxy-user\n \n \n \n tb.rulenode.proxy-password\n \n \n
\n \n tb.rulenode.username\n \n \n \n tb.rulenode.password\n \n \n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:_e.TbCheckboxComponent,selector:"tb-checkbox",inputs:["disabled","trueValue","falseValue"],outputs:["valueChange"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:we.TogglePasswordComponent,selector:"tb-toggle-password"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Bn,decorators:[{type:n,args:[{selector:"tb-external-node-send-email-config",template:'
\n \n {{ \'tb.rulenode.use-system-smtp-settings\' | translate }}\n \n
\n \n tb.rulenode.smtp-protocol\n \n \n {{ smtpProtocol.toUpperCase() }}\n \n \n \n
\n \n tb.rulenode.smtp-host\n \n \n {{ \'tb.rulenode.smtp-host-required\' | translate }}\n \n \n \n tb.rulenode.smtp-port\n \n \n {{ \'tb.rulenode.smtp-port-required\' | translate }}\n \n \n {{ \'tb.rulenode.smtp-port-range\' | translate }}\n \n \n {{ \'tb.rulenode.smtp-port-range\' | translate }}\n \n \n
\n \n tb.rulenode.timeout-msec\n \n \n {{ \'tb.rulenode.timeout-required\' | translate }}\n \n \n {{ \'tb.rulenode.min-timeout-msec-message\' | translate }}\n \n \n \n {{ \'tb.rulenode.enable-tls\' | translate }}\n \n \n tb.rulenode.tls-version\n \n \n {{ tlsVersion }}\n \n \n \n \n {{ \'tb.rulenode.enable-proxy\' | translate }}\n \n
\n
\n \n tb.rulenode.proxy-host\n \n \n {{ \'tb.rulenode.proxy-host-required\' | translate }}\n \n \n \n tb.rulenode.proxy-port\n \n \n {{ \'tb.rulenode.proxy-port-required\' | translate }}\n \n \n {{ \'tb.rulenode.proxy-port-range\' | translate }}\n \n \n
\n \n tb.rulenode.proxy-user\n \n \n \n tb.rulenode.proxy-password\n \n \n
\n \n tb.rulenode.username\n \n \n \n tb.rulenode.password\n \n \n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Kn extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.sendSmsConfigForm}onConfigurationSet(e){this.sendSmsConfigForm=this.fb.group({numbersToTemplate:[e?e.numbersToTemplate:null,[D.required]],smsMessageTemplate:[e?e.smsMessageTemplate:null,[D.required]],useSystemSmsSettings:[!!e&&e.useSystemSmsSettings,[]],smsProviderConfiguration:[e?e.smsProviderConfiguration:null,[]]})}validatorTriggers(){return["useSystemSmsSettings"]}updateValidators(e){this.sendSmsConfigForm.get("useSystemSmsSettings").value?this.sendSmsConfigForm.get("smsProviderConfiguration").setValidators([]):this.sendSmsConfigForm.get("smsProviderConfiguration").setValidators([D.required]),this.sendSmsConfigForm.get("smsProviderConfiguration").updateValueAndValidity({emitEvent:e})}}e("SendSmsConfigComponent",Kn),Kn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Kn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Kn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Kn,selector:"tb-external-node-send-sms-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.numbers-to-template\n \n \n {{ \'tb.rulenode.numbers-to-template-required\' | translate }}\n \n \n \n \n tb.rulenode.sms-message-template\n \n \n {{ \'tb.rulenode.sms-message-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.use-system-sms-settings\' | translate }}\n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:He.SmsProviderConfigurationComponent,selector:"tb-sms-provider-configuration",inputs:["required","disabled"]},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Kn,decorators:[{type:n,args:[{selector:"tb-external-node-send-sms-config",template:'
\n \n tb.rulenode.numbers-to-template\n \n \n {{ \'tb.rulenode.numbers-to-template-required\' | translate }}\n \n \n \n \n tb.rulenode.sms-message-template\n \n \n {{ \'tb.rulenode.sms-message-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.use-system-sms-settings\' | translate }}\n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Un extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.slackChanelTypes=Object.keys(A),this.slackChanelTypesTranslateMap=M}configForm(){return this.slackConfigForm}onConfigurationSet(e){this.slackConfigForm=this.fb.group({botToken:[e?e.botToken:null],useSystemSettings:[!!e&&e.useSystemSettings],messageTemplate:[e?e.messageTemplate:null,[D.required]],conversationType:[e?e.conversationType:null,[D.required]],conversation:[e?e.conversation:null,[D.required]]})}validatorTriggers(){return["useSystemSettings"]}updateValidators(e){this.slackConfigForm.get("useSystemSettings").value?this.slackConfigForm.get("botToken").clearValidators():this.slackConfigForm.get("botToken").setValidators([D.required]),this.slackConfigForm.get("botToken").updateValueAndValidity({emitEvent:e})}}e("SlackConfigComponent",Un),Un.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Un,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Un.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Un,selector:"tb-external-node-slack-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.message-template\n \n \n {{ \'tb.rulenode.message-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.use-system-slack-settings\' | translate }}\n \n \n tb.rulenode.slack-api-token\n \n \n {{ \'tb.rulenode.slack-api-token-required\' | translate }}\n \n \n \n \n \n {{ slackChanelTypesTranslateMap.get(slackChanelType) | translate }}\n \n \n \n \n
\n',styles:[":host .tb-title{display:block;padding-bottom:6px}:host ::ng-deep .mat-mdc-radio-group{display:flex;flex-direction:row;margin-bottom:22px;gap:12px}:host ::ng-deep .mat-mdc-radio-group .mat-mdc-radio-button{flex:1 1 100%;padding:4px;border:1px solid rgba(0,0,0,.12);border-radius:6px}@media screen and (max-width: 599px){:host ::ng-deep .mat-mdc-radio-group{flex-direction:column}}\n"],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:B.MatCheckbox,selector:"mat-checkbox",inputs:["disableRipple","color","tabIndex"],exportAs:["matCheckbox"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:ze.MatRadioGroup,selector:"mat-radio-group",exportAs:["matRadioGroup"]},{kind:"component",type:ze.MatRadioButton,selector:"mat-radio-button",inputs:["disableRipple","tabIndex"],exportAs:["matRadioButton"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:je.SlackConversationAutocompleteComponent,selector:"tb-slack-conversation-autocomplete",inputs:["labelText","requiredText","required","disabled","slackChanelType","token"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Un,decorators:[{type:n,args:[{selector:"tb-external-node-slack-config",template:'
\n \n tb.rulenode.message-template\n \n \n {{ \'tb.rulenode.message-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n {{ \'tb.rulenode.use-system-slack-settings\' | translate }}\n \n \n tb.rulenode.slack-api-token\n \n \n {{ \'tb.rulenode.slack-api-token-required\' | translate }}\n \n \n \n \n \n {{ slackChanelTypesTranslateMap.get(slackChanelType) | translate }}\n \n \n \n \n
\n',styles:[":host .tb-title{display:block;padding-bottom:6px}:host ::ng-deep .mat-mdc-radio-group{display:flex;flex-direction:row;margin-bottom:22px;gap:12px}:host ::ng-deep .mat-mdc-radio-group .mat-mdc-radio-button{flex:1 1 100%;padding:4px;border:1px solid rgba(0,0,0,.12);border-radius:6px}@media screen and (max-width: 599px){:host ::ng-deep .mat-mdc-radio-group{flex-direction:column}}\n"]}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]}});class _n extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.snsConfigForm}onConfigurationSet(e){this.snsConfigForm=this.fb.group({topicArnPattern:[e?e.topicArnPattern:null,[D.required]],accessKeyId:[e?e.accessKeyId:null,[D.required]],secretAccessKey:[e?e.secretAccessKey:null,[D.required]],region:[e?e.region:null,[D.required]]})}}e("SnsConfigComponent",_n),_n.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:_n,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),_n.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:_n,selector:"tb-external-node-sns-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.topic-arn-pattern\n \n \n {{ \'tb.rulenode.topic-arn-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.aws-access-key-id\n \n \n {{ \'tb.rulenode.aws-access-key-id-required\' | translate }}\n \n \n \n tb.rulenode.aws-secret-access-key\n \n \n {{ \'tb.rulenode.aws-secret-access-key-required\' | translate }}\n \n \n \n tb.rulenode.aws-region\n \n \n {{ \'tb.rulenode.aws-region-required\' | translate }}\n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:_n,decorators:[{type:n,args:[{selector:"tb-external-node-sns-config",template:'
\n \n tb.rulenode.topic-arn-pattern\n \n \n {{ \'tb.rulenode.topic-arn-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.aws-access-key-id\n \n \n {{ \'tb.rulenode.aws-access-key-id-required\' | translate }}\n \n \n \n tb.rulenode.aws-secret-access-key\n \n \n {{ \'tb.rulenode.aws-secret-access-key-required\' | translate }}\n \n \n \n tb.rulenode.aws-region\n \n \n {{ \'tb.rulenode.aws-region-required\' | translate }}\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Hn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.sqsQueueType=kt,this.sqsQueueTypes=Object.keys(kt),this.sqsQueueTypeTranslationsMap=Lt}configForm(){return this.sqsConfigForm}onConfigurationSet(e){this.sqsConfigForm=this.fb.group({queueType:[e?e.queueType:null,[D.required]],queueUrlPattern:[e?e.queueUrlPattern:null,[D.required]],delaySeconds:[e?e.delaySeconds:null,[D.min(0),D.max(900)]],messageAttributes:[e?e.messageAttributes:null,[]],accessKeyId:[e?e.accessKeyId:null,[D.required]],secretAccessKey:[e?e.secretAccessKey:null,[D.required]],region:[e?e.region:null,[D.required]]})}}e("SqsConfigComponent",Hn),Hn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Hn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Hn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Hn,selector:"tb-external-node-sqs-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.queue-type\n \n \n {{ sqsQueueTypeTranslationsMap.get(type) | translate }}\n \n \n \n \n tb.rulenode.queue-url-pattern\n \n \n {{ \'tb.rulenode.queue-url-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.delay-seconds\n \n \n {{ \'tb.rulenode.min-delay-seconds-message\' | translate }}\n \n \n {{ \'tb.rulenode.max-delay-seconds-message\' | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.aws-access-key-id\n \n \n {{ \'tb.rulenode.aws-access-key-id-required\' | translate }}\n \n \n \n tb.rulenode.aws-secret-access-key\n \n \n {{ \'tb.rulenode.aws-secret-access-key-required\' | translate }}\n \n \n \n tb.rulenode.aws-region\n \n \n {{ \'tb.rulenode.aws-region-required\' | translate }}\n \n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:Xt,selector:"tb-kv-map-config-old",inputs:["disabled","uniqueKeyValuePairValidator","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","required"]},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Hn,decorators:[{type:n,args:[{selector:"tb-external-node-sqs-config",template:'
\n \n tb.rulenode.queue-type\n \n \n {{ sqsQueueTypeTranslationsMap.get(type) | translate }}\n \n \n \n \n tb.rulenode.queue-url-pattern\n \n \n {{ \'tb.rulenode.queue-url-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.delay-seconds\n \n \n {{ \'tb.rulenode.min-delay-seconds-message\' | translate }}\n \n \n {{ \'tb.rulenode.max-delay-seconds-message\' | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.aws-access-key-id\n \n \n {{ \'tb.rulenode.aws-access-key-id-required\' | translate }}\n \n \n \n tb.rulenode.aws-secret-access-key\n \n \n {{ \'tb.rulenode.aws-secret-access-key-required\' | translate }}\n \n \n \n tb.rulenode.aws-region\n \n \n {{ \'tb.rulenode.aws-region-required\' | translate }}\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class zn{}e("RulenodeCoreConfigExternalModule",zn),zn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:zn,deps:[],target:t.ɵɵFactoryTarget.NgModule}),zn.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:zn,declarations:[_n,Hn,wn,Dn,Vn,Pn,Rn,On,Bn,En,Kn,Un],imports:[O,T,Me,vn],exports:[_n,Hn,wn,Dn,Vn,Pn,Rn,On,Bn,En,Kn,Un]}),zn.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:zn,imports:[O,T,Me,vn]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:zn,decorators:[{type:l,args:[{declarations:[_n,Hn,wn,Dn,Vn,Pn,Rn,On,Bn,En,Kn,Un],imports:[O,T,Me,vn],exports:[_n,Hn,wn,Dn,Vn,Pn,Rn,On,Bn,En,Kn,Un]}]}]});class jn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.searchText=""}configForm(){return this.alarmStatusConfigForm}prepareInputConfig(e){return{alarmStatusList:X(e?.alarmStatusList)?e.alarmStatusList:null}}onConfigurationSet(e){this.alarmStatusConfigForm=this.fb.group({alarmStatusList:[e.alarmStatusList,[D.required]]})}}e("CheckAlarmStatusComponent",jn),jn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:jn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),jn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:jn,selector:"tb-filter-node-check-alarm-status-config",usesInheritance:!0,ngImport:t,template:'
\n
\n
tb.rulenode.alarm-status
\n
\n tb.rulenode.alarm-required\n
\n
\n \n
\n\n\n\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:hn,selector:"tb-alarm-status-select"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:jn,decorators:[{type:n,args:[{selector:"tb-filter-node-check-alarm-status-config",template:'
\n
\n
tb.rulenode.alarm-status
\n
\n tb.rulenode.alarm-required\n
\n
\n \n
\n\n\n\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]}});class Qn extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.checkMessageConfigForm}prepareInputConfig(e){return{messageNames:X(e?.messageNames)?e.messageNames:null,metadataNames:X(e?.metadataNames)?e.metadataNames:null,checkAllKeys:!!X(e?.checkAllKeys)&&e.checkAllKeys}}atLeastOne(e,t=null){return n=>{t||(t=Object.keys(n.controls));return n?.controls&&t.some((t=>!e(n.controls[t])))?null:{atLeastOne:!0}}}onConfigurationSet(e){this.checkMessageConfigForm=this.fb.group({messageNames:[e.messageNames,[]],metadataNames:[e.metadataNames,[]],checkAllKeys:[e.checkAllKeys,[]]},{validators:this.atLeastOne(D.required,["messageNames","metadataNames"])})}get touchedValidationControl(){return["messageNames","metadataNames"].some((e=>this.checkMessageConfigForm.get(e).touched))}}e("CheckMessageConfigComponent",Qn),Qn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Qn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Qn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Qn,selector:"tb-filter-node-check-message-config",usesInheritance:!0,ngImport:t,template:'
\n
\n
tb.rulenode.fields-to-check
\n
\n tb.rulenode.at-least-one-field-required\n
\n
\n \n help\n \n \n help\n \n
\n \n {{ \'tb.rulenode.check-all-keys\' | translate }}\n \n
\n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"component",type:Re.StringItemsListComponent,selector:"tb-string-items-list",inputs:["required","disabled","label","placeholder","hint","requiredText","floatLabel","appearance","editable","subscriptSizing","predefinedValues"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Qn,decorators:[{type:n,args:[{selector:"tb-filter-node-check-message-config",template:'
\n
\n
tb.rulenode.fields-to-check
\n
\n tb.rulenode.at-least-one-field-required\n
\n
\n \n help\n \n \n help\n \n
\n \n {{ \'tb.rulenode.check-all-keys\' | translate }}\n \n
\n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]}});class $n extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.entitySearchDirection=Object.values(g),this.entitySearchDirectionTranslationsMap=y}configForm(){return this.checkRelationConfigForm}prepareInputConfig(e){return{checkForSingleEntity:!!X(e?.checkForSingleEntity)&&e.checkForSingleEntity,direction:X(e?.direction)?e.direction:null,entityType:X(e?.entityType)?e.entityType:null,entityId:X(e?.entityId)?e.entityId:null,relationType:X(e?.relationType)?e.relationType:null}}onConfigurationSet(e){this.checkRelationConfigForm=this.fb.group({checkForSingleEntity:[e.checkForSingleEntity,[]],direction:[e.direction,[]],entityType:[e.entityType,e&&e.checkForSingleEntity?[D.required]:[]],entityId:[e.entityId,e&&e.checkForSingleEntity?[D.required]:[]],relationType:[e.relationType,[D.required]]})}validatorTriggers(){return["checkForSingleEntity"]}updateValidators(e){const t=this.checkRelationConfigForm.get("checkForSingleEntity").value;this.checkRelationConfigForm.get("entityType").setValidators(t?[D.required]:[]),this.checkRelationConfigForm.get("entityType").updateValueAndValidity({emitEvent:e}),this.checkRelationConfigForm.get("entityId").setValidators(t?[D.required]:[]),this.checkRelationConfigForm.get("entityId").updateValueAndValidity({emitEvent:e})}}e("CheckRelationConfigComponent",$n),$n.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:$n,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),$n.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:$n,selector:"tb-filter-node-check-relation-config",usesInheritance:!0,ngImport:t,template:'
\n
tb.rulenode.relation-search-parameters
\n
\n \n {{ \'relation.direction\' | translate }}\n \n \n {{ entitySearchDirectionTranslationsMap.get(direction) | translate }}\n \n \n \n \n \n
\n \n {{ \'tb.rulenode.check-relation-to-specific-entity\' | translate }}\n \n
\n
\n \n \n \n \n
\n
\n
\n',styles:[":host .slide-toggle{margin-bottom:18px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:Qe.EntityAutocompleteComponent,selector:"tb-entity-autocomplete",inputs:["entityType","entitySubtype","excludeEntityIds","labelText","requiredText","useFullEntityId","appearance","required","disabled"],outputs:["entityChanged"]},{kind:"component",type:de.EntityTypeSelectComponent,selector:"tb-entity-type-select",inputs:["allowedEntityTypes","useAliasEntityTypes","filterAllowedEntityTypes","showLabel","required","disabled"]},{kind:"component",type:De.RelationTypeAutocompleteComponent,selector:"tb-relation-type-autocomplete",inputs:["showLabel","additionalClasses","appearance","required","disabled","subscriptSizing"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:$n,decorators:[{type:n,args:[{selector:"tb-filter-node-check-relation-config",template:'
\n
tb.rulenode.relation-search-parameters
\n
\n \n {{ \'relation.direction\' | translate }}\n \n \n {{ entitySearchDirectionTranslationsMap.get(direction) | translate }}\n \n \n \n \n \n
\n \n {{ \'tb.rulenode.check-relation-to-specific-entity\' | translate }}\n \n
\n
\n \n \n \n \n
\n
\n
\n',styles:[":host .slide-toggle{margin-bottom:18px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Jn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.perimeterType=lt,this.perimeterTypes=Object.values(lt),this.perimeterTypeTranslationMap=st,this.rangeUnits=Object.values(pt),this.rangeUnitTranslationMap=dt,this.defaultPaddingEnable=!0}configForm(){return this.geoFilterConfigForm}prepareInputConfig(e){return{latitudeKeyName:X(e?.latitudeKeyName)?e.latitudeKeyName:null,longitudeKeyName:X(e?.longitudeKeyName)?e.longitudeKeyName:null,perimeterType:X(e?.perimeterType)?e.perimeterType:null,fetchPerimeterInfoFromMessageMetadata:!!X(e?.fetchPerimeterInfoFromMessageMetadata)&&e.fetchPerimeterInfoFromMessageMetadata,perimeterKeyName:X(e?.perimeterKeyName)?e.perimeterKeyName:null,centerLatitude:X(e?.centerLatitude)?e.centerLatitude:null,centerLongitude:X(e?.centerLongitude)?e.centerLongitude:null,range:X(e?.range)?e.range:null,rangeUnit:X(e?.rangeUnit)?e.rangeUnit:null,polygonsDefinition:X(e?.polygonsDefinition)?e.polygonsDefinition:null}}onConfigurationSet(e){this.geoFilterConfigForm=this.fb.group({latitudeKeyName:[e.latitudeKeyName,[D.required]],longitudeKeyName:[e.longitudeKeyName,[D.required]],perimeterType:[e.perimeterType,[D.required]],fetchPerimeterInfoFromMessageMetadata:[e.fetchPerimeterInfoFromMessageMetadata,[]],perimeterKeyName:[e.perimeterKeyName,[]],centerLatitude:[e.centerLatitude,[]],centerLongitude:[e.centerLongitude,[]],range:[e.range,[]],rangeUnit:[e.rangeUnit,[]],polygonsDefinition:[e.polygonsDefinition,[]]})}validatorTriggers(){return["fetchPerimeterInfoFromMessageMetadata","perimeterType"]}updateValidators(e){const t=this.geoFilterConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value,n=this.geoFilterConfigForm.get("perimeterType").value;t?this.geoFilterConfigForm.get("perimeterKeyName").setValidators([D.required]):this.geoFilterConfigForm.get("perimeterKeyName").setValidators([]),t||n!==lt.CIRCLE?(this.geoFilterConfigForm.get("centerLatitude").setValidators([]),this.geoFilterConfigForm.get("centerLongitude").setValidators([]),this.geoFilterConfigForm.get("range").setValidators([]),this.geoFilterConfigForm.get("rangeUnit").setValidators([]),this.defaultPaddingEnable=!0):(this.geoFilterConfigForm.get("centerLatitude").setValidators([D.required,D.min(-90),D.max(90)]),this.geoFilterConfigForm.get("centerLongitude").setValidators([D.required,D.min(-180),D.max(180)]),this.geoFilterConfigForm.get("range").setValidators([D.required,D.min(0)]),this.geoFilterConfigForm.get("rangeUnit").setValidators([D.required]),this.defaultPaddingEnable=!1),t||n!==lt.POLYGON?this.geoFilterConfigForm.get("polygonsDefinition").setValidators([]):this.geoFilterConfigForm.get("polygonsDefinition").setValidators([D.required]),this.geoFilterConfigForm.get("perimeterKeyName").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("centerLatitude").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("centerLongitude").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("range").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("rangeUnit").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("polygonsDefinition").updateValueAndValidity({emitEvent:e})}}e("GpsGeoFilterConfigComponent",Jn),Jn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Jn,deps:[{token:G.Store},{token:E.FormBuilder}],target:t.ɵɵFactoryTarget.Component}),Jn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Jn,selector:"tb-filter-node-gps-geofencing-config",usesInheritance:!0,ngImport:t,template:'
\n
\n
tb.rulenode.coordinate-field-names
\n
\n
\n \n {{ \'tb.rulenode.latitude-field-name\' | translate }}\n \n \n {{ \'tb.rulenode.latitude-field-name-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.longitude-field-name\' | translate }}\n \n \n {{ \'tb.rulenode.longitude-field-name-required\' | translate }}\n \n \n
\n
tb.rulenode.coordinate-field-hint
\n
\n
\n
\n
tb.rulenode.geofence-configuration
\n
\n \n {{ \'tb.rulenode.perimeter-type\' | translate }}\n \n \n {{ perimeterTypeTranslationMap.get(type) | translate }}\n \n \n \n
\n \n {{ \'tb.rulenode.fetch-perimeter-info-from-metadata\' | translate }}\n \n
\n \n {{ \'tb.rulenode.perimeter-key-name\' | translate }}\n \n \n {{ \'tb.rulenode.perimeter-key-name-required\' | translate }}\n \n {{ \'tb.rulenode.perimeter-key-name-hint\' | translate }}\n \n
\n
\n \n {{ \'tb.rulenode.circle-center-latitude\' | translate }}\n \n \n {{ \'tb.rulenode.circle-center-latitude-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.circle-center-longitude\' | translate }}\n \n \n {{ \'tb.rulenode.circle-center-longitude-required\' | translate }}\n \n \n
\n
\n \n {{ \'tb.rulenode.range\' | translate }}\n \n \n {{ \'tb.rulenode.range-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.range-units\' | translate }}\n \n \n {{ rangeUnitTranslationMap.get(type) | translate }}\n \n \n \n {{ \'tb.rulenode.range-units-required\' | translate }}\n \n \n
\n
\n \n {{ \'tb.rulenode.polygon-definition\' | translate }}\n \n {{ \'tb.rulenode.polygon-definition-hint\' | translate }}\n \n {{ \'tb.rulenode.polygon-definition-required\' | translate }}\n \n \n
\n
\n
\n',styles:[":host .slide-toggle{margin-bottom:18px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"component",type:Q.MatSlideToggle,selector:"mat-slide-toggle",inputs:["disabled","disableRipple","color","tabIndex"],exportAs:["matSlideToggle"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.MinValidator,selector:"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]",inputs:["min"]},{kind:"directive",type:E.MaxValidator,selector:"input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]",inputs:["max"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:$.HintTooltipIconComponent,selector:"[tb-hint-tooltip-icon]",inputs:["tb-hint-tooltip-icon","tooltipPosition","hintIcon"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Jn,decorators:[{type:n,args:[{selector:"tb-filter-node-gps-geofencing-config",template:'
\n
\n
tb.rulenode.coordinate-field-names
\n
\n
\n \n {{ \'tb.rulenode.latitude-field-name\' | translate }}\n \n \n {{ \'tb.rulenode.latitude-field-name-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.longitude-field-name\' | translate }}\n \n \n {{ \'tb.rulenode.longitude-field-name-required\' | translate }}\n \n \n
\n
tb.rulenode.coordinate-field-hint
\n
\n
\n
\n
tb.rulenode.geofence-configuration
\n
\n \n {{ \'tb.rulenode.perimeter-type\' | translate }}\n \n \n {{ perimeterTypeTranslationMap.get(type) | translate }}\n \n \n \n
\n \n {{ \'tb.rulenode.fetch-perimeter-info-from-metadata\' | translate }}\n \n
\n \n {{ \'tb.rulenode.perimeter-key-name\' | translate }}\n \n \n {{ \'tb.rulenode.perimeter-key-name-required\' | translate }}\n \n {{ \'tb.rulenode.perimeter-key-name-hint\' | translate }}\n \n
\n
\n \n {{ \'tb.rulenode.circle-center-latitude\' | translate }}\n \n \n {{ \'tb.rulenode.circle-center-latitude-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.circle-center-longitude\' | translate }}\n \n \n {{ \'tb.rulenode.circle-center-longitude-required\' | translate }}\n \n \n
\n
\n \n {{ \'tb.rulenode.range\' | translate }}\n \n \n {{ \'tb.rulenode.range-required\' | translate }}\n \n \n \n {{ \'tb.rulenode.range-units\' | translate }}\n \n \n {{ rangeUnitTranslationMap.get(type) | translate }}\n \n \n \n {{ \'tb.rulenode.range-units-required\' | translate }}\n \n \n
\n
\n \n {{ \'tb.rulenode.polygon-definition\' | translate }}\n \n {{ \'tb.rulenode.polygon-definition-hint\' | translate }}\n \n {{ \'tb.rulenode.polygon-definition-required\' | translate }}\n \n \n
\n
\n
\n',styles:[":host .slide-toggle{margin-bottom:18px}\n",':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:E.FormBuilder}]}});class Yn extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.messageTypeConfigForm}prepareInputConfig(e){return{messageTypes:X(e?.messageTypes)?e.messageTypes:null}}onConfigurationSet(e){this.messageTypeConfigForm=this.fb.group({messageTypes:[e.messageTypes,[D.required]]})}}e("MessageTypeConfigComponent",Yn),Yn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Yn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Yn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Yn,selector:"tb-filter-node-message-type-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n
\n',dependencies:[{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:cn,selector:"tb-message-types-config",inputs:["required","label","placeholder","disabled"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Yn,decorators:[{type:n,args:[{selector:"tb-filter-node-message-type-config",template:'
\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Wn extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.allowedEntityTypes=[x.DEVICE,x.ASSET,x.ENTITY_VIEW,x.TENANT,x.CUSTOMER,x.USER,x.DASHBOARD,x.RULE_CHAIN,x.RULE_NODE]}configForm(){return this.originatorTypeConfigForm}prepareInputConfig(e){return{originatorTypes:X(e?.originatorTypes)?e.originatorTypes:null}}onConfigurationSet(e){this.originatorTypeConfigForm=this.fb.group({originatorTypes:[e.originatorTypes,[D.required]]})}}e("OriginatorTypeConfigComponent",Wn),Wn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Wn,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),Wn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Wn,selector:"tb-filter-node-originator-type-config",usesInheritance:!0,ngImport:t,template:'
\n \n help\n \n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n'],dependencies:[{kind:"component",type:$e.EntityTypeListComponent,selector:"tb-entity-type-list",inputs:["required","additionalClasses","appearance","label","floatLabel","disabled","subscriptSizing","allowedEntityTypes","emptyInputPlaceholder","filledInputPlaceholder","ignoreAuthorityFilter"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:U.MatSuffix,selector:"[matSuffix], [matIconSuffix], [matTextSuffix]",inputs:["matTextSuffix"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Wn,decorators:[{type:n,args:[{selector:"tb-filter-node-originator-type-config",template:'
\n \n help\n \n
\n',styles:[':host .margin-8{margin:8px}:host .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}:host .tb-required:after{content:"*"}\n']}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class Xn extends s{constructor(e,t,n,o){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=n,this.translate=o,this.tbelEnabled=Y(this.store).tbelEnabled,this.scriptLanguage=d,this.changeScript=new r,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-filter-function"}configForm(){return this.scriptConfigForm}onConfigurationSet(e){this.scriptConfigForm=this.fb.group({scriptLang:[e.scriptLang,[D.required]],jsScript:[e.jsScript,[]],tbelScript:[e.tbelScript,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.scriptConfigForm.get("scriptLang").value;t!==d.TBEL||this.tbelEnabled||(t=d.JS,this.scriptConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.scriptConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.scriptConfigForm.get("jsScript").setValidators(t===d.JS?[D.required]:[]),this.scriptConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.scriptConfigForm.get("tbelScript").setValidators(t===d.TBEL?[D.required]:[]),this.scriptConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=d.JS)),{scriptLang:X(e?.scriptLang)?e.scriptLang:d.JS,jsScript:X(e?.jsScript)?e.jsScript:null,tbelScript:X(e?.tbelScript)?e.tbelScript:null}}testScript(e){const t=this.scriptConfigForm.get("scriptLang").value,n=t===d.JS?"jsScript":"tbelScript",r=t===d.JS?"rulenode/filter_node_script_fn":"rulenode/tbel/filter_node_script_fn",o=this.scriptConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(o,"filter",this.translate.instant("tb.rulenode.filter"),"Filter",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.scriptConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.scriptConfigForm.get("scriptLang").value===d.JS&&this.jsFuncComponent.validateOnSubmit()}}e("ScriptConfigComponent",Xn),Xn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Xn,deps:[{token:G.Store},{token:E.UntypedFormBuilder},{token:W.NodeScriptTestService},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),Xn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Xn,selector:"tb-filter-node-script-config",viewQueries:[{propertyName:"jsFuncComponent",first:!0,predicate:["jsFuncComponent"],descendants:!0},{propertyName:"tbelFuncComponent",first:!0,predicate:["tbelFuncComponent"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n \n \n \n \n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ne.JsFuncComponent,selector:"tb-js-func",inputs:["functionTitle","functionName","functionArgs","validationArgs","resultType","disabled","fillHeight","minHeight","editorCompleter","globalVariables","disableUndefinedCheck","helpId","scriptLanguage","noValidate","required"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:ie.TbScriptLangComponent,selector:"tb-script-lang",inputs:["disabled"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Xn,decorators:[{type:n,args:[{selector:"tb-filter-node-script-config",template:'
\n \n \n \n \n \n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder},{type:W.NodeScriptTestService},{type:H.TranslateService}]},propDecorators:{jsFuncComponent:[{type:o,args:["jsFuncComponent",{static:!1}]}],tbelFuncComponent:[{type:o,args:["tbelFuncComponent",{static:!1}]}]}});class Zn extends s{constructor(e,t,n,o){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=n,this.translate=o,this.tbelEnabled=Y(this.store).tbelEnabled,this.scriptLanguage=d,this.changeScript=new r,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-switch-function"}configForm(){return this.switchConfigForm}onConfigurationSet(e){this.switchConfigForm=this.fb.group({scriptLang:[e.scriptLang,[D.required]],jsScript:[e.jsScript,[]],tbelScript:[e.tbelScript,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.switchConfigForm.get("scriptLang").value;t!==d.TBEL||this.tbelEnabled||(t=d.JS,this.switchConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.switchConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.switchConfigForm.get("jsScript").setValidators(t===d.JS?[D.required]:[]),this.switchConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.switchConfigForm.get("tbelScript").setValidators(t===d.TBEL?[D.required]:[]),this.switchConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=d.JS)),{scriptLang:X(e?.scriptLang)?e.scriptLang:d.JS,jsScript:X(e?.jsScript)?e.jsScript:null,tbelScript:X(e?.tbelScript)?e.tbelScript:null}}testScript(e){const t=this.switchConfigForm.get("scriptLang").value,n=t===d.JS?"jsScript":"tbelScript",r=t===d.JS?"rulenode/switch_node_script_fn":"rulenode/tbel/switch_node_script_fn",o=this.switchConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(o,"switch",this.translate.instant("tb.rulenode.switch"),"Switch",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.switchConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.switchConfigForm.get("scriptLang").value===d.JS&&this.jsFuncComponent.validateOnSubmit()}}e("SwitchConfigComponent",Zn),Zn.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Zn,deps:[{token:G.Store},{token:E.UntypedFormBuilder},{token:W.NodeScriptTestService},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),Zn.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:Zn,selector:"tb-filter-node-switch-config",viewQueries:[{propertyName:"jsFuncComponent",first:!0,predicate:["jsFuncComponent"],descendants:!0},{propertyName:"tbelFuncComponent",first:!0,predicate:["tbelFuncComponent"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n \n \n \n \n \n \n \n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ne.JsFuncComponent,selector:"tb-js-func",inputs:["functionTitle","functionName","functionArgs","validationArgs","resultType","disabled","fillHeight","minHeight","editorCompleter","globalVariables","disableUndefinedCheck","helpId","scriptLanguage","noValidate","required"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:ie.TbScriptLangComponent,selector:"tb-script-lang",inputs:["disabled"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:Zn,decorators:[{type:n,args:[{selector:"tb-filter-node-switch-config",template:'
\n \n \n \n \n \n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder},{type:W.NodeScriptTestService},{type:H.TranslateService}]},propDecorators:{jsFuncComponent:[{type:o,args:["jsFuncComponent",{static:!1}]}],tbelFuncComponent:[{type:o,args:["tbelFuncComponent",{static:!1}]}]}});class er{}e("RuleNodeCoreConfigFilterModule",er),er.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:er,deps:[],target:t.ɵɵFactoryTarget.NgModule}),er.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:er,declarations:[Qn,$n,Jn,Yn,Wn,Xn,Zn,jn],imports:[O,T,vn],exports:[Qn,$n,Jn,Yn,Wn,Xn,Zn,jn]}),er.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:er,imports:[O,T,vn]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:er,decorators:[{type:l,args:[{declarations:[Qn,$n,Jn,Yn,Wn,Xn,Zn,jn],imports:[O,T,vn],exports:[Qn,$n,Jn,Yn,Wn,Xn,Zn,jn]}]}]});class tr extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.originatorSource=at,this.originatorSources=Object.keys(at),this.originatorSourceTranslationMap=it,this.allowedEntityTypes=[x.DEVICE,x.ASSET,x.ENTITY_VIEW,x.USER,x.EDGE]}configForm(){return this.changeOriginatorConfigForm}onConfigurationSet(e){this.changeOriginatorConfigForm=this.fb.group({originatorSource:[e?e.originatorSource:null,[D.required]],entityType:[e?e.entityType:null,[]],entityNamePattern:[e?e.entityNamePattern:null,[]],relationsQuery:[e?e.relationsQuery:null,[]]})}validatorTriggers(){return["originatorSource"]}updateValidators(e){const t=this.changeOriginatorConfigForm.get("originatorSource").value;t===at.RELATED?this.changeOriginatorConfigForm.get("relationsQuery").setValidators([D.required]):this.changeOriginatorConfigForm.get("relationsQuery").setValidators([]),t===at.ENTITY?(this.changeOriginatorConfigForm.get("entityType").setValidators([D.required]),this.changeOriginatorConfigForm.get("entityNamePattern").setValidators([D.required,D.pattern(/.*\S.*/)])):(this.changeOriginatorConfigForm.get("entityType").patchValue(null,{emitEvent:e}),this.changeOriginatorConfigForm.get("entityNamePattern").patchValue(null,{emitEvent:e}),this.changeOriginatorConfigForm.get("entityType").setValidators([]),this.changeOriginatorConfigForm.get("entityNamePattern").setValidators([])),this.changeOriginatorConfigForm.get("relationsQuery").updateValueAndValidity({emitEvent:e}),this.changeOriginatorConfigForm.get("entityType").updateValueAndValidity({emitEvent:e}),this.changeOriginatorConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e})}}e("ChangeOriginatorConfigComponent",tr),tr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:tr,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),tr.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:tr,selector:"tb-transformation-node-change-originator-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.originator-source\n \n \n {{ originatorSourceTranslationMap.get(source) | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.entity-name-pattern\n \n \n {{ \'tb.rulenode.entity-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n
\n \n \n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:de.EntityTypeSelectComponent,selector:"tb-entity-type-select",inputs:["allowedEntityTypes","useAliasEntityTypes","filterAllowedEntityTypes","showLabel","required","disabled"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:_.DefaultFlexDirective,selector:" [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]",inputs:["fxFlex","fxFlex.xs","fxFlex.sm","fxFlex.md","fxFlex.lg","fxFlex.xl","fxFlex.lt-sm","fxFlex.lt-md","fxFlex.lt-lg","fxFlex.lt-xl","fxFlex.gt-xs","fxFlex.gt-sm","fxFlex.gt-md","fxFlex.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"component",type:xn,selector:"tb-relations-query-config-old",inputs:["disabled","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:tr,decorators:[{type:n,args:[{selector:"tb-transformation-node-change-originator-config",template:'
\n \n tb.rulenode.originator-source\n \n \n {{ originatorSourceTranslationMap.get(source) | translate }}\n \n \n \n
\n \n \n \n tb.rulenode.entity-name-pattern\n \n \n {{ \'tb.rulenode.entity-name-pattern-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n
\n \n \n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class nr extends s{constructor(e,t,n,o){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=n,this.translate=o,this.tbelEnabled=Y(this.store).tbelEnabled,this.scriptLanguage=d,this.changeScript=new r,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-transformer-function"}configForm(){return this.scriptConfigForm}onConfigurationSet(e){this.scriptConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:d.JS,[D.required]],jsScript:[e?e.jsScript:null,[D.required]],tbelScript:[e?e.tbelScript:null,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.scriptConfigForm.get("scriptLang").value;t!==d.TBEL||this.tbelEnabled||(t=d.JS,this.scriptConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.scriptConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.scriptConfigForm.get("jsScript").setValidators(t===d.JS?[D.required]:[]),this.scriptConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.scriptConfigForm.get("tbelScript").setValidators(t===d.TBEL?[D.required]:[]),this.scriptConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=d.JS)),e}testScript(e){const t=this.scriptConfigForm.get("scriptLang").value,n=t===d.JS?"jsScript":"tbelScript",r=t===d.JS?"rulenode/transformation_node_script_fn":"rulenode/tbel/transformation_node_script_fn",o=this.scriptConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(o,"update",this.translate.instant("tb.rulenode.transformer"),"Transform",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.scriptConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.scriptConfigForm.get("scriptLang").value===d.JS&&this.jsFuncComponent.validateOnSubmit()}}e("TransformScriptConfigComponent",nr),nr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:nr,deps:[{token:G.Store},{token:E.UntypedFormBuilder},{token:W.NodeScriptTestService},{token:H.TranslateService}],target:t.ɵɵFactoryTarget.Component}),nr.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:nr,selector:"tb-transformation-node-script-config",viewQueries:[{propertyName:"jsFuncComponent",first:!0,predicate:["jsFuncComponent"],descendants:!0},{propertyName:"tbelFuncComponent",first:!0,predicate:["tbelFuncComponent"],descendants:!0}],usesInheritance:!0,ngImport:t,template:'
\n \n \n \n \n \n \n \n
\n \n
\n
\n',dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:ne.JsFuncComponent,selector:"tb-js-func",inputs:["functionTitle","functionName","functionArgs","validationArgs","resultType","disabled","fillHeight","minHeight","editorCompleter","globalVariables","disableUndefinedCheck","helpId","scriptLanguage","noValidate","required"]},{kind:"component",type:re.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:re.MatIconButton,selector:"button[mat-icon-button]",inputs:["disabled","disableRipple","color"],exportAs:["matButton"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:ae.MatTooltip,selector:"[matTooltip]",exportAs:["matTooltip"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:ie.TbScriptLangComponent,selector:"tb-script-lang",inputs:["disabled"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:nr,decorators:[{type:n,args:[{selector:"tb-transformation-node-script-config",template:'
\n \n \n \n \n \n \n \n
\n \n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder},{type:W.NodeScriptTestService},{type:H.TranslateService}]},propDecorators:{jsFuncComponent:[{type:o,args:["jsFuncComponent",{static:!1}]}],tbelFuncComponent:[{type:o,args:["tbelFuncComponent",{static:!1}]}]}});class rr extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.mailBodyTypes=[{name:"tb.mail-body-type.plain-text",value:"false"},{name:"tb.mail-body-type.html",value:"true"},{name:"tb.mail-body-type.dynamic",value:"dynamic"}]}configForm(){return this.toEmailConfigForm}onConfigurationSet(e){this.toEmailConfigForm=this.fb.group({fromTemplate:[e?e.fromTemplate:null,[D.required]],toTemplate:[e?e.toTemplate:null,[D.required]],ccTemplate:[e?e.ccTemplate:null,[]],bccTemplate:[e?e.bccTemplate:null,[]],subjectTemplate:[e?e.subjectTemplate:null,[D.required]],mailBodyType:[e?e.mailBodyType:null],isHtmlTemplate:[e?e.isHtmlTemplate:null,[D.required]],bodyTemplate:[e?e.bodyTemplate:null,[D.required]]})}updateValidators(e){"dynamic"===this.toEmailConfigForm.get("mailBodyType").value?this.toEmailConfigForm.get("isHtmlTemplate").enable({emitEvent:!1}):this.toEmailConfigForm.get("isHtmlTemplate").disable({emitEvent:!1}),this.toEmailConfigForm.get("isHtmlTemplate").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["mailBodyType"]}}e("ToEmailConfigComponent",rr),rr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:rr,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),rr.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:rr,selector:"tb-transformation-node-to-email-config",usesInheritance:!0,ngImport:t,template:'
\n \n tb.rulenode.from-template\n \n \n {{ \'tb.rulenode.from-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.to-template\n \n \n {{ \'tb.rulenode.to-template-required\' | translate }}\n \n \n \n \n tb.rulenode.cc-template\n \n \n \n \n tb.rulenode.bcc-template\n \n \n \n \n tb.rulenode.subject-template\n \n \n {{ \'tb.rulenode.subject-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.mail-body-type\n \n \n {{ type.name | translate }}\n \n \n \n \n tb.rulenode.dynamic-mail-body-type\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.body-template\n \n \n {{ \'tb.rulenode.body-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"component",type:z.MatSelect,selector:"mat-select",inputs:["disabled","disableRipple","tabIndex","hideSingleSelectionIndicator"],exportAs:["matSelect"]},{kind:"component",type:j.MatOption,selector:"mat-option",exportAs:["matOption"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:pe.SafePipe,name:"safe"},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:rr,decorators:[{type:n,args:[{selector:"tb-transformation-node-to-email-config",template:'
\n \n tb.rulenode.from-template\n \n \n {{ \'tb.rulenode.from-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.to-template\n \n \n {{ \'tb.rulenode.to-template-required\' | translate }}\n \n \n \n \n tb.rulenode.cc-template\n \n \n \n \n tb.rulenode.bcc-template\n \n \n \n \n tb.rulenode.subject-template\n \n \n {{ \'tb.rulenode.subject-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.mail-body-type\n \n \n {{ type.name | translate }}\n \n \n \n \n tb.rulenode.dynamic-mail-body-type\n \n tb.rulenode.general-pattern-hint\n \n \n tb.rulenode.body-template\n \n \n {{ \'tb.rulenode.body-template-required\' | translate }}\n \n tb.rulenode.general-pattern-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class or extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.separatorKeysCodes=[le,se,me]}onConfigurationSet(e){this.copyKeysConfigForm=this.fb.group({fromMetadata:[e?e.fromMetadata:null,[D.required]],keys:[e?e.keys:null,[D.required]]})}configForm(){return this.copyKeysConfigForm}removeKey(e){const t=this.copyKeysConfigForm.get("keys").value,n=t.indexOf(e);n>=0&&(t.splice(n,1),this.copyKeysConfigForm.get("keys").patchValue(t,{emitEvent:!0}))}addKey(e){const t=e.input;let n=e.value;if((n||"").trim()){n=n.trim();let e=this.copyKeysConfigForm.get("keys").value;e&&-1!==e.indexOf(n)||(e||(e=[]),e.push(n),this.copyKeysConfigForm.get("keys").patchValue(e,{emitEvent:!0}))}t&&(t.value="")}}e("CopyKeysConfigComponent",or),or.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:or,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),or.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:or,selector:"tb-transformation-node-copy-keys-config",usesInheritance:!0,ngImport:t,template:'
\n
{{\'tb.rulenode.copy-from\' | translate}}
\n \n \n {{\'tb.rulenode.data-to-metadata\' | translate}}\n \n \n {{\'tb.rulenode.metadata-to-data\' | translate}}\n \n \n \n \n \n {{key}}\n close\n \n \n \n {{ \'tb.rulenode.keys-required\' | translate }}\n tb.rulenode.use-regular-expression-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:ze.MatRadioGroup,selector:"mat-radio-group",exportAs:["matRadioGroup"]},{kind:"component",type:ze.MatRadioButton,selector:"mat-radio-button",inputs:["disableRipple","tabIndex"],exportAs:["matRadioButton"]},{kind:"component",type:ue.MatChipGrid,selector:"mat-chip-grid",inputs:["tabIndex","disabled","placeholder","required","value","errorStateMatcher"],outputs:["change","valueChange"]},{kind:"directive",type:ue.MatChipInput,selector:"input[matChipInputFor]",inputs:["matChipInputFor","matChipInputAddOnBlur","matChipInputSeparatorKeyCodes","placeholder","id","disabled"],outputs:["matChipInputTokenEnd"],exportAs:["matChipInput","matChipInputFor"]},{kind:"directive",type:ue.MatChipRemove,selector:"[matChipRemove]"},{kind:"component",type:ue.MatChipRow,selector:"mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]",inputs:["color","disabled","disableRipple","tabIndex","editable"],outputs:["edited"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:or,decorators:[{type:n,args:[{selector:"tb-transformation-node-copy-keys-config",template:'
\n
{{\'tb.rulenode.copy-from\' | translate}}
\n \n \n {{\'tb.rulenode.data-to-metadata\' | translate}}\n \n \n {{\'tb.rulenode.metadata-to-data\' | translate}}\n \n \n \n \n \n {{key}}\n close\n \n \n \n {{ \'tb.rulenode.keys-required\' | translate }}\n tb.rulenode.use-regular-expression-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class ar extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.renameKeysConfigForm}onConfigurationSet(e){this.renameKeysConfigForm=this.fb.group({fromMetadata:[e?e.fromMetadata:null,[D.required]],renameKeysMapping:[e?e.renameKeysMapping:null,[D.required]]})}}e("RenameKeysConfigComponent",ar),ar.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ar,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),ar.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:ar,selector:"tb-transformation-node-rename-keys-config",usesInheritance:!0,ngImport:t,template:'
\n
{{ \'tb.rulenode.rename-keys-in\' | translate }}
\n \n \n {{\'tb.rulenode.data\' | translate}}\n \n \n {{\'tb.rulenode.metadata\' | translate}}\n \n \n \n \n
\n',dependencies:[{kind:"directive",type:ze.MatRadioGroup,selector:"mat-radio-group",exportAs:["matRadioGroup"]},{kind:"component",type:ze.MatRadioButton,selector:"mat-radio-button",inputs:["disableRipple","tabIndex"],exportAs:["matRadioButton"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"component",type:Xt,selector:"tb-kv-map-config-old",inputs:["disabled","uniqueKeyValuePairValidator","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText","required"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ar,decorators:[{type:n,args:[{selector:"tb-transformation-node-rename-keys-config",template:'
\n
{{ \'tb.rulenode.rename-keys-in\' | translate }}
\n \n \n {{\'tb.rulenode.data\' | translate}}\n \n \n {{\'tb.rulenode.metadata\' | translate}}\n \n \n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class ir extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.jsonPathConfigForm}onConfigurationSet(e){this.jsonPathConfigForm=this.fb.group({jsonPath:[e?e.jsonPath:null,[D.required]]})}}e("NodeJsonPathConfigComponent",ir),ir.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ir,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),ir.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:ir,selector:"tb-transformation-node-json-path-config",usesInheritance:!0,ngImport:t,template:"
\n \n {{ 'tb.rulenode.json-path-expression' | translate }}\n \n {{ 'tb.rulenode.json-path-expression-hint' | translate }}\n {{ 'tb.rulenode.json-path-expression-required' | translate }}\n \n
\n\n",dependencies:[{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatLabel,selector:"mat-label"},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ir,decorators:[{type:n,args:[{selector:"tb-transformation-node-json-path-config",template:"
\n \n {{ 'tb.rulenode.json-path-expression' | translate }}\n \n {{ 'tb.rulenode.json-path-expression-hint' | translate }}\n {{ 'tb.rulenode.json-path-expression-required' | translate }}\n \n
\n\n"}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class lr extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.separatorKeysCodes=[le,se,me]}onConfigurationSet(e){this.deleteKeysConfigForm=this.fb.group({fromMetadata:[e?e.fromMetadata:null,[D.required]],keys:[e?e.keys:null,[D.required]]})}configForm(){return this.deleteKeysConfigForm}removeKey(e){const t=this.deleteKeysConfigForm.get("keys").value,n=t.indexOf(e);n>=0&&(t.splice(n,1),this.deleteKeysConfigForm.get("keys").patchValue(t,{emitEvent:!0}))}addKey(e){const t=e.input;let n=e.value;if((n||"").trim()){n=n.trim();let e=this.deleteKeysConfigForm.get("keys").value;e&&-1!==e.indexOf(n)||(e||(e=[]),e.push(n),this.deleteKeysConfigForm.get("keys").patchValue(e,{emitEvent:!0}))}t&&(t.value="")}}e("DeleteKeysConfigComponent",lr),lr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:lr,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),lr.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:lr,selector:"tb-transformation-node-delete-keys-config",usesInheritance:!0,ngImport:t,template:'
\n
{{\'tb.rulenode.delete-from\' | translate}}
\n \n \n {{\'tb.rulenode.data\' | translate}}\n \n \n {{\'tb.rulenode.metadata\' | translate}}\n \n \n \n \n \n {{key}}\n close\n \n \n \n {{ \'tb.rulenode.keys-required\' | translate }}\n tb.rulenode.use-regular-expression-delete-hint\n \n
\n',dependencies:[{kind:"directive",type:R.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:R.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:oe.MatIcon,selector:"mat-icon",inputs:["color","inline","svgIcon","fontSet","fontIcon"],exportAs:["matIcon"]},{kind:"directive",type:K.MatInput,selector:"input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]",inputs:["disabled","id","placeholder","name","required","type","errorStateMatcher","aria-describedby","value","readonly"],exportAs:["matInput"]},{kind:"component",type:U.MatFormField,selector:"mat-form-field",inputs:["hideRequiredMarker","color","floatLabel","appearance","subscriptSizing","hintLabel"],exportAs:["matFormField"]},{kind:"directive",type:U.MatHint,selector:"mat-hint",inputs:["align","id"]},{kind:"directive",type:U.MatError,selector:"mat-error, [matError]",inputs:["id"]},{kind:"directive",type:ze.MatRadioGroup,selector:"mat-radio-group",exportAs:["matRadioGroup"]},{kind:"component",type:ze.MatRadioButton,selector:"mat-radio-button",inputs:["disableRipple","tabIndex"],exportAs:["matRadioButton"]},{kind:"component",type:ue.MatChipGrid,selector:"mat-chip-grid",inputs:["tabIndex","disabled","placeholder","required","value","errorStateMatcher"],outputs:["change","valueChange"]},{kind:"directive",type:ue.MatChipInput,selector:"input[matChipInputFor]",inputs:["matChipInputFor","matChipInputAddOnBlur","matChipInputSeparatorKeyCodes","placeholder","id","disabled"],outputs:["matChipInputTokenEnd"],exportAs:["matChipInput","matChipInputFor"]},{kind:"directive",type:ue.MatChipRemove,selector:"[matChipRemove]"},{kind:"component",type:ue.MatChipRow,selector:"mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]",inputs:["color","disabled","disableRipple","tabIndex","editable"],outputs:["edited"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:_.DefaultLayoutGapDirective,selector:" [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]",inputs:["fxLayoutGap","fxLayoutGap.xs","fxLayoutGap.sm","fxLayoutGap.md","fxLayoutGap.lg","fxLayoutGap.xl","fxLayoutGap.lt-sm","fxLayoutGap.lt-md","fxLayoutGap.lt-lg","fxLayoutGap.lt-xl","fxLayoutGap.gt-xs","fxLayoutGap.gt-sm","fxLayoutGap.gt-md","fxLayoutGap.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]},{kind:"directive",type:H.TranslateDirective,selector:"[translate],[ngx-translate]",inputs:["translate","translateParams"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:lr,decorators:[{type:n,args:[{selector:"tb-transformation-node-delete-keys-config",template:'
\n
{{\'tb.rulenode.delete-from\' | translate}}
\n \n \n {{\'tb.rulenode.data\' | translate}}\n \n \n {{\'tb.rulenode.metadata\' | translate}}\n \n \n \n \n \n {{key}}\n close\n \n \n \n {{ \'tb.rulenode.keys-required\' | translate }}\n tb.rulenode.use-regular-expression-delete-hint\n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class sr{}e("RulenodeCoreConfigTransformModule",sr),sr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:sr,deps:[],target:t.ɵɵFactoryTarget.NgModule}),sr.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:sr,declarations:[tr,nr,rr,or,ar,ir,lr],imports:[O,T,vn],exports:[tr,nr,rr,or,ar,ir,lr]}),sr.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:sr,imports:[O,T,vn]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:sr,decorators:[{type:l,args:[{declarations:[tr,nr,rr,or,ar,ir,lr],imports:[O,T,vn],exports:[tr,nr,rr,or,ar,ir,lr]}]}]});class mr extends s{constructor(e,t){super(e),this.store=e,this.fb=t,this.entityType=x}configForm(){return this.ruleChainInputConfigForm}onConfigurationSet(e){this.ruleChainInputConfigForm=this.fb.group({ruleChainId:[e?e.ruleChainId:null,[D.required]]})}}e("RuleChainInputComponent",mr),mr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:mr,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),mr.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:mr,selector:"tb-flow-node-rule-chain-input-config",usesInheritance:!0,ngImport:t,template:'
\n \n \n
\n',dependencies:[{kind:"component",type:Qe.EntityAutocompleteComponent,selector:"tb-entity-autocomplete",inputs:["entityType","entitySubtype","excludeEntityIds","labelText","requiredText","useFullEntityId","appearance","required","disabled"],outputs:["entityChanged"]},{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"directive",type:E.FormControlName,selector:"[formControlName]",inputs:["formControlName","disabled","ngModel"],outputs:["ngModelChange"]}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:mr,decorators:[{type:n,args:[{selector:"tb-flow-node-rule-chain-input-config",template:'
\n \n \n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class ur extends s{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.ruleChainOutputConfigForm}onConfigurationSet(e){this.ruleChainOutputConfigForm=this.fb.group({})}}e("RuleChainOutputComponent",ur),ur.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ur,deps:[{token:G.Store},{token:E.UntypedFormBuilder}],target:t.ɵɵFactoryTarget.Component}),ur.ɵcmp=t.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.2.9",type:ur,selector:"tb-flow-node-rule-chain-output-config",usesInheritance:!0,ngImport:t,template:'
\n
\n
\n',dependencies:[{kind:"directive",type:_.DefaultLayoutDirective,selector:" [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]",inputs:["fxLayout","fxLayout.xs","fxLayout.sm","fxLayout.md","fxLayout.lg","fxLayout.xl","fxLayout.lt-sm","fxLayout.lt-md","fxLayout.lt-lg","fxLayout.lt-xl","fxLayout.gt-xs","fxLayout.gt-sm","fxLayout.gt-md","fxLayout.gt-lg"]},{kind:"directive",type:E.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:E.FormGroupDirective,selector:"[formGroup]",inputs:["formGroup"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"pipe",type:H.TranslatePipe,name:"translate"}]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:ur,decorators:[{type:n,args:[{selector:"tb-flow-node-rule-chain-output-config",template:'
\n
\n
\n'}]}],ctorParameters:function(){return[{type:G.Store},{type:E.UntypedFormBuilder}]}});class pr{}e("RuleNodeCoreConfigFlowModule",pr),pr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:pr,deps:[],target:t.ɵɵFactoryTarget.NgModule}),pr.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:pr,declarations:[mr,ur],imports:[O,T,vn],exports:[mr,ur]}),pr.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:pr,imports:[O,T,vn]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:pr,decorators:[{type:l,args:[{declarations:[mr,ur],imports:[O,T,vn],exports:[mr,ur]}]}]});class dr{constructor(e){!function(e){e.setTranslation("en_US",{tb:{rulenode:{"create-entity-if-not-exists":"Create new entity if not exists","create-entity-if-not-exists-hint":"Create a new entity set above if it does not exist.","entity-name-pattern":"Name pattern","entity-name-pattern-required":"Name pattern is required","entity-type-pattern":"Type pattern","entity-type-pattern-required":"Type pattern is required","output-message-type":"Output message type","output-message-type-required":"Output message type is required","output-message-type-max-length":"Output message type should be less than 256","entity-cache-expiration":"Entities cache expiration time (sec)","entity-cache-expiration-hint":"Specifies maximum time interval allowed to store found entity records. 0 value means that records will never expire.","entity-cache-expiration-required":"Entities cache expiration time is required.","entity-cache-expiration-range":"Entities cache expiration time should be greater than or equal to 0.","customer-name-pattern":"Customer name pattern","customer-name-pattern-required":"Customer name pattern is required","create-customer-if-not-exists":"Create new customer if not exists","customer-cache-expiration":"Customers cache expiration time (sec)","customer-cache-expiration-hint":"Specifies maximum time interval allowed to store found customer records. 0 value means that records will never expire.","customer-cache-expiration-required":"Customers cache expiration time is required.","customer-cache-expiration-range":"Customers cache expiration time should be greater than or equal to 0.","interval-start":"Interval start","interval-end":"Interval end","time-unit":"Time unit","fetch-mode":"Fetch mode","order-by-timestamp":"Order by timestamp",limit:"Limit","limit-hint":"Min limit value is 2, max - 1000. If you want to fetch a single entry, select fetch mode 'First' or 'Last'.","limit-required":"Limit is required.","limit-range":"Limit should be in a range from 2 to 1000.","time-unit-milliseconds":"Milliseconds","time-unit-seconds":"Seconds","time-unit-minutes":"Minutes","time-unit-hours":"Hours","time-unit-days":"Days","time-value-range":"Allowing range from 1 to 2147483647.","start-interval-value-required":"Interval start is required.","end-interval-value-required":"Interval end is required.",filter:"Filter",switch:"Switch","math-templatization-tooltip":"This field support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","add-message-type":"Add message type","select-message-types-required":"At least one message type should be selected.","select-message-types":"Select message types","no-message-types-found":"No message types found","no-message-type-matching":"'{{messageType}}' not found.","create-new-message-type":"Create a new one.","message-types-required":"Message types are required.","client-attributes":"Client attributes","shared-attributes":"Shared attributes","server-attributes":"Server attributes","attributes-keys":"Attributes keys","attributes-keys-required":"Attributes keys are required","notify-device":"Notify device","send-attributes-updated-notification":"Send attributes updated notification","send-attributes-updated-notification-hint":"Send notification about updated attributes as a separate message to the rule engine queue.","send-attributes-deleted-notification":"Send attributes deleted notification","send-attributes-deleted-notification-hint":"Send notification about deleted attributes as a separate message to the rule engine queue.","update-attributes-only-on-value-change":"Save attributes only if the value changes","update-attributes-only-on-value-change-hint":"Updates the attributes on every incoming message disregarding if their value has changed. Increases API usage and reduces performance.","update-attributes-only-on-value-change-hint-enabled":"Updates the attributes only if their value has changed. If the value is not changed, no update to the attribute timestamp nor attribute change notification will be sent.","fetch-credentials-to-metadata":"Fetch credentials to metadata","notify-device-hint":"If the message arrives from the device, we will push it back to the device by default.","notify-device-delete-hint":"Send notification about deleted attributes to device.","latest-timeseries":"Latest time-series data keys","timeseries-keys":"Timeseries keys","timeseries-keys-required":"At least one timeseries key should be selected.","add-timeseries-key":"Add timeseries key","add-message-field":"Add message field","relation-search-parameters":"Relation search parameters","add-metadata-field":"Add metadata field","data-keys":"Message field names","copy-from":"Copy from","data-to-metadata":"Data to metadata","metadata-to-data":"Metadata to data","use-regular-expression-hint":"Use regular expression to copy keys by pattern",interval:"Interval","interval-required":"Interval is required","interval-hint":"Deduplication interval in seconds.","interval-min-error":"Min allowed value is 1","max-pending-msgs":"Max pending messages","max-pending-msgs-hint":"Maximum number of messages that are stored in memory for each unique deduplication id.","max-pending-msgs-required":"Max pending messages is required","max-pending-msgs-max-error":"Max allowed value is 1000","max-pending-msgs-min-error":"Min allowed value is 1","max-retries":"Max retries","max-retries-required":"Max retries is required","max-retries-hint":"Maximum number of retries to push the deduplicated messages into the queue. 10 seconds delay is used between retries","max-retries-max-error":"Max allowed value is 100","max-retries-min-error":"Min allowed value is 0",strategy:"Strategy","strategy-required":"Strategy is required","strategy-all-hint":"Return all messages that arrived during deduplication period as a single JSON array message. Where each element represents object with msg and metadata inner properties.","strategy-first-hint":"Return first message that arrived during deduplication period.","strategy-last-hint":"Return last message that arrived during deduplication period.",first:"First",last:"Last",all:"All","output-msg-type-hint":"The message type of the deduplication result.","queue-name-hint":"The queue name where the deduplication result will be published.",keys:"Keys","keys-required":"Keys are required","rename-keys-in":"Rename keys in",data:"Data",message:"Message",metadata:"Metadata","key-name":"Key name","key-name-required":"Key name is required","new-key-name":"New key name","new-key-name-required":"New key name is required","metadata-keys":"Metadata field names","json-path-expression":"JSON path expression","json-path-expression-required":"JSON path expression is required","json-path-expression-hint":"JSONPath specifies a path to an element or a set of elements in a JSON structure. '$' represents the root object or array.","relations-query":"Relations query","device-relations-query":"Device relations query","max-relation-level":"Max relation level","max-relation-level-error":"Value should be greater than 0 or unspecified.","relation-type":"Relation type","relation-type-pattern":"Relation type pattern","relation-type-pattern-required":"Relation type pattern is required","relation-types-list":"Relation types to propagate","relation-types-list-hint":"If Propagate relation types are not selected, alarms will be propagated without filtering by relation type.","unlimited-level":"Unlimited level","latest-telemetry":"Latest telemetry","add-telemetry-key":"Add telemetry key","delete-from":"Delete from","use-regular-expression-delete-hint":"Use regular expression to delete keys by pattern","fetch-into":"Fetch into","attr-mapping":"Attributes mapping:","source-attribute":"Source attribute key","source-attribute-required":"Source attribute key is required.","source-telemetry":"Source telemetry key","source-telemetry-required":"Source telemetry key is required.","target-key":"Target key","target-key-required":"Target key is required.","attr-mapping-required":"At least one mapping entry should be specified.","fields-mapping":"Fields mapping*","fields-mapping-required":"At least one field mapping should be specified.","at-least-one-field-required":"At least one input field must have a value(s) provided.","originator-fields-sv-map-hint":"Target key fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","sv-map-hint":"Only target key fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","source-field":"Source field","source-field-required":"Source field is required.","originator-source":"Originator source","originator-customer":"Customer","originator-tenant":"Tenant","originator-related":"Related","originator-alarm-originator":"Alarm Originator","originator-entity":"Entity","clone-message":"Clone message",transform:"Transform","default-ttl":"Default TTL in seconds","default-ttl-required":"Default TTL is required.","min-default-ttl-message":"Only 0 minimum TTL is allowed.","message-count":"Message count (0 - unlimited)","message-count-required":"Message count is required.","min-message-count-message":"Only 0 minimum message count is allowed.","period-seconds":"Period in seconds","period-seconds-required":"Period is required.","use-metadata-period-in-seconds-patterns":"Use period in seconds pattern","use-metadata-period-in-seconds-patterns-hint":"If selected, rule node use period in seconds interval pattern from message metadata or data assuming that intervals are in the seconds.","period-in-seconds-pattern":"Period in seconds pattern","period-in-seconds-pattern-required":"Period in seconds pattern is required","min-period-seconds-message":"Only 1 second minimum period is allowed.",originator:"Originator","message-body":"Message body","message-metadata":"Message metadata",generate:"Generate","test-generator-function":"Test generator function",generator:"Generator","test-filter-function":"Test filter function","test-switch-function":"Test switch function","test-transformer-function":"Test transformer function",transformer:"Transformer","alarm-create-condition":"Alarm create condition","test-condition-function":"Test condition function","alarm-clear-condition":"Alarm clear condition","alarm-details-builder":"Alarm details builder","test-details-function":"Test details function","alarm-type":"Alarm type","select-entity-types":"Select entity types","alarm-type-required":"Alarm type is required.","alarm-severity":"Alarm severity","alarm-severity-required":"Alarm severity is required","alarm-severity-pattern":"Alarm severity pattern","alarm-status-filter":"Alarm status filter","alarm-status-list-empty":"Alarm status list is empty","no-alarm-status-matching":"No alarm status matching were found.",propagate:"Propagate alarm to related entities","propagate-to-owner":"Propagate alarm to entity owner (Customer or Tenant)","propagate-to-tenant":"Propagate alarm to Tenant",condition:"Condition",details:"Details","to-string":"To string","test-to-string-function":"Test to string function","from-template":"From Template","from-template-required":"From Template is required","to-template":"To Template","to-template-required":"To Template is required","mail-address-list-template-hint":'Comma separated address list, use ${metadataKey} for value from metadata, $[messageKey] for value from message body',"cc-template":"Cc Template","bcc-template":"Bcc Template","subject-template":"Subject Template","subject-template-required":"Subject Template is required","body-template":"Body Template","body-template-required":"Body Template is required","dynamic-mail-body-type":"Dynamic mail body type","mail-body-type":"Mail body type","request-id-metadata-attribute":"Request Id Metadata attribute name","timeout-sec":"Timeout in seconds","timeout-required":"Timeout is required","min-timeout-message":"Only 0 minimum timeout value is allowed.","endpoint-url-pattern":"Endpoint URL pattern","endpoint-url-pattern-required":"Endpoint URL pattern is required","request-method":"Request method","use-simple-client-http-factory":"Use simple client HTTP factory","ignore-request-body":"Without request body","trim-double-quotes":"Message without quotes","trim-double-quotes-hint":"If selected, request body message payload will be sent without double quotes, i.e. msg = message body","read-timeout":"Read timeout in millis","read-timeout-hint":"The value of 0 means an infinite timeout","max-parallel-requests-count":"Max number of parallel requests","max-parallel-requests-count-hint":"The value of 0 specifies no limit in parallel processing",headers:"Headers","headers-hint":'Use ${metadataKey} for value from metadata, $[messageKey] for value from message body in header/value fields',header:"Header","header-required":"Header is required",value:"Value","value-required":"Value is required","topic-pattern":"Topic pattern","key-pattern":"Key pattern","key-pattern-hint":"Optional. If a valid partition number is specified, it will be used when sending the record. If no partition is specified, the key will be used instead. If neither is specified, a partition will be assigned in a round-robin fashion.","topic-pattern-required":"Topic pattern is required",topic:"Topic","topic-required":"Topic is required","bootstrap-servers":"Bootstrap servers","bootstrap-servers-required":"Bootstrap servers value is required","other-properties":"Other properties",key:"Key","key-required":"Key is required",retries:"Automatically retry times if fails","min-retries-message":"Only 0 minimum retries is allowed.","batch-size-bytes":"Produces batch size in bytes","min-batch-size-bytes-message":"Only 0 minimum batch size is allowed.","linger-ms":"Time to buffer locally (ms)","min-linger-ms-message":"Only 0 ms minimum value is allowed.","buffer-memory-bytes":"Client buffer max size in bytes","min-buffer-memory-message":"Only 0 minimum buffer size is allowed.",acks:"Number of acknowledgments","key-serializer":"Key serializer","key-serializer-required":"Key serializer is required","value-serializer":"Value serializer","value-serializer-required":"Value serializer is required","topic-arn-pattern":"Topic ARN pattern","topic-arn-pattern-required":"Topic ARN pattern is required","aws-access-key-id":"AWS Access Key ID","aws-access-key-id-required":"AWS Access Key ID is required","aws-secret-access-key":"AWS Secret Access Key","aws-secret-access-key-required":"AWS Secret Access Key is required","aws-region":"AWS Region","aws-region-required":"AWS Region is required","exchange-name-pattern":"Exchange name pattern","routing-key-pattern":"Routing key pattern","message-properties":"Message properties",host:"Host","host-required":"Host is required",port:"Port","port-required":"Port is required","port-range":"Port should be in a range from 1 to 65535.","virtual-host":"Virtual host",username:"Username",password:"Password","automatic-recovery":"Automatic recovery","connection-timeout-ms":"Connection timeout (ms)","min-connection-timeout-ms-message":"Only 0 ms minimum value is allowed.","handshake-timeout-ms":"Handshake timeout (ms)","min-handshake-timeout-ms-message":"Only 0 ms minimum value is allowed.","client-properties":"Client properties","queue-url-pattern":"Queue URL pattern","queue-url-pattern-required":"Queue URL pattern is required","delay-seconds":"Delay (seconds)","min-delay-seconds-message":"Only 0 seconds minimum value is allowed.","max-delay-seconds-message":"Only 900 seconds maximum value is allowed.",name:"Name","name-required":"Name is required","queue-type":"Queue type","sqs-queue-standard":"Standard","sqs-queue-fifo":"FIFO","gcp-project-id":"GCP project ID","gcp-project-id-required":"GCP project ID is required","gcp-service-account-key":"GCP service account key file","gcp-service-account-key-required":"GCP service account key file is required","pubsub-topic-name":"Topic name","pubsub-topic-name-required":"Topic name is required","message-attributes":"Message attributes","message-attributes-hint":'Use ${metadataKey} for value from metadata, $[messageKey] for value from message body in name/value fields',"connect-timeout":"Connection timeout (sec)","connect-timeout-required":"Connection timeout is required.","connect-timeout-range":"Connection timeout should be in a range from 1 to 200.","client-id":"Client ID","client-id-hint":'Optional. Leave empty for auto-generated Client ID. Be careful when specifying the Client ID. Majority of the MQTT brokers will not allow multiple connections with the same Client ID. To connect to such brokers, your mqtt Client ID must be unique. When platform is running in a micro-services mode, the copy of rule node is launched in each micro-service. This will automatically lead to multiple mqtt clients with the same ID and may cause failures of the rule node. To avoid such failures enable "Add Service ID as suffix to Client ID" option below.',"append-client-id-suffix":"Add Service ID as suffix to Client ID","client-id-suffix-hint":'Optional. Applied when "Client ID" specified explicitly. If selected then Service ID will be added to Client ID as a suffix. Helps to avoid failures when platform is running in a micro-services mode.',"device-id":"Device ID","device-id-required":"Device ID is required.","clean-session":"Clean session","enable-ssl":"Enable SSL",credentials:"Credentials","credentials-type":"Credentials type","credentials-type-required":"Credentials type is required.","credentials-anonymous":"Anonymous","credentials-basic":"Basic","credentials-pem":"PEM","credentials-pem-hint":"At least Server CA certificate file or a pair of Client certificate and Client private key files are required","credentials-sas":"Shared Access Signature","sas-key":"SAS Key","sas-key-required":"SAS Key is required.",hostname:"Hostname","hostname-required":"Hostname is required.","azure-ca-cert":"CA certificate file","username-required":"Username is required.","password-required":"Password is required.","ca-cert":"Server CA certificate file","private-key":"Client private key file",cert:"Client certificate file","no-file":"No file selected.","drop-file":"Drop a file or click to select a file to upload.","private-key-password":"Private key password","use-system-smtp-settings":"Use system SMTP settings","use-metadata-dynamic-interval":"Use dynamic interval","metadata-dynamic-interval-hint":"Interval start and end input fields support templatization. Note that the substituted template value should be set in milliseconds. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","use-metadata-interval-patterns-hint":"If selected, rule node use start and end interval patterns from message metadata or data assuming that intervals are in the milliseconds.","use-message-alarm-data":"Use message alarm data","overwrite-alarm-details":"Overwrite alarm details","use-alarm-severity-pattern":"Use alarm severity pattern","check-all-keys":"Check that all specified fields are present","check-all-keys-hint":"If selected, checks that all specified keys are present in the message data and metadata.","check-relation-to-specific-entity":"Check relation to specific entity","check-relation-to-specific-entity-tooltip":"If enabled, checks the presence of relation with a specific entity otherwise, checks the presence of relation with any entity. In both cases, relation lookup is based on configured direction and type.","check-relation-hint":"Checks existence of relation to specific entity or to any entity based on direction and relation type.","delete-relation-to-specific-entity":"Delete relation to specific entity","delete-relation-hint":"Deletes relation from the originator of the incoming message to the specified entity or list of entities based on direction and type.","remove-current-relations":"Remove current relations","remove-current-relations-hint":"Removes current relations from the originator of the incoming message based on direction and type.","change-originator-to-related-entity":"Change originator to related entity","change-originator-to-related-entity-hint":"Used to process submitted message as a message from another entity.","start-interval":"Interval start","end-interval":"Interval end","start-interval-required":"Interval start is required.","end-interval-required":"Interval end is required.","smtp-protocol":"Protocol","smtp-host":"SMTP host","smtp-host-required":"SMTP host is required.","smtp-port":"SMTP port","smtp-port-required":"You must supply a smtp port.","smtp-port-range":"SMTP port should be in a range from 1 to 65535.","timeout-msec":"Timeout ms","min-timeout-msec-message":"Only 0 ms minimum value is allowed.","enter-username":"Enter username","enter-password":"Enter password","enable-tls":"Enable TLS","tls-version":"TLS version","enable-proxy":"Enable proxy","use-system-proxy-properties":"Use system proxy properties","proxy-host":"Proxy host","proxy-host-required":"Proxy host is required.","proxy-port":"Proxy port","proxy-port-required":"Proxy port is required.","proxy-port-range":"Proxy port should be in a range from 1 to 65535.","proxy-user":"Proxy user","proxy-password":"Proxy password","proxy-scheme":"Proxy scheme","numbers-to-template":"Phone Numbers To Template","numbers-to-template-required":"Phone Numbers To Template is required","numbers-to-template-hint":'Comma separated Phone Numbers, use ${metadataKey} for value from metadata, $[messageKey] for value from message body',"sms-message-template":"SMS message Template","sms-message-template-required":"SMS message Template is required","use-system-sms-settings":"Use system SMS provider settings","min-period-0-seconds-message":"Only 0 second minimum period is allowed.","max-pending-messages":"Maximum pending messages","max-pending-messages-required":"Maximum pending messages is required.","max-pending-messages-range":"Maximum pending messages should be in a range from 1 to 100000.","originator-types-filter":"Originator types filter","interval-seconds":"Interval in seconds","interval-seconds-required":"Interval is required.","min-interval-seconds-message":"Only 1 second minimum interval is allowed.","output-timeseries-key-prefix":"Output timeseries key prefix","output-timeseries-key-prefix-required":"Output timeseries key prefix required.","separator-hint":'Press "Enter" to complete field input.',"select-details":"Select details","entity-details-id":"Id","entity-details-title":"Title","entity-details-country":"Country","entity-details-state":"State","entity-details-city":"City","entity-details-zip":"Zip","entity-details-address":"Address","entity-details-address2":"Address2","entity-details-additional_info":"Additional Info","entity-details-phone":"Phone","entity-details-email":"Email","fields-to-check":"Fields to check","add-detail":"Add detail","check-all-keys-tooltip":"If enabled, checks the presence of all fields listed in the message and metadata field names within the incoming message and its metadata.","fields-to-check-hint":'Press "Enter" to complete field name input. Multiple field names supported.',"entity-details-list-empty":"At least one detail should be selected.","alarm-status":"Alarm status","alarm-required":"At least one alarm status should be selected.","no-entity-details-matching":"No entity details matching were found.","custom-table-name":"Custom table name","custom-table-name-required":"Table Name is required","custom-table-hint":"Enter the table name without prefix 'cs_tb_'.","message-field":"Message field","message-field-required":"Message field is required.","table-col":"Table column","table-col-required":"Table column is required.","latitude-field-name":"Latitude field name","longitude-field-name":"Longitude field name","latitude-field-name-required":"Latitude field name is required.","longitude-field-name-required":"Longitude field name is required.","fetch-perimeter-info-from-metadata":"Fetch perimeter information from metadata","fetch-perimeter-info-from-metadata-tooltip":"If perimeter type is set to 'Polygon' the value of metadata field '{{perimeterKeyName}}' will be set as perimeter definition without additional parsing of the value. Otherwise, if perimeter type is set to 'Circle' the value of '{{perimeterKeyName}}' metadata field will be parsed to extract 'latitude', 'longitude', 'radius', 'radiusUnit' fields that uses for circle perimeter definition.","perimeter-key-name":"Perimeter key name","perimeter-key-name-hint":"Metadata field name that includes perimeter information.","perimeter-key-name-required":"Perimeter key name is required.","perimeter-circle":"Circle","perimeter-polygon":"Polygon","perimeter-type":"Perimeter type","circle-center-latitude":"Center latitude","circle-center-latitude-required":"Center latitude is required.","circle-center-longitude":"Center longitude","circle-center-longitude-required":"Center longitude is required.","range-unit-meter":"Meter","range-unit-kilometer":"Kilometer","range-unit-foot":"Foot","range-unit-mile":"Mile","range-unit-nautical-mile":"Nautical mile","range-units":"Range units","range-units-required":"Range units is required.",range:"Range","range-required":"Range is required.","polygon-definition":"Polygon definition","polygon-definition-required":"Polygon definition is required.","polygon-definition-hint":"Use the following format for manual definition of polygon: [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]].","min-inside-duration":"Minimal inside duration","min-inside-duration-value-required":"Minimal inside duration is required","min-inside-duration-time-unit":"Minimal inside duration time unit","min-outside-duration":"Minimal outside duration","min-outside-duration-value-required":"Minimal outside duration is required","min-outside-duration-time-unit":"Minimal outside duration time unit","tell-failure-if-absent":"Tell Failure","tell-failure-if-absent-hint":'If at least one selected key doesn\'t exist the outbound message will report "Failure".',"get-latest-value-with-ts":"Fetch timestamp for the latest telemetry values","get-latest-value-with-ts-hint":'If selected, the latest telemetry values will also include timestamp, e.g: "temp": "{"ts":1574329385897, "value":42}"',"use-redis-queue":"Use redis queue for message persistence","ignore-null-strings":"Ignore null strings","ignore-null-strings-hint":"If selected rule node will ignore entity fields with empty value.","trim-redis-queue":"Trim redis queue","redis-queue-max-size":"Redis queue max size","add-metadata-key-values-as-kafka-headers":"Add Message metadata key-value pairs to Kafka record headers","add-metadata-key-values-as-kafka-headers-hint":"If selected, key-value pairs from message metadata will be added to the outgoing records headers as byte arrays with predefined charset encoding.","charset-encoding":"Charset encoding","charset-encoding-required":"Charset encoding is required.","charset-us-ascii":"US-ASCII","charset-iso-8859-1":"ISO-8859-1","charset-utf-8":"UTF-8","charset-utf-16be":"UTF-16BE","charset-utf-16le":"UTF-16LE","charset-utf-16":"UTF-16","select-queue-hint":"The queue name can be selected from a drop-down list or add a custom name.","persist-alarm-rules":"Persist state of alarm rules","fetch-alarm-rules":"Fetch state of alarm rules","input-value-key":"Input value key","input-value-key-required":"Input value key is required.","output-value-key":"Output value key","output-value-key-required":"Output value key is required.","number-of-digits-after-floating-point":"Number of digits after floating point","number-of-digits-after-floating-point-range":"Number of digits after floating point should be in a range from 0 to 15.","failure-if-delta-negative":"Tell Failure if delta is negative","failure-if-delta-negative-tooltip":"Rule node forces failure of message processing if delta value is negative.","use-caching":"Use caching","use-caching-tooltip":'Rule node will cache the value of "{{inputValueKey}}" that arrives from the incoming message to improve performance. Note that the cache will not be updated if you modify the "{{inputValueKey}}" value elsewhere.',"add-time-difference-between-readings":'Add the time difference between "{{inputValueKey}}" readings',"add-time-difference-between-readings-tooltip":'If enabled, the rule node will add the "{{periodValueKey}}" to the outbound message.',"period-value-key":"Period value key","period-value-key-required":"Period value key is required.","general-pattern-hint":"Use ${metadataKey} for value from metadata, $[messageKey] for value from message body.","alarm-severity-pattern-hint":'Use ${metadataKey} for value from metadata, $[messageKey] for value from message body. Alarm severity should be system (CRITICAL, MAJOR etc.)',"output-node-name-hint":"The rule node name corresponds to the relation type of the output message, and it is used to forward messages to other rule nodes in the caller rule chain.","skip-latest-persistence":"Skip latest persistence","use-server-ts":"Use server ts","use-server-ts-hint":"Enable this setting to use the timestamp of the message processing instead of the timestamp from the message. Useful for all sorts of sequential processing if you merge messages from multiple sources (devices, assets, etc).","kv-map-pattern-hint":"All input fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","shared-scope":"Shared scope","server-scope":"Server scope","client-scope":"Client scope","attribute-type":"Attribute","constant-type":"Constant","time-series-type":"Time-series","message-body-type":"Message","message-metadata-type":"Metadata","argument-tile":"Arguments","no-arguments-prompt":"No arguments configured","result-title":"Result","functions-field-input":"Functions","no-option-found":"No option found","argument-source-field-input":"Source","argument-source-field-input-required":"Argument source is required.","argument-key-field-input":"Key","argument-key-field-input-required":"Argument key is required.","constant-value-field-input":"Constant value","constant-value-field-input-required":"Constant value is required.","attribute-scope-field-input":"Attribute scope","attribute-scope-field-input-required":"Attribute scope os required.","default-value-field-input":"Default value","type-field-input":"Type","type-field-input-required":"Type is required.","key-field-input":"Key","add-entity-type":"Add entity type","key-field-input-required":"Key is required.","number-floating-point-field-input":"Number of digits after floating point","number-floating-point-field-input-hint":"Use 0 to convert result to integer","add-to-message-field-input":"Add to message","add-to-metadata-field-input":"Add to metadata","custom-expression-field-input":"Mathematical Expression","custom-expression-field-input-required":"Mathematical expression is required","custom-expression-field-input-hint":"Specify a mathematical expression to evaluate. Default expression demonstrates how to transform Fahrenheit to Celsius","retained-message":"Retained","attributes-mapping":"Attributes mapping","latest-telemetry-mapping":"Latest telemetry mapping","add-mapped-attribute-to":"Add mapped attributes to","add-mapped-latest-telemetry-to":"Add mapped latest telemetry to","add-mapped-fields-to":"Add mapped fields to","add-selected-details-to":"Add selected details to","clear-selected-types":"Clear selected types","clear-selected-details":"Clear selected details","clear-selected-fields":"Clear selected fields","clear-selected-keys":"Clear selected keys","geofence-configuration":"Geofence configuration","coordinate-field-names":"Coordinate field names","coordinate-field-hint":"Rule node tries to retrieve the specified fields from the message. If they are not present, it will look them up in the metadata.","fetch-credentials-to":"Fetch credentials to","add-originator-attributes-to":"Add originator attributes to","originator-attributes":"Originator attributes","fetch-latest-telemetry-with-timestamp":"Fetch latest telemetry with timestamp","fetch-latest-telemetry-with-timestamp-tooltip":'If selected, latest telemetry values will be added to the outbound metadata with timestamp, e.g: "{{latestTsKeyName}}": "{"ts":1574329385897, "value":42}"',"tell-failure":"Tell failure if any of the attributes are missing","tell-failure-tooltip":'If at least one selected key doesn\'t exist the outbound message will report "Failure".',"created-time":"Created time","chip-help":"Press 'Enter' to complete {{inputName}} input. \nPress 'Backspace' to delete {{inputName}}. \nMultiple values supported.",detail:"detail","field-name":"field name","device-profile":"device profile","entity-type":"entity type","message-type":"message type","timeseries-key":"timeseries key",type:"Type","first-name":"First name","last-name":"Last name",label:"Label","originator-fields-mapping":"Originator fields mapping","add-mapped-originator-fields-to":"Add mapped originator fields to",fields:"Fields","skip-empty-fields":"Skip empty fields","skip-empty-fields-tooltip":"Fields with empty values will not be added to the output message/output metadata.","fetch-interval":"Fetch interval","fetch-strategy":"Fetch strategy","fetch-timeseries-from-to":"Fetch timeseries from {{startInterval}} {{startIntervalTimeUnit}} ago to {{endInterval}} {{endIntervalTimeUnit}} ago.","fetch-timeseries-from-to-invalid":'Fetch timeseries invalid ("Interval start" should be less than "Interval end").',"use-metadata-dynamic-interval-tooltip":"If selected, the rule node will use dynamic interval start and end based on the message and metadata patterns.","all-mode-hint":'If selected fetch mode "All" rule node will retrieve telemetry from the fetch interval with configurable query parameters.',"first-mode-hint":'If selected fetch mode "First" rule node will retrieve the closest telemetry to the fetch interval\'s start.',"last-mode-hint":'If selected fetch mode "Last" rule node will retrieve the closest telemetry to the fetch interval\'s end.',ascending:"Ascending",descending:"Descending",min:"Min",max:"Max",average:"Average",sum:"Sum",count:"Count",none:"None","last-level-relation-tooltip":"If selected, the rule node will search related entities only on the level set in the max relation level.","last-level-device-relation-tooltip":"If selected, the rule node will search related devices only on the level set in the max relation level.","data-to-fetch":"Data to fetch","mapping-of-customers-fields":"Mapping of customer's fields","map-fields-required":"All mapping fields are required.",attributes:"Attributes","related-device-attributes":"Related device attributes","add-selected-attributes-to":"Add selected attributes to","device-profiles":"Device profiles","mapping-of-tenant-fields":"Mapping of tenant's fields","add-attribute-key":"Add attribute key","message-template":"Message template","message-template-required":"Message template is required","use-system-slack-settings":"Use system slack settings","slack-api-token":"Slack API token","slack-api-token-required":"Slack API token is required"},"key-val":{key:"Key",value:"Value","see-examples":"See examples.","remove-entry":"Remove entry","remove-mapping-entry":"Remove mapping entry","add-mapping-entry":"Add mapping","add-entry":"Add entry","unique-key-value-pair-error":"'{{valText}}' must be different from the current '{{keyText}}'"},"mail-body-type":{"plain-text":"Plain Text",html:"HTML",dynamic:"Dynamic"}}},!0)}(e)}}e("RuleNodeCoreConfigModule",dr),dr.ɵfac=t.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:dr,deps:[{token:H.TranslateService}],target:t.ɵɵFactoryTarget.NgModule}),dr.ɵmod=t.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.2.9",ngImport:t,type:dr,declarations:[Je],imports:[O,T],exports:[Cn,er,Gn,zn,sr,pr,Je]}),dr.ɵinj=t.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:dr,imports:[O,T,Cn,er,Gn,zn,sr,pr]}),t.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.2.9",ngImport:t,type:dr,decorators:[{type:l,args:[{declarations:[Je],imports:[O,T],exports:[Cn,er,Gn,zn,sr,pr,Je]}]}],ctorParameters:function(){return[{type:H.TranslateService}]}})}}}));//# sourceMappingURL=rulenode-core-config.js.map diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/profile/TbDeviceProfileNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/profile/TbDeviceProfileNodeTest.java index 03a9c17a60..ad23b7492b 100644 --- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/profile/TbDeviceProfileNodeTest.java +++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/profile/TbDeviceProfileNodeTest.java @@ -36,6 +36,7 @@ import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.AlarmApiCallResult; import org.thingsboard.server.common.data.alarm.AlarmInfo; +import org.thingsboard.server.common.data.alarm.AlarmModificationRequest; import org.thingsboard.server.common.data.alarm.AlarmSeverity; import org.thingsboard.server.common.data.device.profile.AlarmCondition; import org.thingsboard.server.common.data.device.profile.AlarmConditionFilter; @@ -219,6 +220,94 @@ public class TbDeviceProfileNodeTest { } + @Test + public void testAlarmSeverityUpdate() throws Exception { + init(); + + DeviceProfile deviceProfile = new DeviceProfile(); + DeviceProfileData deviceProfileData = new DeviceProfileData(); + + AlarmConditionFilter tempFilter = new AlarmConditionFilter(); + tempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature")); + tempFilter.setValueType(EntityKeyValueType.NUMERIC); + NumericFilterPredicate temperaturePredicate = new NumericFilterPredicate(); + temperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER); + temperaturePredicate.setValue(new FilterPredicateValue<>(30.0)); + tempFilter.setPredicate(temperaturePredicate); + AlarmCondition alarmTempCondition = new AlarmCondition(); + alarmTempCondition.setCondition(Collections.singletonList(tempFilter)); + AlarmRule alarmTempRule = new AlarmRule(); + alarmTempRule.setCondition(alarmTempCondition); + + AlarmConditionFilter highTempFilter = new AlarmConditionFilter(); + highTempFilter.setKey(new AlarmConditionFilterKey(AlarmConditionKeyType.TIME_SERIES, "temperature")); + highTempFilter.setValueType(EntityKeyValueType.NUMERIC); + NumericFilterPredicate highTemperaturePredicate = new NumericFilterPredicate(); + highTemperaturePredicate.setOperation(NumericFilterPredicate.NumericOperation.GREATER); + highTemperaturePredicate.setValue(new FilterPredicateValue<>(50.0)); + highTempFilter.setPredicate(highTemperaturePredicate); + AlarmCondition alarmHighTempCondition = new AlarmCondition(); + alarmHighTempCondition.setCondition(Collections.singletonList(highTempFilter)); + AlarmRule alarmHighTempRule = new AlarmRule(); + alarmHighTempRule.setCondition(alarmHighTempCondition); + DeviceProfileAlarm dpa = new DeviceProfileAlarm(); + dpa.setId("highTemperatureAlarmID1"); + dpa.setAlarmType("highTemperatureAlarm1"); + + TreeMap createRules = new TreeMap<>(); + + createRules.put(AlarmSeverity.WARNING, alarmTempRule); + createRules.put(AlarmSeverity.CRITICAL, alarmHighTempRule); + + dpa.setCreateRules(createRules); + + deviceProfileData.setAlarms(Collections.singletonList(dpa)); + deviceProfile.setProfileData(deviceProfileData); + + Mockito.when(cache.get(tenantId, deviceId)).thenReturn(deviceProfile); + Mockito.when(timeseriesService.findLatest(tenantId, deviceId, Collections.singleton("temperature"))) + .thenReturn(Futures.immediateFuture(Collections.emptyList())); + Mockito.when(alarmService.findLatestActiveByOriginatorAndType(tenantId, deviceId, "highTemperatureAlarm1")).thenReturn(null); + registerCreateAlarmMock(alarmService.createAlarm(any()), true); + + TbMsg theMsg = TbMsg.newMsg(TbMsgType.ALARM, deviceId, TbMsgMetaData.EMPTY, TbMsg.EMPTY_STRING); + when(ctx.newMsg(any(), any(TbMsgType.class), any(), any(), any(), Mockito.anyString())).thenReturn(theMsg); + + ObjectNode data = JacksonUtil.newObjectNode(); + data.put("temperature", 42); + TbMsg msg = TbMsg.newMsg(TbMsgType.POST_TELEMETRY_REQUEST, deviceId, TbMsgMetaData.EMPTY, + TbMsgDataType.JSON, JacksonUtil.toString(data), null, null); + node.onMsg(ctx, msg); + verify(ctx).tellSuccess(msg); + verify(ctx).enqueueForTellNext(theMsg, "Alarm Created"); + verify(ctx, Mockito.never()).tellFailure(Mockito.any(), Mockito.any()); + + TbMsg theMsg2 = TbMsg.newMsg(TbMsgType.ALARM, deviceId, TbMsgMetaData.EMPTY, TbMsg.EMPTY_STRING); + when(ctx.newMsg(any(), any(TbMsgType.class), any(), any(), any(), Mockito.anyString())).thenReturn(theMsg2); + + AlarmInfo alarm = new AlarmInfo(new Alarm(new AlarmId(UUID.randomUUID()))); + alarm.setSeverity(AlarmSeverity.CRITICAL); + + Alarm oldAlarm = new Alarm(new AlarmId(UUID.randomUUID())); + oldAlarm.setSeverity(AlarmSeverity.WARNING); + var result = AlarmApiCallResult.builder() + .successful(true) + .created(false) + .modified(true) + .alarm(alarm) + .old(oldAlarm) + .build(); + + when(alarmService.updateAlarm(any())).thenReturn(result); + + data.put("temperature", 52); + TbMsg msg2 = TbMsg.newMsg(TbMsgType.POST_TELEMETRY_REQUEST, deviceId, TbMsgMetaData.EMPTY, + TbMsgDataType.JSON, JacksonUtil.toString(data), null, null); + node.onMsg(ctx, msg2); + verify(ctx).tellSuccess(msg2); + verify(ctx).enqueueForTellNext(theMsg2, "Alarm Severity Updated"); + } + @Test public void testConstantKeyFilterSimple() throws Exception { init(); @@ -1605,9 +1694,9 @@ public class TbDeviceProfileNodeTest { private void registerCreateAlarmMock(AlarmApiCallResult a, boolean created) { when(a).thenAnswer(invocationOnMock -> { -// AlarmCreateOrUpdateActiveRequest request = invocationOnMock.getArgument(0); AlarmInfo alarm = new AlarmInfo(new Alarm(new AlarmId(UUID.randomUUID()))); - alarm.setSeverity(AlarmSeverity.CRITICAL); + AlarmModificationRequest request = invocationOnMock.getArgument(0); + alarm.setSeverity(request.getSeverity()); return AlarmApiCallResult.builder() .successful(true) .created(created) diff --git a/ui-ngx/src/app/core/api/widget-api.models.ts b/ui-ngx/src/app/core/api/widget-api.models.ts index d0de3481ed..5cfc83d8d9 100644 --- a/ui-ngx/src/app/core/api/widget-api.models.ts +++ b/ui-ngx/src/app/core/api/widget-api.models.ts @@ -89,6 +89,7 @@ export interface WidgetActionsApi { handleWidgetAction: ($event: Event, descriptor: WidgetActionDescriptor, entityId?: EntityId, entityName?: string, additionalParams?: any, entityLabel?: string) => void; elementClick: ($event: Event) => void; + cardClick: ($event: Event) => void; getActiveEntityInfo: () => SubscriptionEntityInfo; openDashboardStateInSeparateDialog: (targetDashboardStateId: string, params?: StateParams, dialogTitle?: string, hideDashboardToolbar?: boolean, dialogWidth?: number, dialogHeight?: number) => void; diff --git a/ui-ngx/src/app/core/core.module.ts b/ui-ngx/src/app/core/core.module.ts index 837d530fbf..bc3d4874a4 100644 --- a/ui-ngx/src/app/core/core.module.ts +++ b/ui-ngx/src/app/core/core.module.ts @@ -34,7 +34,7 @@ import { import { TranslateHttpLoader } from '@ngx-translate/http-loader'; import { TbMissingTranslationHandler } from './translate/missing-translate-handler'; import { MatButtonModule } from '@angular/material/button'; -import { MatDialogModule } from '@angular/material/dialog'; +import { MAT_DIALOG_DEFAULT_OPTIONS, MatDialogConfig, MatDialogModule } from '@angular/material/dialog'; import { MatSnackBarModule } from '@angular/material/snack-bar'; import { FlexLayoutModule } from '@angular/flex-layout'; import { TranslateDefaultCompiler } from '@core/translate/translate-default-compiler'; @@ -100,6 +100,13 @@ export function HttpLoaderFactory(http: HttpClient) { useClass: GlobalHttpInterceptor, multi: true }, + { + provide: MAT_DIALOG_DEFAULT_OPTIONS, + useValue: { + ...new MatDialogConfig(), + restoreFocus: false + } + }, WINDOW_PROVIDERS ], exports: [] diff --git a/ui-ngx/src/app/core/http/device.service.ts b/ui-ngx/src/app/core/http/device.service.ts index 137421e93d..801bdeb8c3 100644 --- a/ui-ngx/src/app/core/http/device.service.ts +++ b/ui-ngx/src/app/core/http/device.service.ts @@ -27,7 +27,8 @@ import { DeviceCredentials, DeviceInfo, DeviceInfoQuery, - DeviceSearchQuery, PublishLaunchCommand, + DeviceSearchQuery, + PublishLaunchCommand, PublishTelemetryCommand } from '@app/shared/models/device.models'; import { EntitySubtype } from '@app/shared/models/entity-type.models'; diff --git a/ui-ngx/src/app/core/http/edge.service.ts b/ui-ngx/src/app/core/http/edge.service.ts index 078ada56aa..aeb4f7d16b 100644 --- a/ui-ngx/src/app/core/http/edge.service.ts +++ b/ui-ngx/src/app/core/http/edge.service.ts @@ -114,7 +114,7 @@ export class EdgeService { return this.http.post('/api/edge/bulk_import', entitiesData, defaultHttpOptionsFromConfig(config)); } - public getEdgeDockerInstallInstructions(edgeId: string, config?: RequestConfig): Observable { - return this.http.get(`/api/edge/instructions/${edgeId}`, defaultHttpOptionsFromConfig(config)); + public getEdgeInstallInstructions(edgeId: string, method: string = 'ubuntu', config?: RequestConfig): Observable { + return this.http.get(`/api/edge/instructions/${edgeId}/${method}`, defaultHttpOptionsFromConfig(config)); } } diff --git a/ui-ngx/src/app/core/services/dashboard-utils.service.ts b/ui-ngx/src/app/core/services/dashboard-utils.service.ts index bb4c738516..0e8cba3f80 100644 --- a/ui-ngx/src/app/core/services/dashboard-utils.service.ts +++ b/ui-ngx/src/app/core/services/dashboard-utils.service.ts @@ -397,6 +397,7 @@ export class DashboardUtilsService { const newDatasource = deepClone(datasource); if (newDatasource.type === DatasourceType.function) { newDatasource.type = DatasourceType.entity; + newDatasource.name = ''; if (widgetTypeDescriptor.hasBasicMode && config.configMode === WidgetConfigMode.basic) { newDatasource.type = DatasourceType.device; } diff --git a/ui-ngx/src/app/core/utils.ts b/ui-ngx/src/app/core/utils.ts index 200f8963c1..b67609c47e 100644 --- a/ui-ngx/src/app/core/utils.ts +++ b/ui-ngx/src/app/core/utils.ts @@ -812,3 +812,8 @@ export const getOS = (): string => { return os; }; + + +export const camelCase = (str: string): string => { + return _.camelCase(str); +}; diff --git a/ui-ngx/src/app/modules/home/components/attribute/delete-timeseries-panel.component.scss b/ui-ngx/src/app/modules/home/components/attribute/delete-timeseries-panel.component.scss index c9a0e527f7..b0c0ec0621 100644 --- a/ui-ngx/src/app/modules/home/components/attribute/delete-timeseries-panel.component.scss +++ b/ui-ngx/src/app/modules/home/components/attribute/delete-timeseries-panel.component.scss @@ -23,6 +23,7 @@ } .tb-form-settings { + display: flex; flex-direction: column; gap: 16px; padding-top: 0; diff --git a/ui-ngx/src/app/modules/home/components/dashboard-page/dashboard-page.component.ts b/ui-ngx/src/app/modules/home/components/dashboard-page/dashboard-page.component.ts index 7b84dbd6d0..a9ce196203 100644 --- a/ui-ngx/src/app/modules/home/components/dashboard-page/dashboard-page.component.ts +++ b/ui-ngx/src/app/modules/home/components/dashboard-page/dashboard-page.component.ts @@ -351,7 +351,8 @@ export class DashboardPageComponent extends PageComponent implements IDashboardC private viewContainerRef: ViewContainerRef, private cd: ChangeDetectorRef, private sanitizer: DomSanitizer, - public elRef: ElementRef) { + public elRef: ElementRef, + private injector: Injector) { super(store); if (isDefinedAndNotNull(embeddedValue)) { this.embedded = embeddedValue; @@ -1177,6 +1178,7 @@ export class DashboardPageComponent extends PageComponent implements IDashboardC disableClose: true, panelClass: ['tb-dialog', 'tb-fullscreen-dialog'], maxWidth: '95vw', + injector: this.injector, data: { dashboard: this.dashboard, aliasController: this.dashboardCtx.aliasController, diff --git a/ui-ngx/src/app/modules/home/components/import-export/import-export.service.ts b/ui-ngx/src/app/modules/home/components/import-export/import-export.service.ts index 7ffcaae8e3..e91375e75e 100644 --- a/ui-ngx/src/app/modules/home/components/import-export/import-export.service.ts +++ b/ui-ngx/src/app/modules/home/components/import-export/import-export.service.ts @@ -398,7 +398,9 @@ export class ImportExportService { const widgetTypesDetails = widgetsBundleItem.widgetTypes; const saveWidgetTypesObservables: Array> = []; for (const widgetTypeDetails of widgetTypesDetails) { - saveWidgetTypesObservables.push(this.widgetService.saveImportedWidgetTypeDetails(widgetTypeDetails)); + saveWidgetTypesObservables.push( + this.widgetService.saveImportedWidgetTypeDetails(this.prepareWidgetType(widgetTypeDetails, savedWidgetsBundle)) + ); } widgetTypesObservable = forkJoin(saveWidgetTypesObservables); } else { @@ -432,6 +434,15 @@ export class ImportExportService { ); } + private prepareWidgetType(widgetType: WidgetTypeDetails & {alias?: string}, widgetsBundle: WidgetsBundle): WidgetTypeDetails { + if (!widgetType.fqn) { + widgetType.fqn = `${widgetsBundle.alias}.${widgetType.alias + ? widgetType.alias + : widgetType.name.toLowerCase().replace(/\W/g, '_')}`; + } + return widgetType; + } + public bulkImportEntities(entitiesData: BulkImportRequest, entityType: EntityType, config?: RequestConfig): Observable { switch (entityType) { case EntityType.DEVICE: diff --git a/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.html b/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.html index 0a0a5e3cdb..fa622c30bf 100644 --- a/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.html +++ b/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.html @@ -24,24 +24,32 @@ -
-
-
- - - -
+ +
+
+
+ + + +
+
+
+ +
+
-
- -
- -
+ empty notification notification.no-notifications-yet + +
+ +
notification.loading-notifications
+
+
diff --git a/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.ts b/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.ts index 5e94289055..b2a9009a57 100644 --- a/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.ts +++ b/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.ts @@ -22,7 +22,7 @@ import { AppState } from '@core/core.state'; import { Notification, NotificationRequest } from '@shared/models/notification.models'; import { NotificationWebsocketService } from '@core/ws/notification-websocket.service'; import { BehaviorSubject, Observable, ReplaySubject, Subscription } from 'rxjs'; -import { share, tap } from 'rxjs/operators'; +import { map, share, tap } from 'rxjs/operators'; import { Router } from '@angular/router'; import { NotificationSubscriber } from '@shared/models/websocket/notification-ws.models'; @@ -46,6 +46,7 @@ export class ShowNotificationPopoverComponent extends PageComponent implements O private notificationCountSubscriber: Subscription; notifications$: Observable; + loadNotification = false; constructor(protected store: Store, private notificationWsService: NotificationWebsocketService, @@ -58,6 +59,13 @@ export class ShowNotificationPopoverComponent extends PageComponent implements O ngOnInit() { this.notificationSubscriber = NotificationSubscriber.createNotificationsSubscription(this.notificationWsService, this.zone, 6); this.notifications$ = this.notificationSubscriber.notifications$.pipe( + map(value => { + if (Array.isArray(value)) { + this.loadNotification = true; + return value; + } + return []; + }), share({ connector: () => new ReplaySubject(1) }), diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/alarm/alarm-count-basic-config.component.html b/ui-ngx/src/app/modules/home/components/widget/config/basic/alarm/alarm-count-basic-config.component.html new file mode 100644 index 0000000000..d43a067e3d --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/alarm/alarm-count-basic-config.component.html @@ -0,0 +1,61 @@ + + +
+
+
alarm.filter
+ +
+ +
+
+
widget-config.appearance
+ +
+
+
widget-config.card-appearance
+
+
{{ 'widgets.background.background' | translate }}
+ + +
+
+
widget-config.show-card-buttons
+ + {{ 'fullscreen.fullscreen' | translate }} + +
+
+
{{ 'widget-config.card-border-radius' | translate }}
+ + + +
+
+ + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/alarm/alarm-count-basic-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/alarm/alarm-count-basic-config.component.ts new file mode 100644 index 0000000000..782d2d4547 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/alarm/alarm-count-basic-config.component.ts @@ -0,0 +1,107 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// 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 +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// 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 { Component } from '@angular/core'; +import { 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 { DatasourceType, WidgetConfig, widgetType, } from '@shared/models/widget.models'; +import { WidgetConfigComponent } from '@home/components/widget/widget-config.component'; +import { DataKeyType } from '@shared/models/telemetry/telemetry.models'; +import { isUndefined } from '@core/utils'; +import { getAlarmFilterConfig, setAlarmFilterConfig } from '@shared/models/widget-settings.models'; +import { UtilsService } from '@core/services/utils.service'; +import { AlarmSearchStatus } from '@shared/models/alarm.models'; +import { + countDefaultSettings, + CountWidgetSettings +} from '@home/components/widget/lib/count/count-widget.models'; + +@Component({ + selector: 'tb-alarm-count-basic-config', + templateUrl: './alarm-count-basic-config.component.html', + styleUrls: ['../basic-config.scss'] +}) +export class AlarmCountBasicConfigComponent extends BasicWidgetConfigComponent { + + alarmSearchStatus = AlarmSearchStatus; + + alarmCountWidgetConfigForm: UntypedFormGroup; + + constructor(protected store: Store, + protected widgetConfigComponent: WidgetConfigComponent, + private utils: UtilsService, + private fb: UntypedFormBuilder) { + super(store, widgetConfigComponent); + } + + protected configForm(): UntypedFormGroup { + return this.alarmCountWidgetConfigForm; + } + + protected setupDefaults(configData: WidgetConfigComponentData) { + let datasources = configData.config.datasources; + if (!datasources || !datasources.length) { + datasources = [{}]; + configData.config.datasources = datasources; + } + datasources[0].type = DatasourceType.alarmCount; + datasources[0].alarmFilterConfig = {statusList: [AlarmSearchStatus.ACTIVE]}; + datasources[0].dataKeys = [this.utils.createKey({name: 'count'}, DataKeyType.count)]; + } + + protected onConfigSet(configData: WidgetConfigComponentData) { + const settings: CountWidgetSettings = {...countDefaultSettings(true), ...(configData.config.settings || {})}; + this.alarmCountWidgetConfigForm = this.fb.group({ + alarmFilterConfig: [getAlarmFilterConfig(configData.config.datasources), []], + + settings: [settings, []], + + backgroundColor: [configData.config.backgroundColor, []], + cardButtons: [this.getCardButtons(configData.config), []], + borderRadius: [configData.config.borderRadius, []], + + actions: [configData.config.actions || {}, []] + }); + } + + protected prepareOutputConfig(config: any): WidgetConfigComponentData { + setAlarmFilterConfig(config.alarmFilterConfig, this.widgetConfig.config.datasources); + + this.widgetConfig.config.settings = {...(this.widgetConfig.config.settings || {}), ...config.settings}; + + 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; + } + + private getCardButtons(config: WidgetConfig): string[] { + const buttons: string[] = []; + if (isUndefined(config.enableFullscreen) || config.enableFullscreen) { + buttons.push('fullscreen'); + } + return buttons; + } + + private setCardButtons(buttons: string[], config: WidgetConfig) { + config.enableFullscreen = buttons.includes('fullscreen'); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/alarm/alarms-table-basic-config.component.html b/ui-ngx/src/app/modules/home/components/widget/config/basic/alarm/alarms-table-basic-config.component.html index e343ac9b81..d2d9fc5e8f 100644 --- a/ui-ngx/src/app/modules/home/components/widget/config/basic/alarm/alarms-table-basic-config.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/alarm/alarms-table-basic-config.component.html @@ -49,7 +49,7 @@ formControlName="columns">
-
widget-config.card-appearance
+
widget-config.appearance
{{ 'widget-config.card-title' | translate }} @@ -85,6 +85,29 @@
+ +
+
widgets.table.table-buttons
+
+ + {{ 'widgets.table.display-alarm-activity' | translate }} + + + {{ 'widgets.table.display-alarm-details' | translate }} + + + {{ 'widgets.table.allow-alarms-assign' | translate }} + + + {{ 'widgets.table.allow-alarms-ack' | translate }} + + + {{ 'widgets.table.allow-alarms-clear' | translate }} + +
+
+
+
widget-config.card-appearance
widget-config.show-card-buttons
diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/alarm/alarms-table-basic-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/alarm/alarms-table-basic-config.component.ts index 6c25585f76..4f61aea583 100644 --- a/ui-ngx/src/app/modules/home/components/widget/config/basic/alarm/alarms-table-basic-config.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/alarm/alarms-table-basic-config.component.ts @@ -69,6 +69,13 @@ export class AlarmsTableBasicConfigComponent extends BasicWidgetConfigComponent showTitleIcon: [configData.config.showTitleIcon, []], titleIcon: [configData.config.titleIcon, []], iconColor: [configData.config.iconColor, []], + + displayActivity: [configData.config.settings?.displayActivity, []], + displayDetails: [configData.config.settings?.displayDetails, []], + allowAssign: [configData.config.settings?.allowAssign, []], + allowAcknowledgment: [configData.config.settings?.allowAcknowledgment, []], + allowClear: [configData.config.settings?.allowClear, []], + cardButtons: [this.getCardButtons(configData.config), []], color: [configData.config.color, []], backgroundColor: [configData.config.backgroundColor, []], @@ -84,7 +91,14 @@ export class AlarmsTableBasicConfigComponent extends BasicWidgetConfigComponent this.widgetConfig.config.actions = config.actions; this.widgetConfig.config.showTitle = config.showTitle; this.widgetConfig.config.settings = this.widgetConfig.config.settings || {}; + this.widgetConfig.config.settings.alarmsTitle = config.title; + this.widgetConfig.config.settings.displayActivity = config.displayActivity; + this.widgetConfig.config.settings.displayDetails = config.displayDetails; + this.widgetConfig.config.settings.allowAssign = config.allowAssign; + this.widgetConfig.config.settings.allowAcknowledgment = config.allowAcknowledgment; + this.widgetConfig.config.settings.allowClear = config.allowClear; + this.widgetConfig.config.titleFont = config.titleFont; this.widgetConfig.config.titleColor = config.titleColor; this.widgetConfig.config.showTitleIcon = config.showTitleIcon; 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 7c4168a786..41115904b3 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 @@ -27,7 +27,7 @@ import { } from '@home/components/widget/config/basic/common/widget-actions-panel.component'; import { EntitiesTableBasicConfigComponent -} from '@home/components/widget/config/basic/cards/entities-table-basic-config.component'; +} from '@home/components/widget/config/basic/entity/entities-table-basic-config.component'; import { DataKeysPanelComponent } from '@home/components/widget/config/basic/common/data-keys-panel.component'; import { DataKeyRowComponent } from '@home/components/widget/config/basic/common/data-key-row.component'; import { @@ -49,6 +49,15 @@ import { import { AggregatedDataKeysPanelComponent } from '@home/components/widget/config/basic/cards/aggregated-data-keys-panel.component'; +import { + AlarmCountBasicConfigComponent +} from '@home/components/widget/config/basic/alarm/alarm-count-basic-config.component'; +import { + EntityCountBasicConfigComponent +} from '@home/components/widget/config/basic/entity/entity-count-basic-config.component'; +import { + BatteryLevelBasicConfigComponent +} from '@home/components/widget/config/basic/indicator/battery-level-basic-config.component'; @NgModule({ declarations: [ @@ -63,7 +72,10 @@ import { AggregatedDataKeyRowComponent, AggregatedDataKeysPanelComponent, DataKeyRowComponent, - DataKeysPanelComponent + DataKeysPanelComponent, + AlarmCountBasicConfigComponent, + EntityCountBasicConfigComponent, + BatteryLevelBasicConfigComponent ], imports: [ CommonModule, @@ -82,7 +94,10 @@ import { AggregatedDataKeyRowComponent, AggregatedDataKeysPanelComponent, DataKeyRowComponent, - DataKeysPanelComponent + DataKeysPanelComponent, + AlarmCountBasicConfigComponent, + EntityCountBasicConfigComponent, + BatteryLevelBasicConfigComponent ] }) export class BasicWidgetConfigModule { @@ -95,5 +110,8 @@ export const basicWidgetConfigComponentsMap: {[key: string]: Type + + + +
+
widget-config.appearance
+ +
+
+
widget-config.card-appearance
+
+
{{ 'widgets.background.background' | translate }}
+ + +
+
+
widget-config.show-card-buttons
+ + {{ 'fullscreen.fullscreen' | translate }} + +
+
+
{{ 'widget-config.card-border-radius' | translate }}
+ + + +
+
+ + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/entity/entity-count-basic-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/entity/entity-count-basic-config.component.ts new file mode 100644 index 0000000000..c18153ac50 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/entity/entity-count-basic-config.component.ts @@ -0,0 +1,98 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// 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 +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// 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 { Component } from '@angular/core'; +import { UntypedFormBuilder, UntypedFormGroup } 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 { 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 { isUndefined } from '@core/utils'; +import { UtilsService } from '@core/services/utils.service'; +import { countDefaultSettings, CountWidgetSettings } from '@home/components/widget/lib/count/count-widget.models'; + +@Component({ + selector: 'tb-entity-count-basic-config', + templateUrl: './entity-count-basic-config.component.html', + styleUrls: ['../basic-config.scss'] +}) +export class EntityCountBasicConfigComponent extends BasicWidgetConfigComponent { + + entityCountWidgetConfigForm: UntypedFormGroup; + + constructor(protected store: Store, + protected widgetConfigComponent: WidgetConfigComponent, + private utils: UtilsService, + private fb: UntypedFormBuilder) { + super(store, widgetConfigComponent); + } + + protected configForm(): UntypedFormGroup { + return this.entityCountWidgetConfigForm; + } + + protected setupDefaults(configData: WidgetConfigComponentData) { + let datasources = configData.config.datasources; + if (!datasources || !datasources.length) { + datasources = [{}]; + configData.config.datasources = datasources; + } + datasources[0].type = DatasourceType.entityCount; + datasources[0].dataKeys = [this.utils.createKey({name: 'count'}, DataKeyType.count)]; + } + + protected onConfigSet(configData: WidgetConfigComponentData) { + const settings: CountWidgetSettings = {...countDefaultSettings(false), ...(configData.config.settings || {})}; + this.entityCountWidgetConfigForm = this.fb.group({ + datasources: [configData.config.datasources, []], + settings: [settings, []], + + backgroundColor: [configData.config.backgroundColor, []], + cardButtons: [this.getCardButtons(configData.config), []], + borderRadius: [configData.config.borderRadius, []], + + actions: [configData.config.actions || {}, []] + }); + } + + protected prepareOutputConfig(config: any): WidgetConfigComponentData { + this.widgetConfig.config.datasources = config.datasources; + + this.widgetConfig.config.settings = {...(this.widgetConfig.config.settings || {}), ...config.settings}; + + 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; + } + + private getCardButtons(config: WidgetConfig): string[] { + const buttons: string[] = []; + if (isUndefined(config.enableFullscreen) || config.enableFullscreen) { + buttons.push('fullscreen'); + } + return buttons; + } + + private setCardButtons(buttons: string[], config: WidgetConfig) { + config.enableFullscreen = buttons.includes('fullscreen'); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/indicator/battery-level-basic-config.component.html b/ui-ngx/src/app/modules/home/components/widget/config/basic/indicator/battery-level-basic-config.component.html new file mode 100644 index 0000000000..5b238435b6 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/indicator/battery-level-basic-config.component.html @@ -0,0 +1,129 @@ + + + + + + +
+
widget-config.appearance
+ + + {{ batteryLevelLayoutTranslationMap.get(layout) | translate }} + + +
+ + {{ 'widget-config.title' | translate }} + +
+ + + + + + + +
+
+
+ + {{ 'widgets.battery-level.icon' | translate }} + +
+ + + + + + + + +
+
+
+ + {{ 'widgets.battery-level.value' | translate }} + +
+ + {{ 'widgets.battery-level.auto-scale' | translate }} + + + + + +
+
+
+
{{ 'widgets.battery-level.battery-level-color' | translate }}
+ + +
+
+
{{ 'widgets.battery-level.battery-shape-color' | translate }}
+ + +
+
+
{{ 'widgets.background.background' | translate }}
+ + +
+
+
widget-config.show-card-buttons
+ + {{ 'fullscreen.fullscreen' | translate }} + +
+
+
{{ 'widget-config.card-border-radius' | translate }}
+ + + +
+
+ + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/indicator/battery-level-basic-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/indicator/battery-level-basic-config.component.ts new file mode 100644 index 0000000000..482a8dd2c3 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/indicator/battery-level-basic-config.component.ts @@ -0,0 +1,221 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// 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 +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// 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 { Component, Injector } from '@angular/core'; +import { 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 { + datasourcesHasAggregation, + datasourcesHasOnlyComparisonAggregation, + 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, isUndefined } from '@core/utils'; +import { cssSizeToStrSize, resolveCssSize } from '@shared/models/widget-settings.models'; +import { + batteryLevelDefaultSettings, + batteryLevelLayoutImages, + batteryLevelLayouts, + batteryLevelLayoutTranslations, + BatteryLevelWidgetSettings +} from '@home/components/widget/lib/indicator/battery-level-widget.models'; + +@Component({ + selector: 'tb-battery-level-basic-config', + templateUrl: './battery-level-basic-config.component.html', + styleUrls: ['../basic-config.scss'] +}) +export class BatteryLevelBasicConfigComponent extends BasicWidgetConfigComponent { + + public get displayTimewindowConfig(): boolean { + const datasources = this.batteryLevelWidgetConfigForm.get('datasources').value; + return datasourcesHasAggregation(datasources); + } + + public onlyHistoryTimewindow(): boolean { + const datasources = this.batteryLevelWidgetConfigForm.get('datasources').value; + return datasourcesHasOnlyComparisonAggregation(datasources); + } + + batteryLevelLayouts = batteryLevelLayouts; + + batteryLevelLayoutTranslationMap = batteryLevelLayoutTranslations; + batteryLevelLayoutImageMap = batteryLevelLayoutImages; + + batteryLevelWidgetConfigForm: UntypedFormGroup; + + valuePreviewFn = this._valuePreviewFn.bind(this); + + constructor(protected store: Store, + protected widgetConfigComponent: WidgetConfigComponent, + private $injector: Injector, + private fb: UntypedFormBuilder) { + super(store, widgetConfigComponent); + } + + protected configForm(): UntypedFormGroup { + return this.batteryLevelWidgetConfigForm; + } + + protected setupDefaults(configData: WidgetConfigComponentData) { + this.setupDefaultDatasource(configData, [{ name: 'batteryLevel', label: 'batteryLevel', type: DataKeyType.timeseries }]); + } + + protected onConfigSet(configData: WidgetConfigComponentData) { + const settings: BatteryLevelWidgetSettings = {...batteryLevelDefaultSettings, ...(configData.config.settings || {})}; + const iconSize = resolveCssSize(configData.config.iconSize); + this.batteryLevelWidgetConfigForm = this.fb.group({ + timewindowConfig: [getTimewindowConfig(configData.config), []], + datasources: [configData.config.datasources, []], + + layout: [settings.layout, []], + + showTitle: [configData.config.showTitle, []], + title: [configData.config.title, []], + titleFont: [configData.config.titleFont, []], + titleColor: [configData.config.titleColor, []], + + showIcon: [configData.config.showTitleIcon, []], + iconSize: [iconSize[0], [Validators.min(0)]], + iconSizeUnit: [iconSize[1], []], + icon: [configData.config.titleIcon, []], + iconColor: [configData.config.iconColor, []], + + showValue: [settings.showValue, []], + autoScaleValueSize: [settings.autoScaleValueSize, []], + valueFont: [settings.valueFont, []], + valueColor: [settings.valueColor, []], + + batteryLevelColor: [settings.batteryLevelColor, []], + batteryShapeColor: [settings.batteryShapeColor, []], + + background: [settings.background, []], + + cardButtons: [this.getCardButtons(configData.config), []], + borderRadius: [configData.config.borderRadius, []], + + actions: [configData.config.actions || {}, []] + }); + } + + protected prepareOutputConfig(config: any): WidgetConfigComponentData { + setTimewindowConfig(this.widgetConfig.config, config.timewindowConfig); + this.widgetConfig.config.datasources = config.datasources; + + 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.showIcon; + this.widgetConfig.config.iconSize = cssSizeToStrSize(config.iconSize, config.iconSizeUnit); + this.widgetConfig.config.titleIcon = config.icon; + this.widgetConfig.config.iconColor = config.iconColor; + + this.widgetConfig.config.settings = this.widgetConfig.config.settings || {}; + + this.widgetConfig.config.settings.layout = config.layout; + + this.widgetConfig.config.settings.showValue = config.showValue; + this.widgetConfig.config.settings.autoScaleValueSize = config.autoScaleValueSize === true; + this.widgetConfig.config.settings.valueFont = config.valueFont; + this.widgetConfig.config.settings.valueColor = config.valueColor; + + this.widgetConfig.config.settings.batteryLevelColor = config.batteryLevelColor; + this.widgetConfig.config.settings.batteryShapeColor = config.batteryShapeColor; + + this.widgetConfig.config.settings.background = config.background; + + 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 ['showTitle', 'showIcon', 'showValue']; + } + + protected updateValidators(emitEvent: boolean, trigger?: string) { + const showTitle: boolean = this.batteryLevelWidgetConfigForm.get('showTitle').value; + const showIcon: boolean = this.batteryLevelWidgetConfigForm.get('showIcon').value; + const showValue: boolean = this.batteryLevelWidgetConfigForm.get('showValue').value; + + if (showTitle) { + this.batteryLevelWidgetConfigForm.get('title').enable(); + this.batteryLevelWidgetConfigForm.get('titleFont').enable(); + this.batteryLevelWidgetConfigForm.get('titleColor').enable(); + this.batteryLevelWidgetConfigForm.get('showIcon').enable({emitEvent: false}); + if (showIcon) { + this.batteryLevelWidgetConfigForm.get('iconSize').enable(); + this.batteryLevelWidgetConfigForm.get('iconSizeUnit').enable(); + this.batteryLevelWidgetConfigForm.get('icon').enable(); + this.batteryLevelWidgetConfigForm.get('iconColor').enable(); + } else { + this.batteryLevelWidgetConfigForm.get('iconSize').disable(); + this.batteryLevelWidgetConfigForm.get('iconSizeUnit').disable(); + this.batteryLevelWidgetConfigForm.get('icon').disable(); + this.batteryLevelWidgetConfigForm.get('iconColor').disable(); + } + } else { + this.batteryLevelWidgetConfigForm.get('title').disable(); + this.batteryLevelWidgetConfigForm.get('titleFont').disable(); + this.batteryLevelWidgetConfigForm.get('titleColor').disable(); + this.batteryLevelWidgetConfigForm.get('showIcon').disable({emitEvent: false}); + this.batteryLevelWidgetConfigForm.get('iconSize').disable(); + this.batteryLevelWidgetConfigForm.get('iconSizeUnit').disable(); + this.batteryLevelWidgetConfigForm.get('icon').disable(); + this.batteryLevelWidgetConfigForm.get('iconColor').disable(); + } + + if (showValue) { + this.batteryLevelWidgetConfigForm.get('autoScaleValueSize').enable(); + this.batteryLevelWidgetConfigForm.get('valueFont').enable(); + this.batteryLevelWidgetConfigForm.get('valueColor').enable(); + } else { + this.batteryLevelWidgetConfigForm.get('autoScaleValueSize').disable(); + this.batteryLevelWidgetConfigForm.get('valueFont').disable(); + this.batteryLevelWidgetConfigForm.get('valueColor').disable(); + } + } + + private getCardButtons(config: WidgetConfig): string[] { + const buttons: string[] = []; + if (isUndefined(config.enableFullscreen) || config.enableFullscreen) { + buttons.push('fullscreen'); + } + return buttons; + } + + private setCardButtons(buttons: string[], config: WidgetConfig) { + config.enableFullscreen = buttons.includes('fullscreen'); + } + + private _valuePreviewFn(): string { + const units: string = this.widgetConfig.config.units; + const decimals: number = this.widgetConfig.config.decimals; + return formatValue(55, decimals, units, true); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/config/datasource.component.html b/ui-ngx/src/app/modules/home/components/widget/config/datasource.component.html index 7f816e4593..a8c26dce3f 100644 --- a/ui-ngx/src/app/modules/home/components/widget/config/datasource.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/config/datasource.component.html @@ -26,7 +26,7 @@
- + datasource.label @@ -54,7 +54,7 @@ formControlName="entityAliasId" [callbacks]="entityAliasSelectCallbacks"> -
{{ 'widget-config.timeseries-key-error' | translate }}
- {{ 'device.device' | translate }} {{ 'entity.entity-alias' | translate }} diff --git a/ui-ngx/src/app/modules/home/components/widget/config/datasources.component.ts b/ui-ngx/src/app/modules/home/components/widget/config/datasources.component.ts index adc7eb1019..849283f8d2 100644 --- a/ui-ngx/src/app/modules/home/components/widget/config/datasources.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/config/datasources.component.ts @@ -93,6 +93,18 @@ export class DatasourcesComponent implements ControlValueAccessor, OnInit, Valid @Input() disabled: boolean; + @Input() + @coerceBoolean() + hideDatasourcesMode = false; + + @Input() + @coerceBoolean() + hideDatasourceLabel = false; + + @Input() + @coerceBoolean() + displayDatasourceFilterForBasicMode = false; + @Input() @coerceBoolean() hideDataKeyLabel = false; @@ -285,7 +297,8 @@ export class DatasourcesComponent implements ControlValueAccessor, OnInit, Valid if (datasources && datasources.length) { datasourcesMode = datasources[0].type; } - if (datasourcesMode !== DatasourceType.device && datasourcesMode !== DatasourceType.entity) { + if (!this.hideDatasourcesMode + && datasourcesMode !== DatasourceType.device && datasourcesMode !== DatasourceType.entity) { datasourcesMode = DatasourceType.device; } return datasourcesMode; diff --git a/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.service.ts b/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.service.ts index 2428f5cdc3..428dc575d4 100644 --- a/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.service.ts +++ b/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.service.ts @@ -17,8 +17,6 @@ import { Inject, Injectable, Type } from '@angular/core'; import { Observable } from 'rxjs'; import { MatDialog, MatDialogConfig } from '@angular/material/dialog'; -import { TranslateService } from '@ngx-translate/core'; -import { AuthService } from '@core/auth/auth.service'; import { DynamicComponentFactoryService } from '@core/services/dynamic-component-factory.service'; import { CommonModule } from '@angular/common'; import { mergeMap, tap } from 'rxjs/operators'; @@ -28,7 +26,11 @@ import { CustomDialogContainerData } from '@home/components/widget/dialog/custom-dialog-container.component'; import { SHARED_MODULE_TOKEN } from '@shared/components/tokens'; -import { HOME_COMPONENTS_MODULE_TOKEN, SHARED_HOME_COMPONENTS_MODULE_TOKEN } from '@home/components/tokens'; +import { + HOME_COMPONENTS_MODULE_TOKEN, + SHARED_HOME_COMPONENTS_MODULE_TOKEN, + WIDGET_COMPONENTS_MODULE_TOKEN +} from '@home/components/tokens'; @Injectable() export class CustomDialogService { @@ -36,12 +38,11 @@ export class CustomDialogService { private customModules: Array>; constructor( - private translate: TranslateService, - private authService: AuthService, private dynamicComponentFactoryService: DynamicComponentFactoryService, @Inject(SHARED_MODULE_TOKEN) private sharedModule: Type, @Inject(SHARED_HOME_COMPONENTS_MODULE_TOKEN) private sharedHomeComponentsModule: Type, @Inject(HOME_COMPONENTS_MODULE_TOKEN) private homeComponentsModule: Type, + @Inject(WIDGET_COMPONENTS_MODULE_TOKEN) private widgetComponentsModule: Type, public dialog: MatDialog ) { } @@ -52,7 +53,8 @@ export class CustomDialogService { customDialog(template: string, controller: (instance: CustomDialogComponent) => void, data?: any, config?: MatDialogConfig): Observable { - const modules = [this.sharedModule, CommonModule, this.sharedHomeComponentsModule, this.homeComponentsModule]; + const modules = [this.sharedModule, CommonModule, this.sharedHomeComponentsModule, this.homeComponentsModule, + this.widgetComponentsModule]; if (Array.isArray(this.customModules)) { modules.push(...this.customModules); } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/alarm/alarms-table-widget.component.html similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/alarm/alarms-table-widget.component.html diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/alarm/alarms-table-widget.component.scss similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.scss rename to ui-ngx/src/app/modules/home/components/widget/lib/alarm/alarms-table-widget.component.scss diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/alarm/alarms-table-widget.component.ts similarity index 99% rename from ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/alarm/alarms-table-widget.component.ts index 58c3804c19..034c131769 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/alarm/alarms-table-widget.component.ts @@ -149,7 +149,7 @@ interface AlarmWidgetActionDescriptor extends TableCellButtonActionDescriptor { @Component({ selector: 'tb-alarms-table-widget', templateUrl: './alarms-table-widget.component.html', - styleUrls: ['./alarms-table-widget.component.scss', './table-widget.scss'] + styleUrls: ['./alarms-table-widget.component.scss', './../table-widget.scss'] }) export class AlarmsTableWidgetComponent extends PageComponent implements OnInit, OnDestroy, AfterViewInit { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/count/count-widget.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/count/count-widget.component.html new file mode 100644 index 0000000000..a3d70ed08b --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/count/count-widget.component.html @@ -0,0 +1,37 @@ + +
+
+ +
+
+
+
+
+ {{ icon }} +
+
+
{{ label }}
+
+
{{ valueText }}
+
+
+
+ chevron_right +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/count/count-widget.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/count/count-widget.component.scss new file mode 100644 index 0000000000..8deb211897 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/count/count-widget.component.scss @@ -0,0 +1,80 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ +:host { + .tb-count-panel { + width: 100%; + height: 100%; + display: flex; + flex-direction: row; + align-items: center; + gap: 12px; + padding: 12px; + &.tb-count-pointer { + cursor: pointer; + } + .tb-count-panel-column { + flex: 1; + display: flex; + flex-direction: column; + gap: 12px; + } + .tb-count-panel-row { + flex: 1; + display: flex; + flex-direction: row; + align-items: center; + gap: 12px; + } + .tb-count-icon-panel { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + .mat-icon { + z-index: 1; + } + } + .tb-count-icon-background-panel { + position: absolute; + inset: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + .tb-count-label-value-panel { + flex: 1; + display: flex; + flex-direction: column; + place-content: flex-start space-around; + align-items: flex-start; + gap: 0; + &.tb-count-layout-row { + flex-direction: row; + align-items: center; + } + } + } +} + +:host ::ng-deep { + .tb-count-panel { + .tb-widget-title { + padding: 0; + } + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/count/count-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/count/count-widget.component.ts new file mode 100644 index 0000000000..1f617958e8 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/count/count-widget.component.ts @@ -0,0 +1,147 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// 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 +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// 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, Input, OnInit, TemplateRef } from '@angular/core'; +import { WidgetContext } from '@home/models/widget-component.models'; +import { formatValue } from '@core/utils'; +import { + ColorProcessor, + ComponentStyle, + getSingleTsValue, + iconStyle, + textStyle +} from '@shared/models/widget-settings.models'; +import { WidgetComponent } from '@home/components/widget/widget.component'; +import { + CountCardLayout, + countDefaultSettings, + CountWidgetSettings +} from '@home/components/widget/lib/count/count-widget.models'; +import { coerceBoolean } from '@shared/decorators/coercion'; + +@Component({ + selector: 'tb-count-widget', + templateUrl: './count-widget.component.html', + styleUrls: ['./count-widget.component.scss'] +}) +export class CountWidgetComponent implements OnInit { + + settings: CountWidgetSettings; + + countCardLayout = CountCardLayout; + + @Input() + ctx: WidgetContext; + + @Input() + widgetTitlePanel: TemplateRef; + + @coerceBoolean() + @Input() + alarmElseEntity: boolean; + + layout: CountCardLayout; + + showLabel = true; + label: string; + labelStyle: ComponentStyle = {}; + labelColor: ColorProcessor; + + showIcon = true; + icon = ''; + iconStyle: ComponentStyle = {}; + iconColor: ColorProcessor; + + showIconBackground = true; + iconBackgroundSize: string; + iconBackgroundStyle: ComponentStyle = {}; + iconBackgroundColor: ColorProcessor; + + valueText = 'N/A'; + valueStyle: ComponentStyle = {}; + valueColor: ColorProcessor; + + showChevron = false; + chevronStyle: ComponentStyle = {}; + + hasCardClickAction = false; + + constructor(private widgetComponent: WidgetComponent, + private cd: ChangeDetectorRef) { + } + + ngOnInit(): void { + this.ctx.$scope.countWidget = this; + this.settings = {...countDefaultSettings(this.alarmElseEntity), ...this.ctx.settings}; + + this.layout = this.settings.layout; + + this.showLabel = this.settings.showLabel; + this.label = this.settings.label; + this.labelStyle = textStyle(this.settings.labelFont, '0.4px'); + this.labelColor = ColorProcessor.fromSettings(this.settings.labelColor); + + this.showIcon = this.settings.showIcon; + this.icon = this.settings.icon; + this.iconStyle = iconStyle(this.settings.iconSize, this.settings.iconSizeUnit); + this.iconColor = ColorProcessor.fromSettings(this.settings.iconColor); + + this.showIconBackground = this.settings.showIconBackground; + if (this.showIconBackground) { + this.iconBackgroundSize = this.settings.iconBackgroundSize + this.settings.iconBackgroundSizeUnit; + } else { + this.iconBackgroundSize = this.settings.iconSize + this.settings.iconSizeUnit; + } + this.iconBackgroundStyle = { + width: this.iconBackgroundSize, + height: this.iconBackgroundSize, + borderRadius: '4px' + }; + this.iconBackgroundColor = ColorProcessor.fromSettings(this.settings.iconBackgroundColor); + + this.valueStyle = textStyle(this.settings.valueFont, '0.1px'); + this.valueColor = ColorProcessor.fromSettings(this.settings.valueColor); + + this.showChevron = this.settings.showChevron; + this.chevronStyle = iconStyle(this.settings.chevronSize, this.settings.chevronSizeUnit); + this.chevronStyle.color = this.settings.chevronColor; + + this.hasCardClickAction = this.ctx.actionsApi.getActionDescriptors('cardClick').length > 0; + } + + public onInit() { + } + + public onDataUpdated() { + const tsValue = getSingleTsValue(this.ctx.data); + let value: any; + if (tsValue) { + value = tsValue[1]; + this.valueText = formatValue(value, 0); + } else { + this.valueText = 'N/A'; + } + this.labelColor.update(value); + this.iconColor.update(value); + this.iconBackgroundColor.update(value); + this.valueColor.update(value); + this.cd.detectChanges(); + } + + public cardClick($event: Event) { + this.ctx.actionsApi.cardClick($event); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/count/count-widget.models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/count/count-widget.models.ts new file mode 100644 index 0000000000..4a1b307f4b --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/count/count-widget.models.ts @@ -0,0 +1,122 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// 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 +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// 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 { + ColorSettings, + ColorType, + constantColor, + cssUnit, + defaultColorFunction, + Font +} from '@shared/models/widget-settings.models'; + +export enum CountCardLayout { + column = 'column', + row = 'row' +} + +export const countCardLayouts = Object.keys(CountCardLayout) as CountCardLayout[]; + +export const countCardLayoutTranslations = new Map( + [ + [CountCardLayout.column, 'widgets.count.layout-column'], + [CountCardLayout.row, 'widgets.count.layout-row'] + ] +); + +export const alarmCountCardLayoutImages = new Map( + [ + [CountCardLayout.column, 'assets/widget/alarm-count/column-layout.svg'], + [CountCardLayout.row, 'assets/widget/alarm-count/row-layout.svg'] + ] +); + +export const entityCountCardLayoutImages = new Map( + [ + [CountCardLayout.column, 'assets/widget/entity-count/column-layout.svg'], + [CountCardLayout.row, 'assets/widget/entity-count/row-layout.svg'] + ] +); + +export interface CountWidgetSettings { + layout: CountCardLayout; + showLabel: boolean; + label: string; + labelFont: Font; + labelColor: ColorSettings; + showIcon: boolean; + icon: string; + iconSize: number; + iconSizeUnit: cssUnit; + iconColor: ColorSettings; + showIconBackground: boolean; + iconBackgroundSize: number; + iconBackgroundSizeUnit: cssUnit; + iconBackgroundColor: ColorSettings; + valueFont: Font; + valueColor: ColorSettings; + showChevron: boolean; + chevronSize: number; + chevronSizeUnit: cssUnit; + chevronColor: string; +} + +export const countDefaultSettings = (alarmElseEntity: boolean): CountWidgetSettings => ({ + layout: CountCardLayout.column, + showLabel: true, + label: alarmElseEntity ? 'Total' : 'Devices', + labelFont: { + family: 'Roboto', + size: 12, + sizeUnit: 'px', + style: 'normal', + weight: '400', + lineHeight: '16px' + }, + labelColor: constantColor('rgba(0, 0, 0, 0.54)'), + showIcon: true, + icon: alarmElseEntity ? 'warning' : 'devices', + iconSize: 20, + iconSizeUnit: 'px', + iconColor: constantColor('rgba(255, 255, 255, 1)'), + showIconBackground: true, + iconBackgroundSize: 36, + iconBackgroundSizeUnit: 'px', + iconBackgroundColor: alarmElseEntity + ? { + color: 'rgba(0, 105, 92, 1)', + type: ColorType.range, + rangeList: [ + {from: 0, to: 0, color: 'rgba(0, 105, 92, 1)'}, + {from: 1, color: 'rgba(209, 39, 48, 1)'} + ], + colorFunction: defaultColorFunction + } + : constantColor('rgba(241, 141, 23, 1)'), + valueFont: { + family: 'Roboto', + size: 20, + sizeUnit: 'px', + style: 'normal', + weight: '500', + lineHeight: '24px' + }, + valueColor: constantColor('rgba(0, 0, 0, 0.87)'), + showChevron: false, + chevronSize: 24, + chevronSizeUnit: 'px', + chevronColor: 'rgba(0, 0, 0, 0.38)' +}); diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-hierarchy-widget.component.html similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-hierarchy-widget.component.html diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-hierarchy-widget.component.scss similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.component.scss rename to ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-hierarchy-widget.component.scss diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-hierarchy-widget.component.ts similarity index 99% rename from ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-hierarchy-widget.component.ts index 75ea8657d7..17e95601c1 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-hierarchy-widget.component.ts @@ -64,7 +64,7 @@ import { NodeRelationQueryFunction, NodesSortFunction, NodeTextFunction -} from '@home/components/widget/lib/entities-hierarchy-widget.models'; +} from '@home/components/widget/lib/entity/entities-hierarchy-widget.models'; import { EntityRelationsQuery } from '@shared/models/relation.models'; import { AliasFilterType, RelationsQueryFilter } from '@shared/models/alias.models'; import { EntityFilter } from '@shared/models/query/query.models'; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-hierarchy-widget.models.ts similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/entities-hierarchy-widget.models.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-hierarchy-widget.models.ts diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-table-widget.component.html similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-table-widget.component.html diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-table-widget.component.scss similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.scss rename to ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-table-widget.component.scss diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-table-widget.component.ts similarity index 99% rename from ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-table-widget.component.ts index 1428b16f17..df71fce4f8 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/entity/entities-table-widget.component.ts @@ -121,7 +121,7 @@ interface EntitiesTableWidgetSettings extends TableWidgetSettings { @Component({ selector: 'tb-entities-table-widget', templateUrl: './entities-table-widget.component.html', - styleUrls: ['./entities-table-widget.component.scss', './table-widget.scss'] + styleUrls: ['./entities-table-widget.component.scss', './../table-widget.scss'] }) export class EntitiesTableWidgetComponent extends PageComponent implements OnInit, AfterViewInit, OnDestroy { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html index 63f121c22d..2d7a604852 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html @@ -15,7 +15,7 @@ limitations under the License. --> -
+
{{ 'gateway.docker-label' | translate }}
@@ -29,14 +29,9 @@ Windows -
- -
+ +
@@ -45,14 +40,9 @@ Linux -
- -
+ +
@@ -61,15 +51,23 @@ MacOS -
- -
+ +
+ + +
+
device.connectivity.execute-following-command
+ +
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss index 24966be34d..befa034375 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss @@ -22,16 +22,47 @@ :host ::ng-deep { .tb-markdown-view { .start-code { - code[class*="language-"], pre[class*="language-"] { - overflow: hidden; + code[class*="language-"] { white-space: break-spaces; word-break: break-all; } - + pre[class*="language-"] { + overflow: hidden; + background: #F3F6FA; + border-color: #305680; + } .code-wrapper { padding: 0; } + button.clipboard-btn { + right: 0; + p { + color: #305680; + } + p, div { + background-color: #F3F6FA; + } + div { + img { + display: none; + } + &:after { + content: ""; + position: initial; + display: block; + width: 18px; + height: 18px; + background: #305680; + mask-image: url(/assets/copy-code-icon.svg); + mask-repeat: no-repeat; + } + } + } } } + + .tb-form-panel.tb-tab-body { + margin-top: 16px; + } } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts index 0a20292058..d5516dd59b 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts @@ -15,15 +15,10 @@ /// import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; -import { Router } from '@angular/router'; -import { Store } from '@ngrx/store'; -import { AppState } from '@core/core.state'; -import { TranslateService } from '@ngx-translate/core'; -import { ActionNotificationShow } from '@core/notification/notification.actions'; import { DeviceService } from '@core/http/device.service'; import { helpBaseUrl } from '@shared/models/constants'; import { getOS } from '@core/utils'; - +import { PublishLaunchCommand } from '@shared/models/device.models'; @Component({ selector: 'tb-gateway-command', @@ -39,17 +34,13 @@ export class DeviceGatewayCommandComponent implements OnInit { @Input() deviceId: string; - linuxCode: string; - windowsCode: string; + commands: PublishLaunchCommand; helpLink: string = helpBaseUrl + '/docs/iot-gateway/install/docker-installation/'; tabIndex = 0; - constructor(protected router: Router, - protected store: Store, - private translate: TranslateService, - private cd: ChangeDetectorRef, + constructor(private cd: ChangeDetectorRef, private deviceService: DeviceService) { } @@ -57,7 +48,7 @@ export class DeviceGatewayCommandComponent implements OnInit { ngOnInit(): void { if (this.deviceId) { this.deviceService.getDevicePublishLaunchCommands(this.deviceId).subscribe(commands => { - this.createRunCode(commands.mqtt); + this.commands = commands; this.cd.detectChanges(); }); } @@ -78,21 +69,4 @@ export class DeviceGatewayCommandComponent implements OnInit { this.tabIndex = 1; } } - - createRunCode(commands) { - this.linuxCode = commands.linux; - this.windowsCode = commands.windows; - } - - onDockerCodeCopied() { - this.store.dispatch(new ActionNotificationShow( - { - message: this.translate.instant('gateway.command-copied-message'), - type: 'success', - target: 'dockerCommandDialogContent', - duration: 1200, - verticalPosition: 'bottom', - horizontalPosition: 'left' - })); - } } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html index cfa03bd97a..b5b995e4d8 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html @@ -15,819 +15,716 @@ limitations under the License. --> -
- -

gateway.gateway-configuration

- - -
- - -
-
-
- - {{ 'gateway.remote-configuration' | translate }} - info - - - - {{ 'gateway.remote-shell' | translate }} - info - - - - gateway.thingsboard-host - - info_outlined - - - {{ 'gateway.thingsboard-host-required' | translate }} - - - - gateway.thingsboard-port - - - {{'gateway.thingsboard-port-required' | translate }} - - - {{'gateway.thingsboard-port-min' | translate }} - - - {{'gateway.thingsboard-port-max' | translate }} - - - {{'gateway.thingsboard-port-pattern' | translate }} - - info_outlined - - - -
-
-
-
security.security
-
- - {{ securityType.value | translate }} - -
- - security.access-token - - - {{'security.access-token-required' | translate}} - - info_outlined - - - - security.clientId - - - {{'security.clientId-required' | translate}} - - info_outlined - - - - security.username - - - {{'security.username-required' | translate}} - - info_outlined - - - - security.password - - info_outlined - - - - - - - - - - -
-
-
+ +

gateway.gateway-configuration

+
+ + +
+
+
+ + {{ 'gateway.remote-configuration' | translate }} + +
+
+ + {{ 'gateway.remote-shell' | translate }} + +
+
+ + gateway.thingsboard-host + + info_outlined + + + {{ 'gateway.thingsboard-host-required' | translate }} + + + + gateway.thingsboard-port + + + {{ 'gateway.thingsboard-port-required' | translate }} + + + {{ 'gateway.thingsboard-port-min' | translate }} + + + {{ 'gateway.thingsboard-port-max' | translate }} + + + {{ 'gateway.thingsboard-port-pattern' | translate }} + + info_outlined + + +
- - -
-
-
- - gateway.logs.date-format - - - {{'gateway.logs.date-format-required' | translate }} - - info_outlined - - - - gateway.logs.log-format - - - {{'gateway.logs.log-format-required' | translate }} - - info_outlined - - -
-
-
-
gateway.logs.remote
- - {{ 'gateway.logs.remote-logs' | translate }} - info +
+
security.security
+ + + {{ securityType.value | translate }} + + + security.access-token + + + {{ 'security.access-token-required' | translate }} + + info_outlined + + +
+ + security.clientId + + + {{ 'security.clientId-required' | translate }} + + info_outlined + + + + security.username + + + {{ 'security.username-required' | translate }} + + info_outlined - - - gateway.logs.level - - {{logLevel}} -
-
-
gateway.logs.local
-
- - {{ logConfig.value }} - -
- - gateway.logs.level - - {{logLevel}} - - - - gateway.logs.file-path - - - {{'gateway.logs.file-path-required' | translate }} - - -
- - gateway.logs.saving-period - - - {{'gateway.logs.saving-period-required' | translate }} - - - {{'gateway.logs.saving-period-min' | translate }} - - - - - - - {{period.value | translate}} - - - -
- - gateway.logs.backup-count - - - {{'gateway.logs.backup-count-required' | translate }} - - - {{'gateway.logs.backup-count-min' | translate }} - - info_outlined - - -
-
-
+ + security.password + + info_outlined + + + + + +
- - -
-
-
gateway.storage - {{'gateway.hints.storage' | translate}} -
-
- - - {{ storageType.value | translate }} - - -
- - {{'gateway.hints.' + gatewayConfigGroup.get('storage.type').value | translate}} -
- - gateway.storage-read-record-count - - - {{'gateway.storage-read-record-count-required' | translate}} - - - {{'gateway.storage-read-record-count-min' | translate}} - - - {{'gateway.storage-read-record-count-pattern' | translate}} - - info_outlined - - - - gateway.storage-max-records - - - {{'gateway.storage-max-records-required' | translate}} - - - {{'gateway.storage-max-records-min' | translate}} - - - {{'gateway.storage-max-records-pattern' | translate}} - - info_outlined - - - - gateway.storage-data-folder-path - - - {{'gateway.storage-data-folder-path-required' | translate}} - - info_outlined - - - - gateway.storage-max-files - - - {{'gateway.storage-max-files-required' | translate}} - - - {{'gateway.storage-max-files-min' | translate}} - - - {{'gateway.storage-max-files-pattern' | translate}} - - info_outlined - - - - gateway.storage-max-read-record-count - - - {{'gateway.storage-max-read-record-count-required' | translate}} - - - {{'gateway.storage-max-read-record-count-min' | translate}} - - - {{'gateway.storage-max-read-record-count-pattern' | translate}} - - info_outlined - - - - gateway.storage-max-file-records - - - {{'gateway.storage-max-records-required' | translate}} - - - {{'gateway.storage-max-records-min' | translate}} - - - {{'gateway.storage-max-records-pattern' | translate}} - - info_outlined - - - - gateway.storage-path - - - {{'gateway.storage-path-required' | translate}} - - info_outlined - - - - gateway.messages-ttl-check-in-hours - - - {{'gateway.messages-ttl-check-in-hours-required' | translate}} - - - {{'gateway.messages-ttl-check-in-hours-min' | translate}} - - - {{'gateway.messages-ttl-check-in-hours-pattern' | translate}} - - info_outlined - - - - gateway.messages-ttl-in-days - - - {{'gateway.messages-ttl-in-days-required' | translate}} - - - {{'gateway.messages-ttl-in-days-min' | translate}} - - - {{'gateway.messages-ttl-in-days-pattern' | translate}} - - info_outlined - - -
-
-
+
+
+ +
+
+
+ + gateway.logs.date-format + + + {{ 'gateway.logs.date-format-required' | translate }} + + info_outlined + + + + gateway.logs.log-format + + + {{ 'gateway.logs.log-format-required' | translate }} + + info_outlined + + +
- - -
-
-
- - {{ 'gateway.grpc' | translate }} - - - {{ 'gateway.permit-without-calls' | translate }} - info - - - - gateway.server-port - - info_outlined - - - {{'gateway.thingsboard-port-required' | translate }} - - - {{'gateway.thingsboard-port-min' | translate }} - - - {{'gateway.thingsboard-port-max' | translate }} - - - {{'gateway.thingsboard-port-pattern' | translate }} - - - - gateway.grpc-keep-alive-timeout - - info_outlined - - - {{'gateway.grpc-keep-alive-timeout-required' | translate }} - - - {{'gateway.grpc-keep-alive-timeout-min' | translate }} - - - {{'gateway.grpc-keep-alive-timeout-pattern' | translate }} - - - - gateway.grpc-keep-alive - - info_outlined - - - {{'gateway.grpc-keep-alive-required' | translate }} - - - {{'gateway.grpc-keep-alive-min' | translate }} - - - {{'gateway.grpc-keep-alive-pattern' | translate }} - - - - gateway.grpc-min-time-between-pings - - info_outlined - - - {{'gateway.grpc-min-time-between-pings-required' | translate }} - - - {{'gateway.grpc-min-time-between-pings-min' | translate }} - - - {{'gateway.grpc-min-time-between-pings-pattern' | translate }} - - - - gateway.grpc-max-pings-without-data - - info_outlined - - - {{'gateway.grpc-max-pings-without-data-required' | translate }} - - - {{'gateway.grpc-max-pings-without-data-min' | translate }} - - - {{'gateway.grpc-max-pings-without-data-pattern' | translate }} - - - - gateway.grpc-min-ping-interval-without-data - - info_outlined - - - {{'gateway.grpc-min-ping-interval-without-data-required' | translate }} - - - {{'gateway.grpc-min-ping-interval-without-data-min' | translate }} - - - {{'gateway.grpc-min-ping-interval-without-data-pattern' | translate }} - - -
-
+
+
gateway.logs.remote
+
+ + {{ 'gateway.logs.remote-logs' | translate }} + +
+ + gateway.logs.level + + {{ logLevel }} + +
- - -
-
-
- - {{ 'gateway.statistics.statistics' | translate }} - - - gateway.statistics.send-period - - - {{'gateway.statistics.send-period-required' | translate }} - +
+
gateway.logs.local
+ + {{ localLogsConfigTranslateMap.get(logConfig) }} + + +
+ + gateway.logs.level + + {{ logLevel }} + + + + gateway.logs.file-path + + + {{ 'gateway.logs.file-path-required' | translate }} + + +
+
+
+ + gateway.logs.saving-period + - {{'gateway.statistics.send-period-min' | translate }} + *ngIf="gatewayConfigGroup.get('logs.local.' + logSelector.value + '.savingTime').hasError('required')"> + {{ 'gateway.logs.saving-period-required' | translate }} - {{'gateway.statistics.send-period-pattern' | translate }} + *ngIf="gatewayConfigGroup.get('logs.local.' + logSelector.value + '.savingTime').hasError('min')"> + {{ 'gateway.logs.saving-period-min' | translate }} + + + + {{ period.value | translate }} + + +
+ + gateway.logs.backup-count + + + {{ 'gateway.logs.backup-count-required' | translate }} + + + {{ 'gateway.logs.backup-count-min' | translate }} + + info_outlined + +
-
-
{{"gateway.statistics.commands" |translate}} - - {{'gateway.hints.commands' | translate}}
-
-
- - - gateway.statistics.attribute-name - - - {{'gateway.statistics.attribute-name-required' | translate }} - - info_outlined - - - - gateway.statistics.timeout - - - {{'gateway.statistics.timeout-required' | translate }} - - - {{'gateway.statistics.timeout-min' | translate }} - - - {{'gateway.statistics.timeout-pattern' | translate }} - - info_outlined - - - - gateway.statistics.command - - - {{'gateway.statistics.command-required' | translate }} - - info_outlined - - - - -
- -
-
+
- - -
-
-
- - {{ 'gateway.checking-device-activity' | translate }} - - {{'gateway.hints.check-device-activity' | translate}} -
-
- - gateway.inactivity-timeout-seconds - - - {{'gateway.inactivity-timeout-seconds-required' | translate }} - - - {{'gateway.inactivity-timeout-seconds-min' | translate }} +
+ + +
+
+
gateway.storage
+
gateway.hints.storage
+ + + {{ storageTypesTranslationMap.get(storageType) | translate }} + + +
{{ 'gateway.hints.' + gatewayConfigGroup.get('storage.type').value | translate }}
+ +
+ + gateway.storage-read-record-count + + + {{ 'gateway.storage-read-record-count-required' | translate }} + + + {{ 'gateway.storage-read-record-count-min' | translate }} + + + {{ 'gateway.storage-read-record-count-pattern' | translate }} + + info_outlined + + + + gateway.storage-max-records + + + {{ 'gateway.storage-max-records-required' | translate }} + + + {{ 'gateway.storage-max-records-min' | translate }} + + + {{ 'gateway.storage-max-records-pattern' | translate }} + + info_outlined + + +
+
+
+ + gateway.storage-data-folder-path + + + {{ 'gateway.storage-data-folder-path-required' | translate }} info_outlined + matTooltip="{{ 'gateway.hints.data-folder' | translate }}">info_outlined - - gateway.inactivity-check-period-seconds - - - {{'gateway.inactivity-check-period-seconds-required' | translate }} + + gateway.storage-max-files + + + {{ 'gateway.storage-max-files-required' | translate }} - - {{'gateway.inactivity-check-period-seconds-min' | translate }} + + {{ 'gateway.storage-max-files-min' | translate }} - info_outlined + + {{ 'gateway.storage-max-files-pattern' | translate }} + + info_outlined
-
-
-
gateway.advanced
-
- - gateway.min-pack-send-delay - - - {{ 'gateway.min-pack-send-delay-required' | translate }} +
+ + gateway.storage-max-read-record-count + + + {{ 'gateway.storage-max-read-record-count-required' | translate }} - - {{ 'gateway.min-pack-send-delay-min' | translate }} + + {{ 'gateway.storage-max-read-record-count-min' | translate }} - info_outlined + + {{ 'gateway.storage-max-read-record-count-pattern' | translate }} + + info_outlined - - gateway.mqtt-qos - - - {{ 'gateway.mqtt-qos-required' | translate}} + + gateway.storage-max-file-records + + + {{ 'gateway.storage-max-records-required' | translate }} - - {{ 'gateway.mqtt-qos-range' | translate}} + + {{ 'gateway.storage-max-records-min' | translate }} - - {{ 'gateway.mqtt-qos-range' | translate}} + + {{ 'gateway.storage-max-records-pattern' | translate }} - info_outlined + info_outlined - - gateway.statistics.check-connectors-configuration - - - {{'gateway.statistics.check-connectors-configuration-required' | translate }} +
+ +
+
+ + gateway.storage-path + + + {{ 'gateway.storage-path-required' | translate }} + + info_outlined + + + + gateway.messages-ttl-check-in-hours + + + {{ 'gateway.messages-ttl-check-in-hours-required' | translate }} - - {{'gateway.statistics.check-connectors-configuration-min' | translate }} + + {{ 'gateway.messages-ttl-check-in-hours-min' | translate }} - - {{'gateway.statistics.check-connectors-configuration-pattern' | translate }} + + {{ 'gateway.messages-ttl-check-in-hours-pattern' | translate }} + info_outlined +
+ + gateway.messages-ttl-in-days + + + {{ 'gateway.messages-ttl-in-days-required' | translate }} + + + {{ 'gateway.messages-ttl-in-days-min' | translate }} + + + {{ 'gateway.messages-ttl-in-days-pattern' | translate }} + + info_outlined + + +
+ +
+
+ + +
+
+ + {{ 'gateway.grpc' | translate }} + +
+ + {{ 'gateway.permit-without-calls' | translate }} + +
+
+
+ + gateway.server-port + + info_outlined + + + {{ 'gateway.thingsboard-port-required' | translate }} + + + {{ 'gateway.thingsboard-port-min' | translate }} + + + {{ 'gateway.thingsboard-port-max' | translate }} + + + {{ 'gateway.thingsboard-port-pattern' | translate }} + + + + gateway.grpc-keep-alive-timeout + + info_outlined + + + {{ 'gateway.grpc-keep-alive-timeout-required' | translate }} + + + {{ 'gateway.grpc-keep-alive-timeout-min' | translate }} + + + {{ 'gateway.grpc-keep-alive-timeout-pattern' | translate }} + + +
+
+ + gateway.grpc-keep-alive + + info_outlined + + + {{ 'gateway.grpc-keep-alive-required' | translate }} + + + {{ 'gateway.grpc-keep-alive-min' | translate }} + + + {{ 'gateway.grpc-keep-alive-pattern' | translate }} + + + + gateway.grpc-min-time-between-pings + + info_outlined + + + {{ 'gateway.grpc-min-time-between-pings-required' | translate }} + + + {{ 'gateway.grpc-min-time-between-pings-min' | translate }} + + + {{ 'gateway.grpc-min-time-between-pings-pattern' | translate }} + + +
+
+ + gateway.grpc-max-pings-without-data + + info_outlined + + + {{ 'gateway.grpc-max-pings-without-data-required' | translate }} + + + {{ 'gateway.grpc-max-pings-without-data-min' | translate }} + + + {{ 'gateway.grpc-max-pings-without-data-pattern' | translate }} + + + + gateway.grpc-min-ping-interval-without-data + + info_outlined + + + {{ 'gateway.grpc-min-ping-interval-without-data-required' | translate }} + + + {{ 'gateway.grpc-min-ping-interval-without-data-min' | translate }} + + + {{ 'gateway.grpc-min-ping-interval-without-data-pattern' | translate }} + + +
+
+
+
+
+ +
+
+ + {{ 'gateway.statistics.statistics' | translate }} + + + gateway.statistics.send-period + + + {{ 'gateway.statistics.send-period-required' | translate }} + + + {{ 'gateway.statistics.send-period-min' | translate }} + + + {{ 'gateway.statistics.send-period-pattern' | translate }} + + +
+
+
gateway.statistics.commands
+
gateway.hints.commands
+ +
+
+
+ + gateway.statistics.attribute-name + + + {{ 'gateway.statistics.attribute-name-required' | translate }} + + info_outlined + + + + gateway.statistics.timeout + + + {{ 'gateway.statistics.timeout-required' | translate }} + + + {{ 'gateway.statistics.timeout-min' | translate }} + + + {{ 'gateway.statistics.timeout-pattern' | translate }} + + info_outlined + + +
+ + gateway.statistics.command + + + {{ 'gateway.statistics.command-required' | translate }} + + info_outlined + + +
+
- + +
- - -
- - - -
- +
+
+ +
+
+
+ + {{ 'gateway.checking-device-activity' | translate }} + +
+
+ + gateway.inactivity-timeout-seconds + + + {{ 'gateway.inactivity-timeout-seconds-required' | translate }} + + + {{ 'gateway.inactivity-timeout-seconds-min' | translate }} + + + {{ 'gateway.inactivity-timeout-seconds-pattern' | translate }} + + info_outlined + + + + gateway.inactivity-check-period-seconds + + + {{ 'gateway.inactivity-check-period-seconds-required' | translate }} + + + {{ 'gateway.inactivity-check-period-seconds-min' | translate }} + + + {{ 'gateway.inactivity-check-period-seconds-pattern' | translate }} + + info_outlined + + +
+
+
+
gateway.advanced
+
+ + gateway.min-pack-send-delay + + + {{ 'gateway.min-pack-send-delay-required' | translate }} + + + {{ 'gateway.min-pack-send-delay-min' | translate }} + + info_outlined + + + + gateway.mqtt-qos + + + {{ 'gateway.mqtt-qos-required' | translate }} + + + {{ 'gateway.mqtt-qos-range' | translate }} + + + {{ 'gateway.mqtt-qos-range' | translate }} + + info_outlined + + +
+ + gateway.statistics.check-connectors-configuration + + + {{ 'gateway.statistics.check-connectors-configuration-required' | translate }} + + + {{ 'gateway.statistics.check-connectors-configuration-min' | translate }} + + + {{ 'gateway.statistics.check-connectors-configuration-pattern' | translate }} + + +
+
+
+ +
+ + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss index 1bf599727d..ad4e6cea00 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss @@ -16,128 +16,86 @@ :host { width: 100%; height: 100%; - display: block; + display: grid; + grid-template-rows: min-content minmax(auto, 1fr) min-content; - .mat-icon { - color: rgba(0, 0, 0, .12); - } - - .tb-form-panel { - margin-bottom: 20px; + .configuration-block { + display: flex; + flex-direction: column; + gap: 16px; } .mat-toolbar { + grid-row: 1; background: transparent; color: rgba(0, 0, 0, .87) !important; } - .mat-content { - .expansion-panel-header { - font-weight: 600; - color: rgba(0, 0, 0, .87) !important; - } - - mat-slide-toggle { - margin-bottom: 16px; - } - - mat-form-field { - margin-right: 15px; - } - - .slider-icon { - position: absolute; - transform: translateY(-3px); - } - - .block-title { - font-size: 20px; - font-weight: 400; - padding-top: 16px; - } - - .hover-cursor { - cursor: pointer; - } + .tab-group-block { + min-width: 0; + height: 100%; + min-height: 0; + grid-row: 2; } - .security-toggle-group { - margin-bottom: 15px; + .toggle-group { margin-right: auto; } - .logs-label { - font-weight: 500; - margin-bottom: 10px; - } - - .statistics-block { - margin-bottom: 15px; - padding-left: 15px; - padding-top: 15px; - } - .first-capital { text-transform: capitalize; } - mat-panel-title { - display: block; - padding-top: 20px; - } - - mat-panel-title span { - display: block; - padding-left: 0; - padding-top: 5px; + textarea { + resize: none; } - .tb-hint { - font-size: 13px; - color: rgba(0, 0, 0, .54); - width: fit-content; - cursor: pointer; - text-transform: none !important; + .saving-period { + flex: 1; } - .line-break { - width: 100%; - } + .statistics-container { + width: 50%; - textarea { - resize: none; + .command-container { + width: 100%; + } } -} -:host ::ng-deep { - .mat-tab-label-active { - color: white; - opacity: 1; + .actions { + grid-row: 3; + padding: 8px; + display: flex; + gap: 8px; + justify-content: flex-end; + flex: 1; } - .mat-tab-label, .mat-tab-label-active{ - min-width: 50px !important; - padding: 3px !important; - margin: 3px !important; - flex-grow: 1; - } + mat-form-field { + mat-error { + display: none !important; + } - .mat-ink-bar { - height: 100%; - z-index: -10; - border-radius: 5px; + mat-error:first-child { + display: block !important; + } } +} +:host ::ng-deep { .pointer-event { pointer-events: all; } - .mat-mdc-form-field-icon-suffix { - z-index: 100; + .toggle-group span { + padding: 0 25px; } - .security-toggle-group span { - padding: 0 25px; + .mat-mdc-form-field-icon-suffix { + color: #E0E0E0; + &:hover { + color: #9E9E9E; + } } } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts index a57bd6750e..c4e1257e64 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts @@ -15,15 +15,11 @@ /// import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { AppState } from '@core/core.state'; -import { Router } from '@angular/router'; import { FormArray, FormBuilder, FormControl, FormGroup, - UntypedFormGroup, ValidationErrors, ValidatorFn, Validators @@ -41,79 +37,18 @@ import { Observable, of } from 'rxjs'; import { mergeMap } from 'rxjs/operators'; import { DeviceCredentials, DeviceCredentialsType } from '@shared/models/device.models'; import { NULL_UUID } from '@shared/models/id/has-uuid'; - -export enum StorageTypes { - MEMORY = 'memory', - FILE = 'file', - SQLITE = 'sqlite' -} - -export enum GatewayLogLevel { - none = 'NONE', - critical = 'CRITICAL', - error = 'ERROR', - warning = 'WARNING', - info = 'INFO', - debug = 'DEBUG' -} - -export enum LogSavingPeriod { - days = 'D', - hours = 'H', - minutes = 'M', - seconds = 'S' -} - -export enum LocalLogsConfigs { - service = 'service', - connector = 'connector', - converter = 'converter', - tb_connection = 'tb_connection', - storage = 'storage', - extension = 'extension' -} - -export const localLogsConfigLabels = new Map([ - [LocalLogsConfigs.service, 'Service'], - [LocalLogsConfigs.connector, 'Connector'], - [LocalLogsConfigs.converter, 'Converter'], - [LocalLogsConfigs.tb_connection, 'TB Connection'], - [LocalLogsConfigs.storage, 'Storage'], - [LocalLogsConfigs.extension, 'Extension'] -]); - -export const logSavingPeriodTranslations = new Map( - [ - [LogSavingPeriod.days, 'gateway.logs.days'], - [LogSavingPeriod.hours, 'gateway.logs.hours'], - [LogSavingPeriod.minutes, 'gateway.logs.minutes'], - [LogSavingPeriod.seconds, 'gateway.logs.seconds'] - ] -); - -export const storageTypesTranslations = new Map( - [ - [StorageTypes.MEMORY, 'gateway.storage-types.memory-storage'], - [StorageTypes.FILE, 'gateway.storage-types.file-storage'], - [StorageTypes.SQLITE, 'gateway.storage-types.sqlite'] - ] -); - -export enum SecurityTypes { - ACCESS_TOKEN = 'accessToken', - USERNAME_PASSWORD = 'usernamePassword', - TLS_ACCESS_TOKEN = 'tlsAccessToken', - TLS_PRIVATE_KEY = 'tlsPrivateKey' -} - -export const securityTypesTranslationsMap = new Map( - [ - [SecurityTypes.ACCESS_TOKEN, 'gateway.security-types.access-token'], - [SecurityTypes.USERNAME_PASSWORD, 'gateway.security-types.username-password'], - [SecurityTypes.TLS_ACCESS_TOKEN, 'gateway.security-types.tls-access-token'], - // [SecurityTypes.TLS_PRIVATE_KEY, 'gateway.security-types.tls-private-key'], - ] -); +import { + GatewayLogLevel, + GecurityTypesTranslationsMap, + LocalLogsConfigTranslateMap, + LocalLogsConfigs, + LogSavingPeriod, + LogSavingPeriodTranslations, + SecurityTypes, + StorageTypes, + StorageTypesTranslationMap +} from './gateway-widget.models'; +import { deepTrim } from '@core/utils'; @Component({ selector: 'tb-gateway-configuration', @@ -124,13 +59,16 @@ export class GatewayConfigurationComponent implements OnInit { gatewayConfigGroup: FormGroup; - storageTypes = storageTypesTranslations; + StorageTypes = StorageTypes; + storageTypes = Object.values(StorageTypes) as StorageTypes[]; + storageTypesTranslationMap = StorageTypesTranslationMap; - logSavingPeriods = logSavingPeriodTranslations; + logSavingPeriods = LogSavingPeriodTranslations; - localLogsConfigLabels = localLogsConfigLabels; + localLogsConfigs = Object.keys(LocalLogsConfigs) as LocalLogsConfigs[]; + localLogsConfigTranslateMap = LocalLogsConfigTranslateMap; - securityTypes = securityTypesTranslationsMap; + securityTypes = GecurityTypesTranslationsMap; gatewayLogLevel = Object.values(GatewayLogLevel); @@ -142,24 +80,19 @@ export class GatewayConfigurationComponent implements OnInit { logSelector: FormControl; - securityType: SecurityTypes; + private initialCredentials: DeviceCredentials; - initialCredentials: DeviceCredentials; - - - constructor(protected router: Router, - protected store: Store, - protected fb: FormBuilder, - protected attributeService: AttributeService, - protected deviceService: DeviceService, + constructor(private fb: FormBuilder, + private attributeService: AttributeService, + private deviceService: DeviceService, private cd: ChangeDetectorRef, - public dialog: MatDialog) { + private dialog: MatDialog) { } ngOnInit() { this.gatewayConfigGroup = this.fb.group({ thingsboard: this.fb.group({ - host: [window.location.hostname, [Validators.required]], + host: [window.location.hostname, [Validators.required, Validators.pattern(/^[^\s]+$/)]], port: [1883, [Validators.required, Validators.min(1), Validators.max(65535), Validators.pattern(/^-?[0-9]+$/)]], remoteShell: [false, []], remoteConfiguration: [true, []], @@ -175,30 +108,30 @@ export class GatewayConfigurationComponent implements OnInit { handleDeviceRenaming: [true, []], checkingDeviceActivity: this.fb.group({ checkDeviceInactivity: [false, []], - inactivityTimeoutSeconds: [200, [Validators.min(1)]], - inactivityCheckPeriodSeconds: [500, [Validators.min(1)]] + inactivityTimeoutSeconds: [200, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + inactivityCheckPeriodSeconds: [500, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]] }), security: this.fb.group({ type: [SecurityTypes.ACCESS_TOKEN, [Validators.required]], - accessToken: [null, [Validators.required]], - clientId: [null, []], - username: [null, []], - password: [null, []], + accessToken: [null, [Validators.required, Validators.pattern(/^[^.\s]+$/)]], + clientId: [null, [Validators.pattern(/^[^.\s]+$/)]], + username: [null, [Validators.pattern(/^[^.\s]+$/)]], + password: [null, [Validators.pattern(/^[^.\s]+$/)]], caCert: [null, []], cert: [null, []], privateKey: [null, []], }), - qos: [1, [Validators.min(0), Validators.max(1), Validators.required]] + qos: [1, [Validators.min(0), Validators.max(1), Validators.required, Validators.pattern(/^[^.\s]+$/)]] }), storage: this.fb.group({ type: [StorageTypes.MEMORY, [Validators.required]], - read_records_count: [100, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]], - max_records_count: [100000, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]], - data_folder_path: ['./data/', []], + read_records_count: [100, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required, Validators.pattern(/^[^.\s]+$/)]], + max_records_count: [100000, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required, Validators.pattern(/^[^.\s]+$/)]], + data_folder_path: ['./data/', [Validators.pattern(/^[^\s]+$/)]], max_file_count: [10, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], max_read_records_count: [10, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], max_records_per_file: [10000, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], - data_file_path: ['./data/data.db', []], + data_file_path: ['./data/data.db', [Validators.pattern(/^[^\s]+$/)]], messages_ttl_check_in_hours: [1, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], messages_ttl_in_days: [7, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], @@ -215,13 +148,13 @@ export class GatewayConfigurationComponent implements OnInit { }), connectors: this.fb.array([]), logs: this.fb.group({ - dateFormat: ['%Y-%m-%d %H:%M:%S', [Validators.required]], + dateFormat: ['%Y-%m-%d %H:%M:%S', [Validators.required, Validators.pattern(/^[^\s].*[^\s]$/)]], logFormat: ['%(asctime)s - |%(levelname)s| - [%(filename)s] - %(module)s - %(funcName)s - %(lineno)d - %(message)s', - [Validators.required]], + [Validators.required, Validators.pattern(/^[^\s].*[^\s]$/)]], type: ['remote', [Validators.required]], remote: this.fb.group({ enabled: [false], - logLevel: [GatewayLogLevel.info, [Validators.required]], + logLevel: [GatewayLogLevel.INFO, [Validators.required]], }), local: this.fb.group({}) }) @@ -231,7 +164,7 @@ export class GatewayConfigurationComponent implements OnInit { if (password && password !== '') { this.gatewayConfigGroup.get('thingsboard.security.username').setValidators([Validators.required]); } else { - this.gatewayConfigGroup.get('thingsboard.security.username').setValidators([]); + this.gatewayConfigGroup.get('thingsboard.security.username').clearValidators(); } this.gatewayConfigGroup.get('thingsboard.security.username').updateValueAndValidity({emitEvent: false}); }); @@ -254,14 +187,14 @@ export class GatewayConfigurationComponent implements OnInit { checkingDeviceActivityGroup.get('checkDeviceInactivity').valueChanges.subscribe(enabled => { checkingDeviceActivityGroup.updateValueAndValidity(); if (enabled) { - checkingDeviceActivityGroup.get('inactivityTimeoutSeconds').setValidators([Validators.min(1), Validators.required]); - checkingDeviceActivityGroup.get('inactivityCheckPeriodSeconds').setValidators([Validators.min(1), Validators.required]); + checkingDeviceActivityGroup.get('inactivityTimeoutSeconds').setValidators([Validators.min(1), Validators.required, Validators.pattern(/^-?[0-9]+$/)]); + checkingDeviceActivityGroup.get('inactivityCheckPeriodSeconds').setValidators([Validators.min(1), Validators.required, Validators.pattern(/^-?[0-9]+$/)]); } else { checkingDeviceActivityGroup.get('inactivityTimeoutSeconds').clearValidators(); - checkingDeviceActivityGroup.get('inactivityTimeoutSeconds').setErrors(null); checkingDeviceActivityGroup.get('inactivityCheckPeriodSeconds').clearValidators(); - checkingDeviceActivityGroup.get('inactivityCheckPeriodSeconds').setErrors(null); } + checkingDeviceActivityGroup.get('inactivityTimeoutSeconds').updateValueAndValidity({emitEvent: false}); + checkingDeviceActivityGroup.get('inactivityCheckPeriodSeconds').updateValueAndValidity({emitEvent: false}); }); this.gatewayConfigGroup.get('grpc.enabled').valueChanges.subscribe(value => { @@ -272,7 +205,7 @@ export class GatewayConfigurationComponent implements OnInit { securityGroup.get('type').valueChanges.subscribe(type => { this.removeAllSecurityValidators(); if (type === SecurityTypes.ACCESS_TOKEN) { - securityGroup.get('accessToken').addValidators([Validators.required]); + securityGroup.get('accessToken').addValidators([Validators.required, Validators.pattern(/^[^.\s]+$/)]); securityGroup.get('accessToken').updateValueAndValidity(); } else if (type === SecurityTypes.TLS_PRIVATE_KEY) { securityGroup.get('caCert').addValidators([Validators.required]); @@ -282,21 +215,19 @@ export class GatewayConfigurationComponent implements OnInit { securityGroup.get('cert').addValidators([Validators.required]); securityGroup.get('cert').updateValueAndValidity(); } else if (type === SecurityTypes.TLS_ACCESS_TOKEN) { - securityGroup.get('accessToken').addValidators([Validators.required]); + securityGroup.get('accessToken').addValidators([Validators.required, Validators.pattern(/^[^.\s]+$/)]); securityGroup.get('accessToken').updateValueAndValidity(); securityGroup.get('caCert').addValidators([Validators.required]); securityGroup.get('caCert').updateValueAndValidity(); } else if (type === SecurityTypes.USERNAME_PASSWORD) { - securityGroup.addValidators([this.atLeastOneRequired(Validators.required, ['clientId', 'username'])]) - // securityGroup.get('password').addValidators([Validators.required]); - // securityGroup.get('password').updateValueAndValidity(); + securityGroup.addValidators([this.atLeastOneRequired(Validators.required, ['clientId', 'username'])]); } securityGroup.updateValueAndValidity(); }); - securityGroup.get('caCert').valueChanges.subscribe(_ => this.cd.detectChanges()); - securityGroup.get('privateKey').valueChanges.subscribe(_ => this.cd.detectChanges()); - securityGroup.get('cert').valueChanges.subscribe(_ => this.cd.detectChanges()); + securityGroup.get('caCert').valueChanges.subscribe(() => this.cd.detectChanges()); + securityGroup.get('privateKey').valueChanges.subscribe(() => this.cd.detectChanges()); + securityGroup.get('cert').valueChanges.subscribe(() => this.cd.detectChanges()); const storageGroup = this.gatewayConfigGroup.get('storage') as FormGroup; storageGroup.get('type').valueChanges.subscribe(type => { @@ -306,28 +237,37 @@ export class GatewayConfigurationComponent implements OnInit { [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]); storageGroup.get('max_records_count').addValidators( [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + storageGroup.get('read_records_count').updateValueAndValidity({emitEvent: false}); + storageGroup.get('max_records_count').updateValueAndValidity({emitEvent: false}); } else if (type === StorageTypes.FILE) { - storageGroup.get('data_folder_path').addValidators([Validators.required]); + storageGroup.get('data_folder_path').addValidators([Validators.required, Validators.pattern(/^[^.\s]+$/)]); storageGroup.get('max_file_count').addValidators( [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); storageGroup.get('max_read_records_count').addValidators( [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); storageGroup.get('max_records_per_file').addValidators( [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + storageGroup.get('data_folder_path').updateValueAndValidity({emitEvent: false}); + storageGroup.get('max_file_count').updateValueAndValidity({emitEvent: false}); + storageGroup.get('max_read_records_count').updateValueAndValidity({emitEvent: false}); + storageGroup.get('max_records_per_file').updateValueAndValidity({emitEvent: false}); } else if (type === StorageTypes.SQLITE) { - storageGroup.get('data_file_path').addValidators([Validators.required]); + storageGroup.get('data_file_path').addValidators([Validators.required, Validators.pattern(/^[^.\s]+$/)]); storageGroup.get('messages_ttl_check_in_hours').addValidators( [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); storageGroup.get('messages_ttl_in_days').addValidators( [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + storageGroup.get('data_file_path').updateValueAndValidity({emitEvent: false}); + storageGroup.get('messages_ttl_check_in_hours').updateValueAndValidity({emitEvent: false}); + storageGroup.get('messages_ttl_in_days').updateValueAndValidity({emitEvent: false}); } }); this.fetchConfigAttribute(this.device); } - atLeastOneRequired(validator: ValidatorFn, controls: string[] = null) { - return (group: UntypedFormGroup): ValidationErrors | null => { + private atLeastOneRequired(validator: ValidatorFn, controls: string[] = null) { + return (group: FormGroup): ValidationErrors | null => { if (!controls) { controls = Object.keys(group.controls); } @@ -337,22 +277,10 @@ export class GatewayConfigurationComponent implements OnInit { }; } - updateSecurityValidators(value: SecurityTypes) { - this.gatewayConfigGroup.get('thingsboard.security.type').setValue(value, {emitEvent: true}); - this.gatewayConfigGroup.get('thingsboard.security.type').markAsDirty(); - } - - updateLogType(value: LocalLogsConfigs) { - this.logSelector.setValue(value); - } - - updateStorageType(value: StorageTypes) { - this.gatewayConfigGroup.get('storage.type').setValue(value, {emitEvent: true}); - this.gatewayConfigGroup.get('storage.type').markAsDirty(); - } - - fetchConfigAttribute(entityId: EntityId) { - if (entityId.id === NULL_UUID) return; + private fetchConfigAttribute(entityId: EntityId) { + if (entityId.id === NULL_UUID) { + return; + } this.attributeService.getEntityAttributes(entityId, AttributeScope.CLIENT_SCOPE, ['general_configuration', 'grpc_configuration', 'logs_configuration', 'storage_configuration', 'RemoteLoggingLevel']).pipe( mergeMap(attributes => attributes.length ? of(attributes) : this.attributeService.getEntityAttributes( @@ -397,24 +325,26 @@ export class GatewayConfigurationComponent implements OnInit { if (remoteLoggingLevel) { const remoteLogsFormGroup = this.gatewayConfigGroup.get('logs.remote'); remoteLogsFormGroup.patchValue({ - enabled: remoteLoggingLevel !== GatewayLogLevel.none, + enabled: remoteLoggingLevel !== GatewayLogLevel.NONE, logLevel: remoteLoggingLevel }, {emitEvent: false}); remoteLogsFormGroup.markAsPristine(); } this.cd.detectChanges(); } else { - this.checkAndFetchCredentials({}); + this.checkAndFetchCredentials(); } }); } - checkAndFetchCredentials(security): void { + private checkAndFetchCredentials(security: any = {}): void { if (security.type !== SecurityTypes.TLS_PRIVATE_KEY) { this.deviceService.getDeviceCredentials(this.device.id).subscribe(credentials => { this.initialCredentials = credentials; if (credentials.credentialsType === DeviceCredentialsType.ACCESS_TOKEN || security.type === SecurityTypes.TLS_ACCESS_TOKEN) { - this.gatewayConfigGroup.get('thingsboard.security.type').setValue(security.type === SecurityTypes.TLS_ACCESS_TOKEN? SecurityTypes.TLS_ACCESS_TOKEN : SecurityTypes.ACCESS_TOKEN); + this.gatewayConfigGroup.get('thingsboard.security.type').setValue(security.type === SecurityTypes.TLS_ACCESS_TOKEN + ? SecurityTypes.TLS_ACCESS_TOKEN + : SecurityTypes.ACCESS_TOKEN); this.gatewayConfigGroup.get('thingsboard.security.accessToken').setValue(credentials.credentialsId); if(security.type === SecurityTypes.TLS_ACCESS_TOKEN) { this.gatewayConfigGroup.get('thingsboard.security.caCert').setValue(security.caCert); @@ -432,7 +362,7 @@ export class GatewayConfigurationComponent implements OnInit { } } - logsToObj(logsConfig) { + private logsToObj(logsConfig: any) { const logsObject = { local: {} }; @@ -453,43 +383,42 @@ export class GatewayConfigurationComponent implements OnInit { return {local: logsObject, logFormat, dateFormat}; } - toggleRpcFields(enable: boolean) { + private toggleRpcFields(enable: boolean) { const grpcGroup = this.gatewayConfigGroup.get('grpc') as FormGroup; if (enable) { - grpcGroup.get('serverPort').enable(); - grpcGroup.get('keepAliveTimeMs').enable(); - grpcGroup.get('keepAliveTimeoutMs').enable(); - grpcGroup.get('keepalivePermitWithoutCalls').enable(); - grpcGroup.get('maxPingsWithoutData').enable(); - grpcGroup.get('minTimeBetweenPingsMs').enable(); - grpcGroup.get('minPingIntervalWithoutDataMs').enable(); + grpcGroup.get('serverPort').enable({emitEvent: false}); + grpcGroup.get('keepAliveTimeMs').enable({emitEvent: false}); + grpcGroup.get('keepAliveTimeoutMs').enable({emitEvent: false}); + grpcGroup.get('keepalivePermitWithoutCalls').enable({emitEvent: false}); + grpcGroup.get('maxPingsWithoutData').enable({emitEvent: false}); + grpcGroup.get('minTimeBetweenPingsMs').enable({emitEvent: false}); + grpcGroup.get('minPingIntervalWithoutDataMs').enable({emitEvent: false}); } else { - grpcGroup.get('serverPort').disable(); - grpcGroup.get('keepAliveTimeMs').disable(); - grpcGroup.get('keepAliveTimeoutMs').disable(); - grpcGroup.get('keepalivePermitWithoutCalls').disable(); - grpcGroup.get('maxPingsWithoutData').disable(); - grpcGroup.get('minTimeBetweenPingsMs').disable(); - grpcGroup.get('minPingIntervalWithoutDataMs').disable(); + grpcGroup.get('serverPort').disable({emitEvent: false}); + grpcGroup.get('keepAliveTimeMs').disable({emitEvent: false}); + grpcGroup.get('keepAliveTimeoutMs').disable({emitEvent: false}); + grpcGroup.get('keepalivePermitWithoutCalls').disable({emitEvent: false}); + grpcGroup.get('maxPingsWithoutData').disable({emitEvent: false}); + grpcGroup.get('minTimeBetweenPingsMs').disable({emitEvent: false}); + grpcGroup.get('minPingIntervalWithoutDataMs').disable({emitEvent: false}); } } - addCommand(command?): void { - const data = command || {}; + addCommand(command: any = {}): void { const commandsFormArray = this.commandFormArray(); const commandFormGroup = this.fb.group({ - attributeOnGateway: [data.attributeOnGateway || null, [Validators.required]], - command: [data.command || null, [Validators.required]], - timeout: [data.timeout || null, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + attributeOnGateway: [command.attributeOnGateway || null, [Validators.required, Validators.pattern(/^[^.\s]+$/)]], + command: [command.command || null, [Validators.required, Validators.pattern(/^[^.\s]+$/)]], + timeout: [command.timeout || null, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.pattern(/^[^.\s]+$/)]], }); commandsFormArray.push(commandFormGroup); } - addLocalLogConfig(name, config): void { + private addLocalLogConfig(name: string, config: any): void { const localLogsFormGroup = this.gatewayConfigGroup.get('logs.local') as FormGroup; const configGroup = this.fb.group({ - logLevel: [config.logLevel || GatewayLogLevel.info, [Validators.required]], + logLevel: [config.logLevel || GatewayLogLevel.INFO, [Validators.required]], filePath: [config.filePath || './logs', [Validators.required]], backupCount: [config.backupCount || 7, [Validators.required, Validators.min(0)]], savingTime: [config.savingTime || 3, [Validators.required, Validators.min(0)]], @@ -507,12 +436,14 @@ export class GatewayConfigurationComponent implements OnInit { } removeCommandControl(index: number, event: any): void { - if (event.pointerType === '') return; + if (event.pointerType === '') { + return; + } this.commandFormArray().removeAt(index); this.gatewayConfigGroup.markAsDirty(); } - removeAllSecurityValidators(): void { + private removeAllSecurityValidators(): void { const securityGroup = this.gatewayConfigGroup.get('thingsboard.security') as FormGroup; securityGroup.clearValidators(); for (const controlsKey in securityGroup.controls) { @@ -524,7 +455,7 @@ export class GatewayConfigurationComponent implements OnInit { } } - removeAllStorageValidators(): void { + private removeAllStorageValidators(): void { const storageGroup = this.gatewayConfigGroup.get('storage') as FormGroup; for (const storageKey in storageGroup.controls) { if (storageKey !== 'type') { @@ -535,7 +466,7 @@ export class GatewayConfigurationComponent implements OnInit { } } - removeEmpty(obj) { + private removeEmpty(obj: any) { return Object.fromEntries( Object.entries(obj) .filter(([_, v]) => v != null) @@ -543,7 +474,7 @@ export class GatewayConfigurationComponent implements OnInit { ); } - generateLogsFile(logsObj) { + private generateLogsFile(logsObj: any) { const logAttrObj = { version: 1, disable_existing_loggers: false, @@ -591,7 +522,7 @@ export class GatewayConfigurationComponent implements OnInit { return logAttrObj; } - createHandlerObj(logObj, key) { + private createHandlerObj(logObj: any, key: string) { return { class: 'thingsboard_gateway.tb_utility.tb_handler.TimedRotatingFileHandler', formatter: 'LogFormatter', @@ -603,7 +534,7 @@ export class GatewayConfigurationComponent implements OnInit { }; } - createLoggerObj(logObj, key) { + private createLoggerObj(logObj: any, key: string) { return { handlers: [`${key}Handler`, 'consoleHandler'], level: logObj.logLevel, @@ -612,12 +543,12 @@ export class GatewayConfigurationComponent implements OnInit { } saveConfig(): void { - const value = this.removeEmpty(this.gatewayConfigGroup.value); + const value = deepTrim(this.removeEmpty(this.gatewayConfigGroup.value)); value.thingsboard.statistics.commands = Object.values(value.thingsboard.statistics.commands); const attributes = []; attributes.push({ key: 'RemoteLoggingLevel', - value: value.logs.remote.enabled ? value.logs.remote.logLevel : GatewayLogLevel.none + value: value.logs.remote.enabled ? value.logs.remote.logLevel : GatewayLogLevel.NONE }); delete value.connectors; attributes.push({ @@ -642,18 +573,18 @@ export class GatewayConfigurationComponent implements OnInit { this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributes).subscribe(_ => { - this.updateCredentials(value.thingsboard.security).subscribe(_ => { + this.updateCredentials(value.thingsboard.security).subscribe(() => { if (this.dialogRef) { this.dialogRef.close(); } else { this.gatewayConfigGroup.markAsPristine(); this.cd.detectChanges(); } - }) + }); }); } - updateCredentials(securityConfig): Observable { + private updateCredentials(securityConfig: any): Observable { let updateCredentials = false; let newCredentials = {}; if (securityConfig.type === SecurityTypes.USERNAME_PASSWORD) { @@ -661,17 +592,26 @@ export class GatewayConfigurationComponent implements OnInit { updateCredentials = true; } else { const parsedCredentials = JSON.parse(this.initialCredentials.credentialsValue); - updateCredentials = !(parsedCredentials.clientId === securityConfig.clientId && parsedCredentials.userName === securityConfig.username && parsedCredentials.password === securityConfig.password); + updateCredentials = !( + parsedCredentials.clientId === securityConfig.clientId && + parsedCredentials.userName === securityConfig.username && + parsedCredentials.password === securityConfig.password); } if (updateCredentials) { - let credentialsValue: { clientId?, userName?, password? } = {}; + const credentialsValue: { clientId?: string; userName?: string; password?: string } = {}; const credentialsType = DeviceCredentialsType.MQTT_BASIC; - if (securityConfig.clientId) credentialsValue.clientId = securityConfig.clientId; - if (securityConfig.username) credentialsValue.userName = securityConfig.username; - if (securityConfig.password) credentialsValue.password = securityConfig.password; + if (securityConfig.clientId) { + credentialsValue.clientId = securityConfig.clientId; + } + if (securityConfig.username) { + credentialsValue.userName = securityConfig.username; + } + if (securityConfig.password) { + credentialsValue.password = securityConfig.password; + } newCredentials = { - credentialsType, - credentialsValue: JSON.stringify(credentialsValue) + credentialsType, + credentialsValue: JSON.stringify(credentialsValue) }; } } else if (securityConfig.type === SecurityTypes.ACCESS_TOKEN || securityConfig.type === SecurityTypes.TLS_ACCESS_TOKEN) { @@ -684,12 +624,12 @@ export class GatewayConfigurationComponent implements OnInit { newCredentials = { credentialsType: DeviceCredentialsType.ACCESS_TOKEN, credentialsId: securityConfig.accessToken - } + }; } } if (updateCredentials) { - return this.deviceService.saveDeviceCredentials({...this.initialCredentials,...newCredentials}) + return this.deviceService.saveDeviceCredentials({...this.initialCredentials,...newCredentials}); } return of(null); } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html index f3aefedbce..0c21261091 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html @@ -15,25 +15,25 @@ limitations under the License. --> -
-
- - -

{{ 'gateway.connectors' | translate }}

- - -
+
+
+ +

{{ 'gateway.connectors' | translate }}

+ + +
+
- + {{ 'gateway.connectors-table-enabled' | translate }} @@ -61,12 +61,9 @@ {{ 'gateway.configuration' | translate }} -
{{isConnectorSynced(attribute)?'sync' : 'out of sync'}}
+
+ {{ isConnectorSynced(attribute) ? 'sync' : 'out of sync' }} +
@@ -77,10 +74,8 @@ + [class]="{'hasErrors': +getErrorsCount(attribute) > 0, + 'noErrors': +getErrorsCount(attribute) === 0 || getErrorsCount(attribute) === ''}"> @@ -139,60 +134,60 @@ - -
- - -
- - +
+
+
+
+
+ {{ 'gateway.connectors-table-name' | translate }} - + {{ 'gateway.connectors-table-type' | translate }} {{type.value}} + *ngFor="let type of gatewayConnectorDefaultTypes | keyvalue" [value]="type.key">{{ type.value }} - + {{ 'gateway.connectors-table-key' | translate }} - + {{ 'gateway.connectors-table-class' | translate }} - + gateway.remote-logging-level - {{logLevel}} + {{ logLevel }} - - - - -
- -
-
-
-
-
+ + +
+ + +
+ +
+
+ +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss index 1edb40967c..8de99ac9f9 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@import '../../../../../../../scss/constants'; + :host { width: 100%; height: 100%; @@ -21,25 +23,32 @@ padding: 0; .connector-container { + height: 100%; width: 100%; + flex-direction: row; + @media #{$mat-lt-lg} { + flex-direction: column; + } + + .table-section { + min-height: 35vh; + overflow: hidden; - & > mat-card, & > div { - min-width: calc(50% - 15px); + .table-container { + overflow: auto; + } } - mat-card { - margin: 10px; - padding: 10px; - max-width: 100%; + .flex { + flex: 1; } - } - .tb-entity-table { - .tb-entity-table-content { - width: 100%; - height: 100%; - background: #fff; - overflow: hidden; + .input-container { + height: auto; + } + + .section-container { + background-color: #fff; } } @@ -48,43 +57,24 @@ color: rgba(0, 0, 0, .87) !important; } - .mat-mdc-form-field { - flex-grow: 1; - } - - mat-card { - padding-left: 10px; - background: transparent; - } - - .mat-card-selected { - background-color: rgba(48, 86, 128, 0.1); - } - .mat-mdc-slide-toggle { - margin: 15px; + margin: 0 8px; } - .status-block { + .status { text-align: center; border-radius: 16px; font-weight: 500; width: fit-content; padding: 5px 15px; - } - - .status-sync { - background: rgba(25, 128, 56, .06); - color: rgb(25, 128, 56); - } - - .status-unsync { - background: rgba(203, 37, 48, .06); - color: rgb(203, 37, 48); - } - - .action-btns { - margin: 10px 10px 0; + &-sync { + background: rgba(25, 128, 56, .06); + color: rgb(25, 128, 56); + } + &-unsync { + background: rgba(203, 37, 48, .06); + color: rgb(203, 37, 48); + } } mat-row { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 14410c3b64..ec130600ac 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -17,14 +17,11 @@ import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, NgZone, ViewChild } from '@angular/core'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; -import { Router } from '@angular/router'; import { FormBuilder, FormGroup, UntypedFormControl, ValidatorFn, Validators } from '@angular/forms'; import { EntityId } from '@shared/models/id/entity-id'; -import { MatDialog } from '@angular/material/dialog'; import { AttributeService } from '@core/http/attribute.service'; -import { DeviceService } from '@core/http/device.service'; import { TranslateService } from '@ngx-translate/core'; -import { forkJoin } from 'rxjs'; +import { forkJoin, Observable } from 'rxjs'; import { AttributeData, AttributeScope } from '@shared/models/telemetry/telemetry.models'; import { PageComponent } from '@shared/components/page.component'; import { PageLink } from '@shared/models/page/page-link'; @@ -33,47 +30,20 @@ import { Direction, SortOrder } from '@shared/models/page/sort-order'; import { MatSort } from '@angular/material/sort'; import { TelemetryWebsocketService } from '@core/ws/telemetry-websocket.service'; import { MatTableDataSource } from '@angular/material/table'; -import { GatewayLogLevel } from '@home/components/widget/lib/gateway/gateway-configuration.component'; import { ActionNotificationShow } from '@core/notification/notification.actions'; import { DialogService } from '@core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; -import { deepClone } from '@core/utils'; +import { camelCase, deepClone, isString } from '@core/utils'; import { NULL_UUID } from '@shared/models/id/has-uuid'; import { IWidgetSubscription, WidgetSubscriptionOptions } from '@core/api/widget-api.models'; import { DatasourceType, widgetType } from '@shared/models/widget.models'; import { UtilsService } from '@core/services/utils.service'; import { EntityType } from '@shared/models/entity-type.models'; - - -export interface gatewayConnector { - name: string; - type: string; - configuration?: string; - configurationJson: string; - logLevel: string; - key?: string; -} - - -export const GatewayConnectorDefaultTypesTranslates = new Map([ - ['mqtt', 'MQTT'], - ['modbus', 'MODBUS'], - ['grpc', 'GRPC'], - ['opcua', 'OPCUA'], - ['opcua_asyncio', 'OPCUA ASYNCIO'], - ['ble', 'BLE'], - ['request', 'REQUEST'], - ['can', 'CAN'], - ['bacnet', 'BACNET'], - ['odbc', 'ODBC'], - ['rest', 'REST'], - ['snmp', 'SNMP'], - ['ftp', 'FTP'], - ['socket', 'SOCKET'], - ['xmpp', 'XMPP'], - ['ocpp', 'OCCP'], - ['custom', 'CUSTOM'] -]); +import { + GatewayConnector, + GatewayConnectorDefaultTypesTranslates, + GatewayLogLevel +} from './gateway-widget.models'; @Component({ selector: 'tb-gateway-connector', @@ -84,12 +54,6 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie pageLink: PageLink; - attributeDataSource: AttributeDatasource; - - inactiveConnectorsDataSource: AttributeDatasource; - - serverDataSource: AttributeDatasource; - dataSource: MatTableDataSource; displayedColumns = ['enabled', 'key', 'type', 'syncStatus', 'errors', 'actions']; @@ -107,27 +71,29 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie connectorForm: FormGroup; - viewsInited = false; - textSearchMode: boolean; activeConnectors: Array; - inactiveConnectors: Array; + gatewayLogLevel = Object.values(GatewayLogLevel); - InitialActiveConnectors: Array; + private inactiveConnectors: Array; - gatewayLogLevel = Object.values(GatewayLogLevel); + private attributeDataSource: AttributeDatasource; + + private inactiveConnectorsDataSource: AttributeDatasource; - activeData: Array = []; + private serverDataSource: AttributeDatasource; - inactiveData: Array = []; + private activeData: Array = []; - sharedAttributeData: Array = []; + private inactiveData: Array = []; - initialConnector: gatewayConnector; + private sharedAttributeData: Array = []; - subscriptionOptions: WidgetSubscriptionOptions = { + private initialConnector: GatewayConnector; + + private subscriptionOptions: WidgetSubscriptionOptions = { callbacks: { onDataUpdated: () => this.ctx.ngZone.run(() => { this.onDataUpdated(); @@ -138,20 +104,17 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } }; - subscription: IWidgetSubscription; + private subscription: IWidgetSubscription; - constructor(protected router: Router, - protected store: Store, - protected fb: FormBuilder, - protected translate: TranslateService, - protected attributeService: AttributeService, - protected deviceService: DeviceService, - protected dialogService: DialogService, + constructor(protected store: Store, + private fb: FormBuilder, + private translate: TranslateService, + private attributeService: AttributeService, + private dialogService: DialogService, private telemetryWsService: TelemetryWebsocketService, private zone: NgZone, private utils: UtilsService, - private cd: ChangeDetectorRef, - public dialog: MatDialog) { + private cd: ChangeDetectorRef) { super(store); const sortOrder: SortOrder = {property: 'key', direction: Direction.ASC}; this.pageLink = new PageLink(1000, 0, null, sortOrder); @@ -186,16 +149,21 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie return data[sortHeaderId] || data.value[sortHeaderId]; }; - this.viewsInited = true; if (this.device) { - if (this.device.id === NULL_UUID) return; - forkJoin(this.attributeService.getEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, ['active_connectors']), - this.attributeService.getEntityAttributes(this.device, AttributeScope.SERVER_SCOPE, ['inactive_connectors'])).subscribe(attributes => { + if (this.device.id === NULL_UUID) { + return; + } + forkJoin([ + this.attributeService.getEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, ['active_connectors']), + this.attributeService.getEntityAttributes(this.device, AttributeScope.SERVER_SCOPE, ['inactive_connectors']) + ]).subscribe(attributes => { if (attributes.length) { this.activeConnectors = attributes[0].length ? attributes[0][0].value : []; - this.activeConnectors = typeof this.activeConnectors === 'string' ? JSON.parse(this.activeConnectors) : this.activeConnectors; + this.activeConnectors = isString(this.activeConnectors) ? JSON.parse(this.activeConnectors as any) : this.activeConnectors; this.inactiveConnectors = attributes[1].length ? attributes[1][0].value : []; - this.inactiveConnectors = typeof this.inactiveConnectors === 'string' ? JSON.parse(this.inactiveConnectors) : this.inactiveConnectors; + this.inactiveConnectors = isString(this.inactiveConnectors) + ? JSON.parse(this.inactiveConnectors as any) + : this.inactiveConnectors; this.updateData(true); } else { this.activeConnectors = []; @@ -206,7 +174,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } } - uniqNameRequired(): ValidatorFn { + private uniqNameRequired(): ValidatorFn { return (c: UntypedFormControl) => { const newName = c.value.trim().toLowerCase(); const found = this.dataSource.data.find((connectorAttr) => { @@ -229,7 +197,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie saveConnector(): void { const value = this.connectorForm.value; - value.configuration = this.camelize(value.name) + '.json'; + value.configuration = camelCase(value.name) + '.json'; if (value.type !== 'grpc') { delete value.key; } @@ -242,7 +210,9 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie value }]; const attributesToDelete = []; - const scope = (this.initialConnector && this.activeConnectors.includes(this.initialConnector.name)) ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; + const scope = (this.initialConnector && this.activeConnectors.includes(this.initialConnector.name)) + ? AttributeScope.SHARED_SCOPE + : AttributeScope.SERVER_SCOPE; let updateActiveConnectors = false; if (this.initialConnector && this.initialConnector.name !== value.name) { attributesToDelete.push({key: this.initialConnector.name}); @@ -256,19 +226,19 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.inactiveConnectors.splice(inactiveIndex, 1); } } - if (!this.activeConnectors.includes(value.name) && scope == AttributeScope.SHARED_SCOPE) { + if (!this.activeConnectors.includes(value.name) && scope === AttributeScope.SHARED_SCOPE) { this.activeConnectors.push(value.name); updateActiveConnectors = true; } - if (!this.inactiveConnectors.includes(value.name) && scope == AttributeScope.SERVER_SCOPE) { + if (!this.inactiveConnectors.includes(value.name) && scope === AttributeScope.SERVER_SCOPE) { this.inactiveConnectors.push(value.name); updateActiveConnectors = true; } const tasks = [this.attributeService.saveEntityAttributes(this.device, scope, attributesToSave)]; if (updateActiveConnectors) { tasks.push(this.attributeService.saveEntityAttributes(this.device, scope, [{ - key: scope == AttributeScope.SHARED_SCOPE ? 'active_connectors' : 'inactive_connectors', - value: scope == AttributeScope.SHARED_SCOPE ? this.activeConnectors : this.inactiveConnectors + key: scope === AttributeScope.SHARED_SCOPE ? 'active_connectors' : 'inactive_connectors', + value: scope === AttributeScope.SHARED_SCOPE ? this.activeConnectors : this.inactiveConnectors }])); } @@ -282,7 +252,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie }); } - updateData(reload: boolean = false) { + private updateData(reload: boolean = false) { this.pageLink.sortOrder.property = this.sort.active; this.pageLink.sortOrder.direction = Direction[this.sort.direction.toUpperCase()]; this.attributeDataSource.loadAttributes(this.device, AttributeScope.CLIENT_SCOPE, this.pageLink, reload).subscribe(data => { @@ -301,26 +271,30 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } isConnectorSynced(attribute: AttributeData) { - const connectorData = attribute.value; - if (!connectorData.ts) return false; + const connectorData = attribute.value; + if (!connectorData.ts) { + return false; + } const clientIndex = this.activeData.findIndex(data => { - const sharedData = data.value; + const sharedData = data.value; return sharedData.name === connectorData.name; - }) - if (clientIndex == -1) return false; + }); + if (clientIndex === -1) { + return false; + } const sharedIndex = this.sharedAttributeData.findIndex(data => { - const sharedData = data.value; + const sharedData = data.value; return sharedData.name === connectorData.name && sharedData.ts && sharedData.ts <= connectorData.ts; - }) + }); return sharedIndex !== -1; } - combineData() { + private combineData() { this.dataSource.data = [...this.activeData, ...this.inactiveData, ...this.sharedAttributeData].filter((item, index, self) => index === self.findIndex((t) => t.key === item.key) - ).map(attribute=>{ + ).map(attribute => { attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; - return attribute + return attribute; }); } @@ -330,14 +304,13 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } this.nameInput.nativeElement.focus(); this.clearOutConnectorForm(); - } - clearOutConnectorForm(): void { + private clearOutConnectorForm(): void { this.connectorForm.setValue({ name: '', type: 'mqtt', - logLevel: GatewayLogLevel.info, + logLevel: GatewayLogLevel.INFO, key: 'auto', class: '', configuration: '', @@ -347,7 +320,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.connectorForm.markAsPristine(); } - selectConnector(attribute): void { + selectConnector(attribute: AttributeData): void { if (this.connectorForm.disabled) { this.connectorForm.enable(); } @@ -363,8 +336,10 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.connectorForm.markAsPristine(); } - isSameConnector(attribute): boolean { - if (!this.initialConnector) return false; + isSameConnector(attribute: AttributeData): boolean { + if (!this.initialConnector) { + return false; + } const connector = attribute.value; return this.initialConnector.name === connector.name; } @@ -378,12 +353,11 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie verticalPosition: 'top', horizontalPosition: 'right', target: 'dashboardRoot', - // panelClass: this.widgetNamespace, forceDismiss: true })); } - returnType(attribute) { + returnType(attribute: AttributeData): string { const value = attribute.value; return this.gatewayConnectorDefaultTypes.get(value.type); } @@ -396,8 +370,10 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie const content = `All connector data will be deleted.`; this.dialogService.confirm(title, content, 'Cancel', 'Delete').subscribe(result => { if (result) { - const tasks = []; - const scope = (this.initialConnector && this.activeConnectors.includes(this.initialConnector.name)) ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; + const tasks: Array> = []; + const scope = (this.initialConnector && this.activeConnectors.includes(this.initialConnector.name)) + ? AttributeScope.SHARED_SCOPE + : AttributeScope.SERVER_SCOPE; tasks.push(this.attributeService.deleteEntityAttributes(this.device, scope, [attribute])); const activeIndex = this.activeConnectors.indexOf(attribute.key); const inactiveIndex = this.inactiveConnectors.indexOf(attribute.key); @@ -408,10 +384,10 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.inactiveConnectors.splice(inactiveIndex, 1); } tasks.push(this.attributeService.saveEntityAttributes(this.device, scope, [{ - key: scope == AttributeScope.SHARED_SCOPE ? 'active_connectors' : 'inactive_connectors', - value: scope == AttributeScope.SHARED_SCOPE ? this.activeConnectors : this.inactiveConnectors + key: scope === AttributeScope.SHARED_SCOPE ? 'active_connectors' : 'inactive_connectors', + value: scope === AttributeScope.SHARED_SCOPE ? this.activeConnectors : this.inactiveConnectors }])); - forkJoin(tasks).subscribe(_ => { + forkJoin(tasks).subscribe(() => { if (this.initialConnector ? this.initialConnector.name === attribute.key : true) { this.clearOutConnectorForm(); this.cd.detectChanges(); @@ -423,10 +399,6 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie }); } - camelize(str): string { - return str.toLowerCase().replace(/\s+/g, '_'); - } - connectorLogs(attribute: AttributeData, $event: Event): void { if ($event) { $event.stopPropagation(); @@ -448,7 +420,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } - enableConnector(attribute): void { + enableConnector(attribute: AttributeData): void { const wasEnabled = this.activeConnectors.includes(attribute.key); const scopeOld = wasEnabled ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; const scopeNew = !wasEnabled ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; @@ -475,7 +447,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie }); } - onDataUpdateError(e: any) { + private onDataUpdateError(e: any) { const exceptionData = this.utils.parseException(e); let errorText = exceptionData.name; if (exceptionData.message) { @@ -484,11 +456,11 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie console.error(errorText); } - onDataUpdated() { + private onDataUpdated() { this.cd.detectChanges(); } - generateSubscription() { + private generateSubscription() { if (this.subscription) { this.subscription.unsubscribe(); } @@ -497,21 +469,23 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie type: DatasourceType.entity, entityType: EntityType.DEVICE, entityId: this.device.id, - entityName: "Gateway", + entityName: 'Gateway', timeseries: [] }]; this.dataSource.data.forEach(value => { - subscriptionInfo[0].timeseries.push({name: `${value.key}_ERRORS_COUNT`, label: `${value.key}_ERRORS_COUNT`}) - }) - this.ctx.subscriptionApi.createSubscriptionFromInfo(widgetType.latest, subscriptionInfo,this.subscriptionOptions, false, true).subscribe(subscription => { + subscriptionInfo[0].timeseries.push({name: `${value.key}_ERRORS_COUNT`, label: `${value.key}_ERRORS_COUNT`}); + }); + this.ctx.subscriptionApi.createSubscriptionFromInfo(widgetType.latest, subscriptionInfo, this.subscriptionOptions, + false, true).subscribe(subscription => { this.subscription = subscription; }); } } - getErrorsCount(attribute) { + getErrorsCount(attribute: AttributeData): string { const connectorName = attribute.key; - const connector = this.subscription && this.subscription.data.find(data=>data && data.dataKey.name === `${connectorName}_ERRORS_COUNT`); - return (connector && this.activeConnectors.includes(connectorName))? connector.data[0][1]: 'Inactive'; + const connector = this.subscription && this.subscription.data + .find(data => data && data.dataKey.name === `${connectorName}_ERRORS_COUNT`); + return (connector && this.activeConnectors.includes(connectorName)) ? (connector.data[0][1] || 0) : 'Inactive'; } } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.html index bdf7d0d16e..e195dcece9 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.html @@ -18,43 +18,39 @@ - Created time + {{ 'widgets.gateway.created-time' | translate }} - {{ attribute.ts | date:'yyyy-MM-dd HH:mm:ss'}} + {{ attribute.ts | date:'yyyy-MM-dd HH:mm:ss' }} - Status + {{ 'widgets.gateway.status' | translate }} - {{ attribute.status }} + {{ attribute.status }} - Message - + {{ 'widgets.gateway.message' | translate }} + {{ attribute.message }} - - + +
{{'attribute.no-telemetry-text' | translate}} + fxFlex fxLayoutAlign="center center" + class="no-data-found">{{ 'attribute.no-telemetry-text' | translate }} - diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts index f724e9dff9..6e0f20bdc3 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts @@ -14,55 +14,27 @@ /// limitations under the License. /// -import { AfterViewInit, Component, ElementRef, Input, ViewChild } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { AppState } from '@core/core.state'; -import { Router } from '@angular/router'; -import { FormBuilder, FormGroup } from '@angular/forms'; -import { MatDialog, MatDialogRef } from '@angular/material/dialog'; -import { AttributeService } from '@core/http/attribute.service'; -import { DeviceService } from '@core/http/device.service'; -import { TranslateService } from '@ngx-translate/core'; -import { AttributeData, DataKeyType } from '@shared/models/telemetry/telemetry.models'; -import { PageComponent } from '@shared/components/page.component'; +import { AfterViewInit, Component, ElementRef, Input, ViewChild } from '@angular/core'; +import { MatDialogRef } from '@angular/material/dialog'; +import { DataKeyType } from '@shared/models/telemetry/telemetry.models'; import { PageLink } from '@shared/models/page/page-link'; -import { AttributeDatasource } from "@home/models/datasource/attribute-datasource"; -import { Direction, SortOrder } from "@shared/models/page/sort-order"; +import { Direction, SortOrder } from '@shared/models/page/sort-order'; import { MatSort } from '@angular/material/sort'; import { MatTableDataSource } from '@angular/material/table'; -import { GatewayLogLevel } from '@home/components/widget/lib/gateway/gateway-configuration.component'; -import { DialogService } from '@core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; import { MatPaginator } from '@angular/material/paginator'; - - -export interface GatewayConnector { - name: string; - type: string; - configuration?: string; - configurationJson: string; - logLevel: string; - key?: string; -} - -export interface LogLink { - name: string; - key: string; - filterFn?: Function; -} +import { GatewayLogData, GatewayStatus, LogLink } from './gateway-widget.models'; @Component({ selector: 'tb-gateway-logs', templateUrl: './gateway-logs.component.html', styleUrls: ['./gateway-logs.component.scss'] }) -export class GatewayLogsComponent extends PageComponent implements AfterViewInit { +export class GatewayLogsComponent implements AfterViewInit { pageLink: PageLink; - attributeDataSource: AttributeDatasource; - - dataSource: MatTableDataSource + dataSource: MatTableDataSource; displayedColumns = ['ts', 'status', 'message']; @@ -76,63 +48,39 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit @ViewChild(MatSort) sort: MatSort; @ViewChild(MatPaginator) paginator: MatPaginator; - connectorForm: FormGroup; - - viewsInited = false; - textSearchMode: boolean; - activeConnectors: Array; - - inactiveConnectors: Array; - - InitialActiveConnectors: Array; - - gatewayLogLevel = Object.values(GatewayLogLevel); - logLinks: Array; - initialConnector: GatewayConnector; - activeLink: LogLink; gatewayLogLinks: Array = [ { - name: "General", - key: "LOGS" + name: 'General', + key: 'LOGS' }, { - name: "Service", - key: "SERVICE_LOGS" + name: 'Service', + key: 'SERVICE_LOGS' }, { - name: "Connection", - key: "CONNECTION_LOGS" + name: 'Connection', + key: 'CONNECTION_LOGS' }, { - name: "Storage", - key: "STORAGE_LOGS" + name: 'Storage', + key: 'STORAGE_LOGS' }, { key: 'EXTENSIONS_LOGS', - name: "Extension" - }] - - - constructor(protected router: Router, - protected store: Store, - protected fb: FormBuilder, - protected translate: TranslateService, - protected attributeService: AttributeService, - protected deviceService: DeviceService, - protected dialogService: DialogService, - public dialog: MatDialog) { - super(store); + name: 'Extension' + }]; + + + constructor() { const sortOrder: SortOrder = {property: 'ts', direction: Direction.DESC}; this.pageLink = new PageLink(10, 0, null, sortOrder); - this.dataSource = new MatTableDataSource([]); - + this.dataSource = new MatTableDataSource([]); } - ngAfterViewInit() { this.dataSource.sort = this.sort; this.dataSource.paginator = this.paginator; @@ -140,22 +88,18 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit this.ctx.defaultSubscription.options.timeWindowConfig = timewindow; this.ctx.defaultSubscription.updateDataSubscriptions(); return timewindow; - } + }; if (this.ctx.settings.isConnectorLog && this.ctx.settings.connectorLogState) { const connector = this.ctx.stateController.getStateParams()[this.ctx.settings.connectorLogState]; this.logLinks = [{ key: `${connector.key}_LOGS`, - name: "Connector", - filterFn: (attrData)=>{ - return !attrData.message.includes(`_converter.py`) - } - },{ + name: 'Connector', + filterFn: (attrData) => !attrData.message.includes(`_converter.py`) + }, { key: `${connector.key}_LOGS`, - name: "Converter", - filterFn: (attrData)=>{ - return attrData.message.includes(`_converter.py`) - } - }] + name: 'Converter', + filterFn: (attrData) => attrData.message.includes(`_converter.py`) + }]; } else { this.logLinks = this.gatewayLogLinks; } @@ -164,20 +108,20 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit } - updateData(sort?) { + private updateData() { if (this.ctx.defaultSubscription.data.length && this.ctx.defaultSubscription.data[0]) { let attrData = this.ctx.defaultSubscription.data[0].data.map(data => { - let result = { + const result = { ts: data[0], key: this.activeLink.key, message: /\[(.*)/.exec(data[1])[0], - status: 'INVALID LOG FORMAT' + status: 'INVALID LOG FORMAT' as GatewayStatus }; try { - result.status= data[1].match(/\|(\w+)\|/)[1]; + result.status = data[1].match(/\|(\w+)\|/)[1]; } catch (e) { - result.status = 'INVALID LOG FORMAT' + result.status = 'INVALID LOG FORMAT' as GatewayStatus; } return result; @@ -186,39 +130,35 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit attrData = attrData.filter(data => this.activeLink.filterFn(data)); } this.dataSource.data = attrData; - if (sort) { - this.dataSource.sortData(this.dataSource.data, this.sort); - } } } - onTabChanged(link) { + onTabChanged(link: LogLink) { this.activeLink = link; this.changeSubscription(); } - statusClass(status) { + statusClass(status: GatewayStatus): string { switch (status) { - case GatewayLogLevel.debug: - return "status status-debug"; - case GatewayLogLevel.warning: - return "status status-warning"; - case GatewayLogLevel.error: - case "EXCEPTION": - return "status status-error"; - case GatewayLogLevel.info: + case GatewayStatus.DEBUG: + return 'status status-debug'; + case GatewayStatus.WARNING: + return 'status status-warning'; + case GatewayStatus.ERROR: + case GatewayStatus.EXCEPTION: + return 'status status-error'; default: - return "status status-info"; + return 'status status-info'; } } - statusClassMsg(status) { - if (status === "EXCEPTION") { + statusClassMsg(status?: GatewayStatus): string { + if (status === GatewayStatus.EXCEPTION) { return 'msg-status-exception'; } } - changeSubscription() { + private changeSubscription() { if (this.ctx.datasources && this.ctx.datasources[0].entity && this.ctx.defaultSubscription.options.datasources) { this.ctx.defaultSubscription.options.datasources[0].dataKeys = [{ name: this.activeLink.key, @@ -229,8 +169,7 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit this.ctx.defaultSubscription.updateDataSubscriptions(); this.ctx.defaultSubscription.callbacks.onDataUpdated = () => { this.updateData(); - } - + }; } } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-remote-configuration-dialog.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-remote-configuration-dialog.html index 7a66cfd4fb..adb7d0b197 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-remote-configuration-dialog.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-remote-configuration-dialog.html @@ -15,43 +15,38 @@ limitations under the License. --> -
- - warning -

gateway.configuration-delete-dialog-header

- - -
-
-
- - - gateway.configuration-delete-dialog-input - - - {{'gateway.configuration-delete-dialog-input-required' | translate }} - - -
-
-
- - -
-
+ + warning +

gateway.configuration-delete-dialog-header

+ + +
+
+ + + gateway.configuration-delete-dialog-input + + + {{ 'gateway.configuration-delete-dialog-input-required' | translate }} + + +
+
+ + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-remote-configuration-dialog.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-remote-configuration-dialog.ts index d5274eef97..68c19d83a5 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-remote-configuration-dialog.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-remote-configuration-dialog.ts @@ -14,7 +14,7 @@ /// limitations under the License. /// -import { Component, Inject, OnInit } from '@angular/core'; +import { Component, Inject } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; @@ -31,11 +31,10 @@ export interface GatewayRemoteConfigurationDialogData { templateUrl: './gateway-remote-configuration-dialog.html' }) -export class GatewayRemoteConfigurationDialogComponent extends DialogComponent implements OnInit { +export class GatewayRemoteConfigurationDialogComponent extends + DialogComponent{ gatewayName: string; - gatewayControl: FormControl; constructor(protected store: Store, @@ -45,10 +44,7 @@ export class GatewayRemoteConfigurationDialogComponent extends DialogComponent
- - {{'gateway.statistics.command' | translate}} - - - {{command}} - - - - - - {{'gateway.statistics.timeout-ms' | translate}} - - - {{'gateway.statistics.timeout-min' | translate }} - - - - {{'widget-config.datasource-parameters' | translate}} - - edit - - - + + + {{ 'gateway.statistics.command' | translate }} + + + {{ command }} + + + + + {{ 'gateway.statistics.timeout-ms' | translate }} + + + {{ 'gateway.statistics.timeout-min' | translate }} + + + + + + {{ 'gateway.statistics.command' | translate }} + + + + {{ 'widget-config.datasource-parameters' | translate }} + + edit + + + +
- - {{'gateway.rpc-command-result' | translate}} +
+ {{ 'gateway.rpc-command-result' | translate }} - - + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.scss index afdcf9b1f0..345688d451 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.scss @@ -22,24 +22,24 @@ padding: 0; .command-form { - width: 100%; flex-wrap: nowrap; - padding: 0 15px 5px; - margin-bottom: 5px; - + padding: 0 5px 5px; & > button { margin-top: 10px; } } .result-block { - padding: 0 15px; + padding: 0 5px; display: flex; flex-direction: column; - + flex: 1; & > span { font-weight: 600; } + tb-json-content { + flex: 1; + } } } @@ -47,9 +47,5 @@ .tb-json-content { height: 100%; } - - .mat-mdc-form-field-icon-suffix { - z-index: 100; - } } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.ts index 941731f7e0..d3002ed748 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.ts @@ -14,17 +14,9 @@ /// limitations under the License. /// -import { AfterViewInit, Component, Input } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { AppState } from '@core/core.state'; -import { Router } from '@angular/router'; +import { AfterViewInit, Component, Input } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { MatDialog, MatDialogRef } from '@angular/material/dialog'; -import { AttributeService } from '@core/http/attribute.service'; -import { DeviceService } from '@core/http/device.service'; -import { TranslateService } from '@ngx-translate/core'; -import { PageComponent } from "@shared/components/page.component"; -import { DialogService } from '@core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; import { ContentType } from '@shared/models/constants'; import { @@ -33,13 +25,12 @@ import { } from '@shared/components/dialog/json-object-edit-dialog.component'; import { jsonRequired } from '@shared/components/json-object-edit.component'; - @Component({ selector: 'tb-gateway-service-rpc', templateUrl: './gateway-service-rpc.component.html', styleUrls: ['./gateway-service-rpc.component.scss'] }) -export class GatewayServiceRPCComponent extends PageComponent implements AfterViewInit { +export class GatewayServiceRPCComponent implements AfterViewInit { @Input() ctx: WidgetContext; @@ -53,39 +44,28 @@ export class GatewayServiceRPCComponent extends PageComponent implements AfterVi isConnector: boolean; - connectorType: string; - RPCCommands: Array = [ - "Ping", - "Stats", - "Devices", - "Update", - "Version", - "Restart", - "Reboot" - ] - - - constructor(protected router: Router, - protected store: Store, - protected fb: FormBuilder, - protected translate: TranslateService, - protected attributeService: AttributeService, - protected deviceService: DeviceService, - protected dialogService: DialogService, - public dialog: MatDialog) { - super(store); + 'Ping', + 'Stats', + 'Devices', + 'Update', + 'Version', + 'Restart', + 'Reboot' + ]; + + private connectorType: string; + + constructor(private fb: FormBuilder, + private dialog: MatDialog) { this.commandForm = this.fb.group({ command: [null,[Validators.required]], time: [60, [Validators.required, Validators.min(1)]], params: [{}, [jsonRequired]], result: [null] - }) - - + }); } - ngAfterViewInit() { this.isConnector = this.ctx.settings.isConnector; if (!this.isConnector) { @@ -95,16 +75,16 @@ export class GatewayServiceRPCComponent extends PageComponent implements AfterVi } } - sendCommand() { const formValues = this.commandForm.value; const commandPrefix = this.isConnector ? `${this.connectorType}_` : 'gateway_'; - this.ctx.controlApi.sendTwoWayCommand(commandPrefix+formValues.command.toLowerCase(), {},formValues.time).subscribe(resp=>{ - this.commandForm.get('result').setValue(JSON.stringify(resp)); - },error => { - console.log(error); - this.commandForm.get('result').setValue(JSON.stringify(error.error)); - }) + this.ctx.controlApi.sendTwoWayCommand(commandPrefix+formValues.command.toLowerCase(), {},formValues.time).subscribe({ + next: resp => this.commandForm.get('result').setValue(JSON.stringify(resp)), + error: error => { + console.log(error); + this.commandForm.get('result').setValue(JSON.stringify(error.error)); + } + }); } openEditJSONDialog($event: Event) { @@ -126,5 +106,4 @@ export class GatewayServiceRPCComponent extends PageComponent implements AfterVi } ); } - } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-statistics.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-statistics.component.html index 8da9b2bce8..8671b58f46 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-statistics.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-statistics.component.html @@ -19,13 +19,13 @@
- {{'gateway.statistics.statistic' | translate}} + {{ 'gateway.statistics.statistic' | translate }} - {{key}} + {{ key }} - {{command.attributeOnGateway}} + {{ command.attributeOnGateway }} @@ -34,44 +34,42 @@ {{'gateway.statistics.statistic-commands-empty' | translate }} - {{'gateway.statistics.command' | translate}} + {{ 'gateway.statistics.command' | translate }}
-
- -
+
- {{'audit-log.timestamp' | translate}} + {{ 'widgets.gateway.created-time' | translate }} {{row[0]| date:'yyyy-MM-dd HH:mm:ss' }} - {{"event.message" | translate}} + {{ 'widgets.gateway.message' | translate }} {{ row[1] }} - -
{{'attribute.no-telemetry-text' | translate}} + class="no-data-found">{{ 'attribute.no-telemetry-text' | translate }}
- +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-statistics.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-statistics.component.ts index 90e5541217..503f5643bf 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-statistics.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-statistics.component.ts @@ -14,18 +14,10 @@ /// limitations under the License. /// -import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, ViewChild } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { AppState } from '@core/core.state'; -import { Router } from '@angular/router'; +import { AfterViewInit, Component, ElementRef, Input, ViewChild } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; -import { MatDialog } from '@angular/material/dialog'; import { AttributeService } from '@core/http/attribute.service'; -import { DeviceService } from '@core/http/device.service'; -import { TranslateService } from '@ngx-translate/core'; import { AttributeData, AttributeScope } from '@shared/models/telemetry/telemetry.models'; -import { PageComponent } from '@shared/components/page.component'; -import { DialogService } from '@core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; import { TbFlot } from '@home/components/widget/lib/flot-widget'; import { ResizeObserver } from '@juggle/resize-observer'; @@ -41,13 +33,12 @@ import { MatTableDataSource } from '@angular/material/table'; import { MatSort } from '@angular/material/sort'; import { NULL_UUID } from '@shared/models/id/has-uuid'; - @Component({ selector: 'tb-gateway-statistics', templateUrl: './gateway-statistics.component.html', styleUrls: ['./gateway-statistics.component.scss'] }) -export class GatewayStatisticsComponent extends PageComponent implements AfterViewInit { +export class GatewayStatisticsComponent implements AfterViewInit { @ViewChild(MatSort) sort: MatSort; @ViewChild('statisticChart') statisticChart: ElementRef; @@ -58,10 +49,11 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi @Input() public general: boolean; - public isNumericData: boolean = false; + public isNumericData = false; + public dataTypeDefined: boolean = false; public chartInited: boolean; private flot: TbFlot; - private flotCtx; + private flotCtx: WidgetContext; public statisticForm: FormGroup; public statisticsKeys = []; public commands = []; @@ -89,70 +81,61 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi }; - constructor(protected router: Router, - protected store: Store, - protected fb: FormBuilder, - protected translate: TranslateService, - protected attributeService: AttributeService, - protected deviceService: DeviceService, - protected dialogService: DialogService, - private cd: ChangeDetectorRef, - private utils: UtilsService, - public dialog: MatDialog) { - super(store); + constructor(private fb: FormBuilder, + private attributeService: AttributeService, + private utils: UtilsService) { const sortOrder: SortOrder = {property: '0', direction: Direction.DESC}; this.pageLink = new PageLink(Number.POSITIVE_INFINITY, 0, null, sortOrder); this.displayedColumns = ['0', '1']; this.dataSource = new MatTableDataSource([]); this.statisticForm = this.fb.group({ statisticKey: [null, []] - }) + }); this.statisticForm.get('statisticKey').valueChanges.subscribe(value => { this.commandObj = null; if (this.commands.length) { this.commandObj = this.commands.find(command => command.attributeOnGateway === value); } - if (this.subscriptionInfo) this.createChartsSubscription(this.ctx.defaultSubscription.datasources[0].entity, value); - }) + if (this.subscriptionInfo) { + this.createChartsSubscription(this.ctx.defaultSubscription.datasources[0].entity, value); + } + }); } ngAfterViewInit() { this.dataSource.sort = this.sort; - this.sort.sortChange.subscribe(_=>{ - this.sortData(); - }) + this.sort.sortChange.subscribe(() => this.sortData()); this.init(); if (this.ctx.defaultSubscription.datasources.length) { const gateway = this.ctx.defaultSubscription.datasources[0].entity; - if (gateway.id.id === NULL_UUID) return; + if (gateway.id.id === NULL_UUID) { + return; + } if (!this.general) { - this.attributeService.getEntityAttributes(gateway.id, AttributeScope.SHARED_SCOPE, ["general_configuration"]).subscribe((resp: AttributeData[]) => { - if (resp && resp.length) { - this.commands = resp[0].value.statistics.commands; - if (!this.statisticForm.get('statisticKey').value && this.commands && this.commands.length) { - this.statisticForm.get('statisticKey').setValue(this.commands[0].attributeOnGateway); - this.createChartsSubscription(gateway, this.commands[0].attributeOnGateway); + this.attributeService.getEntityAttributes(gateway.id, AttributeScope.SHARED_SCOPE, ['general_configuration']) + .subscribe((resp: AttributeData[]) => { + if (resp && resp.length) { + this.commands = resp[0].value.statistics.commands; + if (!this.statisticForm.get('statisticKey').value && this.commands && this.commands.length) { + this.statisticForm.get('statisticKey').setValue(this.commands[0].attributeOnGateway); + this.createChartsSubscription(gateway, this.commands[0].attributeOnGateway); + } } - } - }) + }); } else { - let connectorsTs; this.attributeService.getEntityTimeseriesLatest(gateway.id).subscribe( data => { - connectorsTs = Object.keys(data) - .filter(el => el.includes( - 'ConnectorEventsProduced' - ) || el.includes( - 'ConnectorEventsSent')) + const connectorsTs = Object.keys(data) + .filter(el => el.includes('ConnectorEventsProduced') || el.includes('ConnectorEventsSent')); this.createGeneralChartsSubscription(gateway, connectorsTs); - }) + }); } } } - public sortData () { + public sortData() { this.dataSource.sortData(this.dataSource.data, this.sort); } @@ -162,7 +145,7 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi } private createChartsSubscription(gateway: BaseData, attr: string) { - let subscriptionInfo = [{ + const subscriptionInfo = [{ type: DatasourceType.entity, entityType: EntityType.DEVICE, entityId: gateway.id.id, @@ -173,10 +156,11 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi subscriptionInfo[0].timeseries = [{name: attr, label: attr}]; this.subscriptionInfo = subscriptionInfo; this.changeSubscription(subscriptionInfo); + this.ctx.defaultSubscription.unsubscribe(); } - private createGeneralChartsSubscription(gateway: BaseData, attrData: [string]) { - let subscriptionInfo = [{ + private createGeneralChartsSubscription(gateway: BaseData, attrData: string[]) { + const subscriptionInfo = [{ type: DatasourceType.entity, entityType: EntityType.DEVICE, entityId: gateway.id.id, @@ -184,20 +168,20 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi timeseries: [] }]; subscriptionInfo[0].timeseries = []; - if (attrData && attrData.length) { + if (attrData?.length) { attrData.forEach(attr => { - subscriptionInfo[0].timeseries.push({name: attr, label: attr}) - }) + subscriptionInfo[0].timeseries.push({name: attr, label: attr}); + }); } this.ctx.defaultSubscription.datasources[0].dataKeys.forEach(dataKey => { - subscriptionInfo[0].timeseries.push({name: dataKey.name, label: dataKey.label}) - }) + subscriptionInfo[0].timeseries.push({name: dataKey.name, label: dataKey.label}); + }); - this.subscriptionInfo = subscriptionInfo; this.changeSubscription(subscriptionInfo); + this.ctx.defaultSubscription.unsubscribe(); } - init = () => { + private init = () => { this.flotCtx = { $scope: this.ctx.$scope, $injector: this.ctx.$injector, @@ -207,20 +191,20 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi subscriptionApi: this.ctx.subscriptionApi, detectChanges: this.ctx.detectChanges, settings: this.ctx.settings - }; - } + } as WidgetContext; + }; - updateChart = () => { + private updateChart = () => { if (this.flot && this.ctx.defaultSubscription.data.length) { this.flot.update(); } - } + }; - resize = () => { + private resize = () => { if (this.flot) { this.flot.resize(); } - } + }; private reset() { if (this.resize$) { @@ -260,7 +244,7 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi this.chartInited = true; this.flotCtx.$container = $(this.statisticChart.nativeElement); this.resize$.observe(this.statisticChart.nativeElement); - this.flot = new TbFlot(this.flotCtx as WidgetContext, "line"); + this.flot = new TbFlot(this.flotCtx as WidgetContext, 'line'); this.flot.update(); } @@ -270,16 +254,21 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi return; } this.dataSource.data = this.subscription.data.length ? this.subscription.data[0].data : []; - this.isNumericData = this.dataSource.data.every(data => !isNaN(+data[1]) ); + if (this.dataSource.data.length && !this.dataTypeDefined) { + this.dataTypeDefined = true; + this.isNumericData = this.dataSource.data.every(data => !isNaN(+data[1])); + } } - changeSubscription(subscriptionInfo: SubscriptionInfo[]) { + private changeSubscription(subscriptionInfo: SubscriptionInfo[]) { if (this.subscription) { this.reset(); } if (this.ctx.datasources[0].entity) { - this.ctx.subscriptionApi.createSubscriptionFromInfo(widgetType.timeseries, subscriptionInfo, this.subscriptionOptions, false, true).subscribe(subscription => { + this.ctx.subscriptionApi.createSubscriptionFromInfo(widgetType.timeseries, subscriptionInfo, this.subscriptionOptions, + false, true).subscribe(subscription => { + this.dataTypeDefined = false; this.subscription = subscription; this.isDataOnlyNumbers(); this.legendData = this.subscription.legendData; @@ -291,9 +280,7 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi if (this.isNumericData) { this.initChart(); } - }) - + }); } } - } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-widget.models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-widget.models.ts new file mode 100644 index 0000000000..d58c33079a --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-widget.models.ts @@ -0,0 +1,142 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// 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 +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// 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. +/// + +export enum StorageTypes { + MEMORY = 'memory', + FILE = 'file', + SQLITE = 'sqlite' +} + +export enum DeviceGatewayStatus { + EXCEPTION = 'EXCEPTION' +} + +export enum GatewayLogLevel { + NONE = 'NONE', + CRITICAL = 'CRITICAL', + ERROR = 'ERROR', + WARNING = 'WARNING', + INFO = 'INFO', + DEBUG = 'DEBUG' +} + +export const GatewayStatus = { + ...GatewayLogLevel, + ...DeviceGatewayStatus +}; + +export type GatewayStatus = DeviceGatewayStatus | GatewayLogLevel; + +export enum LogSavingPeriod { + days = 'D', + hours = 'H', + minutes = 'M', + seconds = 'S' +} + +export enum LocalLogsConfigs { + service = 'service', + connector = 'connector', + converter = 'converter', + tb_connection = 'tb_connection', + storage = 'storage', + extension = 'extension' +} + +export const LocalLogsConfigTranslateMap = new Map([ + [LocalLogsConfigs.service, 'Service'], + [LocalLogsConfigs.connector, 'Connector'], + [LocalLogsConfigs.converter, 'Converter'], + [LocalLogsConfigs.tb_connection, 'TB Connection'], + [LocalLogsConfigs.storage, 'Storage'], + [LocalLogsConfigs.extension, 'Extension'] +]); + +export const LogSavingPeriodTranslations = new Map( + [ + [LogSavingPeriod.days, 'gateway.logs.days'], + [LogSavingPeriod.hours, 'gateway.logs.hours'], + [LogSavingPeriod.minutes, 'gateway.logs.minutes'], + [LogSavingPeriod.seconds, 'gateway.logs.seconds'] + ] +); + +export const StorageTypesTranslationMap = new Map( + [ + [StorageTypes.MEMORY, 'gateway.storage-types.memory-storage'], + [StorageTypes.FILE, 'gateway.storage-types.file-storage'], + [StorageTypes.SQLITE, 'gateway.storage-types.sqlite'] + ] +); + +export enum SecurityTypes { + ACCESS_TOKEN = 'accessToken', + USERNAME_PASSWORD = 'usernamePassword', + TLS_ACCESS_TOKEN = 'tlsAccessToken', + TLS_PRIVATE_KEY = 'tlsPrivateKey' +} + +export const GecurityTypesTranslationsMap = new Map( + [ + [SecurityTypes.ACCESS_TOKEN, 'gateway.security-types.access-token'], + [SecurityTypes.USERNAME_PASSWORD, 'gateway.security-types.username-password'], + [SecurityTypes.TLS_ACCESS_TOKEN, 'gateway.security-types.tls-access-token'], + // [SecurityTypes.TLS_PRIVATE_KEY, 'gateway.security-types.tls-private-key'], + ] +); + +export interface GatewayConnector { + name: string; + type: string; + configuration?: string; + configurationJson: string; + logLevel: string; + key?: string; +} + + +export const GatewayConnectorDefaultTypesTranslates = new Map([ + ['mqtt', 'MQTT'], + ['modbus', 'MODBUS'], + ['grpc', 'GRPC'], + ['opcua', 'OPCUA'], + ['opcua_asyncio', 'OPCUA ASYNCIO'], + ['ble', 'BLE'], + ['request', 'REQUEST'], + ['can', 'CAN'], + ['bacnet', 'BACNET'], + ['odbc', 'ODBC'], + ['rest', 'REST'], + ['snmp', 'SNMP'], + ['ftp', 'FTP'], + ['socket', 'SOCKET'], + ['xmpp', 'XMPP'], + ['ocpp', 'OCPP'], + ['custom', 'CUSTOM'] +]); + +export interface LogLink { + name: string; + key: string; + filterFn?: (arg: any) => boolean; +} + +export interface GatewayLogData { + ts: number; + key: string; + message: string; + status: GatewayStatus; +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/battery-level-widget.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/battery-level-widget.component.html new file mode 100644 index 0000000000..89ca327b71 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/battery-level-widget.component.html @@ -0,0 +1,44 @@ + +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
{{ valueText }}
+
+
+
+ +
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/battery-level-widget.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/battery-level-widget.component.scss new file mode 100644 index 0000000000..5dba13ec07 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/battery-level-widget.component.scss @@ -0,0 +1,158 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ +:host { + .tb-battery-level-panel { + width: 100%; + height: 100%; + position: relative; + display: flex; + flex-direction: column; + gap: 16px; + padding: 20px 24px 24px 24px; + &.tb-battery-level-pointer { + cursor: pointer; + } + > div:not(.tb-battery-level-overlay) { + z-index: 1; + } + .tb-battery-level-overlay { + position: absolute; + top: 12px; + left: 12px; + bottom: 12px; + right: 12px; + } + .tb-battery-level-content { + min-height: 0; + flex: 1; + display: flex; + justify-content: center; + &.vertical { + flex-direction: row; + gap: 16px; + .tb-battery-level-value-box { + align-items: center; + .tb-battery-level-value { + padding: 8px 12px; + } + } + } + &.horizontal { + flex-direction: column-reverse; + gap: 8px; + align-items: center; + .tb-battery-level-value-box { + .tb-battery-level-value { + padding: 4px 6px; + } + } + } + .tb-battery-level-box { + display: flex; + align-items: center; + .tb-battery-level-rectangle { + width: 100%; + height: 100%; + position: relative; + .tb-battery-level-shape { + position: absolute; + inset: 0; + mask-repeat: no-repeat; + mask-size: cover; + mask-position: center; + } + .tb-battery-level-container { + position: absolute; + display: flex; + gap: 3%; + } + .tb-battery-level-indicator-box { + width: 100%; + height: 100%; + &.solid { + background-repeat: no-repeat; + transition: background 0.2s ease-out; + } + &.divided { + transition: opacity 0.2s ease-out; + } + } + &.vertical { + .tb-battery-level-shape { + mask-image: url(/assets/widget/battery-level/battery-shape-vertical.svg); + } + .tb-battery-level-container { + flex-direction: column-reverse; + } + &.solid { + .tb-battery-level-container { + inset: 8.85% 6.25% 3.54% 6.25%; + } + } + &.divided { + .tb-battery-level-container { + inset: 9.73% 7.81% 4.42% 7.81%; + } + } + .tb-battery-level-indicator-box { + &.solid { + border-radius: 10.7% / 6%; + background-position: 0 101%; + } + &.divided { + border-radius: 7.14% / 17.8%; + } + } + } + &.horizontal { + .tb-battery-level-shape { + mask-image: url(/assets/widget/battery-level/battery-shape-horizontal.svg); + } + .tb-battery-level-container { + inset: 6.25% 8.85% 6.25% 3.54%; + flex-direction: row; + } + &.solid { + .tb-battery-level-container { + inset: 6.25% 8.85% 6.25% 3.54%; + } + } + &.divided { + .tb-battery-level-container { + inset: 7.81% 9.73% 7.81% 4.42%; + } + } + .tb-battery-level-indicator-box { + &.solid { + border-radius: 6% / 10.7%; + background-position: -1% 0%; + } + &.divided { + border-radius: 17.8% / 7.14%; + } + } + } + } + } + .tb-battery-level-value-box { + display: flex; + .tb-battery-level-value { + white-space: nowrap; + } + } + } + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/battery-level-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/battery-level-widget.component.ts new file mode 100644 index 0000000000..442d207a5e --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/battery-level-widget.component.ts @@ -0,0 +1,293 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// 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 +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// 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 { + AfterViewInit, + ChangeDetectorRef, + Component, + ElementRef, + Input, + OnDestroy, + OnInit, + Renderer2, + TemplateRef, + ViewChild +} from '@angular/core'; +import { WidgetContext } from '@home/models/widget-component.models'; +import { formatValue, isDefinedAndNotNull, isNumeric } from '@core/utils'; +import { DatePipe } from '@angular/common'; +import { + backgroundStyle, + ColorProcessor, + ComponentStyle, + getDataKey, + getSingleTsValue, + overlayStyle, + textStyle +} from '@shared/models/widget-settings.models'; +import { WidgetComponent } from '@home/components/widget/widget.component'; +import { + batteryLevelDefaultSettings, + BatteryLevelLayout, + BatteryLevelWidgetSettings +} from '@home/components/widget/lib/indicator/battery-level-widget.models'; +import { ResizeObserver } from '@juggle/resize-observer'; + +const verticalBatteryDimensions = { + shapeAspectRatio: 64 / 113, + widthRatio: { + valueTopBottomPaddingRatio: 8 / 64, + valueLeftRightPaddingRatio: 12 / 64, + valueFontSizeRatio: 20 / 64, + valueLineHeightRaio: 24 / 64 + }, + heightRatio: { + valueTopBottomPaddingRatio: 8 / 113, + valueLeftRightPaddingRatio: 12 / 113, + valueFontSizeRatio: 20 / 113, + valueLineHeightRaio: 24 / 113 + } +}; + +const horizontalBatteryDimensions = { + shapeAspectRatio: 113 / 64, + heightRatio: { + valueTopBottomPaddingRatio: 4 / 64, + valueFontSizeRatio: 20 / 64, + valueLineHeightRatio: 24 / 64 + } +}; + +@Component({ + selector: 'tb-battery-level-widget', + templateUrl: './battery-level-widget.component.html', + styleUrls: ['./battery-level-widget.component.scss'] +}) +export class BatteryLevelWidgetComponent implements OnInit, OnDestroy, AfterViewInit { + + @ViewChild('batteryLevelContent', {static: true}) + batteryLevelContent: ElementRef; + + @ViewChild('batteryLevelBox', {static: true}) + batteryLevelBox: ElementRef; + + @ViewChild('batteryLevelRectangle', {static: true}) + batteryLevelRectangle: ElementRef; + + @ViewChild('batteryLevelValueBox', {static: false}) + batteryLevelValueBox: ElementRef; + + @ViewChild('batteryLevelValue', {static: false}) + batteryLevelValue: ElementRef; + + settings: BatteryLevelWidgetSettings; + + @Input() + ctx: WidgetContext; + + @Input() + widgetTitlePanel: TemplateRef; + + layout: BatteryLevelLayout; + layoutClass = 'vertical'; + + vertical = true; + solid = true; + + showValue = true; + autoScaleValueSize = true; + valueText = 'N/A'; + valueStyle: ComponentStyle = {}; + valueColor: ColorProcessor; + + value: number; + + batterySections: boolean[] = [false, false, false, false]; + + batteryLevelColor: ColorProcessor; + + batteryShapeColor: ColorProcessor; + + backgroundStyle: ComponentStyle = {}; + overlayStyle: ComponentStyle = {}; + + batteryBoxResize$: ResizeObserver; + + hasCardClickAction = false; + + private decimals = 0; + private units = ''; + + constructor(private date: DatePipe, + private widgetComponent: WidgetComponent, + private renderer: Renderer2, + private cd: ChangeDetectorRef) { + } + + ngOnInit(): void { + this.ctx.$scope.batteryLevelWidget = this; + this.settings = {...batteryLevelDefaultSettings, ...this.ctx.settings}; + + this.decimals = this.ctx.decimals; + this.units = this.ctx.units; + const dataKey = getDataKey(this.ctx.datasources); + if (isDefinedAndNotNull(dataKey?.decimals)) { + this.decimals = dataKey.decimals; + } + if (dataKey?.units) { + this.units = dataKey.units; + } + + this.layout = this.settings.layout; + + this.vertical = [BatteryLevelLayout.vertical_solid, BatteryLevelLayout.vertical_divided].includes(this.layout); + this.layoutClass = this.vertical ? 'vertical' : 'horizontal'; + this.solid = [BatteryLevelLayout.vertical_solid, BatteryLevelLayout.horizontal_solid].includes(this.layout); + + this.showValue = this.settings.showValue; + this.autoScaleValueSize = this.showValue && this.settings.autoScaleValueSize; + this.valueStyle = textStyle(this.settings.valueFont, '0.1px'); + this.valueColor = ColorProcessor.fromSettings(this.settings.valueColor); + + this.batteryLevelColor = ColorProcessor.fromSettings(this.settings.batteryLevelColor); + + this.batteryShapeColor = ColorProcessor.fromSettings(this.settings.batteryShapeColor); + + this.backgroundStyle = backgroundStyle(this.settings.background); + this.overlayStyle = overlayStyle(this.settings.background.overlay); + + this.hasCardClickAction = this.ctx.actionsApi.getActionDescriptors('cardClick').length > 0; + } + + ngAfterViewInit() { + this.batteryBoxResize$ = new ResizeObserver(() => { + this.onResize(); + }); + this.batteryBoxResize$.observe(this.batteryLevelContent.nativeElement); + if (this.showValue) { + this.batteryBoxResize$.observe(this.batteryLevelValueBox.nativeElement); + } + this.onResize(); + } + + ngOnDestroy() { + if (this.batteryBoxResize$) { + this.batteryBoxResize$.disconnect(); + } + } + + public onInit() { + const borderRadius = this.ctx.$widgetElement.css('borderRadius'); + this.overlayStyle = {...this.overlayStyle, ...{borderRadius}}; + this.cd.detectChanges(); + } + + public onDataUpdated() { + const tsValue = getSingleTsValue(this.ctx.data); + this.value = 0; + if (tsValue && isDefinedAndNotNull(tsValue[1]) && isNumeric(tsValue[1])) { + this.value = tsValue[1]; + this.valueText = formatValue(this.value, this.decimals, this.units, true); + } else { + this.valueText = 'N/A'; + } + if (!this.solid) { + const sectionSize = 100 / this.batterySections.length; + for (let i=0; i sectionSize * i; + } + } + this.valueColor.update(this.value); + this.batteryLevelColor.update(this.value); + this.batteryShapeColor.update(this.value); + this.cd.detectChanges(); + } + + public trackBySection(index: number): number { + return index; + } + + public cardClick($event: Event) { + this.ctx.actionsApi.cardClick($event); + } + + private onResize() { + if (this.vertical) { + if (this.batteryLevelValue) { + const contentWidth = this.batteryLevelContent.nativeElement.getBoundingClientRect().width; + const boxWidth = (contentWidth - 16) / 2; + const boxHeight = this.batteryLevelContent.nativeElement.getBoundingClientRect().height; + const ratios = contentWidth > boxHeight ? verticalBatteryDimensions.heightRatio : verticalBatteryDimensions.widthRatio; + const boxSize = contentWidth > boxHeight ? boxHeight : boxWidth; + const topBottomValuePadding = ratios.valueTopBottomPaddingRatio * boxSize; + const leftRightValuePadding = ratios.valueLeftRightPaddingRatio * boxSize; + const valuePadding = `${topBottomValuePadding}px ${leftRightValuePadding}px`; + this.renderer.setStyle(this.batteryLevelValue.nativeElement, 'padding', valuePadding); + if (this.autoScaleValueSize) { + const valueFontSize = ratios.valueFontSizeRatio * boxSize; + const valueLineHeight = ratios.valueLineHeightRaio * boxSize; + this.setValueFontSize(valueFontSize, valueLineHeight, boxWidth); + } + } + let height = this.batteryLevelContent.nativeElement.getBoundingClientRect().height; + const width = height * verticalBatteryDimensions.shapeAspectRatio; + this.renderer.setStyle(this.batteryLevelBox.nativeElement, 'width', width + 'px'); + const realWidth = this.batteryLevelBox.nativeElement.getBoundingClientRect().width; + if (realWidth < width) { + height = realWidth / verticalBatteryDimensions.shapeAspectRatio; + this.renderer.setStyle(this.batteryLevelRectangle.nativeElement, 'height', height + 'px'); + } else { + this.renderer.setStyle(this.batteryLevelRectangle.nativeElement, 'height', null); + } + } else { + const width = this.batteryLevelContent.nativeElement.getBoundingClientRect().width; + let height = width / horizontalBatteryDimensions.shapeAspectRatio; + this.renderer.setStyle(this.batteryLevelBox.nativeElement, 'height', height + 'px'); + const realHeight = this.batteryLevelBox.nativeElement.getBoundingClientRect().height; + if (realHeight < height) { + height = realHeight; + const newWidth = height * horizontalBatteryDimensions.shapeAspectRatio; + this.renderer.setStyle(this.batteryLevelRectangle.nativeElement, 'width', newWidth + 'px'); + } else { + this.renderer.setStyle(this.batteryLevelRectangle.nativeElement, 'width', null); + } + if (this.batteryLevelValue) { + const ratios = horizontalBatteryDimensions.heightRatio; + const valuePadding = `${(ratios.valueTopBottomPaddingRatio * height)}px 6px`; + this.renderer.setStyle(this.batteryLevelValue.nativeElement, 'padding', valuePadding); + if (this.autoScaleValueSize) { + const valueFontSize = ratios.valueFontSizeRatio * height; + const valueLineHeight = ratios.valueLineHeightRatio * height; + const boxWidth = this.batteryLevelContent.nativeElement.getBoundingClientRect().width; + this.setValueFontSize(valueFontSize, valueLineHeight, boxWidth); + } + } + } + } + + private setValueFontSize(valueFontSize: number, valueLineHeight: number, maxWidth: number) { + this.renderer.setStyle(this.batteryLevelValue.nativeElement, 'fontSize', valueFontSize + 'px'); + this.renderer.setStyle(this.batteryLevelValue.nativeElement, 'lineHeight', valueLineHeight + 'px'); + let valueWidth = this.batteryLevelValue.nativeElement.getBoundingClientRect().width; + while (valueWidth > maxWidth && valueFontSize > 6) { + valueFontSize--; + valueLineHeight--; + this.renderer.setStyle(this.batteryLevelValue.nativeElement, 'fontSize', valueFontSize + 'px'); + this.renderer.setStyle(this.batteryLevelValue.nativeElement, 'lineHeight', valueLineHeight + 'px'); + valueWidth = this.batteryLevelValue.nativeElement.getBoundingClientRect().width; + } + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/indicator/battery-level-widget.models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/battery-level-widget.models.ts new file mode 100644 index 0000000000..8d8724f901 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/indicator/battery-level-widget.models.ts @@ -0,0 +1,108 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// 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 +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// 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 { + BackgroundSettings, + BackgroundType, + ColorSettings, + ColorType, + constantColor, + defaultColorFunction, + Font +} from '@shared/models/widget-settings.models'; + +export enum BatteryLevelLayout { + vertical_solid = 'vertical_solid', + horizontal_solid = 'horizontal_solid', + vertical_divided = 'vertical_divided', + horizontal_divided = 'horizontal_divided' +} + +export const batteryLevelLayouts = Object.keys(BatteryLevelLayout) as BatteryLevelLayout[]; + +export const batteryLevelLayoutTranslations = new Map( + [ + [BatteryLevelLayout.vertical_solid, 'widgets.battery-level.layout-vertical-solid'], + [BatteryLevelLayout.horizontal_solid, 'widgets.battery-level.layout-horizontal-solid'], + [BatteryLevelLayout.vertical_divided, 'widgets.battery-level.layout-vertical-divided'], + [BatteryLevelLayout.horizontal_divided, 'widgets.battery-level.layout-horizontal-divided'] + ] +); + +export const batteryLevelLayoutImages = new Map( + [ + [BatteryLevelLayout.vertical_solid, 'assets/widget/battery-level/vertical-solid-layout.svg'], + [BatteryLevelLayout.horizontal_solid, 'assets/widget/battery-level/horizontal-solid-layout.svg'], + [BatteryLevelLayout.vertical_divided, 'assets/widget/battery-level/vertical-divided-layout.svg'], + [BatteryLevelLayout.horizontal_divided, 'assets/widget/battery-level/horizontal-divided-layout.svg'] + ] +); + +export interface BatteryLevelWidgetSettings { + layout: BatteryLevelLayout; + showValue: boolean; + autoScaleValueSize: boolean; + valueFont: Font; + valueColor: ColorSettings; + batteryLevelColor: ColorSettings; + batteryShapeColor: ColorSettings; + background: BackgroundSettings; +} + +export const batteryLevelDefaultSettings: BatteryLevelWidgetSettings = { + layout: BatteryLevelLayout.vertical_solid, + showValue: true, + autoScaleValueSize: true, + valueFont: { + family: 'Roboto', + size: 20, + sizeUnit: 'px', + style: 'normal', + weight: '500', + lineHeight: '24px' + }, + valueColor: constantColor('rgba(0, 0, 0, 0.87)'), + batteryLevelColor: { + color: 'rgba(92, 223, 144, 1)', + type: ColorType.range, + rangeList: [ + {from: 0, to: 25, color: 'rgba(227, 71, 71, 1)'}, + {from: 25, to: 50, color: 'rgba(246, 206, 67, 1)'}, + {from: 50, to: 100, color: 'rgba(92, 223, 144, 1)'} + ], + colorFunction: defaultColorFunction + }, + batteryShapeColor: { + color: 'rgba(92, 223, 144, 0.32)', + type: ColorType.range, + rangeList: [ + {from: 0, to: 25, color: 'rgba(227, 71, 71, 0.32)'}, + {from: 25, to: 50, color: 'rgba(246, 206, 67, 0.32)'}, + {from: 50, to: 100, color: 'rgba(92, 223, 144, 0.32)'} + ], + colorFunction: defaultColorFunction + }, + background: { + type: BackgroundType.color, + color: '#fff', + overlay: { + enabled: false, + color: 'rgba(255,255,255,0.72)', + blur: 3 + } + } +}; + diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/alarm/alarm-count-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/alarm/alarm-count-widget-settings.component.html new file mode 100644 index 0000000000..ab8e7635dd --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/alarm/alarm-count-widget-settings.component.html @@ -0,0 +1,23 @@ + + +
+
widgets.alarm-count.alarm-count-card-style
+ +
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/alarm/alarm-count-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/alarm/alarm-count-widget-settings.component.ts new file mode 100644 index 0000000000..6a36891c7e --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/alarm/alarm-count-widget-settings.component.ts @@ -0,0 +1,62 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// 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 +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// 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 { Component } from '@angular/core'; +import { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { countDefaultSettings } from '@home/components/widget/lib/count/count-widget.models'; + +@Component({ + selector: 'tb-alarm-count-widget-settings', + templateUrl: './alarm-count-widget-settings.component.html', + styleUrls: ['./../widget-settings.scss'] +}) +export class AlarmCountWidgetSettingsComponent extends WidgetSettingsComponent { + + alarmCountWidgetSettingsForm: UntypedFormGroup; + + constructor(protected store: Store, + private fb: UntypedFormBuilder) { + super(store); + } + + protected settingsForm(): UntypedFormGroup { + return this.alarmCountWidgetSettingsForm; + } + + protected defaultSettings(): WidgetSettings { + return {...countDefaultSettings(true)}; + } + + protected onSettingsSet(settings: WidgetSettings) { + this.alarmCountWidgetSettingsForm = this.fb.group({ + alarmCountSettings: [settings.alarmCountSettings, []], + }); + } + + protected prepareInputSettings(settings: WidgetSettings): WidgetSettings { + return { + alarmCountSettings: settings + }; + } + + protected prepareOutputSettings(settings: any): WidgetSettings { + return settings.alarmCountSettings; + } + +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/alarm/alarms-table-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/alarm/alarms-table-widget-settings.component.ts index 223cf93e77..fff6e2c8fc 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/alarm/alarms-table-widget-settings.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/alarm/alarms-table-widget-settings.component.ts @@ -53,6 +53,7 @@ export class AlarmsTableWidgetSettingsComponent extends WidgetSettingsComponent allowAcknowledgment: true, allowClear: true, allowAssign: true, + displayActivity: true, displayPagination: true, defaultPageSize: 10, defaultSortOrder: '-createdTime', diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/count-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/count-widget-settings.component.html new file mode 100644 index 0000000000..e373acb8a5 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/count-widget-settings.component.html @@ -0,0 +1,103 @@ + + + + + {{ countCardLayoutTranslationMap.get(layout) | translate }} + + +
+ + {{ 'widgets.count.label' | translate }} + +
+ + + + + + + +
+
+
+ + {{ 'widgets.count.icon' | translate }} + +
+ + + + + + + + +
+
+
+ + {{ 'widgets.count.icon-background' | translate }} + +
+ + + + + + +
+
+
+
widgets.count.value
+
+ + + + +
+
+
+ + {{ 'widgets.count.chevron' | translate }} + +
+ + + + + + +
+
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/count-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/count-widget-settings.component.ts new file mode 100644 index 0000000000..2a37a46d5c --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/count-widget-settings.component.ts @@ -0,0 +1,201 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// 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 +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// 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 { + AbstractControl, + ControlValueAccessor, + NG_VALUE_ACCESSOR, + UntypedFormBuilder, + UntypedFormGroup, + Validators +} from '@angular/forms'; +import {Store} from '@ngrx/store'; +import {AppState} from '@core/core.state'; +import { + alarmCountCardLayoutImages, + CountCardLayout, + countCardLayouts, + countCardLayoutTranslations, + CountWidgetSettings, entityCountCardLayoutImages +} from '@home/components/widget/lib/count/count-widget.models'; +import {PageComponent} from '@shared/components/page.component'; +import {Component, forwardRef, Input, OnInit} from '@angular/core'; +import { coerceBoolean } from '@shared/decorators/coercion'; +import { + valueCardLayoutImages, + valueCardLayoutTranslations +} from '@home/components/widget/lib/cards/value-card-widget.models'; + +@Component({ + selector: 'tb-count-widget-settings', + templateUrl: './count-widget-settings.component.html', + styleUrls: ['./../widget-settings.scss'], + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => CountWidgetSettingsComponent), + multi: true + } + ] +}) +export class CountWidgetSettingsComponent extends PageComponent implements OnInit, ControlValueAccessor { + + @Input() + disabled: boolean; + + @coerceBoolean() + @Input() + alarmElseEntity: boolean; + + private propagateChange = null; + + countCardLayouts = countCardLayouts; + + countCardLayoutTranslationMap = countCardLayoutTranslations; + countCardLayoutImageMap: Map; + + countWidgetConfigForm: UntypedFormGroup; + + constructor(protected store: Store, + private fb: UntypedFormBuilder) { + super(store); + } + + ngOnInit(): void { + this.countCardLayoutImageMap = this.alarmElseEntity ? alarmCountCardLayoutImages : entityCountCardLayoutImages; + this.countWidgetConfigForm = this.fb.group({ + layout: [null, []], + showLabel: [null, []], + label: [null, []], + labelFont: [null, []], + labelColor: [null, []], + + showIcon: [null, []], + iconSize: [null, [Validators.min(0)]], + iconSizeUnit: [null, []], + icon: [null, []], + iconColor: [null, []], + + showIconBackground: [null, []], + iconBackgroundSize: [null, [Validators.min(0)]], + iconBackgroundSizeUnit: [null, []], + iconBackgroundColor: [null, []], + + valueFont: [null, []], + valueColor: [null, []], + + showChevron: [null, []], + chevronSize: [null, [Validators.min(0)]], + chevronSizeUnit: [null, []], + chevronColor: [null, []], + }); + this.countWidgetConfigForm.valueChanges.subscribe(() => { + this.updateModel(); + }); + for (const trigger of ['showLabel', 'showIcon', 'showIconBackground', 'showChevron']) { + const path = trigger.split('.'); + let control: AbstractControl = this.countWidgetConfigForm; + for (const part of path) { + control = this.countWidgetConfigForm.get(part); + } + control.valueChanges.subscribe(() => { + this.updateValidators(); + }); + } + } + + registerOnChange(fn: any): void { + this.propagateChange = fn; + } + + registerOnTouched(fn: any): void { + } + + + setDisabledState(isDisabled: boolean): void { + this.disabled = isDisabled; + if (isDisabled) { + this.countWidgetConfigForm.disable({emitEvent: false}); + } else { + this.countWidgetConfigForm.enable({emitEvent: false}); + this.updateValidators(); + } + } + + writeValue(value: CountWidgetSettings): void { + this.countWidgetConfigForm.patchValue( + value, {emitEvent: false} + ); + this.updateValidators(); + } + + private updateModel() { + const value: CountWidgetSettings = this.countWidgetConfigForm.value; + this.propagateChange(value); + } + + protected updateValidators() { + const showLabel: boolean = this.countWidgetConfigForm.get('showLabel').value; + const showIcon: boolean = this.countWidgetConfigForm.get('showIcon').value; + const showIconBackground: boolean = this.countWidgetConfigForm.get('showIconBackground').value; + const showChevron: boolean = this.countWidgetConfigForm.get('showChevron').value; + + if (showLabel) { + this.countWidgetConfigForm.get('label').enable({emitEvent: false}); + this.countWidgetConfigForm.get('labelFont').enable({emitEvent: false}); + this.countWidgetConfigForm.get('labelColor').enable({emitEvent: false}); + } else { + this.countWidgetConfigForm.get('label').disable({emitEvent: false}); + this.countWidgetConfigForm.get('labelFont').disable({emitEvent: false}); + this.countWidgetConfigForm.get('labelColor').disable({emitEvent: false}); + } + + if (showIcon) { + this.countWidgetConfigForm.get('iconSize').enable({emitEvent: false}); + this.countWidgetConfigForm.get('iconSizeUnit').enable({emitEvent: false}); + this.countWidgetConfigForm.get('icon').enable({emitEvent: false}); + this.countWidgetConfigForm.get('iconColor').enable({emitEvent: false}); + } else { + this.countWidgetConfigForm.get('iconSize').disable({emitEvent: false}); + this.countWidgetConfigForm.get('iconSizeUnit').disable({emitEvent: false}); + this.countWidgetConfigForm.get('icon').disable({emitEvent: false}); + this.countWidgetConfigForm.get('iconColor').disable({emitEvent: false}); + } + + if (showIconBackground) { + this.countWidgetConfigForm.get('iconBackgroundSize').enable({emitEvent: false}); + this.countWidgetConfigForm.get('iconBackgroundSizeUnit').enable({emitEvent: false}); + this.countWidgetConfigForm.get('iconBackgroundColor').enable({emitEvent: false}); + } else { + this.countWidgetConfigForm.get('iconBackgroundSize').disable({emitEvent: false}); + this.countWidgetConfigForm.get('iconBackgroundSizeUnit').disable({emitEvent: false}); + this.countWidgetConfigForm.get('iconBackgroundColor').disable({emitEvent: false}); + } + + if (showChevron) { + this.countWidgetConfigForm.get('chevronSize').enable({emitEvent: false}); + this.countWidgetConfigForm.get('chevronSizeUnit').enable({emitEvent: false}); + this.countWidgetConfigForm.get('chevronColor').enable({emitEvent: false}); + } else { + this.countWidgetConfigForm.get('chevronSize').disable({emitEvent: false}); + this.countWidgetConfigForm.get('chevronSizeUnit').disable({emitEvent: false}); + this.countWidgetConfigForm.get('chevronColor').disable({emitEvent: false}); + } + } + + protected readonly valueCardLayoutTranslations = valueCardLayoutTranslations; + protected readonly valueCardLayoutImages = valueCardLayoutImages; +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.html index 9fe3273f74..ac103fe395 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.html @@ -19,12 +19,13 @@
widgets.widget-font.font-settings
widgets.widget-font.size
-
+
+
widgets.widget-font.auto
widgets.widget-font.font-family
@@ -74,9 +75,10 @@
widgets.widget-font.line-height
- + +
widgets.widget-font.auto
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.scss index 3475a14e8c..03b0ee511b 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.scss @@ -25,6 +25,10 @@ letter-spacing: 0.25px; color: rgba(0, 0, 0, 0.87); } + .tb-font-settings-auto { + padding: 8px 12px; + color: rgba(0, 0, 0, 0.38); + } .tb-form-row { .fixed-title-width { min-width: 120px; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.ts index a0e77ef380..c99efa8931 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings-panel.component.ts @@ -65,6 +65,10 @@ export class FontSettingsPanelComponent extends PageComponent implements OnInit @coerceBoolean() clearButton = false; + @Input() + @coerceBoolean() + autoScale = false; + @Input() popover: TbPopoverComponent; @@ -97,12 +101,12 @@ export class FontSettingsPanelComponent extends PageComponent implements OnInit ngOnInit(): void { this.fontFormGroup = this.fb.group( { - size: [this.font?.size, [Validators.min(0)]], - sizeUnit: [(this.font?.sizeUnit || 'px'), []], + size: [{value: this.font?.size, disabled: this.autoScale}, [Validators.min(0)]], + sizeUnit: [{ value: (this.font?.sizeUnit || 'px'), disabled: this.autoScale}, []], family: [this.font?.family, []], weight: [this.font?.weight, []], style: [this.font?.style, []], - lineHeight: [this.font?.lineHeight, []] + lineHeight: [{ value: this.font?.lineHeight, disabled: this.autoScale }, []] } ); this.updatePreviewStyle(this.font); diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings.component.ts index f23862cf34..2c3780f1fe 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/font-settings.component.ts @@ -50,6 +50,10 @@ export class FontSettingsComponent implements OnInit, ControlValueAccessor { @coerceBoolean() clearButton = false; + @Input() + @coerceBoolean() + autoScale = false; + private modelValue: Font; private propagateChange = null; @@ -87,7 +91,8 @@ export class FontSettingsComponent implements OnInit, ControlValueAccessor { const ctx: any = { font: this.modelValue, initialPreviewStyle: this.initialPreviewStyle, - clearButton: this.clearButton + clearButton: this.clearButton, + autoScale: this.autoScale }; if (isDefinedAndNotNull(this.previewText)) { const previewText = typeof this.previewText === 'string' ? this.previewText : this.previewText(); diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/widget-settings-common.module.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/widget-settings-common.module.ts index 6c383062ae..5a2a91b56b 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/widget-settings-common.module.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/widget-settings-common.module.ts @@ -40,6 +40,9 @@ import { BackgroundSettingsComponent } from '@home/components/widget/lib/setting import { BackgroundSettingsPanelComponent } from '@home/components/widget/lib/settings/common/background-settings-panel.component'; +import { + CountWidgetSettingsComponent +} from "@home/components/widget/lib/settings/common/count-widget-settings.component"; @NgModule({ declarations: [ @@ -56,7 +59,8 @@ import { BackgroundSettingsPanelComponent, ValueSourceComponent, LegendConfigComponent, - WidgetFontComponent + WidgetFontComponent, + CountWidgetSettingsComponent ], imports: [ CommonModule, @@ -77,7 +81,8 @@ import { BackgroundSettingsPanelComponent, ValueSourceComponent, LegendConfigComponent, - WidgetFontComponent + WidgetFontComponent, + CountWidgetSettingsComponent ] }) export class WidgetSettingsCommonModule { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-hierarchy-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entities-hierarchy-widget-settings.component.html similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-hierarchy-widget-settings.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entities-hierarchy-widget-settings.component.html diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-hierarchy-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entities-hierarchy-widget-settings.component.ts similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-hierarchy-widget-settings.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entities-hierarchy-widget-settings.component.ts diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-table-key-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entities-table-key-settings.component.html similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-table-key-settings.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entities-table-key-settings.component.html diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-table-key-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entities-table-key-settings.component.ts similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-table-key-settings.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entities-table-key-settings.component.ts diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-table-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entities-table-widget-settings.component.html similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-table-widget-settings.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entities-table-widget-settings.component.html diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-table-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entities-table-widget-settings.component.ts similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/entities-table-widget-settings.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entities-table-widget-settings.component.ts diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entity-count-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entity-count-widget-settings.component.html new file mode 100644 index 0000000000..e38fab6e27 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entity-count-widget-settings.component.html @@ -0,0 +1,23 @@ + + +
+
widgets.entity-count.entity-count-card-style
+ +
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entity-count-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entity-count-widget-settings.component.ts new file mode 100644 index 0000000000..348c893316 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/entity/entity-count-widget-settings.component.ts @@ -0,0 +1,62 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// 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 +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// 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 { Component } from '@angular/core'; +import { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { countDefaultSettings } from '@home/components/widget/lib/count/count-widget.models'; + +@Component({ + selector: 'tb-entity-count-widget-settings', + templateUrl: './entity-count-widget-settings.component.html', + styleUrls: ['./../widget-settings.scss'] +}) +export class EntityCountWidgetSettingsComponent extends WidgetSettingsComponent { + + entityCountWidgetSettingsForm: UntypedFormGroup; + + constructor(protected store: Store, + private fb: UntypedFormBuilder) { + super(store); + } + + protected settingsForm(): UntypedFormGroup { + return this.entityCountWidgetSettingsForm; + } + + protected defaultSettings(): WidgetSettings { + return {...countDefaultSettings(false)}; + } + + protected onSettingsSet(settings: WidgetSettings) { + this.entityCountWidgetSettingsForm = this.fb.group({ + entityCountSettings: [settings.entityCountSettings, []], + }); + } + + protected prepareInputSettings(settings: WidgetSettings): WidgetSettings { + return { + entityCountSettings: settings + }; + } + + protected prepareOutputSettings(settings: any): WidgetSettings { + return settings.entityCountSettings; + } + +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.html index 25d77badc7..ae91ca6c08 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.html @@ -15,12 +15,13 @@ limitations under the License. --> -
- - {{"widgets.gateway.is-connector" | translate}} - - - {{"widgets.gateway.state-param-name" | translate}} - - -
+
+
+ + {{ "widgets.gateway.show-connector" | translate }} + + + + +
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.ts index 74e214a3d9..c543ee99fb 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.ts @@ -16,7 +16,7 @@ import { Component } from '@angular/core'; import { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models'; -import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; @@ -27,28 +27,41 @@ import { AppState } from '@core/core.state'; }) export class GatewayLogsSettingsComponent extends WidgetSettingsComponent { - GatewayLogSettingForm: UntypedFormGroup; + gatewayLogSettingForm: FormGroup; constructor(protected store: Store, - private fb: UntypedFormBuilder) { + private fb: FormBuilder) { super(store); } - protected settingsForm(): UntypedFormGroup { - return this.GatewayLogSettingForm; + protected settingsForm(): FormGroup { + return this.gatewayLogSettingForm; } protected defaultSettings(): WidgetSettings { return { isConnectorLog: false, - connectorLogState: 'default' + connectorLogState: '' }; } protected onSettingsSet(settings: WidgetSettings) { - this.GatewayLogSettingForm = this.fb.group({ + this.gatewayLogSettingForm = this.fb.group({ isConnectorLog: [false, []], - connectorLogState: ['default', []] + connectorLogState: ['', Validators.required] }); } + + protected validatorTriggers(): string[] { + return ['isConnectorLog']; + } + + protected updateValidators(emitEvent: boolean) { + const isConnectorLog: boolean = this.gatewayLogSettingForm.get('isConnectorLog').value; + if (isConnectorLog) { + this.gatewayLogSettingForm.get('connectorLogState').enable({emitEvent}); + } else { + this.gatewayLogSettingForm.get('connectorLogState').disable({emitEvent}); + } + } } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.html index beeba7c2a7..2c7c0b5dd5 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.html @@ -15,8 +15,10 @@ limitations under the License. --> -
- - {{"widgets.gateway.is-connector" | translate}} - -
+
+
+ + {{ "widgets.gateway.show-connector" | translate }} + +
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.ts index edafed90b8..5b0402236b 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.ts @@ -16,7 +16,7 @@ import { Component } from '@angular/core'; import { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models'; -import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { FormBuilder, FormGroup } from '@angular/forms'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; @@ -27,15 +27,15 @@ import { AppState } from '@core/core.state'; }) export class GatewayServiceRPCSettingsComponent extends WidgetSettingsComponent { - GatewayLogSettingForm: UntypedFormGroup; + gatewayServiceRPCSettingForm: FormGroup; constructor(protected store: Store, - private fb: UntypedFormBuilder) { + private fb: FormBuilder) { super(store); } - protected settingsForm(): UntypedFormGroup { - return this.GatewayLogSettingForm; + protected settingsForm(): FormGroup { + return this.gatewayServiceRPCSettingForm; } protected defaultSettings(): WidgetSettings { @@ -45,7 +45,7 @@ export class GatewayServiceRPCSettingsComponent extends WidgetSettingsComponent } protected onSettingsSet(settings: WidgetSettings) { - this.GatewayLogSettingForm = this.fb.group({ + this.gatewayServiceRPCSettingForm = this.fb.group({ isConnector: [false, []] }); } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/indicator/battery-level-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/indicator/battery-level-widget-settings.component.html new file mode 100644 index 0000000000..1221e5bfc2 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/indicator/battery-level-widget-settings.component.html @@ -0,0 +1,63 @@ + + +
+
widgets.battery-level.battery-level-card-style
+ + + {{ batteryLevelLayoutTranslationMap.get(layout) | translate }} + + +
+ + {{ 'widgets.battery-level.value' | translate }} + +
+ + {{ 'widgets.battery-level.auto-scale' | translate }} + + + + + +
+
+
+
{{ 'widgets.battery-level.battery-level-color' | translate }}
+ + +
+
+
{{ 'widgets.battery-level.battery-shape-color' | translate }}
+ + +
+
+
{{ 'widgets.background.background' | translate }}
+ + +
+
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/indicator/battery-level-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/indicator/battery-level-widget-settings.component.ts new file mode 100644 index 0000000000..627bf00cd2 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/indicator/battery-level-widget-settings.component.ts @@ -0,0 +1,104 @@ +/// +/// Copyright © 2016-2023 The Thingsboard Authors +/// +/// 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 +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// 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 { Component, Injector } from '@angular/core'; +import { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { formatValue } from '@core/utils'; +import { + batteryLevelDefaultSettings, + batteryLevelLayoutImages, + batteryLevelLayouts, + batteryLevelLayoutTranslations +} from '@home/components/widget/lib/indicator/battery-level-widget.models'; + +@Component({ + selector: 'tb-battery-level-widget-settings', + templateUrl: './battery-level-widget-settings.component.html', + styleUrls: [] +}) +export class BatteryLevelWidgetSettingsComponent extends WidgetSettingsComponent { + + batteryLevelLayouts = batteryLevelLayouts; + + batteryLevelLayoutTranslationMap = batteryLevelLayoutTranslations; + batteryLevelLayoutImageMap = batteryLevelLayoutImages; + + batteryLevelWidgetSettingsForm: UntypedFormGroup; + + valuePreviewFn = this._valuePreviewFn.bind(this); + + constructor(protected store: Store, + private $injector: Injector, + private fb: UntypedFormBuilder) { + super(store); + } + + protected settingsForm(): UntypedFormGroup { + return this.batteryLevelWidgetSettingsForm; + } + + protected defaultSettings(): WidgetSettings { + return {...batteryLevelDefaultSettings}; + } + + protected onSettingsSet(settings: WidgetSettings) { + this.batteryLevelWidgetSettingsForm = this.fb.group({ + layout: [settings.layout, []], + + showValue: [settings.showValue, []], + autoScaleValueSize: [settings.autoScaleValueSize, []], + valueFont: [settings.valueFont, []], + valueColor: [settings.valueColor, []], + + batteryLevelColor: [settings.batteryLevelColor, []], + batteryShapeColor: [settings.batteryShapeColor, []], + + background: [settings.background, []] + }); + } + + protected validatorTriggers(): string[] { + return ['showValue']; + } + + protected updateValidators(emitEvent: boolean) { + const showValue: boolean = this.batteryLevelWidgetSettingsForm.get('showValue').value; + + if (showValue) { + this.batteryLevelWidgetSettingsForm.get('autoScaleValueSize').enable(); + this.batteryLevelWidgetSettingsForm.get('valueFont').enable(); + this.batteryLevelWidgetSettingsForm.get('valueColor').enable(); + } else { + this.batteryLevelWidgetSettingsForm.get('autoScaleValueSize').disable(); + this.batteryLevelWidgetSettingsForm.get('valueFont').disable(); + this.batteryLevelWidgetSettingsForm.get('valueColor').disable(); + } + + this.batteryLevelWidgetSettingsForm.get('autoScaleValueSize').updateValueAndValidity({emitEvent}); + this.batteryLevelWidgetSettingsForm.get('valueFont').updateValueAndValidity({emitEvent}); + this.batteryLevelWidgetSettingsForm.get('valueColor').updateValueAndValidity({emitEvent}); + } + + private _valuePreviewFn(): string { + const units: string = this.widgetConfig.config.units; + const decimals: number = this.widgetConfig.config.decimals; + return formatValue(22, decimals, units, true); + } + +} 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 e4ca0eb4d4..6593b82747 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 @@ -42,16 +42,16 @@ import { } from '@home/components/widget/lib/settings/cards/dashboard-state-widget-settings.component'; import { EntitiesHierarchyWidgetSettingsComponent -} from '@home/components/widget/lib/settings/cards/entities-hierarchy-widget-settings.component'; +} from '@home/components/widget/lib/settings/entity/entities-hierarchy-widget-settings.component'; import { HtmlCardWidgetSettingsComponent } from '@home/components/widget/lib/settings/cards/html-card-widget-settings.component'; import { EntitiesTableWidgetSettingsComponent -} from '@home/components/widget/lib/settings/cards/entities-table-widget-settings.component'; +} from '@home/components/widget/lib/settings/entity/entities-table-widget-settings.component'; import { EntitiesTableKeySettingsComponent -} from '@home/components/widget/lib/settings/cards/entities-table-key-settings.component'; +} from '@home/components/widget/lib/settings/entity/entities-table-key-settings.component'; import { AlarmsTableWidgetSettingsComponent } from '@home/components/widget/lib/settings/alarm/alarms-table-widget-settings.component'; @@ -279,6 +279,15 @@ import { import { AggregatedValueCardWidgetSettingsComponent } from '@home/components/widget/lib/settings/cards/aggregated-value-card-widget-settings.component'; +import { + AlarmCountWidgetSettingsComponent +} from '@home/components/widget/lib/settings/alarm/alarm-count-widget-settings.component'; +import { + EntityCountWidgetSettingsComponent +} from '@home/components/widget/lib/settings/entity/entity-count-widget-settings.component'; +import { + BatteryLevelWidgetSettingsComponent +} from '@home/components/widget/lib/settings/indicator/battery-level-widget-settings.component'; @NgModule({ declarations: [ @@ -382,7 +391,10 @@ import { QuickLinksWidgetSettingsComponent, ValueCardWidgetSettingsComponent, AggregatedValueCardKeySettingsComponent, - AggregatedValueCardWidgetSettingsComponent + AggregatedValueCardWidgetSettingsComponent, + AlarmCountWidgetSettingsComponent, + EntityCountWidgetSettingsComponent, + BatteryLevelWidgetSettingsComponent ], imports: [ CommonModule, @@ -491,7 +503,10 @@ import { QuickLinksWidgetSettingsComponent, ValueCardWidgetSettingsComponent, AggregatedValueCardKeySettingsComponent, - AggregatedValueCardWidgetSettingsComponent + AggregatedValueCardWidgetSettingsComponent, + AlarmCountWidgetSettingsComponent, + EntityCountWidgetSettingsComponent, + BatteryLevelWidgetSettingsComponent ] }) export class WidgetSettingsModule { @@ -565,5 +580,8 @@ export const widgetSettingsComponentsMap: {[key: string]: Type, actionDescriptor: WidgetActionDescriptor): Observable { const resourceTasks: Observable[] = []; diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html index fd427923f7..06528041ab 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html @@ -75,6 +75,7 @@
diff --git a/ui-ngx/src/app/modules/home/pages/edge/edge-instructions-dialog.component.html b/ui-ngx/src/app/modules/home/pages/edge/edge-instructions-dialog.component.html index 599d984738..e01e2ec965 100644 --- a/ui-ngx/src/app/modules/home/pages/edge/edge-instructions-dialog.component.html +++ b/ui-ngx/src/app/modules/home/pages/edge/edge-instructions-dialog.component.html @@ -15,29 +15,74 @@ limitations under the License. --> -
- -

info_outline - {{ 'edge.install-connect-instructions' | translate }}

- - -
- - -
-
- -
-
- -
+ +

{{ dialogTitle }}

+ + +
+
+
+
+ + + + + Ubuntu + + +
+
+ +
+
+
+
+ + + + CentOS/RHEL + + +
+
+ +
+
+
+
+ + + + Docker + + +
+
+ +
+
+
+
+
+
+
+
+ {{ 'action.dont-show-again' | translate}} + + +
+ +
+ + + {{ 'edge.loading-edge-instructions' | translate }} + +
+
diff --git a/ui-ngx/src/app/modules/home/pages/edge/edge-instructions-dialog.component.scss b/ui-ngx/src/app/modules/home/pages/edge/edge-instructions-dialog.component.scss new file mode 100644 index 0000000000..54dc438011 --- /dev/null +++ b/ui-ngx/src/app/modules/home/pages/edge/edge-instructions-dialog.component.scss @@ -0,0 +1,137 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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 "../../../../../scss/constants"; + +:host { + height: 100%; + max-height: 100vh; + display: grid; + grid-template-rows: min-content minmax(auto, 1fr) min-content; + + .tb-loader { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 16px; + height: 300px; + max-height: 100%; + + .label { + margin-bottom: 0; + text-align: center; + } + } + + .tb-font-14 { + font-size: 14px; + } + + .tb-flex-1 { + flex: 1; + } + + @media #{$mat-sm} { + width: 705px; + } + + @media #{$mat-gt-sm} { + width: 1080px; + } +} + +:host-context(.mat-mdc-dialog-container) { + .tb-dialog-actions { + display: flex; + gap: 8px; + padding: 8px 16px; + } + + .mat-mdc-dialog-content { + max-height: 80vh; + padding: 0 16px 16px 16px; + border-top: 16px solid #fff; + } +} + +:host ::ng-deep { + .tb-markdown-view { + padding: 16px 16px 32px 16px; + div { + background-color: #F3F6FA; + &.code-wrapper button.clipboard-btn { + right: -2px !important; + p { + color: $tb-primary-color !important; + } + p, div { + background-color: unset !important; + } + div { + img { + display: none; + } + &:after { + content: ""; + position: initial; + display: block; + width: 18px; + height: 18px; + background: $tb-primary-color; + mask-image: url(/assets/copy-code-icon.svg); + mask-repeat: no-repeat; + } + } + &.multiline { + right: -2px !important; + } + } + } + & > *:not(ul) { + padding-right: unset !important; + padding-left: unset !important; + } + pre[class*="language-"] { + border: 1px solid $tb-primary-color !important; + } + } + .mdc-button__label > span { + .mat-icon { + vertical-align: text-bottom; + box-sizing: initial; + } + } + + .mat-mdc-tab-header { + position: sticky; + top: 0; + z-index: 10; + background-color: #fff; + } + + .tabs-icon { + margin-right: 8px; + } + + .tb-form-panel.tb-tab-body { + padding: 16px 0 0; + } + + .mat-mdc-tab-body { + padding: 16px 0; + } +} diff --git a/ui-ngx/src/app/modules/home/pages/edge/edge-instructions-dialog.component.ts b/ui-ngx/src/app/modules/home/pages/edge/edge-instructions-dialog.component.ts index a4dfe4345b..99da1dfb14 100644 --- a/ui-ngx/src/app/modules/home/pages/edge/edge-instructions-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/pages/edge/edge-instructions-dialog.component.ts @@ -14,33 +14,83 @@ /// limitations under the License. /// -import { Component, Inject } from '@angular/core'; -import { MAT_DIALOG_DATA, MatDialogRef } from "@angular/material/dialog"; -import { DialogComponent } from "@shared/components/dialog.component"; -import { Store } from "@ngrx/store"; -import { AppState } from "@core/core.state"; -import { Router } from "@angular/router"; - -export interface EdgeInstructionsData { - instructions: string; +import { Component, Inject, OnDestroy, OnInit } from '@angular/core'; +import { DialogComponent } from '@shared/components/dialog.component'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { Router } from '@angular/router'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { ActionPreferencesPutUserSettings } from '@core/auth/auth.actions'; +import { EdgeInfo, EdgeInstructionsMethod } from '@shared/models/edge.models'; +import { EdgeService } from '@core/http/edge.service'; + +export interface EdgeInstructionsDialogData { + edge: EdgeInfo; + afterAdd: boolean; } @Component({ - selector: 'tb-edge-instructions', - templateUrl: './edge-instructions-dialog.component.html' + selector: 'tb-edge-installation-dialog', + templateUrl: './edge-instructions-dialog.component.html', + styleUrls: ['./edge-instructions-dialog.component.scss'] }) -export class EdgeInstructionsDialogComponent extends DialogComponent { +export class EdgeInstructionsDialogComponent extends DialogComponent implements OnInit, OnDestroy { + + dialogTitle: string; + showDontShowAgain: boolean; - instructions: string = this.data.instructions; + loadedInstructions = false; + notShowAgain = false; + tabIndex = 0; + instructionsMethod = EdgeInstructionsMethod; + contentData: any = {}; constructor(protected store: Store, protected router: Router, - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: EdgeInstructionsData) { + @Inject(MAT_DIALOG_DATA) private data: EdgeInstructionsDialogData, + public dialogRef: MatDialogRef, + private edgeService: EdgeService) { super(store, router, dialogRef); + + if (this.data.afterAdd) { + this.dialogTitle = 'edge.install-connect-instructions-edge-created'; + this.showDontShowAgain = true; + } else { + this.dialogTitle = 'edge.install-connect-instructions'; + this.showDontShowAgain = false; + } + } + + ngOnInit() { + this.getInstructions(this.instructionsMethod[this.tabIndex]); + } + + ngOnDestroy() { + super.ngOnDestroy(); + } + + close(): void { + if (this.notShowAgain && this.showDontShowAgain) { + this.store.dispatch(new ActionPreferencesPutUserSettings({notDisplayInstructionsAfterAddEdge: true})); + this.dialogRef.close(null); + } else { + this.dialogRef.close(null); + } + } + + selectedTabChange(index: number) { + this.getInstructions(this.instructionsMethod[index]); } - cancel(): void { - this.dialogRef.close(null); + getInstructions(method: string) { + if (!this.contentData[method]) { + this.loadedInstructions = false; + this.edgeService.getEdgeInstallInstructions(this.data.edge.id.id, method).subscribe( + res => { + this.contentData[method] = res.installInstructions; + this.loadedInstructions = true; + } + ); + } } } diff --git a/ui-ngx/src/app/modules/home/pages/edge/edges-table-config.resolver.ts b/ui-ngx/src/app/modules/home/pages/edge/edges-table-config.resolver.ts index 1acaff3841..6a80388b52 100644 --- a/ui-ngx/src/app/modules/home/pages/edge/edges-table-config.resolver.ts +++ b/ui-ngx/src/app/modules/home/pages/edge/edges-table-config.resolver.ts @@ -29,10 +29,10 @@ import { import { TranslateService } from '@ngx-translate/core'; import { DatePipe } from '@angular/common'; import { EntityType, entityTypeResources, entityTypeTranslations } from '@shared/models/entity-type.models'; -import { EntityAction } from '@home/models/entity/entity-component.models'; +import { AddEntityDialogData, EntityAction } from '@home/models/entity/entity-component.models'; import { forkJoin, Observable, of } from 'rxjs'; import { select, Store } from '@ngrx/store'; -import { selectAuthUser } from '@core/auth/auth.selectors'; +import { selectAuthUser, selectUserSettingsProperty } from '@core/auth/auth.selectors'; import { map, mergeMap, take, tap } from 'rxjs/operators'; import { AppState } from '@core/core.state'; import { Authority } from '@app/shared/models/authority.enum'; @@ -51,7 +51,7 @@ import { AddEntitiesToCustomerDialogData } from '../../dialogs/add-entities-to-customer-dialog.component'; import { HomeDialogsService } from '@home/dialogs/home-dialogs.service'; -import { Edge, EdgeInfo, EdgeInstallInstructions } from '@shared/models/edge.models'; +import { Edge, EdgeInfo } from '@shared/models/edge.models'; import { EdgeService } from '@core/http/edge.service'; import { EdgeComponent } from '@home/pages/edge/edge.component'; import { EdgeTableHeaderComponent } from '@home/pages/edge/edge-table-header.component'; @@ -59,9 +59,10 @@ import { EdgeId } from '@shared/models/id/edge-id'; import { EdgeTabsComponent } from '@home/pages/edge/edge-tabs.component'; import { ActionNotificationShow } from '@core/notification/notification.actions'; import { - EdgeInstructionsData, - EdgeInstructionsDialogComponent -} from "@home/pages/edge/edge-instructions-dialog.component"; + EdgeInstructionsDialogComponent, + EdgeInstructionsDialogData +} from '@home/pages/edge/edge-instructions-dialog.component'; +import { AddEntityDialogComponent } from '@home/components/entity/add-entity-dialog.component'; @Injectable() export class EdgesTableConfigResolver implements Resolve> { @@ -140,6 +141,7 @@ export class EdgesTableConfigResolver implements Resolve this.config.componentsData.edgeScope === 'tenant'; + this.config.addEntity = () => { this.addEdge(); return of(null); }; return this.config; }) ); @@ -530,21 +532,50 @@ export class EdgesTableConfigResolver implements Resolve, + EdgeInfo>(AddEntityDialogComponent, { + disableClose: true, + panelClass: ['tb-dialog', 'tb-fullscreen-dialog'], + data: { + entitiesTableConfig: this.config + } + }).afterClosed().subscribe( + (entity) => { + if (entity) { + this.store.pipe(select(selectUserSettingsProperty('notDisplayInstructionsAfterAddEdge'))).pipe( + take(1) + ).subscribe((settings: boolean) => { + if (!settings) { + this.openInstructions(null, entity, true); + } else { + this.config.updateData(); + this.config.entityAdded(entity); + } + }); + } + } + ); + } + + openInstructions($event, edge: EdgeInfo, afterAdd = false) { if ($event) { $event.stopPropagation(); } - this.edgeService.getEdgeDockerInstallInstructions(edge.id.id).subscribe( - (edgeInstructionsTemplate: EdgeInstallInstructions) => { - this.dialog.open(EdgeInstructionsDialogComponent, { - disableClose: false, - panelClass: ['tb-dialog', 'tb-fullscreen-dialog'], - data: { - instructions: edgeInstructionsTemplate.dockerInstallInstructions - } - }); + this.dialog.open + (EdgeInstructionsDialogComponent, { + disableClose: true, + panelClass: ['tb-dialog', 'tb-fullscreen-dialog'], + data: { + edge, + afterAdd } - ) + }).afterClosed().subscribe(() => { + if (afterAdd) { + this.config.updateData(); + } + } + ); } onEdgeAction(action: EntityAction, config: EntityTableConfig): boolean { diff --git a/ui-ngx/src/app/modules/home/pages/notification/sent/sent-notification-dialog.component.html b/ui-ngx/src/app/modules/home/pages/notification/sent/sent-notification-dialog.component.html index 7358e06d77..2a6c14c421 100644 --- a/ui-ngx/src/app/modules/home/pages/notification/sent/sent-notification-dialog.component.html +++ b/ui-ngx/src/app/modules/home/pages/notification/sent/sent-notification-dialog.component.html @@ -29,7 +29,7 @@
diff --git a/ui-ngx/src/app/modules/home/pages/notification/sent/sent-notification-dialog.componet.ts b/ui-ngx/src/app/modules/home/pages/notification/sent/sent-notification-dialog.componet.ts index 57ee325e90..ae5edd4890 100644 --- a/ui-ngx/src/app/modules/home/pages/notification/sent/sent-notification-dialog.componet.ts +++ b/ui-ngx/src/app/modules/home/pages/notification/sent/sent-notification-dialog.componet.ts @@ -63,7 +63,6 @@ export class SentNotificationDialogComponent extends @ViewChild('createNotification', {static: true}) createNotification: MatStepper; stepperOrientation: Observable; - stepperLabelPosition: Observable<'bottom' | 'end'>; isAdd = true; entityType = EntityType; @@ -102,9 +101,6 @@ export class SentNotificationDialogComponent extends this.stepperOrientation = this.breakpointObserver.observe(MediaBreakpoints['gt-sm']) .pipe(map(({matches}) => matches ? 'horizontal' : 'vertical')); - this.stepperLabelPosition = this.breakpointObserver.observe(MediaBreakpoints['gt-md']) - .pipe(map(({matches}) => matches ? 'end' : 'bottom')); - this.notificationRequestForm = this.fb.group({ useTemplate: [false], templateId: [{value: null, disabled: true}, Validators.required], diff --git a/ui-ngx/src/app/modules/home/pages/notification/template/template-notification-dialog.component.html b/ui-ngx/src/app/modules/home/pages/notification/template/template-notification-dialog.component.html index 81ca756263..89cca4394a 100644 --- a/ui-ngx/src/app/modules/home/pages/notification/template/template-notification-dialog.component.html +++ b/ui-ngx/src/app/modules/home/pages/notification/template/template-notification-dialog.component.html @@ -29,7 +29,7 @@
diff --git a/ui-ngx/src/app/modules/home/pages/notification/template/template-notification-dialog.component.ts b/ui-ngx/src/app/modules/home/pages/notification/template/template-notification-dialog.component.ts index 983ad4b569..8ddb41fe37 100644 --- a/ui-ngx/src/app/modules/home/pages/notification/template/template-notification-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/pages/notification/template/template-notification-dialog.component.ts @@ -54,7 +54,6 @@ export class TemplateNotificationDialogComponent @ViewChild('notificationTemplateStepper', {static: true}) notificationTemplateStepper: MatStepper; stepperOrientation: Observable; - stepperLabelPosition: Observable<'bottom' | 'end'>; dialogTitle = 'notification.edit-notification-template'; @@ -82,9 +81,6 @@ export class TemplateNotificationDialogComponent this.stepperOrientation = this.breakpointObserver.observe(MediaBreakpoints['gt-sm']) .pipe(map(({matches}) => matches ? 'horizontal' : 'vertical')); - this.stepperLabelPosition = this.breakpointObserver.observe(MediaBreakpoints['gt-md']) - .pipe(map(({matches}) => matches ? 'end' : 'bottom')); - if (isDefinedAndNotNull(this.data?.predefinedType)) { this.hideSelectType = true; this.templateNotificationForm.get('notificationType').setValue(this.data.predefinedType, {emitEvent: false}); diff --git a/ui-ngx/src/app/modules/home/pages/rulechain/rulechain-page.component.scss b/ui-ngx/src/app/modules/home/pages/rulechain/rulechain-page.component.scss index db8d6322f3..636bfc5ffb 100644 --- a/ui-ngx/src/app/modules/home/pages/rulechain/rulechain-page.component.scss +++ b/ui-ngx/src/app/modules/home/pages/rulechain/rulechain-page.component.scss @@ -173,6 +173,7 @@ } .mat-drawer-content.tb-rulechain-graph-content { overflow: hidden; + z-index: 0; .tb-rulechain-graph { z-index: 0; overflow: auto; diff --git a/ui-ngx/src/app/modules/home/pages/widget/widget-type.component.html b/ui-ngx/src/app/modules/home/pages/widget/widget-type.component.html index cacd187b5b..b7c23c415d 100644 --- a/ui-ngx/src/app/modules/home/pages/widget/widget-type.component.html +++ b/ui-ngx/src/app/modules/home/pages/widget/widget-type.component.html @@ -55,8 +55,8 @@ widget.description - - {{descriptionInput.value?.length || 0}}/255 + + {{descriptionInput.value?.length || 0}}/1024 {{ 'widget.deprecated' | translate }} diff --git a/ui-ngx/src/app/modules/home/pages/widget/widget-type.component.ts b/ui-ngx/src/app/modules/home/pages/widget/widget-type.component.ts index bdbfebbd8f..5418557631 100644 --- a/ui-ngx/src/app/modules/home/pages/widget/widget-type.component.ts +++ b/ui-ngx/src/app/modules/home/pages/widget/widget-type.component.ts @@ -51,7 +51,7 @@ export class WidgetTypeComponent extends EntityComponent { { name: [entity ? entity.name : '', [Validators.required, Validators.maxLength(255)]], image: [entity ? entity.image : ''], - description: [entity ? entity.description : '', Validators.maxLength(255)], + description: [entity ? entity.description : '', Validators.maxLength(1024)], deprecated: [entity ? entity.deprecated : false] } ); diff --git a/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle-widgets.component.ts b/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle-widgets.component.ts index 0d21c6e556..f368650aa5 100644 --- a/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle-widgets.component.ts +++ b/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle-widgets.component.ts @@ -172,6 +172,7 @@ export class WidgetsBundleWidgetsComponent extends PageComponent implements OnIn this.widgetsService.updateWidgetsBundleWidgetTypes(this.widgetsBundle.id.id, widgetTypeIds).subscribe(() => { this.isDirty = false; this.editMode = false; + this.addMode = false; }); } diff --git a/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle.component.html b/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle.component.html index 05847aa6b6..bfc61fb98c 100644 --- a/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle.component.html +++ b/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle.component.html @@ -55,8 +55,8 @@ widgets-bundle.description - - {{descriptionInput.value?.length || 0}}/255 + + {{descriptionInput.value?.length || 0}}/1024 diff --git a/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle.component.ts b/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle.component.ts index 6c4d1ffdc0..f7634e5c53 100644 --- a/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle.component.ts +++ b/ui-ngx/src/app/modules/home/pages/widget/widgets-bundle.component.ts @@ -50,7 +50,7 @@ export class WidgetsBundleComponent extends EntityComponent { { title: [entity ? entity.title : '', [Validators.required, Validators.maxLength(255)]], image: [entity ? entity.image : ''], - description: [entity ? entity.description : '', Validators.maxLength(255)] + description: [entity ? entity.description : '', Validators.maxLength(1024)] } ); } diff --git a/ui-ngx/src/app/shared/components/file-input.component.html b/ui-ngx/src/app/shared/components/file-input.component.html index 308e9e59f7..398f78451d 100644 --- a/ui-ngx/src/app/shared/components/file-input.component.html +++ b/ui-ngx/src/app/shared/components/file-input.component.html @@ -16,11 +16,10 @@ -->
-