function handleIdUpdate()

in script.js [217:275]


  function handleIdUpdate(e) {
    if (!selectedMgId || !currentData || isUpdating) return;

    const newId = mgIdInput.value.trim();
    if (!newId) return; // Don't process empty IDs while typing

    // If ID hasn't changed, do nothing
    if (newId === selectedMgId) return;

    // Check if ID already exists
    if (currentData.management_groups.some(mg => mg.id === newId && mg.id !== selectedMgId)) {
      // Don't show alert while typing - we'll validate fully on blur
      return;
    }

    const index = currentData.management_groups.findIndex(mg => mg.id === selectedMgId);
    if (index === -1) return;

    // Store the original ID for reference updates
    const originalId = selectedMgId;

    // Update the management group ID in the data model
    currentData.management_groups[index].id = newId;

    // Update parent_id references
    currentData.management_groups.forEach(mg => {
      if (mg.parent_id === originalId) {
        mg.parent_id = newId;
      }
    });

    // Update selected ID reference
    selectedMgId = newId;

    // Update the tree view in real-time, just like for display name changes
    // Save cursor position
    const cursorPosition = mgIdInput.selectionStart;

    // Update the tree view
    renderManagementGroups();

    // Update JSON preview
    updateJsonPreview();

    // Select the updated node
    const updatedItem = document.querySelector(`.tree-item[data-id="${newId}"]`);
    if (updatedItem) {
      // Clear previous selection
      const prevSelected = document.querySelector('.tree-item.selected');
      if (prevSelected) {
        prevSelected.classList.remove('selected');
      }
      updatedItem.classList.add('selected');
    }

    // Make sure we don't lose focus or cursor position
    mgIdInput.focus();
    mgIdInput.setSelectionRange(cursorPosition, cursorPosition);
  }