Merge ~blake-rouse/maas:fix-1699864-2.2 into maas:2.2

Proposed by Blake Rouse
Status: Merged
Approved by: Blake Rouse
Approved revision: 737117af6b6e33b118bcc694017bb045c80af002
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~blake-rouse/maas:fix-1699864-2.2
Merge into: maas:2.2
Diff against target: 236 lines (+34/-33)
3 files modified
src/maasserver/static/js/angular/directives/machines_table.js (+14/-14)
src/maasserver/static/js/angular/directives/tests/test_machines_table.js (+19/-18)
src/maasserver/static/partials/machines-table.html (+1/-1)
Reviewer Review Type Date Requested Status
Blake Rouse (community) Approve
Review via email: mp+326942@code.launchpad.net

Commit message

Backport d39a0e21fd14125a6cceb45cd692d34051f4a474 from master: Fix machinesTable directive so that it works with vs-repeat.

The machines, filteredMachines, and osinfo where placed on the scope directly. Once vs-repeat was added it changed the scope inside the directive to be the scope of vs-repeat and not the scope of machines-table. Moving those variables to the table variable on the machines-table scope fixes the issue as the table object will be copied by reference into the nested vs-repeat scope.

To post a comment you must log in.
Revision history for this message
Blake Rouse (blake-rouse) wrote :

