fix(site): handle missing default chart time (#2397)

Co-authored-by: henrygd <hank@henrygd.me>
This commit is contained in:
Adrien Boullé
2026-09-23 18:29:31 +02:00
committed by GitHub
parent 8bf6917fe0
commit 9042a8c5c8
7 changed files with 77 additions and 14 deletions

View File

@@ -4,7 +4,7 @@ import { basePath } from "@/components/router"
import { toast } from "@/components/ui/use-toast"
import { dynamicActivate, getLocale } from "@/lib/i18n"
import type { ChartTimes, UserSettings } from "@/types"
import { $alerts, $allSystemsById, $allSystemsByName, $userSettings } from "./stores"
import { $alerts, $allSystemsById, $allSystemsByName, $userSettings, hydrateUserSettings } from "./stores"
import { chartTimeData, debounce } from "./utils"
/** PocketBase JS Client */
@@ -90,7 +90,7 @@ export function queueUserSettings(newSettings: Partial<UserSettings>) {
export async function updateUserSettings() {
try {
const req = await pb.collection("user_settings").getFirstListItem("", { fields: "settings" })
$userSettings.set(req.settings)
hydrateUserSettings(req.settings)
dynamicActivate(req.settings.lang || getLocale())
return
} catch (e) {
@@ -99,7 +99,7 @@ export async function updateUserSettings() {
// create user settings if error fetching existing
try {
const createdSettings = await pb.collection("user_settings").create({ user: pb.authStore.record?.id })
$userSettings.set(createdSettings.settings)
hydrateUserSettings(createdSettings.settings)
dynamicActivate(createdSettings.settings.lang || getLocale())
} catch (e) {
console.error("create settings", e)

View File

@@ -1,4 +1,4 @@
import { atom, computed, listenKeys, map, type ReadableAtom } from "nanostores"
import { atom, computed, map, type ReadableAtom } from "nanostores"
import type { AlertMap, ChartTimes, SystemRecord, UpdateInfo, UserSettings } from "@/types"
import { pb } from "./api"
import { Unit } from "./enums"
@@ -31,8 +31,11 @@ export const $publicKey = atom("")
/** New version info if an update is available, otherwise undefined */
export const $newVersion = atom<UpdateInfo | undefined>()
/** Chart time period used when user settings don't provide one */
export const defaultChartTime: ChartTimes = "1h"
/** Chart time period */
export const $chartTime = atom<ChartTimes>("1h")
export const $chartTime = atom<ChartTimes>(defaultChartTime)
/** Whether to display average or max chart values */
export const $maxValues = atom(false)
@@ -50,13 +53,25 @@ export const $maxValues = atom(false)
/** User settings */
export const $userSettings = map<UserSettings>({
chartTime: "1h",
chartTime: defaultChartTime,
emails: [pb.authStore.record?.email || ""],
unitNet: Unit.Bytes,
unitTemp: Unit.Celsius,
})
// update chart time on change
listenKeys($userSettings, ["chartTime"], ({ chartTime }) => $chartTime.set(chartTime))
/** Chart time period stored in user settings, or the default if it's missing */
export function getUserChartTime(settings: UserSettings = $userSettings.get()): ChartTimes {
return settings.chartTime || defaultChartTime
}
/**
* Apply settings loaded from the database, including the default chart time.
* Other settings writes don't touch $chartTime so they can't reset the active chart range.
*/
export function hydrateUserSettings(settings: UserSettings) {
$userSettings.set(settings)
$chartTime.set(getUserChartTime(settings))
}
/** Container chart filter */
export const $containerFilter = atom("")