fastlion-amis
Version:
一种MIS页面生成工具
42 lines (33 loc) • 1.08 kB
text/typescript
/**
* 后续好多地方可能都要支持 action,所以提取公共功能
*/
import { RendererProps } from '../factory';
import { ActionSchema, AjaxActionSchema } from '../renderers/Action';
import { normalizeApi, str2function } from './api';
export default function handleAction(
e: React.MouseEvent<any>,
action: ActionSchema,
props: RendererProps,
data?: any
) {
// https://reactjs.org/docs/legacy-event-pooling.html
e.persist();
const onAction = props.onAction;
let onClick: any = action.onClick;
if (typeof onClick === 'string') {
onClick = str2function(onClick, 'event', 'props');
}
const result: any = onClick && onClick(e, props);
if (e.isDefaultPrevented() || result === false || !onAction) {
return;
}
e.preventDefault();
// download 是一种 ajax 的简写
if (action.actionType === 'download') {
action.actionType = 'ajax';
const api = normalizeApi((action as AjaxActionSchema).api);
api.responseType = 'blob';
(action as AjaxActionSchema).api = api;
}
onAction(e, action, data || props.data);
}