import {
createCollection,
eq,
localStorageCollectionOptions,
useLiveQuery,
} from '@tanstack/react-db'
import z from 'zod'
const preferencesSchema = z.object({
id: z.literal('preferences'),
theme: z.enum(['light', 'dark', 'system']).default('system'),
requestTimelineSize: z.number().default(15),
})
export type Preferences = z.infer<typeof preferencesSchema>
export const preferencesCollection = createCollection(
localStorageCollectionOptions({
id: 'preferences-collection',
storageKey: 'lumen.preferences',
schema: preferencesSchema,
getKey: (item) => item.id,
}),
)
export const usePreferences = () => {
return useLiveQuery((q) =>
q
.from({ preferences: preferencesCollection })
.where(({ preferences }) => eq(preferences.id, 'preferences'))
.findOne(),
)
}
export function updatePreferences(
preferences: Omit<Partial<Preferences>, 'id'>,
) {
preferencesCollection.update('preferences', (draft) => {
draft.requestTimelineSize =
preferences.requestTimelineSize ?? draft.requestTimelineSize
})
}
import {
createCollection,
eq,
localStorageCollectionOptions,
useLiveQuery,
} from '@tanstack/react-db'
import z from 'zod'
const preferencesSchema = z.object({
id: z.literal('preferences'),
theme: z.enum(['light', 'dark', 'system']).default('system'),
requestTimelineSize: z.number().default(15),
})
export type Preferences = z.infer<typeof preferencesSchema>
export const preferencesCollection = createCollection(
localStorageCollectionOptions({
id: 'preferences-collection',
storageKey: 'lumen.preferences',
schema: preferencesSchema,
getKey: (item) => item.id,
}),
)
export const usePreferences = () => {
return useLiveQuery((q) =>
q
.from({ preferences: preferencesCollection })
.where(({ preferences }) => eq(preferences.id, 'preferences'))
.findOne(),
)
}
export function updatePreferences(
preferences: Omit<Partial<Preferences>, 'id'>,
) {
preferencesCollection.update('preferences', (draft) => {
draft.requestTimelineSize =
preferences.requestTimelineSize ?? draft.requestTimelineSize
})
}