UNPKG

linkmore-design

Version:

🌈 πŸš€lmη»„δ»ΆεΊ“γ€‚πŸš€

106 lines (105 loc) β€’ 2.98 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _useState = _interopRequireDefault(require("rc-util/lib/hooks/useState")); var React = _interopRequireWildcard(require("react")); var _button = _interopRequireDefault(require("../button")); var _button2 = require("../button/button"); function isThenable(thing) { return !!(thing && !!thing.then); } const ActionButton = props => { const clickedRef = React.useRef(false); const ref = React.useRef(null); const [loading, setLoading] = (0, _useState.default)(false); const { close } = props; const onInternalClose = (...args) => { close?.(...args); }; React.useEffect(() => { let timeoutId = null; if (props.autoFocus) { timeoutId = setTimeout(() => { ref.current?.focus(); }); } return () => { if (timeoutId) { clearTimeout(timeoutId); } }; }, []); const handlePromiseOnOk = returnValueOfOnOk => { if (!isThenable(returnValueOfOnOk)) { return; } setLoading(true); returnValueOfOnOk.then((...args) => { setLoading(false, true); onInternalClose(...args); clickedRef.current = false; }, e => { // Emit error when catch promise reject // eslint-disable-next-line no-console console.error(e); // See: https://github.com/ant-design/ant-design/issues/6183 setLoading(false, true); clickedRef.current = false; }); }; const onClick = e => { const { actionFn } = props; if (clickedRef.current) { return; } clickedRef.current = true; if (!actionFn) { onInternalClose(); return; } let returnValueOfOnOk; if (props.emitEvent) { returnValueOfOnOk = actionFn(e); if (props.quitOnNullishReturnValue && !isThenable(returnValueOfOnOk)) { clickedRef.current = false; onInternalClose(e); return; } } else if (actionFn.length) { returnValueOfOnOk = actionFn(close); // https://github.com/ant-design/ant-design/issues/23358 clickedRef.current = false; } else { returnValueOfOnOk = actionFn(); if (!returnValueOfOnOk) { onInternalClose(); return; } } handlePromiseOnOk(returnValueOfOnOk); }; const { type, children, prefixCls, buttonProps } = props; return /*#__PURE__*/React.createElement(_button.default, (0, _extends2.default)({}, (0, _button2.convertLegacyProps)(type), { onClick: onClick, loading: loading, prefixCls: prefixCls }, buttonProps, { ref: ref }), children); }; var _default = ActionButton; exports.default = _default;