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

@@ -2,10 +2,13 @@ import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import '@/styles/fonts.css';
import '@/styles/global.css';
import { ReactRouterProvider } from './providers/RouterPorvider.tsx';
import { MujianProvider } from './providers/MujianProvider.tsx';
import { ReactRouterProvider } from './providers/RouterProvider.tsx';
createRoot(document.getElementById('root')!).render(
<StrictMode>
<MujianProvider>
<ReactRouterProvider />
</MujianProvider>
</StrictMode>,
);

View File

@@ -1,16 +1,16 @@
import { useGlobalStore } from '@/store/global';
import './index.css';
import { isEmpty } from 'lodash-es';
import { EVENT, getMujian } from '@/utils/mujian';
import { EVENT, useMujian } from '@/providers/MujianProvider';
function Home() {
const { count, increment } = useGlobalStore((state) => state);
const mujian = useMujian();
console.log('count', count);
console.log('isEmpty', isEmpty(count));
return (
<>
<div>
@@ -28,7 +28,7 @@ function Home() {
<button
type="button"
onClick={async () => {
(await getMujian()).emit(EVENT.MUJIAN_AI_CHAT_SEND_MESSAGE, {
mujian.emit(EVENT.MUJIAN_AI_CHAT_SEND_MESSAGE, {
message: 'Hello, World!',
});
}}

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;
};

View File

@@ -1,13 +0,0 @@
// @rule: do not modify this file
import { EVENT, MujianSdk } from '@mujian/js-sdk';
const mujian = new MujianSdk();
await mujian.init();
export { EVENT };
export const getMujian = async () => {
await mujian.init();
return mujian;
};