in packages/form-render/src/withProvider.tsx [15:85]
export default function withProvider<T>(Element: React.ComponentType<T>, defaultWidgets?: any) : React.ComponentType<T> {
return (props: any) => {
const {
configProvider,
locale = 'zh-CN',
widgets,
methods,
form,
validateMessages,
globalProps={},
globalConfig = {},
...otherProps
} = props;
const storeRef = useRef(createStore());
const store: any = storeRef.current;
useEffect(() => {
if (locale === 'en-US') {
dayjs.locale('en');
return;
}
dayjs.locale('zh-cn');
}, [locale]);
useUnmount(() => {
form.resetFields();
});
if (!form) {
console.warn('Please provide a form instance to FormRender');
return null;
}
const antdLocale = locale === 'zh-CN' ? zhCN : enUS;
const formValidateMessages = locale === 'zh-CN' ? validateMessagesCN : validateMessagesEN;
const configContext = {
locale,
widgets: { ...defaultWidgets, ...widgets },
methods,
form,
globalProps,
globalConfig
};
const langPack: any = {
...antdLocale,
'FormRender': locales[locale],
...configProvider?.locale
};
return (
<ConfigProvider
{...configProvider}
locale={langPack}
form={{
validateMessages: {
...formValidateMessages,
...validateMessages
}
}}
>
<ConfigContext.Provider value={configContext}>
<FRContext.Provider value={store}>
<Element form={form} {...otherProps} />
</FRContext.Provider>
</ConfigContext.Provider>
</ConfigProvider>
);
};
}