@cainiaofe/cn-ui-m
Version:
61 lines (60 loc) • 3.6 kB
JavaScript
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';