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