Self-approving the backport!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/static/js/angular/directives/machines_table.js b/src/maasserver/static/js/angular/directives/machines_table.js
2index 9cc69ca..8836adb 100644
3--- a/src/maasserver/static/js/angular/directives/machines_table.js
4+++ b/src/maasserver/static/js/angular/directives/machines_table.js
5@@ -43,24 +43,24 @@ angular.module('MAAS').directive('maasMachinesTable', [
6 column: 'fqdn',
7 predicate: 'fqdn',
8 reverse: false,
9- allViewableChecked: false
10+ allViewableChecked: false,
11+ machines: MachinesManager.getItems(),
12+ filteredMachines: [],
13+ osinfo: GeneralManager.getData("osinfo")
14 };
15- scope.machines = MachinesManager.getItems();
16- scope.filteredMachines = [];
17- scope.osinfo = GeneralManager.getData("osinfo");
18
19 // Ensures that the checkbox for select all is the correct value.
20 scope.updateAllChecked = function() {
21 // Not checked when the filtered machines are empty.
22- if(scope.filteredMachines.length === 0) {
23+ if(scope.table.filteredMachines.length === 0) {
24 scope.table.allViewableChecked = false;
25 return;
26 }
27
28 // Loop through all filtered machines and see if all are checked.
29 var i;
30- for(i = 0; i < scope.filteredMachines.length; i++) {
31- if(!scope.filteredMachines[i].$selected) {
32+ for(i = 0; i < scope.table.filteredMachines.length; i++) {
33+ if(!scope.table.filteredMachines[i].$selected) {
34 scope.table.allViewableChecked = false;
35 return;
36 }
37@@ -72,12 +72,12 @@ angular.module('MAAS').directive('maasMachinesTable', [
38 scope.toggleCheckAll = function() {
39 if(scope.table.allViewableChecked) {
40 angular.forEach(
41- scope.filteredMachines, function(machine) {
42+ scope.table.filteredMachines, function(machine) {
43 MachinesManager.unselectItem(machine.system_id);
44 });
45 } else {
46 angular.forEach(
47- scope.filteredMachines, function(machine) {
48+ scope.table.filteredMachines, function(machine) {
49 MachinesManager.selectItem(machine.system_id);
50 });
51 }
52@@ -118,9 +118,9 @@ angular.module('MAAS').directive('maasMachinesTable', [
53
54 // Returns the release title from osinfo.
55 scope.getReleaseTitle = function(os_release) {
56- if(angular.isArray(scope.osinfo.releases)) {
57- for(i = 0; i < scope.osinfo.releases.length; i++) {
58- var release = scope.osinfo.releases[i];
59+ if(angular.isArray(scope.table.osinfo.releases)) {
60+ for(i = 0; i < scope.table.osinfo.releases.length; i++) {
61+ var release = scope.table.osinfo.releases[i];
62 if(release[0] === os_release) {
63 return release[1];
64 }
65@@ -150,9 +150,9 @@ angular.module('MAAS').directive('maasMachinesTable', [
66 };
67
68 // When the list of filtered machines change update the all checkbox.
69- scope.$watchCollection("filteredMachines", function() {
70+ scope.$watchCollection("table.filteredMachines", function() {
71 scope.updateAllChecked();
72- scope.onListingChange({$machines: scope.filteredMachines});
73+ scope.onListingChange({$machines: scope.table.filteredMachines});
74 });
75
76 // Load the required managers and start polling for osinfo.
77diff --git a/src/maasserver/static/js/angular/directives/tests/test_machines_table.js b/src/maasserver/static/js/angular/directives/tests/test_machines_table.js
78index 2113745..e81959c 100644
79--- a/src/maasserver/static/js/angular/directives/tests/test_machines_table.js
80+++ b/src/maasserver/static/js/angular/directives/tests/test_machines_table.js
81@@ -72,11 +72,12 @@ describe("maasMachinesTable", function() {
82 column: 'fqdn',
83 predicate: 'fqdn',
84 reverse: false,
85- allViewableChecked: false
86+ allViewableChecked: false,
87+ machines: MachinesManager.getItems(),
88+ filteredMachines: [],
89+ osinfo: GeneralManager.getData("osinfo")
90 });
91- expect(scope.machines).toBe(MachinesManager.getItems());
92- expect(scope.filteredMachines).toEqual([]);
93- expect(scope.osinfo).toBe(GeneralManager.getData("osinfo"));
94+ expect(scope.table.machines).toBe(MachinesManager.getItems());
95 });
96
97 it("polls for osinfo once loaded", function() {
98@@ -110,7 +111,7 @@ describe("maasMachinesTable", function() {
99 var directive = compileDirective();
100 var scope = directive.isolateScope();
101 scope.table.allViewableChecked = true;
102- scope.filteredMachines = [];
103+ scope.table.filteredMachines = [];
104 scope.updateAllChecked();
105 expect(scope.table.allViewableChecked).toBe(false);
106 });
107@@ -120,7 +121,7 @@ describe("maasMachinesTable", function() {
108 var directive = compileDirective();
109 var scope = directive.isolateScope();
110 scope.table.allViewableChecked = true;
111- scope.filteredMachines = [{
112+ scope.table.filteredMachines = [{
113 $selected: true
114 }, {
115 $selected: false
116@@ -133,7 +134,7 @@ describe("maasMachinesTable", function() {
117 function() {
118 var directive = compileDirective();
119 var scope = directive.isolateScope();
120- scope.filteredMachines = [{
121+ scope.table.filteredMachines = [{
122 $selected: true
123 }, {
124 $selected: true
125@@ -151,7 +152,7 @@ describe("maasMachinesTable", function() {
126 var machine = makeMachine();
127 MachinesManager.selectItem(machine.system_id);
128 scope.table.allViewableChecked = true;
129- scope.filteredMachines = [machine];
130+ scope.table.filteredMachines = [machine];
131 scope.toggleCheckAll();
132 expect(machine.$selected).toBe(false);
133 expect(scope.table.allViewableChecked).toBe(false);
134@@ -162,7 +163,7 @@ describe("maasMachinesTable", function() {
135 var scope = directive.isolateScope();
136 var machine = makeMachine();
137 scope.table.allViewableChecked = false;
138- scope.filteredMachines = [machine];
139+ scope.table.filteredMachines = [machine];
140 scope.toggleCheckAll();
141 expect(machine.$selected).toBe(true);
142 expect(scope.table.allViewableChecked).toBe(true);
143@@ -183,7 +184,7 @@ describe("maasMachinesTable", function() {
144 var directive = compileDirective();
145 var scope = directive.isolateScope();
146 var machine = makeMachine();
147- scope.filteredMachines = [machine];
148+ scope.table.filteredMachines = [machine];
149 scope.toggleChecked(machine);
150 expect(machine.$selected).toBe(true);
151 expect(scope.table.allViewableChecked).toBe(true);
152@@ -193,7 +194,7 @@ describe("maasMachinesTable", function() {
153 var directive = compileDirective();
154 var scope = directive.isolateScope();
155 var machine = makeMachine();
156- scope.filteredMachines = [machine];
157+ scope.table.filteredMachines = [machine];
158 MachinesManager.selectItem(machine.system_id);
159 scope.toggleChecked(machine);
160 expect(machine.$selected).toBe(false);
161@@ -275,7 +276,7 @@ describe("maasMachinesTable", function() {
162 it("returns release title from osinfo", function() {
163 var directive = compileDirective();
164 var scope = directive.isolateScope();
165- scope.osinfo = {
166+ scope.table.osinfo = {
167 releases: [
168 ['ubuntu/xenial', 'Ubuntu Xenial']
169 ]
170@@ -287,7 +288,7 @@ describe("maasMachinesTable", function() {
171 it("returns release name when not in osinfo", function() {
172 var directive = compileDirective();
173 var scope = directive.isolateScope();
174- scope.osinfo = {
175+ scope.table.osinfo = {
176 releases: []
177 };
178 expect(scope.getReleaseTitle('ubuntu/xenial')).toBe(
179@@ -297,7 +298,7 @@ describe("maasMachinesTable", function() {
180 it("returns release name when osinfo.releases undefined", function() {
181 var directive = compileDirective();
182 var scope = directive.isolateScope();
183- scope.osinfo = {
184+ scope.table.osinfo = {
185 };
186 expect(scope.getReleaseTitle('ubuntu/xenial')).toBe(
187 'ubuntu/xenial');
188@@ -324,7 +325,7 @@ describe("maasMachinesTable", function() {
189 osystem: "ubuntu",
190 distro_series: "xenial"
191 };
192- scope.osinfo = {
193+ scope.table.osinfo = {
194 releases: [
195 ['ubuntu/xenial', 'Ubuntu Xenial']
196 ]
197@@ -341,7 +342,7 @@ describe("maasMachinesTable", function() {
198 osystem: "ubuntu",
199 distro_series: "xenial"
200 };
201- scope.osinfo = {
202+ scope.table.osinfo = {
203 releases: [
204 ['ubuntu/xenial', 'Ubuntu Xenial']
205 ]
206@@ -358,7 +359,7 @@ describe("maasMachinesTable", function() {
207 osystem: "ubuntu",
208 distro_series: "xenial"
209 };
210- scope.osinfo = {
211+ scope.table.osinfo = {
212 releases: [
213 ['ubuntu/xenial', 'Ubuntu 16.04 LTS "Xenial Xerus"']
214 ]
215@@ -376,7 +377,7 @@ describe("maasMachinesTable", function() {
216 var scope = directive.isolateScope();
217
218 var machines = [{}];
219- scope.filteredMachines = machines;
220+ scope.table.filteredMachines = machines;
221
222 $scope.$digest();
223 expect($scope.onListingChange).toHaveBeenCalledWith(machines);
224diff --git a/src/maasserver/static/partials/machines-table.html b/src/maasserver/static/partials/machines-table.html
225index ce59916..445ece5 100644
226--- a/src/maasserver/static/partials/machines-table.html
227+++ b/src/maasserver/static/partials/machines-table.html
228@@ -41,7 +41,7 @@
229 </thead>
230 <tbody vs-repeat vs-scroll-parent="window">
231 <tr
232- data-ng-repeat="node in filteredMachines = (machines | nodesFilter:search | orderBy:table.predicate:table.reverse) track by node.system_id"
233+ data-ng-repeat="node in table.filteredMachines = (table.machines | nodesFilter:search | orderBy:table.predicate:table.reverse) track by node.system_id"
234 data-ng-class="{ 'table--error': machineHasError({ $machine: node }), selected: node.$selected }">
235 <td class="table-col--3" aria-label="Select node" data-ng-if="!hideCheckboxes">
236 <input class="checkbox" type="checkbox" data-ng-click="toggleChecked(node)" data-ng-checked="node.$selected" id="{$ node.fqdn $}" data-ng-disabled="ngDisable()" />

Subscribers

People subscribed via source and target branches