82 lines
2.0 KiB
TypeScript
82 lines
2.0 KiB
TypeScript
'use client'
|
|
|
|
import { create } from 'zustand'
|
|
|
|
export interface ThresholdState {
|
|
speedMin: number
|
|
speedMax: number
|
|
dirCenter: number
|
|
dirRange: number
|
|
setSpeedMin: (value: number) => void
|
|
setSpeedMax: (value: number) => void
|
|
setDirCenter: (value: number) => void
|
|
setDirRange: (value: number) => void
|
|
setSpeedRange: (min: number, max: number) => void
|
|
initFromURL: () => void
|
|
}
|
|
|
|
// Helper to update URL params
|
|
const updateURLParams = (params: Record<string, string>) => {
|
|
if (typeof window === 'undefined') return
|
|
|
|
const url = new URL(window.location.href)
|
|
Object.entries(params).forEach(([key, value]) => {
|
|
url.searchParams.set(key, value)
|
|
})
|
|
window.history.replaceState({}, '', url.toString())
|
|
}
|
|
|
|
// Helper to read from URL params
|
|
const getURLParam = (key: string, defaultValue: number): number => {
|
|
if (typeof window === 'undefined') return defaultValue
|
|
|
|
const params = new URLSearchParams(window.location.search)
|
|
const value = params.get(key)
|
|
return value ? parseFloat(value) : defaultValue
|
|
}
|
|
|
|
export const useThresholdStore = create<ThresholdState>((set) => ({
|
|
// Default values
|
|
speedMin: 7,
|
|
speedMax: 14,
|
|
dirCenter: 270,
|
|
dirRange: 15,
|
|
|
|
setSpeedMin: (value) => {
|
|
set({ speedMin: value })
|
|
updateURLParams({ speedMin: value.toString() })
|
|
},
|
|
|
|
setSpeedMax: (value) => {
|
|
set({ speedMax: value })
|
|
updateURLParams({ speedMax: value.toString() })
|
|
},
|
|
|
|
setDirCenter: (value) => {
|
|
set({ dirCenter: value })
|
|
updateURLParams({ dirCenter: value.toString() })
|
|
},
|
|
|
|
setDirRange: (value) => {
|
|
set({ dirRange: value })
|
|
updateURLParams({ dirRange: value.toString() })
|
|
},
|
|
|
|
setSpeedRange: (min, max) => {
|
|
set({ speedMin: min, speedMax: max })
|
|
updateURLParams({
|
|
speedMin: min.toString(),
|
|
speedMax: max.toString()
|
|
})
|
|
},
|
|
|
|
initFromURL: () => {
|
|
set({
|
|
speedMin: getURLParam('speedMin', 7),
|
|
speedMax: getURLParam('speedMax', 14),
|
|
dirCenter: getURLParam('dirCenter', 270),
|
|
dirRange: getURLParam('dirRange', 15),
|
|
})
|
|
},
|
|
}))
|