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