feat: MujianProvider
This commit is contained in:
@@ -2,10 +2,13 @@ import { StrictMode } from 'react';
|
|||||||
import { createRoot } from 'react-dom/client';
|
import { createRoot } from 'react-dom/client';
|
||||||
import '@/styles/fonts.css';
|
import '@/styles/fonts.css';
|
||||||
import '@/styles/global.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(
|
createRoot(document.getElementById('root')!).render(
|
||||||
<StrictMode>
|
<StrictMode>
|
||||||
<ReactRouterProvider />
|
<MujianProvider>
|
||||||
|
<ReactRouterProvider />
|
||||||
|
</MujianProvider>
|
||||||
</StrictMode>,
|
</StrictMode>,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
import { useGlobalStore } from '@/store/global';
|
import { useGlobalStore } from '@/store/global';
|
||||||
import './index.css';
|
import './index.css';
|
||||||
import { isEmpty } from 'lodash-es';
|
import { isEmpty } from 'lodash-es';
|
||||||
import { EVENT, getMujian } from '@/utils/mujian';
|
import { EVENT, useMujian } from '@/providers/MujianProvider';
|
||||||
|
|
||||||
function Home() {
|
function Home() {
|
||||||
const { count, increment } = useGlobalStore((state) => state);
|
const { count, increment } = useGlobalStore((state) => state);
|
||||||
|
const mujian = useMujian();
|
||||||
|
|
||||||
console.log('count', count);
|
console.log('count', count);
|
||||||
|
|
||||||
console.log('isEmpty', isEmpty(count));
|
console.log('isEmpty', isEmpty(count));
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div>
|
<div>
|
||||||
@@ -27,8 +27,8 @@ function Home() {
|
|||||||
|
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={async() => {
|
onClick={async () => {
|
||||||
(await getMujian()).emit(EVENT.MUJIAN_AI_CHAT_SEND_MESSAGE, {
|
mujian.emit(EVENT.MUJIAN_AI_CHAT_SEND_MESSAGE, {
|
||||||
message: 'Hello, World!',
|
message: 'Hello, World!',
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
|
|||||||
51
src/providers/MujianProvider.tsx
Normal file
51
src/providers/MujianProvider.tsx
Normal 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;
|
||||||
|
};
|
||||||
@@ -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;
|
|
||||||
};
|
|
||||||
Reference in New Issue
Block a user