import { createChartSetting } from "./setting.js"; const timeframes = /** @type {const} */ ({ "1d": { index: "minute10", count: 144 }, "1w": { index: "hour1", count: 168 }, "1m": { index: "hour4", count: 186 }, "1y": { index: "day1", count: 366 }, "4y": { index: "day3", count: 488 }, "8y": { index: "week1", count: 418 }, all: { index: "week1" }, }); const options = /** @type {const} */ ([ { value: "1d", label: "1d" }, { value: "1w", label: "1w" }, { value: "1m", label: "1m" }, { value: "1y", label: "1y" }, { value: "4y", label: "4y" }, { value: "8y", label: "8y" }, { value: "all", label: "all" }, ]); const setting = createChartSetting({ storageKey: "timeframe", legend: "Time", options, defaultValue: "all", }); /** @param {string} chartKey */ export function getDefaultTimeframe(chartKey) { return setting.get(chartKey); } /** * @param {string} chartKey * @param {TimeframeValue} timeframe */ export function saveTimeframe(chartKey, timeframe) { setting.save(chartKey, timeframe); } /** * @param {TimeframeValue} currentTimeframe * @param {(timeframe: TimeframeValue) => void} onChange */ export function createTimeframeControl(currentTimeframe, onChange) { return setting.create(currentTimeframe, onChange); } /** * @param {TimeframeMetric} metric * @param {TimeframeValue} timeframe */ export function fetchTimeframe(metric, timeframe) { const config = timeframes[timeframe]; const endpoint = metric.by[config.index]; return "count" in config ? endpoint.last(config.count).fetch() : endpoint.fetch(); } /** @typedef {(typeof options)[number]["value"]} TimeframeValue */ /** @typedef {(typeof timeframes)[TimeframeValue]["index"]} TimeframeIndex */ /** * @typedef {Object} TimeframeEndpoint * @property {() => Promise} fetch * @property {(count: number) => { fetch: () => Promise }} last */ /** * @typedef {Object} TimeframeMetric * @property {Record} by */