Skip to content

Commit 285bd3e

Browse files
committed
Enhance device filters: support label for dropdown options and improve SQL queries #1611
1 parent 98a1ac1 commit 285bd3e

File tree

3 files changed

+40
-21
lines changed

3 files changed

+40
-21
lines changed

front/devices.php

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -436,22 +436,28 @@ function initFilters() {
436436

437437
if (existingFilter) {
438438
// Add the unique columnValue to options if not already present
439-
if (!existingFilter.options.includes(entry.columnValue)) {
440-
existingFilter.options.push(entry.columnValue);
439+
if (!existingFilter.options.some(opt => opt.value === entry.columnValue)) {
440+
existingFilter.options.push({
441+
value: entry.columnValue,
442+
label: entry.columnLabel || entry.columnValue
443+
});
441444
}
442445
} else {
443446
// Create a new filter entry
444447
transformed.filters.push({
445448
column: entry.columnName,
446449
headerKey: entry.columnHeaderStringKey,
447-
options: [entry.columnValue]
450+
options: [{
451+
value: entry.columnValue,
452+
label: entry.columnLabel || entry.columnValue
453+
}]
448454
});
449455
}
450456
});
451457

452-
// Sort options alphabetically for better readability
458+
// Sort options alphabetically by label for better readability
453459
transformed.filters.forEach(filter => {
454-
filter.options.sort();
460+
filter.options.sort((a, b) => a.label.localeCompare(b.label));
455461
});
456462

457463
// Output the result

front/php/components/devices_filters.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,18 @@
1010
function renderFilterDropdown($headerKey, $columnName, $values) {
1111
// Generate dropdown options
1212
$optionsHtml = '<option value="" selected>All</option>'; // Default "All" option
13-
foreach ($values as $value) {
14-
$escapedValue = htmlspecialchars($value);
15-
$optionsHtml .= '<option value="' . $escapedValue . '">' . $escapedValue . '</option>';
13+
foreach ($values as $item) {
14+
// Support both {value, label} objects and plain strings (backward compat)
15+
if (is_array($item)) {
16+
$val = $item['value'] ?? '';
17+
$label = $item['label'] ?? $val;
18+
} else {
19+
$val = $item;
20+
$label = $item;
21+
}
22+
$escapedValue = htmlspecialchars($val);
23+
$escapedLabel = htmlspecialchars($label);
24+
$optionsHtml .= '<option value="' . $escapedValue . '">' . $escapedLabel . '</option>';
1625
}
1726

1827
// Generate the dropdown HTML

server/const.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,40 +69,44 @@
6969

7070
sql_appevents = """select * from AppEvents order by dateTimeCreated desc"""
7171
sql_devices_filters = """
72-
SELECT DISTINCT 'devSite' AS columnName, devSite AS columnValue
72+
SELECT DISTINCT 'devSite' AS columnName, devSite AS columnValue, devSite AS columnLabel
7373
FROM Devices WHERE devSite NOT IN ('', 'null') AND devSite IS NOT NULL
7474
UNION
75-
SELECT DISTINCT 'devSourcePlugin' AS columnName, devSourcePlugin AS columnValue
75+
SELECT DISTINCT 'devSourcePlugin' AS columnName, devSourcePlugin AS columnValue, devSourcePlugin AS columnLabel
7676
FROM Devices WHERE devSourcePlugin NOT IN ('', 'null') AND devSourcePlugin IS NOT NULL
7777
UNION
78-
SELECT DISTINCT 'devOwner' AS columnName, devOwner AS columnValue
78+
SELECT DISTINCT 'devOwner' AS columnName, devOwner AS columnValue, devOwner AS columnLabel
7979
FROM Devices WHERE devOwner NOT IN ('', 'null') AND devOwner IS NOT NULL
8080
UNION
81-
SELECT DISTINCT 'devType' AS columnName, devType AS columnValue
81+
SELECT DISTINCT 'devType' AS columnName, devType AS columnValue, devType AS columnLabel
8282
FROM Devices WHERE devType NOT IN ('', 'null') AND devType IS NOT NULL
8383
UNION
84-
SELECT DISTINCT 'devGroup' AS columnName, devGroup AS columnValue
84+
SELECT DISTINCT 'devGroup' AS columnName, devGroup AS columnValue, devGroup AS columnLabel
8585
FROM Devices WHERE devGroup NOT IN ('', 'null') AND devGroup IS NOT NULL
8686
UNION
87-
SELECT DISTINCT 'devLocation' AS columnName, devLocation AS columnValue
87+
SELECT DISTINCT 'devLocation' AS columnName, devLocation AS columnValue, devLocation AS columnLabel
8888
FROM Devices WHERE devLocation NOT IN ('', 'null') AND devLocation IS NOT NULL
8989
UNION
90-
SELECT DISTINCT 'devVendor' AS columnName, devVendor AS columnValue
90+
SELECT DISTINCT 'devVendor' AS columnName, devVendor AS columnValue, devVendor AS columnLabel
9191
FROM Devices WHERE devVendor NOT IN ('', 'null') AND devVendor IS NOT NULL
9292
UNION
93-
SELECT DISTINCT 'devSyncHubNode' AS columnName, devSyncHubNode AS columnValue
93+
SELECT DISTINCT 'devSyncHubNode' AS columnName, devSyncHubNode AS columnValue, devSyncHubNode AS columnLabel
9494
FROM Devices WHERE devSyncHubNode NOT IN ('', 'null') AND devSyncHubNode IS NOT NULL
9595
UNION
96-
SELECT DISTINCT 'devVlan' AS columnName, devVlan AS columnValue
96+
SELECT DISTINCT 'devVlan' AS columnName, devVlan AS columnValue, devVlan AS columnLabel
9797
FROM Devices WHERE devVlan NOT IN ('', 'null') AND devVlan IS NOT NULL
9898
UNION
99-
SELECT DISTINCT 'devParentMAC' AS columnName, devParentMAC AS columnValue
100-
FROM Devices WHERE devParentMAC NOT IN ('', 'null') AND devParentMAC IS NOT NULL
99+
SELECT 'devParentMAC' AS columnName, d.devParentMAC AS columnValue,
100+
COALESCE(p.devName, d.devParentMAC) AS columnLabel
101+
FROM Devices d
102+
LEFT JOIN Devices p ON LOWER(p.devMac) = LOWER(d.devParentMAC)
103+
WHERE d.devParentMAC NOT IN ('', 'null') AND d.devParentMAC IS NOT NULL
104+
GROUP BY d.devParentMAC COLLATE NOCASE
101105
UNION
102-
SELECT DISTINCT 'devParentRelType' AS columnName, devParentRelType AS columnValue
106+
SELECT DISTINCT 'devParentRelType' AS columnName, devParentRelType AS columnValue, devParentRelType AS columnLabel
103107
FROM Devices WHERE devParentRelType NOT IN ('', 'null') AND devParentRelType IS NOT NULL
104108
UNION
105-
SELECT DISTINCT 'devSSID' AS columnName, devSSID AS columnValue
109+
SELECT DISTINCT 'devSSID' AS columnName, devSSID AS columnValue, devSSID AS columnLabel
106110
FROM Devices WHERE devSSID NOT IN ('', 'null') AND devSSID IS NOT NULL
107111
ORDER BY columnName;
108112
"""

0 commit comments

Comments
 (0)