mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-06-11 07:23:32 -07:00
75 lines
2.0 KiB
JavaScript
75 lines
2.0 KiB
JavaScript
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<import("./index.js").ChartResult>} fetch
|
|
* @property {(count: number) => { fetch: () => Promise<import("./index.js").ChartResult> }} last
|
|
*/
|
|
|
|
/**
|
|
* @typedef {Object} TimeframeMetric
|
|
* @property {Record<TimeframeIndex, TimeframeEndpoint>} by
|
|
*/
|