feat: MujianProvider

This commit is contained in:
Cledwyn Lew
2025-09-03 17:34:12 +08:00
parent 9ad63297f1
commit 4effd946a4
5 changed files with 61 additions and 20 deletions

View File

@@ -0,0 +1,51 @@
// @rule: do not modify this file
import { MujianSdk } from '@mujian/js-sdk';
import {
createContext,
type ReactNode,
useContext,
useEffect,
useState,
} from 'react';
export { EVENT } from '@mujian/js-sdk';
const MujianContext = createContext<MujianSdk | null>(null);
export interface MujianProviderProps {
children: ReactNode;
loadingPage?: ReactNode;
}
export const MujianProvider = ({
children,
loadingPage,
}: MujianProviderProps) => {
const [mujian, setMujian] = useState<MujianSdk | null>(null);
useEffect(() => {
(async () => {
const mujian = new MujianSdk();
await mujian.init();
setMujian(mujian);
})();
}, []);
return (
<MujianContext.Provider value={mujian}>
{mujian ? children : (loadingPage ?? 'Mujian is loading')}
</MujianContext.Provider>
);
};
export const useMujian = () => {
const mujian = useContext(MujianContext);
if (!mujian) {
const message =
'Mujian is not initialized. Please check that useMujian is called inside MujianProvider';
console.error(message);
throw new Error(message);
}
return mujian;
};