* Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.
*/
import { observer } from 'mobx-react';
import { useRootStore } from './context/context';
import { useState } from 'react';
import { setBaseURL } from './api/request';
import i18n from './i18n';
import { safeJSONParse } from './utils/common';
import { useTranslation } from 'react-i18next';
import { message } from 'antd';
import './assets/index.scss';
const App = observer(() => {
const [hasURL, setHasURL] = useState(false);
const { exampleStore } = useRootStore();
const exampleInfo = exampleStore.activeExample;
const isProduction = import.meta.env.VITE_MODE === 'production';
const { t } = useTranslation('example');
const [messageApi, contextHolder] = message.useMessage();
if (isProduction) {
window.parent.postMessage({ event: 'pluginMounted' }, '*');
window.onmessage = async (e) => {
const { target, event, data, body } = typeof e.data === 'string' ? safeJSONParse(e.data) : e.data;
if (target !== 'plugin') {
return;
}
switch (event) {
case 'wakeupPlugin':
setBaseURL(data.url);
setHasURL(true);
window.parent.postMessage({ event: 'getLanguage' }, '*');
window.parent.postMessage({ event: 'getTheme' }, '*');
break;
case 'switchLanguage':
i18n.changeLanguage(body.lang);
break;
case 'setTheme':
if (body.isDark) {
document.documentElement.classList.add('dark');
document.body.className = 'dark';
} else {
document.documentElement.classList.remove('dark');
document.body.className = 'light';
}
break;
case 'remote/import':
messageApi.open({
type: 'success',
content: t('importSuccess'),
});
break;
default:
break;
}
};
}
return <>
{
isProduction && (exampleInfo !== undefined && hasURL ? (
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100vh' }}>
<h1>{t('welcomeTip')}</h1>
{contextHolder}
</div>
) : <></>)
}
</>;
});
export default App;