init
This commit is contained in:
81
frontend/store/threshold-store.ts
Normal file
81
frontend/store/threshold-store.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
'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),
|
||||
})
|
||||
},
|
||||
}))
|
||||
Reference in New Issue
Block a user