37 lines
845 B
JavaScript

import { createContext, useContext } from 'react';
import { RootStore } from './root';
/** @type{RootStore} */
let store;
const StoreContext = createContext(store);
export function useStore() {
const context = useContext(StoreContext);
if (context === undefined) {
throw new Error('useStore must be used within StoreProvider');
}
return context;
}
function initializeStore(initialData) {
const _store = store ?? new RootStore();
if (initialData) {
const { user } = initialData;
_store.$user.hydrate(user);
}
if (typeof window === 'undefined') return _store;
if (!store) store = _store;
return _store;
}
export function StoreProvider({ children, ...initialData }) {
const store = initializeStore(initialData);
return (
<StoreContext.Provider value={store}>{children}</StoreContext.Provider>
);
}