UNPKG

@schema-render/form-render-react

Version:

Out-of-the-box form rendering library based on Core and Antd.

75 lines (74 loc) 2.88 kB
import { useMemoizedFn, utils } from "@schema-render/core-react"; import { useState } from "react"; import { ACTIONS, ACTIONS_DEFAULT_LOADING_STATE } from "../constants"; /** * 操作行为按钮事件 */ export default function useActions({ props, coreRef }) { const [actionsLoading, setActionsLoading] = useState(ACTIONS_DEFAULT_LOADING_STATE); // 事件处理器通用函数 const handlerWrapper = useMemoizedFn(async (actionName, handler)=>{ setActionsLoading((prev)=>({ ...prev, [actionName]: true })); await handler().catch((err)=>{ utils.logger.warn(err); }); setActionsLoading((prev)=>({ ...prev, [actionName]: false })); }); // 提交事件处理 const handleSubmit = useMemoizedFn(()=>{ handlerWrapper(ACTIONS.submit, async ()=>{ var _props_onSubmit; if (!coreRef.current) { return; } // 触发 onSubmit 事件前是否执行表单校验 if (props.validateFormOnSubmit) { const res = await coreRef.current.validate(); // 表单项存在错误或警告,不执行提交事件 if (res.hasError || res.hasWarning) { return; } } // 触发提交事件 await ((_props_onSubmit = props.onSubmit) === null || _props_onSubmit === void 0 ? void 0 : _props_onSubmit.call(props, coreRef.current.getValue())); }); }); // Form onSubmit 事件提交处理 const handleFormSubmit = useMemoizedFn((event)=>{ event.preventDefault(); event.stopPropagation(); handleSubmit(); }); // 重置处理 const handleReset = useMemoizedFn(()=>{ handlerWrapper(ACTIONS.reset, async ()=>{ var _props_onBeforeReset, _props_onReset; if (!coreRef.current) { return; } // 触发重置前置事件 const res = await ((_props_onBeforeReset = props.onBeforeReset) === null || _props_onBeforeReset === void 0 ? void 0 : _props_onBeforeReset.call(props, coreRef.current.getValue())); const nextValue = { ...res }; // 重置数据,可填入重置后数据 coreRef.current.setValue(nextValue); // 重置错误提示 coreRef.current.resetError(); // 触发重置事件 await ((_props_onReset = props.onReset) === null || _props_onReset === void 0 ? void 0 : _props_onReset.call(props, nextValue)); }); }); return { handleFormSubmit, handleSubmit, handleReset, actionsLoading, isLoading: actionsLoading.submit || actionsLoading.reset }; }