kv-map.directive.js
Home
/
ui /
src /
app /
components /
kv-map.directive.js
import './kv-map.scss';
import kvMapTemplate from './kv-map.tpl.html';
export default angular.module('thingsboard.directives.keyValMap', [])
.directive('tbKeyValMap', KeyValMap)
.name;
function KeyValMap() {
return {
restrict: "E",
scope: true,
bindToController: {
disabled:'=ngDisabled',
titleText: '@?',
keyPlaceholderText: '@?',
valuePlaceholderText: '@?',
noDataText: '@?',
keyValMap: '='
},
controller: KeyValMapController,
controllerAs: 'vm',
templateUrl: kvMapTemplate
};
}
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: ''
}
);
}
}