Skip to content

Commit 41b6019

Browse files
authored
Merge pull request freifunk#161 from aligator/152-fix-filter-statistic
[BUGFIX] Fixes filtering the statistic list and removing the filter (freifunk#152)
2 parents d239f95 + 358b23c commit 41b6019

1 file changed

Lines changed: 62 additions & 48 deletions

File tree

lib/proportions.ts

Lines changed: 62 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
1-
import { classModule, eventListenersModule, h, init, propsModule, styleModule, toVNode } from "snabbdom";
21
import * as d3Interpolate from "d3-interpolate";
3-
import { _ } from "./utils/language.js";
2+
import { Moment } from "moment";
3+
import { classModule, eventListenersModule, h, init, propsModule, styleModule, VNode } from "snabbdom";
44
import { DataDistributor, Filter, ObjectsLinksAndNodes } from "./datadistributor.js";
55
import { GenericNodeFilter } from "./filters/genericnode.js";
66
import * as helper from "./utils/helper.js";
7-
import { compare } from "./utils/version.js";
8-
import { Moment } from "moment";
7+
import { _ } from "./utils/language.js";
98
import { Node } from "./utils/node.js";
109

10+
type TableNode = {
11+
element: HTMLTableElement;
12+
vnode?: VNode;
13+
};
14+
1115
const patch = init([classModule, propsModule, styleModule, eventListenersModule]);
1216

1317
export const Proportions = function (filterManager: ReturnType<typeof DataDistributor>) {
@@ -20,16 +24,7 @@ export const Proportions = function (filterManager: ReturnType<typeof DataDistri
2024
let scale = d3Interpolate.interpolate(config.forceGraph.tqFrom, config.forceGraph.tqTo);
2125
let time: Moment;
2226

23-
let statusTable: HTMLTableElement;
24-
let fwTable: HTMLTableElement;
25-
let baseTable: HTMLTableElement;
26-
let depTable: HTMLTableElement;
27-
let hwTable: HTMLTableElement;
28-
let geoTable: HTMLTableElement;
29-
let autoTable: HTMLTableElement;
30-
let gatewayTable: HTMLTableElement;
31-
let gateway6Table: HTMLTableElement;
32-
let domainTable: HTMLTableElement;
27+
let tables: Record<string, TableNode> = {};
3328

3429
function count(nodes: Node[], key: string[], f?: (k: any) => any) {
3530
let dict = {};
@@ -60,10 +55,11 @@ export const Proportions = function (filterManager: ReturnType<typeof DataDistri
6055
};
6156
}
6257

63-
function fillTable(name: string, table: HTMLTableElement | undefined, data: any[][]): HTMLTableElement {
64-
if (!table) {
65-
table = document.createElement("table");
66-
}
58+
function fillTable(name: string, table: TableNode | undefined, data: any[][]): TableNode {
59+
let tableNode: TableNode = table ?? {
60+
element: document.createElement("table"),
61+
vnode: undefined,
62+
};
6763

6864
let max = Math.max.apply(
6965
Math,
@@ -97,8 +93,8 @@ export const Proportions = function (filterManager: ReturnType<typeof DataDistri
9793
return h("tr", [th, td]);
9894
});
9995
let tableNew = h("table", { props: { className: "proportion" } }, items);
100-
patch(table, tableNew);
101-
return table;
96+
tableNode.vnode = patch(tableNode.vnode ?? tableNode.element, tableNew);
97+
return tableNode;
10298
}
10399

104100
self.setData = function setData(data: ObjectsLinksAndNodes) {
@@ -150,77 +146,95 @@ export const Proportions = function (filterManager: ReturnType<typeof DataDistri
150146
return d;
151147
});
152148

153-
statusTable = fillTable(
149+
tables.status = fillTable(
154150
"node.status",
155-
statusTable,
151+
tables.status,
156152
statusDict.sort(function (a, b) {
157153
return b[1] - a[1];
158154
}),
159155
);
160-
fwTable = fillTable("node.firmware", fwTable, fwDict.sort(compare));
161-
baseTable = fillTable("node.baseversion", baseTable, baseDict.sort(compare));
162-
depTable = fillTable(
156+
157+
tables.firmware = fillTable(
158+
"node.firmware",
159+
tables.firmware,
160+
fwDict.sort(function (a, b) {
161+
return b[1] - a[1];
162+
}),
163+
);
164+
165+
tables.baseversion = fillTable(
166+
"node.baseversion",
167+
tables.baseversion,
168+
baseDict.sort(function (a, b) {
169+
return b[1] - a[1];
170+
}),
171+
);
172+
173+
tables.deprecationStatus = fillTable(
163174
"node.deprecationStatus",
164-
depTable,
175+
tables.deprecationStatus,
165176
deprecationDict.sort(function (a, b) {
166177
return b[1] - a[1];
167178
}),
168179
);
169-
hwTable = fillTable(
180+
181+
tables.hardware = fillTable(
170182
"node.hardware",
171-
hwTable,
183+
tables.hardware,
172184
hwDict.sort(function (a, b) {
173185
return b[1] - a[1];
174186
}),
175187
);
176-
geoTable = fillTable(
188+
189+
tables.visible = fillTable(
177190
"node.visible",
178-
geoTable,
191+
tables.visible,
179192
geoDict.sort(function (a, b) {
180193
return b[1] - a[1];
181194
}),
182195
);
183-
autoTable = fillTable(
196+
197+
tables.update = fillTable(
184198
"node.update",
185-
autoTable,
199+
tables.update,
186200
autoDict.sort(function (a, b) {
187201
return b[1] - a[1];
188202
}),
189203
);
190-
gatewayTable = fillTable(
204+
tables.gateway = fillTable(
191205
"node.selectedGatewayIPv4",
192-
gatewayTable,
206+
tables.gateway,
193207
gatewayDict.sort(function (a, b) {
194208
return b[1] - a[1];
195209
}),
196210
);
197-
gateway6Table = fillTable(
211+
tables.gateway6 = fillTable(
198212
"node.selectedGatewayIPv6",
199-
gateway6Table,
213+
tables.gateway6,
200214
gateway6Dict.sort(function (a, b) {
201215
return b[1] - a[1];
202216
}),
203217
);
204-
domainTable = fillTable(
218+
tables.domain = fillTable(
205219
"node.domain",
206-
domainTable,
220+
tables.domain,
207221
domainDict.sort(function (a, b) {
208222
return b[1] - a[1];
209223
}),
210224
);
211225
};
212226

213227
self.render = function render(el: HTMLElement) {
214-
self.renderSingle(el, "node.status", statusTable);
215-
self.renderSingle(el, "node.firmware", fwTable);
216-
self.renderSingle(el, "node.baseversion", baseTable);
217-
self.renderSingle(el, "node.deprecationStatus", depTable);
218-
self.renderSingle(el, "node.hardware", hwTable);
219-
self.renderSingle(el, "node.visible", geoTable);
220-
self.renderSingle(el, "node.update", autoTable);
221-
self.renderSingle(el, "node.selectedGatewayIPv4", gatewayTable);
222-
self.renderSingle(el, "node.selectedGatewayIPv6", gateway6Table);
223-
self.renderSingle(el, "node.domain", domainTable);
228+
self.renderSingle(el, "node.status", tables.status.element);
229+
self.renderSingle(el, "node.firmware", tables.firmware.element);
230+
self.renderSingle(el, "node.baseversion", tables.baseversion.element);
231+
self.renderSingle(el, "node.deprecationStatus", tables.deprecationStatus.element);
232+
self.renderSingle(el, "node.hardware", tables.hardware.element);
233+
self.renderSingle(el, "node.visible", tables.visible.element);
234+
self.renderSingle(el, "node.update", tables.update.element);
235+
self.renderSingle(el, "node.selectedGatewayIPv4", tables.gateway.element);
236+
self.renderSingle(el, "node.selectedGatewayIPv6", tables.gateway6.element);
237+
self.renderSingle(el, "node.domain", tables.domain.element);
224238

225239
if (config.globalInfos) {
226240
let images = document.createElement("div");

0 commit comments

Comments
 (0)