diff --git a/ui/src/views/Forecast.jsx b/ui/src/views/Forecast.jsx index d59b030..382a3db 100644 --- a/ui/src/views/Forecast.jsx +++ b/ui/src/views/Forecast.jsx @@ -755,7 +755,6 @@ export default function Forecast({ sources = [], sourceId, versions = [], versio await viewer.load(tableRef.current) viewer.setAttribute('theme', dark ? 'Pro Dark' : 'Pro Light') if (!hideSplitTotal()) setTimeout(hideSplitTotal, 400) - await syncOrderExpressions() // restore last-used layout or build default // Strip cfg.table — table is already loaded by reference above; a stale name @@ -793,6 +792,12 @@ export default function Forecast({ sources = [], sourceId, versions = [], versio } // auto-persist viewer state (formatting, columns, etc.) to the last-used cache + // After the layout, not before: restoring a saved config replaces + // `expressions` wholesale, so expressions applied earlier were being wiped + // by the very next line and the ordering columns never appeared in the + // column list. + await syncOrderExpressions() + if (viewer._pspUpdate) viewer.removeEventListener('perspective-config-update', viewer._pspUpdate) viewer._pspUpdate = async () => { try {