Newer
Older
taehui / taehui-fe / src / store / Stores.tsx
@Taehui Taehui on 17 Mar 1 KB 2024-03-17 오후 2:12
"use client";

import setForumStore from "@/app/[language]/forum/store/setForumStore";
import setWantStore from "@/app/[language]/want/store/setWantStore";
import setAvatarStore from "@/avatar/setAvatarStore";
import setTaehuiStore from "@/store/setTaehuiStore";
import { useLocalObservable } from "mobx-react-lite";
import { createContext, FC, PropsWithChildren, useContext } from "react";

type MainStore = {
  taehuiStore: ReturnType<typeof setTaehuiStore>;
  wantStore: ReturnType<typeof setWantStore>;
  avatarStore: ReturnType<typeof setAvatarStore>;
  forumStore: ReturnType<typeof setForumStore>;
};

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

export const Stores: FC<PropsWithChildren> = ({ children }) => (
  <Provider
    value={{
      taehuiStore: useLocalObservable(setTaehuiStore),
      wantStore: useLocalObservable(setWantStore),
      avatarStore: useLocalObservable(setAvatarStore),
      forumStore: useLocalObservable(setForumStore),
    }}
  >
    {children}
  </Provider>
);

export const useTaehuiStore = () => useContext(mainStore).taehuiStore;

export const useWantStore = () => useContext(mainStore).wantStore;

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

export const useForumStore = () => useContext(mainStore).forumStore;