export default()

in packages/data-render/src/core/index.tsx [13:93]


export default (props: DataVProps) => {
  const { schema, data, sourceData, widgets, methods = {}, config = {} } = props;

  // 获取顶层数据
  const getSourceData = () => {
    return sourceData || data;
  };

  // 获取外部自定义方法
  const getMethod = (_name: string) => {
    let name = _name;
    if (name && name.startsWith('method:')) {
      const [_, funcName] = _name.replace(/\s+/g, '').split('method:');
      name = funcName;
    }

    const func = methods[name];
    if (!isFunction(func)) {
      console.warn(`${name}:自定义方法不存在或者 ${name}:并不是一个函数`);
      return () => null;
    }

    return func;
  };

  // 获取外部自定义组件
  const getWidget = (widgetName: string) => {
    if (!widgets?.[widgetName]) {
      console.warn(`${widgets} 未找到对应组件,请检查协议配置`);
      return null;
    }
    return (widgets as any)[widgetName];
  };

  // 获取接口配置
  const getRequestConfig = () => {
    return {
      dataKey: 'module',
      ...config.request,
    };
  };

  // 获取接口入参
  const getRequestPrams = (params: any, { insideData }: any) => {
    return getRequestParams(params, data, insideData);
  };

  const getConfig = () => ({
    ...defaultConfig,
    ...config,
  });

  const getDataFromKey = (_key: string, currentData: any, defaultValue: any) => {
    if (!_key) {
      return currentData;
    }
    const key = ['data:', 'source:', 'parent:', '{{'].some(item => _key.includes(item)) ? _key : `$d.${_key}`;
    return parseExpression(key, { currentData, sourceData: data }) ?? defaultValue;
  }

  const renderer = ({ data, schema, addons }: any) => {
    return <RenderCore schema={schema} data={data} addons={addons} />;
  };

  return (
    <RenderCore
      data={data || {}}
      schema={schema}
      addons={{
        renderer,
        getMethod,
        getWidget,
        getSourceData,
        getRequestConfig,
        getRequestPrams,
        getConfig,
        getDataFromKey
      }}
    />
  );
};