import { createForm } from '@formily/core'; import { Schema } from '@formily/react'; import { Spin } from 'antd'; import React, { useMemo } from 'react'; import { useRequest } from '../../api-client'; import { useSchemaComponentContext } from '../hooks'; import { FormProvider } from './FormProvider'; import { SchemaComponent } from './SchemaComponent'; export interface RemoteSchemaComponentProps { scope?: any; uid?: string; onSuccess?: any; components?: any; schemaTransform?: (schema: Schema) => Schema; render?: any; hidden?: any; onlyRenderProperties?: boolean; noForm?: boolean; } const defaultTransform = (s: Schema) => s; const RequestSchemaComponent: React.FC = (props) => { const { noForm, onlyRenderProperties, hidden, scope, uid, components, onSuccess, schemaTransform = defaultTransform, } = props; const { reset } = useSchemaComponentContext(); const conf = { url: `/uiSchemas:${onlyRenderProperties ? 'getProperties' : 'getJsonSchema'}/${uid}`, }; const form = useMemo(() => createForm(), [uid]); const { data, loading } = useRequest(conf, { refreshDeps: [uid], onSuccess(data) { onSuccess && onSuccess(data); reset && reset(); }, }); if (loading) { return ; } if (hidden) { return ; } return noForm ? ( ) : ( ); }; export const RemoteSchemaComponent: React.FC = (props) => { return props.uid ? : null; };