diff --git a/website/scripts/chart/index.js b/website/scripts/chart/index.js index 08fe19b41..ade4ebdd4 100644 --- a/website/scripts/chart/index.js +++ b/website/scripts/chart/index.js @@ -92,19 +92,20 @@ export function createChart({ config, }) { // Chart owns its index state - /** @type {Signal} */ - const indexName = signals.createPersistedSignal({ + /** @type {Set<(index: ChartableIndex) => void>} */ + const onIndexChange = new Set(); + + const index = () => serdeChartableIndex.deserialize(indexName.value); + + const indexName = createPersistedValue({ defaultValue: /** @type {ChartableIndexName} */ ("date"), storageKey: "chart-index", urlKey: "i", serialize: (v) => v, deserialize: (s) => /** @type {ChartableIndexName} */ (s), + onChange: () => onIndexChange.forEach((cb) => cb(index())), }); - const index = signals.createMemo(() => - serdeChartableIndex.deserialize(indexName()), - ); - // Range state: localStorage stores all ranges per-index, URL stores current range only /** @typedef {{ from: number, to: number }} Range */ const ranges = createPersistedValue({ @@ -126,11 +127,11 @@ export function createChart({ }); /** @returns {Range | null} */ - const getRange = () => range.value ?? ranges.value[indexName()] ?? null; + const getRange = () => range.value ?? ranges.value[indexName.value] ?? null; /** @param {Range} value */ const setRange = (value) => { - ranges.set({ ...ranges.value, [indexName()]: value }); + ranges.set({ ...ranges.value, [indexName.value]: value }); range.set(value); }; @@ -264,7 +265,8 @@ export function createChart({ applyColors(); const removeThemeListener = onThemeChange(applyColors); - signals.createEffect(index, (index) => { + /** @param {ChartableIndex} index */ + function applyIndexSettings(index) { const minBarSpacing = index === "monthindex" ? 1 @@ -288,7 +290,9 @@ export function createChart({ : {}), }, }); - }); + } + applyIndexSettings(index()); + onIndexChange.add(applyIndexSettings); const activeResources = /** @type {Set>} */ ( new Set() @@ -314,39 +318,42 @@ export function createChart({ * @param {(pane: IPaneApi