mirror of
https://github.com/netbox-community/netbox.git
synced 2026-04-19 15:31:35 +02:00
Add JavaScript for registered actions show/hide
This commit is contained in:
8
netbox/project-static/dist/netbox.js
vendored
8
netbox/project-static/dist/netbox.js
vendored
File diff suppressed because one or more lines are too long
8
netbox/project-static/dist/netbox.js.map
vendored
8
netbox/project-static/dist/netbox.js.map
vendored
File diff suppressed because one or more lines are too long
@@ -1,10 +1,17 @@
|
|||||||
import { initClearField } from './clearField';
|
import { initClearField } from './clearField';
|
||||||
import { initFormElements } from './elements';
|
import { initFormElements } from './elements';
|
||||||
import { initFilterModifiers } from './filterModifiers';
|
import { initFilterModifiers } from './filterModifiers';
|
||||||
|
import { initRegisteredActions } from './registeredActions';
|
||||||
import { initSpeedSelector } from './speedSelector';
|
import { initSpeedSelector } from './speedSelector';
|
||||||
|
|
||||||
export function initForms(): void {
|
export function initForms(): void {
|
||||||
for (const func of [initFormElements, initSpeedSelector, initFilterModifiers, initClearField]) {
|
for (const func of [
|
||||||
|
initFormElements,
|
||||||
|
initSpeedSelector,
|
||||||
|
initFilterModifiers,
|
||||||
|
initClearField,
|
||||||
|
initRegisteredActions,
|
||||||
|
]) {
|
||||||
func();
|
func();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
55
netbox/project-static/src/forms/registeredActions.ts
Normal file
55
netbox/project-static/src/forms/registeredActions.ts
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
import { getElements } from '../util';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show/hide registered action checkboxes based on selected object_types.
|
||||||
|
*/
|
||||||
|
export function initRegisteredActions(): void {
|
||||||
|
const actionsContainer = document.getElementById('id_registered_actions_container');
|
||||||
|
const selectedList = document.getElementById('id_object_types_1') as HTMLSelectElement;
|
||||||
|
|
||||||
|
if (!actionsContainer || !selectedList) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateVisibility(): void {
|
||||||
|
const selectedModels = new Set<string>();
|
||||||
|
|
||||||
|
// Get model keys from selected options
|
||||||
|
for (const option of Array.from(selectedList.options)) {
|
||||||
|
const modelKey = option.dataset.modelKey;
|
||||||
|
if (modelKey) {
|
||||||
|
selectedModels.add(modelKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show/hide action groups
|
||||||
|
const groups = actionsContainer!.querySelectorAll('.model-actions');
|
||||||
|
let anyVisible = false;
|
||||||
|
|
||||||
|
groups.forEach(group => {
|
||||||
|
const modelKey = group.getAttribute('data-model');
|
||||||
|
const visible = modelKey !== null && selectedModels.has(modelKey);
|
||||||
|
(group as HTMLElement).style.display = visible ? 'block' : 'none';
|
||||||
|
if (visible) {
|
||||||
|
anyVisible = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Show/hide "no actions" message
|
||||||
|
const noActionsMsg = document.getElementById('no-custom-actions-message');
|
||||||
|
if (noActionsMsg) {
|
||||||
|
noActionsMsg.style.display = anyVisible ? 'none' : 'block';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initial update
|
||||||
|
updateVisibility();
|
||||||
|
|
||||||
|
// Listen to move button clicks
|
||||||
|
for (const btn of getElements<HTMLButtonElement>('.move-option')) {
|
||||||
|
btn.addEventListener('click', () => {
|
||||||
|
// Wait for DOM update
|
||||||
|
setTimeout(updateVisibility, 50);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user