ChannelOrderStore.ts raw
1 import { localStorageKeys } from "src/constants";
2 import { NewChannelOrder } from "src/types";
3 import { create } from "zustand";
4
5 interface ChannelOrderStore {
6 readonly order: NewChannelOrder | undefined;
7 setOrder(order: NewChannelOrder): void;
8 removeOrder(): void;
9 updateOrder(order: Partial<NewChannelOrder>): void;
10 }
11
12 const savedOrderJSON = localStorage.getItem(localStorageKeys.channelOrder);
13 const useChannelOrderStore = create<ChannelOrderStore>((set, get) => ({
14 order: savedOrderJSON && JSON.parse(savedOrderJSON),
15 removeOrder() {
16 localStorage.removeItem(localStorageKeys.channelOrder);
17 set({ order: undefined });
18 },
19 updateOrder: (order) => {
20 get().setOrder({
21 ...get().order,
22 ...order,
23 } as NewChannelOrder);
24 },
25 setOrder: (order) => {
26 set({ order });
27 localStorage.setItem(localStorageKeys.channelOrder, JSON.stringify(order));
28 },
29 }));
30
31 export default useChannelOrderStore;
32