antd-mobile
Version:
<div align="center">
79 lines (78 loc) • 4.02 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Button = void 0;
var _tslib = require("tslib");
var _react = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _dotLoading = _interopRequireDefault(require("../dot-loading"));
var _withDefaultProps = require("../../utils/with-default-props");
var _nativeProps = require("../../utils/native-props");
var _validate = require("../../utils/validate");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
const classPrefix = `adm-button`;
const defaultProps = {
color: 'default',
fill: 'solid',
block: false,
loading: false,
loadingIcon: _react.default.createElement(_dotLoading.default, {
color: 'currentColor'
}),
type: 'button',
shape: 'default',
size: 'middle'
};
const Button = (0, _react.forwardRef)((p, ref) => {
const props = (0, _withDefaultProps.mergeProps)(defaultProps, p);
const [innerLoading, setInnerLoading] = (0, _react.useState)(false);
const nativeButtonRef = (0, _react.useRef)(null);
const loading = props.loading === 'auto' ? innerLoading : props.loading;
const disabled = props.disabled || loading;
(0, _react.useImperativeHandle)(ref, () => ({
get nativeElement() {
return nativeButtonRef.current;
}
}));
const handleClick = e => (0, _tslib.__awaiter)(void 0, void 0, void 0, function* () {
if (!props.onClick) return;
const promise = props.onClick(e);
if ((0, _validate.isPromise)(promise)) {
try {
setInnerLoading(true);
yield promise;
setInnerLoading(false);
} catch (e) {
setInnerLoading(false);
throw e;
}
}
});
return (0, _nativeProps.withNativeProps)(props, _react.default.createElement("button", {
ref: nativeButtonRef,
type: props.type,
onClick: handleClick,
className: (0, _classnames.default)(classPrefix, {
[`${classPrefix}-${props.color}`]: props.color,
[`${classPrefix}-block`]: props.block,
[`${classPrefix}-disabled`]: disabled,
[`${classPrefix}-fill-outline`]: props.fill === 'outline',
[`${classPrefix}-fill-none`]: props.fill === 'none',
[`${classPrefix}-mini`]: props.size === 'mini',
[`${classPrefix}-small`]: props.size === 'small',
[`${classPrefix}-large`]: props.size === 'large',
[`${classPrefix}-loading`]: loading
}, `${classPrefix}-shape-${props.shape}`),
disabled: disabled,
onMouseDown: props.onMouseDown,
onMouseUp: props.onMouseUp,
onTouchStart: props.onTouchStart,
onTouchEnd: props.onTouchEnd
}, loading ? _react.default.createElement("div", {
className: `${classPrefix}-loading-wrapper`
}, props.loadingIcon, props.loadingText) : _react.default.createElement("span", null, props.children)));
});
exports.Button = Button;
;