kv-map.directive.js
3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
* Copyright © 2016-2019 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: ''
}
);
}
}