|
|
|
|
@ -1,7 +1,6 @@
|
|
|
|
|
import { dataConfig } from './DataConfig';
|
|
|
|
|
import type {DataConfig, Rules, OptionGroup, View} from './DataConfigTypes';
|
|
|
|
|
import type { AppState } from './AppStateTypes';
|
|
|
|
|
import {data} from "autoprefixer";
|
|
|
|
|
|
|
|
|
|
class DataConfigStore {
|
|
|
|
|
|
|
|
|
|
@ -53,7 +52,7 @@ class DataConfigStore {
|
|
|
|
|
if (typeof window !== 'undefined') {
|
|
|
|
|
(window as any).appState = this;
|
|
|
|
|
console.log('✅ appState disponible en window.appState');
|
|
|
|
|
console.log('📝 Usa: window.appState.inspect() para ver el estado');
|
|
|
|
|
console.log('🔍 Usa: window.appState.inspect() para ver el estado');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -333,15 +332,32 @@ class DataConfigStore {
|
|
|
|
|
|
|
|
|
|
view.options.forEach((group: OptionGroup) => {
|
|
|
|
|
const currentId = this.selection.views[viewId][group.id];
|
|
|
|
|
const opt = group.values.find(v => v.id === currentId);
|
|
|
|
|
if (opt?.rules && !this.isValid(opt.rules)) {
|
|
|
|
|
changes.push({
|
|
|
|
|
group: group.id,
|
|
|
|
|
from: currentId,
|
|
|
|
|
to: group.default,
|
|
|
|
|
reason: 'rule validation failed'
|
|
|
|
|
});
|
|
|
|
|
this.selection.views[viewId][group.id] = group.default;
|
|
|
|
|
const currentOpt = group.values.find(v => v.id === currentId);
|
|
|
|
|
|
|
|
|
|
// Si la opción actual no es válida
|
|
|
|
|
if (currentOpt?.rules && !this.isValid(currentOpt.rules)) {
|
|
|
|
|
// Buscar la primera opción válida en el grupo
|
|
|
|
|
const validOption = this.findFirstValidOption(group);
|
|
|
|
|
|
|
|
|
|
if (validOption) {
|
|
|
|
|
changes.push({
|
|
|
|
|
group: group.id,
|
|
|
|
|
from: currentId,
|
|
|
|
|
to: validOption,
|
|
|
|
|
reason: 'rule validation failed'
|
|
|
|
|
});
|
|
|
|
|
this.selection.views[viewId][group.id] = validOption;
|
|
|
|
|
} else {
|
|
|
|
|
// Si no hay ninguna opción válida, usar default como fallback
|
|
|
|
|
console.warn(`No se encontró ninguna opción válida para ${viewId}.${group.id}, usando default`);
|
|
|
|
|
changes.push({
|
|
|
|
|
group: group.id,
|
|
|
|
|
from: currentId,
|
|
|
|
|
to: group.default,
|
|
|
|
|
reason: 'no valid option found, using default'
|
|
|
|
|
});
|
|
|
|
|
this.selection.views[viewId][group.id] = group.default;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
@ -349,6 +365,25 @@ class DataConfigStore {
|
|
|
|
|
this.debugLog('revalidateView', { viewId, changes });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Encontrar la primera opción válida en un grupo */
|
|
|
|
|
private findFirstValidOption(group: OptionGroup): string | null {
|
|
|
|
|
// Primero intentar con el default si es válido
|
|
|
|
|
const defaultOpt = group.values.find(v => v.id === group.default);
|
|
|
|
|
if (defaultOpt && this.isValid(defaultOpt.rules)) {
|
|
|
|
|
return group.default;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Si el default no es válido, buscar la primera opción válida
|
|
|
|
|
for (const opt of group.values) {
|
|
|
|
|
if (this.isValid(opt.rules)) {
|
|
|
|
|
return opt.id;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Si no hay ninguna opción válida, retornar null
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const appState = new DataConfigStore();
|