export default function withProvider()

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