120 lines
3.1 KiB
JavaScript
120 lines
3.1 KiB
JavaScript
/*
|
|
* Copyright © 2016-2018 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 './kv-map.scss';
|
|
|
|
/* eslint-disable import/no-unresolved, import/default */
|
|
|
|
import kvMapTemplate from './kv-map.tpl.html';
|
|
|
|
/* eslint-enable import/no-unresolved, import/default */
|
|
|
|
export default angular.module('thingsboard.directives.keyValMap', [])
|
|
.directive('tbKeyValMap', KeyValMap)
|
|
.name;
|
|
|
|
/*@ngInject*/
|
|
function KeyValMap() {
|
|
return {
|
|
restrict: "E",
|
|
scope: true,
|
|
bindToController: {
|
|
disabled:'=ngDisabled',
|
|
titleText: '@?',
|
|
keyPlaceholderText: '@?',
|
|
valuePlaceholderText: '@?',
|
|
noDataText: '@?',
|
|
keyValMap: '='
|
|
},
|
|
controller: KeyValMapController,
|
|
controllerAs: 'vm',
|
|
templateUrl: kvMapTemplate
|
|
};
|
|
}
|
|
|
|
/*@ngInject*/
|
|
function KeyValMapController($scope, $mdUtil) {
|
|
|
|
let vm = this;
|
|
|
|
vm.kvList = [];
|
|
|
|
vm.removeKeyVal = removeKeyVal;
|
|
vm.addKeyVal = addKeyVal;
|
|
|
|
$scope.$watch('vm.keyValMap', () => {
|
|
stopWatchKvList();
|
|
vm.kvList.length = 0;
|
|
if (vm.keyValMap) {
|
|
for (var property in vm.keyValMap) {
|
|
if (vm.keyValMap.hasOwnProperty(property)) {
|
|
vm.kvList.push(
|
|
{
|
|
key: property + '',
|
|
value: vm.keyValMap[property]
|
|
}
|
|
);
|
|
}
|
|
}
|
|
}
|
|
$mdUtil.nextTick(() => {
|
|
watchKvList();
|
|
});
|
|
});
|
|
|
|
function watchKvList() {
|
|
$scope.kvListWatcher = $scope.$watch('vm.kvList', () => {
|
|
if (!vm.keyValMap) {
|
|
return;
|
|
}
|
|
for (var property in vm.keyValMap) {
|
|
if (vm.keyValMap.hasOwnProperty(property)) {
|
|
delete vm.keyValMap[property];
|
|
}
|
|
}
|
|
for (var i=0;i<vm.kvList.length;i++) {
|
|
var entry = vm.kvList[i];
|
|
vm.keyValMap[entry.key] = entry.value;
|
|
}
|
|
}, true);
|
|
}
|
|
|
|
function stopWatchKvList() {
|
|
if ($scope.kvListWatcher) {
|
|
$scope.kvListWatcher();
|
|
$scope.kvListWatcher = null;
|
|
}
|
|
}
|
|
|
|
|
|
function removeKeyVal(index) {
|
|
if (index > -1) {
|
|
vm.kvList.splice(index, 1);
|
|
}
|
|
}
|
|
|
|
function addKeyVal() {
|
|
if (!vm.kvList) {
|
|
vm.kvList = [];
|
|
}
|
|
vm.kvList.push(
|
|
{
|
|
key: '',
|
|
value: ''
|
|
}
|
|
);
|
|
}
|
|
}
|