diff --git a/front/devices.php b/front/devices.php
index 19095e52..e08fdbc4 100755
--- a/front/devices.php
+++ b/front/devices.php
@@ -436,22 +436,28 @@ function initFilters() {
if (existingFilter) {
// Add the unique columnValue to options if not already present
- if (!existingFilter.options.includes(entry.columnValue)) {
- existingFilter.options.push(entry.columnValue);
+ if (!existingFilter.options.some(opt => opt.value === entry.columnValue)) {
+ existingFilter.options.push({
+ value: entry.columnValue,
+ label: entry.columnLabel || entry.columnValue
+ });
}
} else {
// Create a new filter entry
transformed.filters.push({
column: entry.columnName,
headerKey: entry.columnHeaderStringKey,
- options: [entry.columnValue]
+ options: [{
+ value: entry.columnValue,
+ label: entry.columnLabel || entry.columnValue
+ }]
});
}
});
- // Sort options alphabetically for better readability
+ // Sort options alphabetically by label for better readability
transformed.filters.forEach(filter => {
- filter.options.sort();
+ filter.options.sort((a, b) => a.label.localeCompare(b.label));
});
// Output the result
diff --git a/front/php/components/devices_filters.php b/front/php/components/devices_filters.php
index 0a376b4f..9f36d792 100755
--- a/front/php/components/devices_filters.php
+++ b/front/php/components/devices_filters.php
@@ -10,9 +10,18 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/language/lang.php';
function renderFilterDropdown($headerKey, $columnName, $values) {
// Generate dropdown options
$optionsHtml = ''; // Default "All" option
- foreach ($values as $value) {
- $escapedValue = htmlspecialchars($value);
- $optionsHtml .= '';
+ foreach ($values as $item) {
+ // Support both {value, label} objects and plain strings (backward compat)
+ if (is_array($item)) {
+ $val = $item['value'] ?? '';
+ $label = $item['label'] ?? $val;
+ } else {
+ $val = $item;
+ $label = $item;
+ }
+ $escapedValue = htmlspecialchars($val);
+ $escapedLabel = htmlspecialchars($label);
+ $optionsHtml .= '';
}
// Generate the dropdown HTML
diff --git a/server/const.py b/server/const.py
index 1e554c9b..34cd033a 100755
--- a/server/const.py
+++ b/server/const.py
@@ -69,40 +69,44 @@ sql_devices_all = """
sql_appevents = """select * from AppEvents order by dateTimeCreated desc"""
sql_devices_filters = """
- SELECT DISTINCT 'devSite' AS columnName, devSite AS columnValue
+ SELECT DISTINCT 'devSite' AS columnName, devSite AS columnValue, devSite AS columnLabel
FROM Devices WHERE devSite NOT IN ('', 'null') AND devSite IS NOT NULL
UNION
- SELECT DISTINCT 'devSourcePlugin' AS columnName, devSourcePlugin AS columnValue
+ SELECT DISTINCT 'devSourcePlugin' AS columnName, devSourcePlugin AS columnValue, devSourcePlugin AS columnLabel
FROM Devices WHERE devSourcePlugin NOT IN ('', 'null') AND devSourcePlugin IS NOT NULL
UNION
- SELECT DISTINCT 'devOwner' AS columnName, devOwner AS columnValue
+ SELECT DISTINCT 'devOwner' AS columnName, devOwner AS columnValue, devOwner AS columnLabel
FROM Devices WHERE devOwner NOT IN ('', 'null') AND devOwner IS NOT NULL
UNION
- SELECT DISTINCT 'devType' AS columnName, devType AS columnValue
+ SELECT DISTINCT 'devType' AS columnName, devType AS columnValue, devType AS columnLabel
FROM Devices WHERE devType NOT IN ('', 'null') AND devType IS NOT NULL
UNION
- SELECT DISTINCT 'devGroup' AS columnName, devGroup AS columnValue
+ SELECT DISTINCT 'devGroup' AS columnName, devGroup AS columnValue, devGroup AS columnLabel
FROM Devices WHERE devGroup NOT IN ('', 'null') AND devGroup IS NOT NULL
UNION
- SELECT DISTINCT 'devLocation' AS columnName, devLocation AS columnValue
+ SELECT DISTINCT 'devLocation' AS columnName, devLocation AS columnValue, devLocation AS columnLabel
FROM Devices WHERE devLocation NOT IN ('', 'null') AND devLocation IS NOT NULL
UNION
- SELECT DISTINCT 'devVendor' AS columnName, devVendor AS columnValue
+ SELECT DISTINCT 'devVendor' AS columnName, devVendor AS columnValue, devVendor AS columnLabel
FROM Devices WHERE devVendor NOT IN ('', 'null') AND devVendor IS NOT NULL
UNION
- SELECT DISTINCT 'devSyncHubNode' AS columnName, devSyncHubNode AS columnValue
+ SELECT DISTINCT 'devSyncHubNode' AS columnName, devSyncHubNode AS columnValue, devSyncHubNode AS columnLabel
FROM Devices WHERE devSyncHubNode NOT IN ('', 'null') AND devSyncHubNode IS NOT NULL
UNION
- SELECT DISTINCT 'devVlan' AS columnName, devVlan AS columnValue
+ SELECT DISTINCT 'devVlan' AS columnName, devVlan AS columnValue, devVlan AS columnLabel
FROM Devices WHERE devVlan NOT IN ('', 'null') AND devVlan IS NOT NULL
UNION
- SELECT DISTINCT 'devParentMAC' AS columnName, devParentMAC AS columnValue
- FROM Devices WHERE devParentMAC NOT IN ('', 'null') AND devParentMAC IS NOT NULL
+ SELECT 'devParentMAC' AS columnName, d.devParentMAC AS columnValue,
+ COALESCE(p.devName, d.devParentMAC) AS columnLabel
+ FROM Devices d
+ LEFT JOIN Devices p ON LOWER(p.devMac) = LOWER(d.devParentMAC)
+ WHERE d.devParentMAC NOT IN ('', 'null') AND d.devParentMAC IS NOT NULL
+ GROUP BY d.devParentMAC COLLATE NOCASE
UNION
- SELECT DISTINCT 'devParentRelType' AS columnName, devParentRelType AS columnValue
+ SELECT DISTINCT 'devParentRelType' AS columnName, devParentRelType AS columnValue, devParentRelType AS columnLabel
FROM Devices WHERE devParentRelType NOT IN ('', 'null') AND devParentRelType IS NOT NULL
UNION
- SELECT DISTINCT 'devSSID' AS columnName, devSSID AS columnValue
+ SELECT DISTINCT 'devSSID' AS columnName, devSSID AS columnValue, devSSID AS columnLabel
FROM Devices WHERE devSSID NOT IN ('', 'null') AND devSSID IS NOT NULL
ORDER BY columnName;
"""