|
|
|
@ -1,5 +1,5 @@ |
|
|
|
{ |
|
|
|
"title": "Gateway", |
|
|
|
"title": "ThingsBoard IoT Gateways", |
|
|
|
"image": null, |
|
|
|
"mobileHide": false, |
|
|
|
"mobileOrder": null, |
|
|
|
@ -40,7 +40,7 @@ |
|
|
|
"color": "rgba(0, 0, 0, 0.87)", |
|
|
|
"padding": "4px", |
|
|
|
"settings": { |
|
|
|
"entitiesTitle": "Gateway list", |
|
|
|
"entitiesTitle": "Gateways list", |
|
|
|
"enableSearch": true, |
|
|
|
"enableSelectColumnDisplay": false, |
|
|
|
"enableStickyHeader": true, |
|
|
|
@ -55,7 +55,7 @@ |
|
|
|
"defaultSortOrder": "entityName", |
|
|
|
"useRowStyleFunction": false |
|
|
|
}, |
|
|
|
"title": "New Entities table", |
|
|
|
"title": "Gateways list", |
|
|
|
"dropShadow": true, |
|
|
|
"enableFullscreen": false, |
|
|
|
"titleStyle": { |
|
|
|
@ -571,11 +571,11 @@ |
|
|
|
"padding": "8px", |
|
|
|
"settings": { |
|
|
|
"useMarkdownTextFunction": true, |
|
|
|
"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 `<mat-card-header class='tb-home-widget-link' (click)=\"ctx.actionsApi.handleWidgetAction($event, ctx.actionsApi.getActionDescriptors('elementClick')[${index}], ctx.datasources[0].entity.id)\">`\n } else {\n return \"<mat-card-header >\" \n }\n}\nfunction createDataBlock(value, label, dividerStyle, mobile, index) {\n blockData += `\n <mat-card style=\"flex-grow: 1; width: ${mobile? '100%': 'auto'}; min-height: ${mobile? 'auto': '57px'}\" class=\" ${dividerStyle}\">\n <div class=\"divider\"></div>\n <mat-divider vertical style=\"height:100%\"></mat-divider>\n ${generateMatHeader(index)}\n <mat-card-subtitle>${label}</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content> ${value}</mat-card-content>\n </mat-card>`;\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 `<span style=\"color:rgb(25,128,56)\">${(data[1]?data[1].count:0)} </span>`\n + \" | \" + \n `<span style=\"color:rgb(203,37,48)\">${(data[2]?data[2][\"count 2\"]:0)} </span>`\n , \"Devices <span class='tb-hint' style='padding-left: 0'>(Active | Inactive)</span>\", '');\ncreateDataBlock(\n `<span style=\"color:rgb(25,128,56)\">${(data[0].active_connectors?JSON.parse(data[0].active_connectors).length:0)} </span>`\n + \" | \" + \n `<span style=\"color:rgb(203,37,48)\">${(data[0].inactive_connectors?JSON.parse(data[0].inactive_connectors).length:0)} </span>`\n , \"Connectors <span class='tb-hint' style='padding-left: 0'>(Active | Inactive)</span>\", '', '', connectorsIndex);\ncreateDataBlock(data[0].ALL_ERRORS_COUNT || 0, \"Errors\", (data[0].ALL_ERRORS_COUNT || 0) === 0 ? 'divider-green' : 'divider-red', '', logsIndex);\nreturn `<div fxLayout=\"row wrap\" fxLayoutGap=\"8px\" class=\"cards-container\">${blockData}</div>`;", |
|
|
|
"markdownTextFunction": "var blockData = '';\nvar connectorsIndex = ctx.actionsApi.getActionDescriptors('elementClick').findIndex(action=>action.name==\"Connectors\");\nvar logsIndex = ctx.actionsApi.getActionDescriptors('elementClick').findIndex(action=>action.name==\"Logs\");\nfunction generateMatHeader(index) {\n if( index !== undefined && index > -1) {\n return `<mat-card-header class='tb-home-widget-link' (click)=\"ctx.actionsApi.handleWidgetAction($event, ctx.actionsApi.getActionDescriptors('elementClick')[${index}], ctx.datasources[0].entity.id)\">`\n } else {\n return \"<mat-card-header >\" \n }\n}\nfunction createDataBlock(value, label, dividerStyle, mobile, index) {\n blockData += `\n <mat-card style=\"flex-grow: 1; width: ${mobile? '100%': 'auto'}; min-height: ${mobile? 'auto': '57px'}\" class=\" ${dividerStyle}\">\n <div class=\"divider\"></div>\n <mat-divider vertical style=\"height:100%\"></mat-divider>\n ${generateMatHeader(index)}\n <mat-card-subtitle>${label}</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content> ${value}</mat-card-content>\n </mat-card>`;\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 `<span style=\"color:rgb(25,128,56)\">${(data[1]?data[1].count:0)} </span>`\n + \" | \" + \n `<span style=\"color:rgb(203,37,48)\">${(data[2]?data[2][\"count 2\"]:0)} </span>`\n , \"Devices <span class='tb-hint' style='padding-left: 0'>(Active | Inactive)</span>\", '');\ncreateDataBlock(\n `<span style=\"color:rgb(25,128,56)\">${(data[0].active_connectors?JSON.parse(data[0].active_connectors).length:0)} </span>`\n + \" | \" + \n `<span style=\"color:rgb(203,37,48)\">${(data[0].inactive_connectors?JSON.parse(data[0].inactive_connectors).length:0)} </span>`\n , \"Connectors <span class='tb-hint' style='padding-left: 0'>(Active | Inactive)</span>\", '', '', connectorsIndex);\ncreateDataBlock(data[0].ALL_ERRORS_COUNT || 0, \"Errors\", (data[0].ALL_ERRORS_COUNT || 0) === 0 ? 'divider-green' : 'divider-red', '', logsIndex);\nreturn `<div fxLayout=\"row wrap\" fxLayoutGap=\"8px\" class=\"cards-container\">${blockData}</div>`;", |
|
|
|
"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}\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", |
|
|
|
"title": "Connectors", |
|
|
|
"showTitleIcon": false, |
|
|
|
"iconColor": "rgba(0, 0, 0, 0.87)", |
|
|
|
"iconSize": "24px", |
|
|
|
@ -599,7 +599,7 @@ |
|
|
|
"actions": { |
|
|
|
"elementClick": [ |
|
|
|
{ |
|
|
|
"name": "Connecotrs", |
|
|
|
"name": "Connectors", |
|
|
|
"icon": "more_horiz", |
|
|
|
"useShowWidgetActionFunction": null, |
|
|
|
"showWidgetActionFunction": "return true;", |
|
|
|
@ -680,7 +680,7 @@ |
|
|
|
"defaultSortOrder": "-createdTime", |
|
|
|
"useRowStyleFunction": false |
|
|
|
}, |
|
|
|
"title": "New Alarms table", |
|
|
|
"title": "Alarms", |
|
|
|
"dropShadow": true, |
|
|
|
"enableFullscreen": false, |
|
|
|
"titleStyle": { |
|
|
|
@ -1074,7 +1074,7 @@ |
|
|
|
} |
|
|
|
] |
|
|
|
}, |
|
|
|
"title": "New RPC remote shell", |
|
|
|
"title": "RPC remote shell", |
|
|
|
"dropShadow": true, |
|
|
|
"enableFullscreen": true, |
|
|
|
"widgetStyle": { |
|
|
|
@ -1485,7 +1485,7 @@ |
|
|
|
} |
|
|
|
] |
|
|
|
}, |
|
|
|
"title": "New RPC debug terminal", |
|
|
|
"title": "RPC debug terminal", |
|
|
|
"dropShadow": true, |
|
|
|
"enableFullscreen": true, |
|
|
|
"widgetStyle": {}, |
|
|
|
@ -1868,7 +1868,7 @@ |
|
|
|
"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}" |
|
|
|
}, |
|
|
|
"title": "New Markdown/HTML Card", |
|
|
|
"title": "Service command", |
|
|
|
"showTitleIcon": false, |
|
|
|
"iconColor": "rgba(0, 0, 0, 0.87)", |
|
|
|
"iconSize": "24px", |
|
|
|
@ -1980,7 +1980,7 @@ |
|
|
|
"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: start;\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}" |
|
|
|
}, |
|
|
|
"title": "New Markdown/HTML Card", |
|
|
|
"title": "General configuration", |
|
|
|
"showTitleIcon": false, |
|
|
|
"iconColor": "rgba(0, 0, 0, 0.87)", |
|
|
|
"iconSize": "24px", |
|
|
|
@ -2145,7 +2145,7 @@ |
|
|
|
"applyDefaultMarkdownStyle": true, |
|
|
|
"markdownCss": ".mat-mdc-form-field-subscript-wrapper {\n display: none !important;\n}" |
|
|
|
}, |
|
|
|
"title": "New Markdown/HTML Card", |
|
|
|
"title": "Gateway devices", |
|
|
|
"showTitleIcon": false, |
|
|
|
"iconColor": "rgba(0, 0, 0, 0.87)", |
|
|
|
"iconSize": "24px", |
|
|
|
@ -4939,7 +4939,7 @@ |
|
|
|
"applyDefaultMarkdownStyle": false, |
|
|
|
"markdownCss": ".action-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}\r\n\r\nbutton {\r\n flex-grow: 1;\r\n margin: 10px;\r\n min-width: 150px;\r\n height: auto;\r\n}" |
|
|
|
}, |
|
|
|
"title": "New Markdown/HTML Card", |
|
|
|
"title": "Gateway commands", |
|
|
|
"showTitleIcon": false, |
|
|
|
"iconColor": "rgba(0, 0, 0, 0.87)", |
|
|
|
"iconSize": "24px", |