Improve widget device claim
This commit is contained in:
		
							parent
							
								
									09a164be0f
								
							
						
					
					
						commit
						26fa1fd832
					
				@ -347,14 +347,14 @@
 | 
			
		||||
      "descriptor": {
 | 
			
		||||
        "type": "static",
 | 
			
		||||
        "sizeX": 7.5,
 | 
			
		||||
        "sizeY": 4,
 | 
			
		||||
        "sizeY": 4.5,
 | 
			
		||||
        "resources": [],
 | 
			
		||||
        "templateHtml": "<form name=\"claimDeviceForm\" class=\"claim-form\" ng-submit=\"claim()\">\n    <fieldset ng-disabled=\"$root.loading || loading\">\n        <md-input-container class=\"md-block\">\n            <label>Device name</label>\n                <input ng-model=\"deviceObj.deviceName\" name=\"deviceName\" required>\n                <div ng-messages=\"claimDeviceForm.deviceName.$error\">\n                    <div ng-message=\"required\">Device name is required.</div>\n                </div>\n        </md-input-container>\n        <md-input-container ng-if=\"deviceSecretField\" class=\"md-block\">\n            <label>Device secret</label>\n            <input name=\"deviceSecret\" ng-model=\"deviceObj.deviceSecret\" required>\n            <div ng-messages=\"claimDeviceForm.deviceSecret.$error\">\n                <div ng-message=\"required\">Device secret is required.</div>\n            </div>\n        </md-input-container>\n    </fieldset>\n    <md-button type=\"submit\" ng-disabled=\"loading || claimDeviceForm.$invalid || !claimDeviceForm.$dirty\" class=\"md-raised md-primary\">Claim</md-button>\n</form>",
 | 
			
		||||
        "templateCss": ".claim-form {\n    margin: 16px;\n}",
 | 
			
		||||
        "controllerScript": "let $scope;\n\nself.onInit = function() {\n    $scope = self.ctx.$scope;\n    let $injector = $scope.$injector;\n    let $q = $injector.get('$q');\n    let $http = $injector.get('$http');\n    let toast = $scope.$injector.get('toast');\n    $scope.deviceSecretField = self.ctx.settings.deviceSecret;\n    $scope.deviceObj = {};\n    \n    $scope.claim = () => {\n        $scope.loading = true;\n        claimDevice($scope.deviceObj.deviceName, $scope.deviceObj.deviceSecret).then(\n            (data) => {\n                resetForm();\n                $scope.claimDeviceForm.$setPristine();\n                $scope.claimDeviceForm.$setUntouched();\n                $scope.loading = false;\n                if (data.response == \"SUCCESS\") {\n                    toast.showSuccess('Device was successfully claimed!', 2000, angular.element('.claim-form'), 'bottom left');\n                }\n            },\n            () => {\n                $scope.loading = false;\n            }\n        );\n    }\n    \n    function claimDevice(deviceName, deviceSecret, config) {\n        let deferred = $q.defer();\n        let url = \"/api/customer/device/\" + deviceName + \"/claim\";\n        let obj = deviceSecret ? { secretKey: deviceSecret } : {};\n        $http.post(url, obj, config).then(\n            (payload) => {\n                deferred.resolve(payload.data); \n            },\n            () => {\n                deferred.reject();\n            }\n        );\n        return deferred.promise;\n    }\n    \n    function resetForm() {\n        $scope.deviceObj = {};\n    }\n}\n\n",
 | 
			
		||||
        "settingsSchema": "{\n    \"schema\": {\n        \"type\": \"object\",\n        \"title\": \"Settings\",\n        \"required\": [],\n        \"properties\": {\n            \"deviceSecret\": {\n                \"title\": \"Add 'Device secret' field\",\n                \"type\": \"boolean\",\n                \"default\": false\n            }\n        }\n    },\n    \"form\": [\n        \"deviceSecret\"\n    ]\n}",
 | 
			
		||||
        "templateHtml": "<form name=\"claimDeviceForm\" class=\"claim-form\" ng-submit=\"claim()\">\n    <fieldset ng-disabled=\"$root.loading || loading\">\n        <md-input-container ng-class=\"{'show-label': showLabel}\" class=\"md-block\">\n            <label>{{deviceLabel}}</label>\n            <input ng-model=\"deviceObj.deviceName\" \n                   name=\"deviceName\" \n                   required\n            >\n            <div ng-messages=\"claimDeviceForm.deviceName.$error\">\n                <div ng-message=\"required\">{{requiredErrorDevice}}</div>\n            </div>\n        </md-input-container>\n        <md-input-container ng-if=\"secretKeyField\" class=\"md-block\" ng-class=\"{'show-label': showLabel}\">\n            <label>{{secretKeyLabel}}</label>\n            <input name=\"deviceSecret\" ng-model=\"deviceObj.deviceSecret\" required>\n            <div ng-messages=\"claimDeviceForm.deviceSecret.$error\">\n                <div ng-message=\"required\">{{requiredErrorSecretKey}}</div>\n            </div>\n        </md-input-container>\n    </fieldset>\n    <div class=\"md-block\" layout=\"row\" layout-align=\"end center\">\n        <md-button type=\"submit\" ng-disabled=\"loading || claimDeviceForm.$invalid || !claimDeviceForm.$dirty\" class=\"md-raised md-primary\">{{labelClaimButon}}</md-button>\n    </div>\n</form>",
 | 
			
		||||
        "templateCss": ".claim-form {\n    overflow: hidden;\n    height: 100%;\n    display: flex;\n    flex-direction: column;\n}\n\n.show-label label {\n    display: block;\n}\n\nlabel {\n    display: none;\n}",
 | 
			
		||||
        "controllerScript": "let $scope;\n\nself.onInit = function() {\n    $scope = self.ctx.$scope;\n    let $injector = $scope.$injector;\n    let $q = $injector.get('$q');\n    let $http = $injector.get('$http');\n    let toast = $scope.$injector.get('toast');\n    let utils = $scope.$injector.get('utils');\n    let $translate = $scope.$injector.get('$translate');\n    let $rootScope = $scope.$injector.get('$rootScope');\n    let settings = self.ctx.settings || {};\n    $scope.secretKeyField = settings.deviceSecret;\n    $scope.showLabel = settings.showLabel;\n    $scope.deviceObj = {};\n    \n    const config = {\n      ignoreErrors: true  \n    };\n    \n    let titleTemplate = \"\";\n    let successfulClaim = utils.customTranslation(settings.successfulClaimDevice, settings.successfulClaimDevice) || $translate.instant('widgets.input-widgets.claim-successful');\n    let failedClaimDevice = utils.customTranslation(settings.failedClaimDevice, settings.failedClaimDevice) || $translate.instant('widgets.input-widgets.claim-failed');\n    let deviceNotFound = utils.customTranslation(settings.deviceNotFound, settings.deviceNotFound) || $translate.instant('widgets.input-widgets.claim-not-found');\n    \n    if (settings.widgetTitle && settings.widgetTitle.length) {\n        titleTemplate = utils.customTranslation(settings.widgetTitle, settings.widgetTitle);\n    } else {\n        titleTemplate = self.ctx.widgetConfig.title;\n    }\n    self.ctx.widgetTitle = titleTemplate;\n    \n    $scope.deviceLabel = utils.customTranslation(settings.deviceLabel, settings.deviceLabel) || $translate.instant('widgets.input-widgets.device-name');\n    $scope.requiredErrorDevice= utils.customTranslation(settings.requiredErrorDevice, settings.requiredErrorDevice) || $translate.instant('widgets.input-widgets.device-name-required');\n    \n    $scope.secretKeyLabel = utils.customTranslation(settings.secretKeyLabel, settings.secretKeyLabel) || $translate.instant('widgets.input-widgets.secret-key');\n    $scope.requiredErrorSecretKey= utils.customTranslation(settings.requiredErrorSecretKey, settings.requiredErrorSecretKey) || $translate.instant('widgets.input-widgets.secret-key-required');\n    \n    $scope.labelClaimButon = utils.customTranslation(settings.labelClaimButon, settings.labelClaimButon) || $translate.instant('widgets.input-widgets.claim-device');\n    \n    $scope.claim = () => {\n        $scope.loading = true;\n        claimDevice($scope.deviceObj.deviceName, $scope.deviceObj.deviceSecret, config).then(\n            (data) => {\n                successClaim();\n            },\n            (error) => {\n                $scope.loading = false;\n                if(error.status == 404) {\n                    toast.showError(deviceNotFound, angular.element('.claim-form'),'bottom left');\n                } else if(error.status == 400) {\n                    toast.showError(failedClaimDevice, angular.element('.claim-form'),'bottom left');\n                }\n            }\n        );\n    }\n    \n    function claimDevice(deviceName, deviceSecret, config) {\n        let deferred = $q.defer();\n        let url = \"/api/customer/device/\" + deviceName + \"/claim\";\n        let obj = deviceSecret ? { secretKey: deviceSecret } : {};\n        $http.post(url, obj, config).then(\n            (payload) => {\n                deferred.resolve(payload.data); \n            },\n            (error) => {\n                deferred.reject(error);\n            }\n        );\n        return deferred.promise;\n    }\n    \n    function updateAliasData() {\n        var aliasIds = [];\n        for (var id in self.ctx.aliasController.resolvedAliases) {\n            aliasIds.push(id);\n        }\n        var tasks = [];\n        aliasIds.forEach(function(aliasId) {\n            self.ctx.aliasController.setAliasUnresolved(aliasId);\n            tasks.push(self.ctx.aliasController.getAliasInfo(aliasId));\n        });\n        $q.all(tasks).then(function() {\n            $rootScope.$broadcast('widgetForceReInit');\n        });\n    }\n    \n    function successClaim() {\n        resetForm();\n        $scope.claimDeviceForm.$setPristine();\n        $scope.claimDeviceForm.$setUntouched();\n        $scope.loading = false;\n        toast.showSuccess(successfulClaim, 2000);\n        updateAliasData();\n    }\n    \n    function resetForm() {\n        $scope.deviceObj = {};\n    }\n}\n\n",
 | 
			
		||||
        "settingsSchema": "{\n    \"schema\": {\n        \"type\": \"object\",\n        \"title\": \"Settings\",\n        \"properties\": {\n            \"widgetTitle\": {\n                \"title\": \"Widget title\",\n                \"type\": \"string\",\n                \"default\": \"\"\n            },\n            \"deviceSecret\": {\n                \"title\": \"Show 'Secret key' input field\",\n                \"type\": \"boolean\",\n                \"default\": false\n            },\n            \"showLabel\": {\n                \"title\": \"Show label\",\n                \"type\": \"boolean\",\n                \"default\": true\n            },\n            \"deviceLabel\": {\n                \"title\": \"Label for device name\",\n                \"type\": \"string\",\n                \"default\": \"\"\n            },\n            \"requiredErrorDevice\": {\n                \"title\": \"'Device name required' error message\",\n                \"type\": \"string\",\n                \"default\": \"\"\n            },\n            \"secretKeyLabel\": {\n                \"title\": \"Label for secret key\",\n                \"type\": \"string\",\n                \"default\": \"\"\n            },\n            \"requiredErrorSecretKey\": {\n                \"title\": \"'Secret key required' error message\",\n                \"type\": \"string\",\n                \"default\": \"\"\n            },\n            \"labelClaimButon\": {\n                \"title\": \"Label for claiming button\",\n                \"type\": \"string\",\n                \"default\": \"\"\n            },\n            \"successfulClaimDevice\": {\n                \"title\": \"Text message of successful device claiming\",\n                \"type\": \"string\",\n                \"default\": \"\"\n            },\n            \"deviceNotFound\": {\n                \"title\": \"Text message when device not found\",\n                \"type\": \"string\",\n                \"default\": \"\"\n            },\n            \"failedClaimDevice\": {\n                \"title\": \"Text message of failed device claiming\",\n                \"type\": \"string\",\n                \"default\": \"\"\n            }\n        },\n        \"required\": []\n    },\n    \"form\": [\n        [\n            \"widgetTitle\",\n            \"labelClaimButon\",\n            \"deviceSecret\",\n            \"showLabel\",\n            \"deviceLabel\",\n            \"secretKeyLabel\"\n        ],\n        [\n            \"deviceNotFound\",\n            \"failedClaimDevice\",\n            \"successfulClaimDevice\",\n            \"requiredErrorDevice\",\n            \"requiredErrorSecretKey\"\n        ]\n    ],\n    \"groupInfoes\": [{\n        \"formIndex\": 0,\n        \"GroupTitle\": \"General settings\"\n    }, {\n        \"formIndex\": 1,\n        \"GroupTitle\": \"Message settings\"\n    }]\n}",
 | 
			
		||||
        "dataKeySettingsSchema": "{}\n",
 | 
			
		||||
        "defaultConfig": "{\"datasources\":[{\"type\":\"static\",\"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\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"deviceSecret\":true},\"title\":\"Device claiming widget\",\"dropShadow\":true,\"showTitleIcon\":false,\"titleIcon\":\"more_horiz\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"enableFullscreen\":false,\"enableDataExport\":true,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"showLegend\":false,\"actions\":{}}"
 | 
			
		||||
        "defaultConfig": "{\"datasources\":[{\"type\":\"static\",\"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\":true,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"deviceSecret\":true,\"showLabel\":true},\"title\":\"Device claiming widget\",\"dropShadow\":true,\"showTitleIcon\":false,\"titleIcon\":\"more_horiz\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"enableFullscreen\":false,\"enableDataExport\":true,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"showLegend\":false,\"actions\":{}}"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
@ -1699,7 +1699,13 @@
 | 
			
		||||
        },
 | 
			
		||||
        "input-widgets": {
 | 
			
		||||
            "attribute-not-allowed": "Attribute parameter cannot be used in this widget",
 | 
			
		||||
            "claim-device": "Claim device",
 | 
			
		||||
            "claim-failed": "Failed to claim the device!",
 | 
			
		||||
            "claim-not-found": "Device not found!",
 | 
			
		||||
            "claim-successful": "Device was successfully claimed!",
 | 
			
		||||
            "date": "Date",
 | 
			
		||||
            "device-name": "Device name",
 | 
			
		||||
            "device-name-required": "Device name is required",
 | 
			
		||||
            "discard-changes": "Discard changes",
 | 
			
		||||
            "entity-attribute-required": "Entity attribute is required",
 | 
			
		||||
            "entity-timeseries-required": "Entity timeseries is required",
 | 
			
		||||
@ -1710,6 +1716,8 @@
 | 
			
		||||
            "no-image": "No image",
 | 
			
		||||
            "no-support-web-camera": "No supported web camera",
 | 
			
		||||
            "no-timeseries-selected": "No timeseries selected",
 | 
			
		||||
            "secret-key": "Secret key",
 | 
			
		||||
            "secret-key-required": "Secret key is required",
 | 
			
		||||
            "switch-attribute-value": "Switch entity attribute value",
 | 
			
		||||
            "switch-camera": "Switch camera",
 | 
			
		||||
            "switch-timeseries-value": "Switch entity timeseries value",
 | 
			
		||||
 | 
			
		||||
@ -1615,13 +1615,21 @@
 | 
			
		||||
        },
 | 
			
		||||
        "input-widgets": {
 | 
			
		||||
            "attribute-not-allowed": "Атрибут не может быть выбран в этом виджете",
 | 
			
		||||
            "claim-device": "Подтвердить устройство",
 | 
			
		||||
            "claim-failed": "Не удалось подтвердить устройство!",
 | 
			
		||||
            "claim-not-found": "Устройство не найдено!",
 | 
			
		||||
            "claim-successful": "Устройство успешно подтверждено!",
 | 
			
		||||
            "discard-changes": "Отменить изменения",
 | 
			
		||||
            "device-name": "Название устройства",
 | 
			
		||||
            "device-name-required": "Необходимо указать название устройства",
 | 
			
		||||
            "entity-attribute-required": "Значение атрибута обязателено",
 | 
			
		||||
            "entity-timeseries-required": "Значение телеметрии обязательно",
 | 
			
		||||
            "not-allowed-entity": "Выбраный объект не имеет общих атрибутов",
 | 
			
		||||
            "no-attribute-selected": "Атрибут не выбран",
 | 
			
		||||
            "no-entity-selected": "Объект не выбран",
 | 
			
		||||
            "no-timeseries-selected": "Параметр телеметрии не выбран",
 | 
			
		||||
            "secret-key": "Секретный ключ",
 | 
			
		||||
            "secret-key-required": "Необходимо указать секретный ключ",
 | 
			
		||||
            "switch-attribute-value": "Изменить значение атрибута",
 | 
			
		||||
            "switch-timeseries-value": "Изменить значение телеметрии",
 | 
			
		||||
            "timeseries-not-allowed": "Телеметрия не может быть выбрана в этом виджете",
 | 
			
		||||
 | 
			
		||||
@ -2182,13 +2182,21 @@
 | 
			
		||||
        },
 | 
			
		||||
        "input-widgets": {
 | 
			
		||||
            "attribute-not-allowed": "Атрибут не може бути вибраний в цьому віджеті",
 | 
			
		||||
            "claim-device": "Підтвердити пристрій",
 | 
			
		||||
            "claim-failed": "Не вдалося підтвердити пристрій!",
 | 
			
		||||
            "claim-not-found": "Пристрій не знайдено!",
 | 
			
		||||
            "claim-successful": "Пристрій успішно підтверджено!",
 | 
			
		||||
            "discard-changes": "Скасувати зміни",
 | 
			
		||||
            "device-name": "Назва пристрою",
 | 
			
		||||
            "device-name-required": "Необхідно вказати назву пристрою",
 | 
			
		||||
            "entity-attribute-required": "Значення атрибута обов'язкове",
 | 
			
		||||
            "entity-timeseries-required": "Значення телеметрії обов'язкове",
 | 
			
		||||
            "not-allowed-entity": "Обрана сутність не має спільних атрибутів",
 | 
			
		||||
            "no-attribute-selected": "Атрибут не вибрано",
 | 
			
		||||
            "no-entity-selected": "Сутність не вибрано",
 | 
			
		||||
            "no-timeseries-selected": "Параметр телеметрії не вибрано",
 | 
			
		||||
            "secret-key": "Секретний ключ",
 | 
			
		||||
            "secret-key-required": "Необхідно вказати секретний ключ",
 | 
			
		||||
            "switch-attribute-value": "Змінити значення атрибута",
 | 
			
		||||
            "switch-timeseries-value": "Змінити значення телеметрії",
 | 
			
		||||
            "timeseries-not-allowed": "Телеметрія не може бути вибрана в цьому віджеті",
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user