antd-mobile-taro-ui
Version:
以antd-mobile为设计标准,基于taro框架的微信小程序组件库
93 lines (76 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 _components = require("@tarojs/components");
var _withDefaultProps = require("antd-mobile/es/utils/with-default-props");
var _nativeProps = require("antd-mobile/es/utils/native-props");
var _validate = require("antd-mobile/es/utils/validate");
var _dotLoading = _interopRequireDefault(require("../dot-loading"));
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: '',
shape: 'default',
size: 'middle',
onTouchStart: () => {}
};
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 (disabled) return;
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(_components.View, {
ref: nativeButtonRef,
onClick: handleClick,
className: (0, _classnames.default)(classPrefix, props.color ? `${classPrefix}-${props.color}` : null, {
[`${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}`),
onTouchStart: props.onTouchStart,
onTouchEnd: props.onTouchEnd
}, loading ? _react.default.createElement(_components.View, {
className: `${classPrefix}-loading-wrapper`
}, props.loadingIcon, props.loadingText) : props.children));
});
exports.Button = Button;