Newer
Older
taehui / qwilight-fe / src / Stores.tsx
@Taehui Taehui on 6 Nov 1 KB 2023-11-06 오후 10:13
import { createContext, ReactNode, useContext } from "react";
import { useLocalObservable } from "mobx-react-lite";
import setQwilightStore from "src/qwilight/setQwilightStore";
import setSiteStore from "src/site/setSiteStore";
import setNoteStore from "src/note/setNoteStore";
import setAvatarStore from "src/avatar/setAvatarStore";
import setEtcStore from "src/etc/setEtcStore";
import setWowStore from "src/wow/setWowStore";

type MainStore = {
  qwilightStore: ReturnType<typeof setQwilightStore>;
  noteStore: ReturnType<typeof setNoteStore>;
  siteStore: ReturnType<typeof setSiteStore>;
  avatarStore: ReturnType<typeof setAvatarStore>;
  etcStore: ReturnType<typeof setEtcStore>;
  wowStore: ReturnType<typeof setWowStore>;
};

const mainStore = createContext<MainStore>({} as MainStore);
const { Provider } = mainStore;

export const Stores = ({ children }: { children: ReactNode }) => (
  <Provider
    value={{
      qwilightStore: useLocalObservable(setQwilightStore),
      noteStore: useLocalObservable(setNoteStore),
      siteStore: useLocalObservable(setSiteStore),
      avatarStore: useLocalObservable(setAvatarStore),
      etcStore: useLocalObservable(setEtcStore),
      wowStore: useLocalObservable(setWowStore),
    }}
  >
    {children}
  </Provider>
);

export const useQwilightStore = () => useContext(mainStore).qwilightStore;

export const useSiteStore = () => useContext(mainStore).siteStore;

export const useNoteStore = () => useContext(mainStore).noteStore;

export const useAvatarStore = () => useContext(mainStore).avatarStore;

export const useEtcStore = () => useContext(mainStore).etcStore;

export const useWowStore = () => useContext(mainStore).wowStore;