34 lines
1.0 KiB
TypeScript
34 lines
1.0 KiB
TypeScript
"use client";
|
|
|
|
import { create } from "zustand";
|
|
import { persist } from "zustand/middleware";
|
|
import type { SelectedLocation } from "@/types/location";
|
|
|
|
interface WeatherStore {
|
|
favorites: string[];
|
|
selectedStationId: string | null;
|
|
selectedLocation: SelectedLocation | null;
|
|
toggleFavorite: (id: string) => void;
|
|
selectStation: (id: string) => void;
|
|
selectLocation: (location: SelectedLocation) => void;
|
|
}
|
|
|
|
export const useWeatherStore = create<WeatherStore>()(
|
|
persist(
|
|
(set) => ({
|
|
favorites: [],
|
|
selectedStationId: null,
|
|
selectedLocation: null,
|
|
toggleFavorite: (id) =>
|
|
set((state) => ({
|
|
favorites: state.favorites.includes(id)
|
|
? state.favorites.filter((favoriteId) => favoriteId !== id)
|
|
: [...state.favorites, id],
|
|
})),
|
|
selectStation: (id) => set({ selectedStationId: id, selectedLocation: null }),
|
|
selectLocation: (location) => set({ selectedStationId: location.stationId, selectedLocation: location }),
|
|
}),
|
|
{ name: "wtr:preferences" },
|
|
),
|
|
);
|