import * as React from 'react';
import { FastButton, FastTooltip, FastIcon } from "components/ui";
import { Component } from "components/types";
import useAction from "./useAction";
import { ActionProps } from "./types";
import { isEmpty } from "utils/isType";
function Action(props: ActionProps) {
const { action, data, params = {} } = props;
const { label, desc } = action;
const {
submitting,
handleSubmit,
handleResult,
handleLink,
handleRoute,
handleFetch,
handleCancel,
handleConfirm,
} = useAction(props);
const renderDesc = () => {
return (
{(desc as Component.Business.Desc).text}
}
>
);
};
const handleClick = (actionConfig: Component.Business.Action) => {
const { type } = actionConfig;
const { onActionClick, bindActionClick } = props;
if (onActionClick) {
onActionClick(actionConfig).then(handleResult);
} else if (type === Component.Business.TriggerType.confirm) {
handleConfirm();
} else if (type === Component.Business.TriggerType.link) {
handleLink();
} else if (type === Component.Business.TriggerType.route) {
handleRoute();
} else if (type === Component.Business.TriggerType.fetch) {
handleFetch().then(handleResult);
} else if (type === Component.Business.TriggerType.cancel) {
handleCancel();
} else if (type === Component.Business.TriggerType.submit) {
if (bindActionClick) bindActionClick().then(handleSubmit);
else {
handleSubmit();
}
} else {
handleResult(data);
}
};
const createActionBtn = (actionConfig: Component.Business.Action) => {
const {
key,
type: actionType,
status,
btnSize = "middle",
btnType = "primary",
} = actionConfig;
// 控制显隐
let isShow = true;
// 控制不可点击
let isDisabled = false;
if (status) {
const {
type: statusType,
trigger,
triggerKey,
triggerValue,
} = status;
if (statusType === Component.Business.ResultType.show) {
if (trigger === Component.Business.TriggerType.contain) {
if (!triggerValue.includes(data[triggerKey])) {
isShow = false;
}
} else if (trigger === Component.Business.TriggerType.notContain) {
if (
triggerValue.includes(data[triggerKey]) ||
(data[triggerKey] === undefined &&
triggerValue.includes("undefined"))
) {
isShow = false;
}
}
} else if (statusType === Component.Business.ResultType.disabled) {
if (trigger === Component.Business.TriggerType.contain) {
if (!triggerValue.includes(data[triggerKey])) {
isDisabled = true;
}
} else if (trigger === Component.Business.TriggerType.notContain) {
if (!triggerValue.includes(data[triggerKey])) {
isDisabled = true;
}
}
}
}
if (!isShow) return null;
// 参数全部为空禁止导出
if (
actionType === Component.Business.TriggerType.export &&
!Object.values(params).some((val: any) => !isEmpty(val))
) {
isDisabled = true;
}
return (
handleClick(actionConfig)}
>
{label}
{desc ? renderDesc() : null}
);
};
return createActionBtn(action);
}
export default Action;