Backup pre-corrección namespaces: mejoras schemas y componentes
Cambios incluidos: - Actualización de copy/textos en 7 schemas JSON - Mejoras en AdminAjaxHandler con mapeos adicionales - Refactorización de FormBuilders y Renderers - Correcciones en dashboard admin JS - Nuevo ContactFormRenderer funcional NOTA: Este commit sirve como respaldo antes de corregir inconsistencias de case en namespaces (API→Api, WordPress→Wordpress) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -17,19 +17,62 @@
|
||||
});
|
||||
|
||||
/**
|
||||
* Inicializa el sistema de tabs
|
||||
* Inicializa el sistema de tabs con persistencia en URL
|
||||
*/
|
||||
function initializeTabs() {
|
||||
const tabs = document.querySelectorAll('.nav-tab');
|
||||
const tabButtons = document.querySelectorAll('[data-bs-toggle="tab"]');
|
||||
|
||||
tabs.forEach(function(tab) {
|
||||
tab.addEventListener('click', function(e) {
|
||||
// Prevenir comportamiento por defecto si es necesario
|
||||
// (En este caso dejamos que funcione la navegación normal)
|
||||
// Leer parametro admin-tab de la URL al cargar
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const activeTabParam = urlParams.get('admin-tab');
|
||||
|
||||
if (activeTabParam) {
|
||||
// Buscar el boton del tab correspondiente
|
||||
const targetButton = document.querySelector('[data-bs-target="#' + activeTabParam + 'Tab"]');
|
||||
if (targetButton) {
|
||||
// Activar el tab usando Bootstrap API
|
||||
const tab = new bootstrap.Tab(targetButton);
|
||||
tab.show();
|
||||
}
|
||||
}
|
||||
|
||||
// Escuchar cambios de tab para actualizar URL
|
||||
tabButtons.forEach(function(tabButton) {
|
||||
tabButton.addEventListener('shown.bs.tab', function(e) {
|
||||
// Obtener el ID del componente desde data-bs-target
|
||||
const target = e.target.getAttribute('data-bs-target');
|
||||
const componentId = target.replace('#', '').replace('Tab', '');
|
||||
|
||||
// Actualizar URL sin recargar pagina
|
||||
updateUrlWithTab(componentId);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Actualiza la URL con el parametro admin-tab sin recargar la pagina
|
||||
*
|
||||
* @param {string} tabId ID del tab activo
|
||||
*/
|
||||
function updateUrlWithTab(tabId) {
|
||||
const url = new URL(window.location.href);
|
||||
url.searchParams.set('admin-tab', tabId);
|
||||
window.history.replaceState({}, '', url.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtiene el ID del tab activo actualmente
|
||||
*
|
||||
* @returns {string|null} ID del componente activo o null
|
||||
*/
|
||||
function getActiveTabId() {
|
||||
const activeTab = document.querySelector('.tab-pane.active');
|
||||
if (activeTab) {
|
||||
return activeTab.id.replace('Tab', '');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Inicializa validación de formularios
|
||||
*/
|
||||
@@ -227,7 +270,17 @@
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
showNotice('success', data.data.message || 'Valores restaurados correctamente.');
|
||||
setTimeout(() => location.reload(), 1500);
|
||||
// Recargar preservando el tab activo
|
||||
setTimeout(() => {
|
||||
const activeTabId = getActiveTabId();
|
||||
if (activeTabId) {
|
||||
const url = new URL(window.location.href);
|
||||
url.searchParams.set('admin-tab', activeTabId);
|
||||
window.location.href = url.toString();
|
||||
} else {
|
||||
location.reload();
|
||||
}
|
||||
}, 1500);
|
||||
} else {
|
||||
showNotice('error', data.data.message || 'Error al restaurar los valores.');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user