// frontend/static/js/scripts.js
// Script groups state
let scriptGroups = [];
// Load script groups when page loads
document.addEventListener('DOMContentLoaded', async () => {
await loadScriptGroups();
});
// Load script groups when page loads
document.addEventListener('DOMContentLoaded', async () => {
await loadScriptGroups();
});
async function loadScriptGroups() {
try {
// Obtener los grupos desde el servidor
const groups = await apiRequest('/script-groups');
console.log('Loaded script groups:', groups);
// Obtener el selector y el último grupo seleccionado
const select = document.getElementById('groupSelect');
const lastGroupId = localStorage.getItem('lastGroupId');
console.log('Last group ID:', lastGroupId);
// Remover event listener anterior si existe
select.removeEventListener('change', handleGroupChange);
// Construir las opciones
select.innerHTML = `
${groups.map(group => `
`).join('')}
`;
// Agregar event listener para cambios
select.addEventListener('change', handleGroupChange);
console.log('Added change event listener to groupSelect');
// Si hay un grupo guardado, cargarlo
if (lastGroupId) {
console.log('Loading last group scripts:', lastGroupId);
await loadGroupScripts(lastGroupId);
}
} catch (error) {
console.error('Error al cargar grupos de scripts:', error);
showError('Error al cargar grupos de scripts');
}
}
// Función para manejar el cambio de grupo
async function handleGroupChange(event) {
const groupId = event.target.value;
console.log('Group selection changed:', groupId);
if (groupId) {
localStorage.setItem('lastGroupId', groupId);
console.log('Saved lastGroupId:', groupId);
} else {
localStorage.removeItem('lastGroupId');
console.log('Removed lastGroupId');
}
await loadGroupScripts(groupId);
}
// Actualizar función de cambio de perfil para mantener la persistencia
async function changeProfile() {
const select = document.getElementById('profileSelect');
if (select.value) {
await selectProfile(select.value);
localStorage.setItem('lastProfileId', select.value);
// Al cambiar de perfil, intentamos mantener el último grupo seleccionado
const lastGroupId = localStorage.getItem('lastGroupId');
if (lastGroupId) {
const groupSelect = document.getElementById('groupSelect');
if (groupSelect) {
groupSelect.value = lastGroupId;
await loadGroupScripts(lastGroupId);
}
}
}
}
async function loadGroupScripts(groupId) {
const scriptList = document.getElementById('scriptList');
if (!groupId) {
scriptList.style.display = 'none';
localStorage.removeItem('lastGroupId'); // Limpiar selección
return;
}
// Guardar grupo seleccionado
localStorage.setItem('lastGroupId', groupId);
console.log('Group saved:', groupId);
if (!currentProfile?.work_dir) {
scriptList.innerHTML = `
Por favor, seleccione primero un directorio de trabajo
`;
scriptList.style.display = 'block';
return;
}
try {
console.log('Loading data for group:', groupId);
// Actualizar el selector para reflejar la selección actual
const groupSelect = document.getElementById('groupSelect');
if (groupSelect && groupSelect.value !== groupId) {
groupSelect.value = groupId;
}
// Cargar y loguear scripts
let groupScripts, configSchema;
try {
groupScripts = await apiRequest(`/script-groups/${groupId}/scripts`);
console.log('Scripts loaded:', groupScripts);
} catch (e) {
console.error('Error loading scripts:', e);
throw e;
}
try {
configSchema = await apiRequest(`/script-groups/${groupId}/config-schema`);
console.log('Config schema loaded:', configSchema);
} catch (e) {
console.error('Error loading config schema:', e);
throw e;
}
// Intentar cargar configuración actual
let currentConfig = {};
try {
currentConfig = await apiRequest(
`/workdir-config/${encodeURIComponent(currentProfile.work_dir)}/group/${groupId}`
);
console.log('Current config loaded:', currentConfig);
} catch (e) {
console.warn('No existing configuration found, using defaults');
}
// Verificar que tenemos los datos necesarios
if (!groupScripts || !configSchema) {
throw new Error('Failed to load required data');
}
console.log('Rendering UI with:', {
groupScripts,
configSchema,
currentConfig
});
scriptList.innerHTML = `