/* eslint-disable react/prop-types */
import { BlockletProvider, useBlockletContext } from '@arcblock/ux/lib/BlockletContext';

export default function withBlocklet(Component) {
  // HACK: 该组件是为了在 baseUrl 设置为其他 blocklet 的 appUrl 时，能够正确读取到目标的 blocklet
  // 比如在 A blocklet 中，添加了一个 B blocklet 的 did-connect，此时 did-connect 的数据要以 B blocklet 为数据基础
  function ComponentWrap({ ...props }) {
    const { blocklet, masterBlocklet } = useBlockletContext();

    return <Component {...props} blocklet={blocklet} masterBlocklet={masterBlocklet} />;
  }

  /**
   * @param {{baseUrl: string}} props
   * @returns
   */
  function WithProviderComponent({ baseUrl, ...rest }) {
    return (
      <BlockletProvider baseUrl={baseUrl}>
        <ComponentWrap baseUrl={baseUrl} {...rest} />
      </BlockletProvider>
    );
  }

  return WithProviderComponent;
}
