2023-05-20 16:02:08 +00:00
|
|
|
import { create } from 'zustand';
|
2023-03-09 00:37:43 +00:00
|
|
|
import {
|
|
|
|
|
DATE_RANGE_CONFIG,
|
|
|
|
|
DEFAULT_DATE_RANGE,
|
|
|
|
|
DEFAULT_LOCALE,
|
|
|
|
|
DEFAULT_THEME,
|
|
|
|
|
LOCALE_CONFIG,
|
|
|
|
|
THEME_CONFIG,
|
2024-03-29 23:04:39 +00:00
|
|
|
TIMEZONE_CONFIG,
|
2023-03-09 00:37:43 +00:00
|
|
|
} from 'lib/constants';
|
2022-08-29 03:20:54 +00:00
|
|
|
import { getItem } from 'next-basics';
|
2024-03-29 23:04:39 +00:00
|
|
|
import { getTimezone } from 'lib/date';
|
2022-03-02 07:03:50 +00:00
|
|
|
|
2024-03-19 17:38:16 +00:00
|
|
|
function getDefaultTheme() {
|
|
|
|
|
return typeof window !== 'undefined'
|
|
|
|
|
? window?.matchMedia('(prefers-color-scheme: dark)')?.matches
|
|
|
|
|
? 'dark'
|
|
|
|
|
: 'light'
|
|
|
|
|
: 'light';
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-23 06:47:59 +00:00
|
|
|
const initialState = {
|
|
|
|
|
locale: getItem(LOCALE_CONFIG) || DEFAULT_LOCALE,
|
2024-03-19 17:38:16 +00:00
|
|
|
theme: getItem(THEME_CONFIG) || getDefaultTheme() || DEFAULT_THEME,
|
2024-03-29 23:04:39 +00:00
|
|
|
timezone: getItem(TIMEZONE_CONFIG) || getTimezone(),
|
2023-03-09 00:37:43 +00:00
|
|
|
dateRange: getItem(DATE_RANGE_CONFIG) || DEFAULT_DATE_RANGE,
|
2022-02-23 06:47:59 +00:00
|
|
|
shareToken: null,
|
|
|
|
|
user: null,
|
2022-08-02 06:04:47 +00:00
|
|
|
config: null,
|
2022-02-23 06:47:59 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const store = create(() => ({ ...initialState }));
|
|
|
|
|
|
2024-02-24 04:31:35 +00:00
|
|
|
export function setTheme(theme: string) {
|
2022-02-23 06:47:59 +00:00
|
|
|
store.setState({ theme });
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-29 23:04:39 +00:00
|
|
|
export function setTimezone(timezone: string) {
|
|
|
|
|
store.setState({ timezone });
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-24 04:31:35 +00:00
|
|
|
export function setLocale(locale: string) {
|
2022-02-23 06:47:59 +00:00
|
|
|
store.setState({ locale });
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-24 04:31:35 +00:00
|
|
|
export function setShareToken(shareToken: string) {
|
2022-02-23 06:47:59 +00:00
|
|
|
store.setState({ shareToken });
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-24 04:31:35 +00:00
|
|
|
export function setUser(user: object) {
|
2022-02-23 06:47:59 +00:00
|
|
|
store.setState({ user });
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-24 04:31:35 +00:00
|
|
|
export function setConfig(config: object) {
|
2022-08-02 06:04:47 +00:00
|
|
|
store.setState({ config });
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-18 19:24:37 +00:00
|
|
|
export function setDateRange(dateRange: string | object) {
|
2023-03-09 00:37:43 +00:00
|
|
|
store.setState({ dateRange });
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-23 06:47:59 +00:00
|
|
|
export default store;
|