import { lazy, Suspense } from 'react';
import {Spin} from "antd";


// 定义一个函数 lazyLoad，接受三个参数：importFunc 为一个函数，返回一个 Promise；selectorFunc 为一个可选的函数，接受 Promise 的结果并返回一个值；opts 为一个对象，包含 fallback 属性
const lazyLoad = (importFunc, selectorFunc, opts) => {
  let lazyFactory = () => importFunc();

  if (selectorFunc) {
    lazyFactory = () =>
      importFunc().then(module => ({
        default: selectorFunc(module)
      }));
  }
  const LazyComponent = lazy(lazyFactory);
  // eslint-disable-next-line react/display-name
  return (props) => (
    <Suspense fallback={opts.fallback}>
      <LazyComponent {...props} />
    </Suspense>
  );
};
// 定义一个默认的 lazyLoad 函数，使用默认的 opts
const defaultLazyLoad = (importFunc, selectorFunc) => lazyLoad(importFunc, selectorFunc, {
  fallback: <Spin />
});
export { lazyLoad, defaultLazyLoad };
