vantui-edit
Version:
一套适用于Taro3及React的vantui组件库
200 lines (165 loc) • 7.5 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Toast = Toast;
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _components = require("@tarojs/components");
var _react = require("react");
var _index = _interopRequireDefault(require("../transition/index"));
var _index2 = _interopRequireDefault(require("../overlay/index"));
var _index3 = _interopRequireDefault(require("../icon/index"));
var _index4 = _interopRequireDefault(require("../loading/index"));
var _validator = require("../common/validator");
var _events = require("./events");
var _toast = _interopRequireDefault(require("./toast"));
var _jsxRuntime = require("react/jsx-runtime");
var _excluded = ["style", "className", "children", "zIndex"];
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var defaultId = 'van-toast';
var defaultOptions = {
show: true,
duration: 2000,
mask: false,
forbidClick: false,
type: 'text',
position: 'middle',
message: '',
loadingType: 'circular',
selector: '#van-toast',
id: defaultId
}; // let queue: any = []
var currentOptions = Object.assign({}, defaultOptions);
var timer = null;
function parseOptions(message) {
return (0, _validator.isObj)(message) ? message : {
message: message
};
}
function Toast(props) {
var _useState = (0, _react.useState)({
show: false,
duration: 2000,
mask: false,
forbidClick: false,
type: 'text',
position: 'middle',
message: '',
loadingType: 'circular',
selector: '#van-toast'
}),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
state = _useState2[0],
setState = _useState2[1];
/* eslint-disable-next-line */
var style = props.style,
className = props.className,
children = props.children,
zIndex = props.zIndex,
others = (0, _objectWithoutProperties2.default)(props, _excluded);
var _id = props.id || defaultId;
(0, _react.useLayoutEffect)(function () {
setState(function (state) {
return _objectSpread({}, state);
});
}, [props]);
var noop = function noop() {};
var clear = (0, _react.useCallback)(function (toastOptions) {
var _toastOptions$onClose;
setState(function (state) {
return _objectSpread(_objectSpread({}, state), {}, {
show: false
});
});
toastOptions === null || toastOptions === void 0 ? void 0 : (_toastOptions$onClose = toastOptions.onClose) === null || _toastOptions$onClose === void 0 ? void 0 : _toastOptions$onClose.call(toastOptions);
}, []);
var tShowListener = function tShowListener(toastOptions) {
var options = Object.assign(Object.assign({}, currentOptions), parseOptions(toastOptions));
if (options.selector === '#van-toast' || options.selector.replace('#', '') === _id) {
_toast.default.clear();
setState(function (state) {
return _objectSpread(_objectSpread({}, state), options);
});
clearTimeout(timer);
if (options.duration != null && options.duration > 0) {
timer = setTimeout(function () {
(0, _events.trigger)('toast_clear', toastOptions);
}, options.duration);
}
}
};
var tClearListener = (0, _react.useCallback)(function (toastOptions) {
clear(toastOptions);
}, []);
var tSetDftOptsListener = (0, _react.useCallback)(function (options) {
currentOptions = Object.assign(currentOptions, options);
}, []);
var tResetDftOptsListener = (0, _react.useCallback)(function () {
currentOptions = Object.assign({}, defaultOptions);
}, []);
(0, _react.useEffect)(function () {
(0, _events.on)('toast_show', tShowListener);
(0, _events.on)('toast_clear', tClearListener);
(0, _events.on)('toast_setDefaultOptions', tSetDftOptsListener);
(0, _events.on)('toast_resetDefaultOptions', tResetDftOptsListener);
return function () {
(0, _events.off)('toast_show', tShowListener);
(0, _events.off)('toast_clear', tClearListener);
(0, _events.off)('toast_setDefaultOptions', tSetDftOptsListener);
(0, _events.off)('toast_resetDefaultOptions', tResetDftOptsListener);
};
/* eslint-disable-next-line */
}, []);
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.View, {
children: [(state.mask || state.forbidClick) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.default, {
show: state.show,
zIndex: zIndex,
style: state.mask ? '' : 'background-color: transparent;'
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.default, {
show: state.show,
style: zIndex ? {
zIndex: zIndex
} : {},
className: "van-toast__container",
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.View, _objectSpread(_objectSpread({
id: "van-toast",
className: 'van-toast van-toast--' + (state.type === 'text' || state.type === 'html' ? 'text' : 'icon') + " van-toast--".concat(state.position, " ").concat(className),
style: style,
onTouchMove: noop
}, others), {}, {
children: [state.type === 'text' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Text, {
children: state.message
}) : state.type === 'html' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.RichText, {
nodes: state.message
}) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_components.View, {
className: "van-toast__box",
children: [state.type === 'loading' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_index4.default, {
color: "white",
type: state.loadingType,
className: "van-toast__loading"
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_index3.default, {
className: "van-toast__icon",
name: state.type
}), state.message && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Text, {
className: "van-toast__text",
children: state.message
})]
}), children]
}))
})]
});
}
Toast.show = _toast.default;
Toast.loading = _toast.default.loading;
Toast.success = _toast.default.success;
Toast.fail = _toast.default.fail;
Toast.clear = _toast.default.clear;
Toast.setDefaultOptions = _toast.default.setDefaultOptions;
Toast.resetDefaultOptions = _toast.default.resetDefaultOptions;
var _default = Toast;
exports.default = _default;