@@ -3754,6 +3757,9 @@ Object {
+
@@ -5159,6 +5165,9 @@ Object {
+
diff --git a/packages/yforms/src/YForm/component/Card.tsx b/packages/yforms/src/YForm/component/Card.tsx
new file mode 100644
index 0000000..a69630c
--- /dev/null
+++ b/packages/yforms/src/YForm/component/Card.tsx
@@ -0,0 +1,24 @@
+import React, { forwardRef } from 'react';
+import { Card } from 'antd';
+import { CardProps } from 'antd/lib/card';
+
+import YForm from '..';
+import { YFormItemProps } from '../Items';
+
+export interface YFormCardProps extends YFormItemProps {
+ componentProps?: CardProps;
+ items?: YFormItemProps['children'];
+}
+
+export default forwardRef
((props, ref) => {
+ const itemProps = React.useContext(YForm.YFormItemContext);
+ const { items } = itemProps as YFormCardProps;
+
+ React.useImperativeHandle(ref, () => props);
+
+ return (
+
+ {items}
+
+ );
+});
diff --git a/packages/yforms/src/YForm/component/SecureButton.tsx b/packages/yforms/src/YForm/component/SecureButton.tsx
index ce20903..7c5d46c 100644
--- a/packages/yforms/src/YForm/component/SecureButton.tsx
+++ b/packages/yforms/src/YForm/component/SecureButton.tsx
@@ -3,11 +3,11 @@ import { Button } from 'antd';
import { ButtonProps } from 'antd/lib/button';
export interface YFormSecureButtonProps {
- componentProps?: ButtonProps & { onLoaded?: () => void };
+ componentProps?: ButtonProps & { onLoaded?: () => void; minBtnLoadingTime?: number };
}
const SecureButton: React.FC = (props) => {
- const { onClick, onLoaded, ...rest } = props;
+ const { onClick, onLoaded, minBtnLoadingTime = 500, ...rest } = props;
const [loading, setLoading] = useState(false);
const timeOut = useRef(null);
@@ -19,7 +19,7 @@ const SecureButton: React.FC = (props)
(end: number, begin: number, err?: any) => {
if (err) {
setLoading(false);
- } else if (end - begin > 500) {
+ } else if (end - begin > minBtnLoadingTime) {
// 如果 onClick 执行时间大于 0.5s,就立刻取消 loading
setLoading(false);
if (onLoaded) onLoaded();
@@ -28,10 +28,10 @@ const SecureButton: React.FC = (props)
timeOut.current = window.setTimeout(() => {
setLoading(false);
if (onLoaded) onLoaded();
- }, 500);
+ }, minBtnLoadingTime);
}
},
- [onLoaded],
+ [onLoaded, minBtnLoadingTime],
);
const handleClick = async (e: React.MouseEvent) => {
diff --git a/packages/yforms/src/YForm/scenes.tsx b/packages/yforms/src/YForm/scenes.tsx
index d50a549..de12cb3 100644
--- a/packages/yforms/src/YForm/scenes.tsx
+++ b/packages/yforms/src/YForm/scenes.tsx
@@ -48,7 +48,9 @@ const scenes: YFormConfig = {
if (itemProps.name && typeProps.type && typeProps.type !== 'list') {
let hasRequired = false;
forEach(rules, (item) => {
- hasRequired = 'required' in item;
+ if ('required' in item) {
+ hasRequired = true;
+ }
});
if (!hasRequired) {
_itemProps.rules = [
@@ -58,7 +60,7 @@ const scenes: YFormConfig = {
}
}
return {
- itemProps: { ..._itemProps, ...itemProps },
+ itemProps: { ...itemProps, ..._itemProps },
};
},
},