Просмотр исходного кода

Add JavaScript for registered actions show/hide

Jason Novinger 1 неделя назад
Родитель
Сommit
2b70c06e67

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
netbox/project-static/dist/netbox.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
netbox/project-static/dist/netbox.js.map


+ 8 - 1
netbox/project-static/src/forms/index.ts

@@ -1,10 +1,17 @@
 import { initClearField } from './clearField';
 import { initFormElements } from './elements';
 import { initFilterModifiers } from './filterModifiers';
+import { initRegisteredActions } from './registeredActions';
 import { initSpeedSelector } from './speedSelector';
 
 export function initForms(): void {
-  for (const func of [initFormElements, initSpeedSelector, initFilterModifiers, initClearField]) {
+  for (const func of [
+    initFormElements,
+    initSpeedSelector,
+    initFilterModifiers,
+    initClearField,
+    initRegisteredActions,
+  ]) {
     func();
   }
 }

+ 55 - 0
netbox/project-static/src/forms/registeredActions.ts

@@ -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);
+    });
+  }
+}

Некоторые файлы не были показаны из-за большого количества измененных файлов