diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index af0d70c07..ada1e4e22 100644 Binary files a/netbox/project-static/dist/netbox.js and b/netbox/project-static/dist/netbox.js differ diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index 9d18c575e..f34601c4b 100644 Binary files a/netbox/project-static/dist/netbox.js.map and b/netbox/project-static/dist/netbox.js.map differ diff --git a/netbox/project-static/src/netbox.ts b/netbox/project-static/src/netbox.ts index 59faab222..079dc95ae 100644 --- a/netbox/project-static/src/netbox.ts +++ b/netbox/project-static/src/netbox.ts @@ -13,6 +13,7 @@ import { initSideNav } from './sidenav'; import { initDashboard } from './dashboard'; import { initRackElevation } from './racks'; import { initHtmx } from './htmx'; +import {initSavedFilterSelect} from "./savedFiltersSelect"; function initDocument(): void { for (const init of [ @@ -31,6 +32,7 @@ function initDocument(): void { initDashboard, initRackElevation, initHtmx, + initSavedFilterSelect, ]) { init(); } diff --git a/netbox/project-static/src/savedFiltersSelect.ts b/netbox/project-static/src/savedFiltersSelect.ts new file mode 100644 index 000000000..e15b8dc82 --- /dev/null +++ b/netbox/project-static/src/savedFiltersSelect.ts @@ -0,0 +1,32 @@ +import {isTruthy} from "./util"; + +/** + * Handle saved filter change event. + * + * @param event "change" event for the saved filter select + */ +function handleSavedFilterChange(event: Event): void { + const savedFilter = event.currentTarget as HTMLSelectElement; + const savedFilterLength = savedFilter.options.length; + let baseUrl = savedFilter.baseURI.split("?")[0]; + let preFilter = "?"; + + if (savedFilterLength === 0) { + return; + } + + const selectedOptions = Array.from(savedFilter.options) + .filter(option => option.selected) + .map(option => `filter_id=${option.value}`) + .join("&"); + + baseUrl += `${preFilter}${selectedOptions}`; + document.location.href = baseUrl; +} + +export function initSavedFilterSelect(): void { + const savedFilterSelect = document.getElementById("id_filter_id"); + if (isTruthy(savedFilterSelect)) { + savedFilterSelect.addEventListener("change", handleSavedFilterChange); + } +} \ No newline at end of file diff --git a/netbox/templates/inc/table_controls_htmx.html b/netbox/templates/inc/table_controls_htmx.html index a90a7dc37..f42200b0d 100644 --- a/netbox/templates/inc/table_controls_htmx.html +++ b/netbox/templates/inc/table_controls_htmx.html @@ -4,22 +4,31 @@
+