- +
@@ -55,10 +55,18 @@
- - - - +
+ + + + + +
search diff --git a/ui/src/app/layout/user-menu.directive.js b/ui/src/app/layout/user-menu.directive.js index 6d09e679ba..53e8c45b8b 100644 --- a/ui/src/app/layout/user-menu.directive.js +++ b/ui/src/app/layout/user-menu.directive.js @@ -48,16 +48,10 @@ function UserMenuController($scope, userService, $translate, $state) { var dashboardUser = userService.getCurrentUser(); vm.authorityName = authorityName; - vm.displaySearchMode = displaySearchMode; vm.logout = logout; vm.openProfile = openProfile; vm.userDisplayName = userDisplayName; - function displaySearchMode() { - return $scope.searchConfig.searchEnabled && - $scope.searchConfig.showSearch; - } - function authorityName() { var name = "user.anonymous"; if (dashboardUser) { diff --git a/ui/src/app/locale/locale.constant-es.js b/ui/src/app/locale/locale.constant-es.js index 153019d44c..e4d4b49e53 100644 --- a/ui/src/app/locale/locale.constant-es.js +++ b/ui/src/app/locale/locale.constant-es.js @@ -235,7 +235,7 @@ "socialshare-text": "'{{dashboardTitle}}' powered by ThingsBoard", "socialshare-title": "'{{dashboardTitle}}' powered by ThingsBoard", "select-dashboard": "Seleccionar panel", - "no-dashboards-matching": "Panel '{{dashboard}}' no encontrado.", + "no-dashboards-matching": "Panel '{{entity}}' no encontrado.", "dashboard-required": "Panel requerido.", "select-existing": "Seleccionar paneles existentes", "create-new": "Crear nuevo panel", @@ -330,7 +330,7 @@ "create-new-key": "Crear nueva clave!", "duplicate-alias-error": "Alias duplicado '{{alias}}'.
El alias de los dispositivos deben ser únicos dentro del panel.", "configure-alias": "Configurar alias '{{alias}}'", - "no-devices-matching": "No se encontró dispositivo '{{device}}'", + "no-devices-matching": "No se encontró dispositivo '{{entity}}'", "alias": "Alias", "alias-required": "Alias de dispositivo requerido.", "remove-alias": "Eliminar alias", @@ -529,7 +529,7 @@ "system": "Sistema", "select-plugin": "plugin", "plugin": "Plugin", - "no-plugins-matching": "No se encontraron plugins: '{{plugin}}'", + "no-plugins-matching": "No se encontraron plugins: '{{entity}}'", "plugin-required": "Plugin requerido.", "plugin-require-match": "Por favor, elija un plugin existente.", "events": "Eventos", diff --git a/ui/src/app/locale/locale.constant-ko.js b/ui/src/app/locale/locale.constant-ko.js index 8b2d4bacb7..32dbf49c4a 100644 --- a/ui/src/app/locale/locale.constant-ko.js +++ b/ui/src/app/locale/locale.constant-ko.js @@ -218,7 +218,7 @@ export default function addLocaleKorean(locales) { "unassign-dashboards-title": "{ count, select, 1 {대시보드 1개} other {대시보드 #개} }의 할당을 취소하시겠습니까?", "unassign-dashboards-text": "선택된 대시보드가 할당 해제되고 커스터머는 액세스 할 수 없게됩니다.", "select-dashboard": "대시보드 선택", - "no-dashboards-matching": "'{{dashboard}}'와 일치하는 대시보드가 없습니다.", + "no-dashboards-matching": "'{{entity}}'와 일치하는 대시보드가 없습니다.", "dashboard-required": "대시보드를 입력하세요.", "select-existing": "기존 대시보드 선택", "create-new": "대시보드 생성", @@ -305,7 +305,7 @@ export default function addLocaleKorean(locales) { "create-new-key": "새로 만들기!", "duplicate-alias-error": "중복된 '{{alias}}' 앨리어스가 있습니다.
디바이스 앨리어스는 대시보드 내에서 고유해야 합니다.", "configure-alias": "'{{alias}}' 앨리어스 구성", - "no-devices-matching": "'{{device}}'와 일치하는 디바이스를 찾을 수 없습니다.", + "no-devices-matching": "'{{entity}}'와 일치하는 디바이스를 찾을 수 없습니다.", "alias": "앨리어스", "alias-required": "디바이스 앨리어스를 입력하세요.", "remove-alias": "디바이스 앨리어스 삭제", @@ -496,7 +496,7 @@ export default function addLocaleKorean(locales) { "system": "시스템", "select-plugin": "플러그인 선택", "plugin": "플러그인", - "no-plugins-matching": "'{{plugin}}'과 일치하는 플러그인을 찾을 수 없습니다.", + "no-plugins-matching": "'{{entity}}'과 일치하는 플러그인을 찾을 수 없습니다.", "plugin-required": "플러그인을 입력하세요.", "plugin-require-match": "기존의 플러그인을 선택해주세요.", "events": "이벤트", diff --git a/ui/src/app/locale/locale.constant-ru.js b/ui/src/app/locale/locale.constant-ru.js index 47c9460bbd..d7734b46d7 100644 --- a/ui/src/app/locale/locale.constant-ru.js +++ b/ui/src/app/locale/locale.constant-ru.js @@ -235,7 +235,7 @@ export default function addLocaleRussian(locales) { "socialshare-text": "'{{dashboardTitle}}' сделано ThingsBoard", "socialshare-title": "'{{dashboardTitle}}' сделано ThingsBoard", "select-dashboard": "Выберите дашборд", - "no-dashboards-matching": "Дашборд '{{dashboard}}' не найден.", + "no-dashboards-matching": "Дашборд '{{entity}}' не найден.", "dashboard-required": "Дашборд обязателен.", "select-existing": "Выберите существующий дашборд", "create-new": "Создать новый дашборд", @@ -330,7 +330,7 @@ export default function addLocaleRussian(locales) { "create-new-key": "Создать новый!", "duplicate-alias-error": "Найден дублирующийся псевдоним '{{alias}}'.
В рамках дашборда псевдонимы устройств должны быть уникальными.", "configure-alias": "Конфигурировать '{{alias}}' псевдоним", - "no-devices-matching": "Устройство '{{device}}' не найдено.", + "no-devices-matching": "Устройство '{{entity}}' не найдено.", "alias": "Псевдоним", "alias-required": "Псевдоним устройства обязателен.", "remove-alias": "Удалить псевдоним устройства", @@ -529,7 +529,7 @@ export default function addLocaleRussian(locales) { "system": "Системный", "select-plugin": "Выберите плагин", "plugin": "Плагин", - "no-plugins-matching": "Плагин '{{plugin}}' не найден.", + "no-plugins-matching": "Плагин '{{entity}}' не найден.", "plugin-required": "Плагин обязателен.", "plugin-require-match": "Пожалуйста, выберите существующий плагин.", "events": "События", diff --git a/ui/src/app/locale/locale.constant-zh.js b/ui/src/app/locale/locale.constant-zh.js index ba8e3c08da..32460702ec 100644 --- a/ui/src/app/locale/locale.constant-zh.js +++ b/ui/src/app/locale/locale.constant-zh.js @@ -235,7 +235,7 @@ export default function addLocaleChinese(locales) { "socialshare-text" : "'{{dashboardTitle}}' 由ThingsBoard提供支持", "socialshare-title" : "'{{dashboardTitle}}' 由ThingsBoard提供支持", "select-dashboard" : "选择仪表板", - "no-dashboards-matching" : "找不到符合 '{{dashboard}}' 的仪表板。", + "no-dashboards-matching" : "找不到符合 '{{entity}}' 的仪表板。", "dashboard-required" : "仪表板是必需的。", "select-existing" : "选择现有仪表板", "create-new" : "创建新的仪表板", @@ -330,7 +330,7 @@ export default function addLocaleChinese(locales) { "create-new-key": "创建一个新的!", "duplicate-alias-error" : "找到重复别名 '{{alias}}'。
设备别名必须是唯一的。", "configure-alias" : "配置 '{{alias}}' 别名", - "no-devices-matching" : "找不到与 '{{device}}' 匹配的设备。", + "no-devices-matching" : "找不到与 '{{entity}}' 匹配的设备。", "alias" : "别名", "alias-required" : "需要设备别名。", "remove-alias": "删除设备别名", @@ -529,7 +529,7 @@ export default function addLocaleChinese(locales) { "system" : "系统", "select-plugin" : "选择插件", "plugin" : "插件", - "no-plugins-matching" : "没有找到匹配'{{plugin}}'的插件。", + "no-plugins-matching" : "没有找到匹配'{{entity}}'的插件。", "plugin-required" : "插件是必需的。", "plugin-require-match" : "请选择一个现有的插件。", "events" : "事件", diff --git a/ui/src/app/locale/locale.constant.js b/ui/src/app/locale/locale.constant.js index 6e6308d6a2..d25db5da32 100644 --- a/ui/src/app/locale/locale.constant.js +++ b/ui/src/app/locale/locale.constant.js @@ -106,6 +106,12 @@ export default angular.module('thingsboard.locale', []) "enable-tls": "Enable TLS", "send-test-mail": "Send test mail" }, + "alarm": { + "alarm": "Alarm", + "select-alarm": "Select alarm", + "no-alarms-matching": "No alarms matching '{{entity}}' were found.", + "alarm-required": "Alarm is required" + }, "asset": { "asset": "Asset", "assets": "Assets", @@ -124,6 +130,9 @@ export default angular.module('thingsboard.locale', []) "unassign-from-customer": "Unassign from customer", "delete": "Delete asset", "asset-public": "Asset is public", + "asset-type": "Asset type", + "asset-type-required": "Asset type is required.", + "select-asset-type": "Select asset type", "name": "Name", "name-required": "Name is required.", "description": "Description", @@ -154,7 +163,10 @@ export default angular.module('thingsboard.locale', []) "unassign-assets-title": "Are you sure you want to unassign { count, select, 1 {1 asset} other {# assets} }?", "unassign-assets-text": "After the confirmation all selected assets will be unassigned and won't be accessible by the customer.", "copyId": "Copy asset Id", - "idCopiedMessage": "Asset Id has been copied to clipboard" + "idCopiedMessage": "Asset Id has been copied to clipboard", + "select-asset": "Select asset", + "no-assets-matching": "No assets matching '{{entity}}' were found.", + "asset-required": "Asset is required" }, "attribute": { "attributes": "Attributes", @@ -166,6 +178,7 @@ export default angular.module('thingsboard.locale', []) "scope-shared": "Shared attributes", "add": "Add attribute", "key": "Key", + "last-update-time": "Last update time", "key-required": "Attribute key is required.", "value": "Value", "value-required": "Attribute value is required.", @@ -207,6 +220,7 @@ export default angular.module('thingsboard.locale', []) "enter-search": "Enter search" }, "customer": { + "customer": "Customer", "customers": "Customers", "management": "Customer management", "dashboard": "Customer Dashboard", @@ -243,7 +257,10 @@ export default angular.module('thingsboard.locale', []) "details": "Details", "events": "Events", "copyId": "Copy customer Id", - "idCopiedMessage": "Customer Id has been copied to clipboard" + "idCopiedMessage": "Customer Id has been copied to clipboard", + "select-customer": "Select customer", + "no-customers-matching": "No customers matching '{{entity}}' were found.", + "customer-required": "Customer is required" }, "datetime": { "date-from": "Date from", @@ -301,7 +318,7 @@ export default angular.module('thingsboard.locale', []) "socialshare-text": "'{{dashboardTitle}}' powered by ThingsBoard", "socialshare-title": "'{{dashboardTitle}}' powered by ThingsBoard", "select-dashboard": "Select dashboard", - "no-dashboards-matching": "No dashboards matching '{{dashboard}}' were found.", + "no-dashboards-matching": "No dashboards matching '{{entity}}' were found.", "dashboard-required": "Dashboard is required.", "select-existing": "Select existing dashboard", "create-new": "Create new dashboard", @@ -328,6 +345,7 @@ export default angular.module('thingsboard.locale', []) "min-vertical-margin-message": "Only 0 is allowed as minimum vertical margin value.", "max-vertical-margin-message": "Only 50 is allowed as maximum vertical margin value.", "display-title": "Display dashboard title", + "toolbar-always-open": "Keep toolbar opened", "title-color": "Title color", "display-dashboards-selection": "Display dashboards selection", "display-entities-selection": "Display entities selection", @@ -421,7 +439,7 @@ export default angular.module('thingsboard.locale', []) "create-new-key": "Create a new one!", "duplicate-alias-error": "Duplicate alias found '{{alias}}'.
Device aliases must be unique whithin the dashboard.", "configure-alias": "Configure '{{alias}}' alias", - "no-devices-matching": "No devices matching '{{device}}' were found.", + "no-devices-matching": "No devices matching '{{entity}}' were found.", "alias": "Alias", "alias-required": "Device alias is required.", "remove-alias": "Remove device alias", @@ -476,6 +494,9 @@ export default angular.module('thingsboard.locale', []) "rsa-key-required": "RSA public key is required.", "secret": "Secret", "secret-required": "Secret is required.", + "device-type": "Device type", + "device-type-required": "Device type is required.", + "select-device-type": "Select device type", "name": "Name", "name-required": "Name is required.", "description": "Description", @@ -490,7 +511,8 @@ export default angular.module('thingsboard.locale', []) "unable-delete-device-alias-text": "Device alias '{{deviceAlias}}' can't be deleted as it used by the following widget(s):
{{widgetsList}}", "is-gateway": "Is gateway", "public": "Public", - "device-public": "Device is public" + "device-public": "Device is public", + "select-device": "Select device" }, "dialog": { "close": "Close dialog" @@ -520,6 +542,7 @@ export default angular.module('thingsboard.locale', []) "entity-list-empty": "No entities selected.", "entity-name-filter-required": "Entity name filter is required.", "entity-name-filter-no-entity-matched": "No entities starting with '{{entity}}' were found.", + "all-subtypes": "All", "type": "Type", "type-device": "Device", "type-asset": "Asset", @@ -527,6 +550,9 @@ export default angular.module('thingsboard.locale', []) "type-plugin": "Plugin", "type-tenant": "Tenant", "type-customer": "Customer", + "type-user": "User", + "type-dashboard": "Dashboard", + "type-alarm": "Alarm", "select-entities": "Select entities", "no-aliases-found": "No aliases found.", "no-alias-matching": "'{{alias}}' not found.", @@ -664,7 +690,7 @@ export default angular.module('thingsboard.locale', []) "system": "System", "select-plugin": "Select plugin", "plugin": "Plugin", - "no-plugins-matching": "No plugins matching '{{plugin}}' were found.", + "no-plugins-matching": "No plugins matching '{{entity}}' were found.", "plugin-required": "Plugin is required.", "plugin-require-match": "Please select an existing plugin.", "events": "Events", @@ -677,6 +703,7 @@ export default angular.module('thingsboard.locale', []) "invalid-plugin-file-error": "Unable to import plugin: Invalid plugin data structure.", "copyId": "Copy plugin Id", "idCopiedMessage": "Plugin Id has been copied to clipboard" + }, "position": { "top": "Top", @@ -689,7 +716,24 @@ export default angular.module('thingsboard.locale', []) "change-password": "Change Password", "current-password": "Current password" }, + "relation": { + "relations": "Relations", + "entity-relations": "Entity relations", + "selected-relations": "{ count, select, 1 {1 relation} other {# relations} } selected", + "type": "Type", + "to-entity-type": "Entity type", + "to-entity-name": "Entity name", + "edit": "Edit relation", + "delete": "Delete relation", + "relation-type": "Relation type", + "relation-types": { + "Contains": "Contains", + "Manages": "Manages" + }, + "add": "Add relation" + }, "rule": { + "rule": "Rule", "rules": "Rules", "delete": "Delete rule", "activate": "Activate rule", @@ -741,12 +785,16 @@ export default angular.module('thingsboard.locale', []) "rule-file": "Rule file", "invalid-rule-file-error": "Unable to import rule: Invalid rule data structure.", "copyId": "Copy rule Id", - "idCopiedMessage": "Rule Id has been copied to clipboard" + "idCopiedMessage": "Rule Id has been copied to clipboard", + "select-rule": "Select rule", + "no-rules-matching": "No rules matching '{{entity}}' were found.", + "rule-required": "Rule is required" }, "rule-plugin": { "management": "Rules and plugins management" }, "tenant": { + "tenant": "Tenant", "tenants": "Tenants", "management": "Tenant management", "add": "Add Tenant", @@ -767,7 +815,10 @@ export default angular.module('thingsboard.locale', []) "details": "Details", "events": "Events", "copyId": "Copy tenant Id", - "idCopiedMessage": "Tenant Id has been copied to clipboard" + "idCopiedMessage": "Tenant Id has been copied to clipboard", + "select-tenant": "Select tenant", + "no-tenants-matching": "No tenants matching '{{entity}}' were found.", + "tenant-required": "Tenant is required" }, "timeinterval": { "seconds-interval": "{ seconds, select, 1 {1 second} other {# seconds} }", @@ -795,6 +846,7 @@ export default angular.module('thingsboard.locale', []) "time-period": "Time period" }, "user": { + "user": "User", "users": "Users", "customer-users": "Customer Users", "tenant-admins": "Tenant Admins", @@ -820,7 +872,10 @@ export default angular.module('thingsboard.locale', []) "last-name": "Last Name", "description": "Description", "default-dashboard": "Default dashboard", - "always-fullscreen": "Always fullscreen" + "always-fullscreen": "Always fullscreen", + "select-user": "Select user", + "no-users-matching": "No users matching '{{entity}}' were found.", + "user-required": "User is required" }, "value": { "type": "Value type", diff --git a/ui/src/scss/constants.scss b/ui/src/scss/constants.scss index 73697fc591..c56d40bc16 100644 --- a/ui/src/scss/constants.scss +++ b/ui/src/scss/constants.scss @@ -20,10 +20,12 @@ $gray: #eee; $primary-palette-color: 'indigo'; +$default: '500'; $hue-1: '300'; $hue-2: '800'; $hue-3: 'a100'; +$primary-default: #305680; //material-color($primary-palette-color, $default); $primary-hue-1: material-color($primary-palette-color, $hue-1); $primary-hue-2: material-color($primary-palette-color, $hue-2); $primary-hue-3: rgb(207, 216, 220); diff --git a/ui/src/scss/main.scss b/ui/src/scss/main.scss index 4ffabc975e..c062d4ea83 100644 --- a/ui/src/scss/main.scss +++ b/ui/src/scss/main.scss @@ -261,6 +261,45 @@ pre.tb-highlight { font-size: 16px; } +.tb-data-table { + md-toolbar { + z-index: 0; + } + span.no-data-found { + position: relative; + height: calc(100% - 57px); + text-transform: uppercase; + display: flex; + } + table.md-table { + tbody { + tr { + td { + &.tb-action-cell { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + min-width: 72px; + max-width: 72px; + width: 72px; + .md-button { + &.md-icon-button { + margin: 0; + padding: 6px; + width: 36px; + height: 36px; + } + } + .tb-spacer { + padding-left: 38px; + } + } + } + } + } + } +} + /*********************** * Flow