UNPKG

@cainiaofe/cn-ui-m

Version:
61 lines (60 loc) 3.6 kB
import { __assign, __rest } from "tslib"; import * as React from 'react'; import { ExpressionScope, FormProvider, FormConsumer } from '@formily/react'; import { createForm } from '@formily/core'; import { createScope } from "../schema-field"; import { CnFormLayout } from "../cn-form-layout"; import { CnSubmit } from "../cn-submit"; import { CnReset } from "../cn-reset"; import { CnButtonGroup } from "../../components/cn-button-group"; import { CnPageFooter } from "../../components/cn-page-footer"; import { HocBaseComponents, useCreatePluginInstance } from "../../utils/plugin"; export var CnFormOrigin = React.forwardRef(function (props, ref) { var form = props.form, formProps = props.formProps, components = props.components, schema = props.schema, scope = props.scope, formLayoutProps = props.formLayoutProps, children = props.children, hasFooterSubmit = props.hasFooterSubmit, footerConfig = props.footerConfig, onSubmit = props.onSubmit, onReset = props.onReset; var formInstance = React.useMemo(function () { if (form) { return form; } return createForm(formProps); }, [form, schema]); React.useImperativeHandle(ref, function () { return { getFormInstance: function () { return formInstance; }, }; }, [formInstance]); var RealSchemaField = React.useMemo(function () { return createScope(scope); }, [scope]); var footer = React.useMemo(function () { if (!hasFooterSubmit && !footerConfig) return; var _a = footerConfig || {}, submitProps = _a.submitProps, resetProps = _a.resetProps, className = _a.className, customRender = _a.customRender, otherProps = __rest(_a, ["submitProps", "resetProps", "className", "customRender"]); if (customRender) { return (React.createElement(CnPageFooter, __assign({ className: className, rightSlot: React.createElement(FormConsumer, null, customRender) }, otherProps))); } return (React.createElement(CnPageFooter, __assign({ className: className }, otherProps), React.createElement(CnButtonGroup, { fullWidth: true, size: "large" }, React.createElement(CnReset, __assign({}, resetProps, { form: formInstance, onReset: onReset })), React.createElement(CnSubmit, __assign({ size: "large", type: "primary" }, submitProps, { form: formInstance, onSubmit: onSubmit }))))); }, [footerConfig, formInstance, hasFooterSubmit, onReset, onSubmit]); return (React.createElement(FormProvider, { form: formInstance }, React.createElement(ExpressionScope, { value: { $$form: formInstance } }, React.createElement(CnFormLayout, __assign({}, formLayoutProps), React.createElement(RealSchemaField, { schema: schema, components: components, scope: scope }), children)), footer)); }); CnFormOrigin.displayName = 'CnFormOrigin'; export var CnForm = React.forwardRef(function (props, ref) { var _a; var pluginIns = useCreatePluginInstance('CnForm', props === null || props === void 0 ? void 0 : props.usePlugin); var plugins = (_a = pluginIns === null || pluginIns === void 0 ? void 0 : pluginIns.getPlugin) === null || _a === void 0 ? void 0 : _a.call(pluginIns); if (plugins.length === 0) { return React.createElement(CnFormOrigin, __assign({}, props, { ref: ref })); } return HocBaseComponents(CnFormOrigin, { props: props, plugins: plugins, ref: ref }); }); CnForm.defaultProps = { hasFooterSubmit: false, }; CnForm.displayName = 'CnForm';