@gizwits/vantui
Version:
机智云组件库
160 lines (159 loc) • 6.56 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/defineProperty";
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
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) { _defineProperty(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; }
import { View, Text, RichText } from '@tarojs/components';
import { useState, useEffect, useCallback, useLayoutEffect } from 'react';
import VanTransition from '../transition/index';
import VanOverlay from '../overlay/index';
import VanIcon from '../icon/index';
import VanLoading from '../loading/index';
import { isObj } from '../common/validator';
import { on, off, trigger } from './events';
import toast from './toast';
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
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 isObj(message) ? message : {
message: message
};
}
export function Toast(props) {
var _useState = useState({
show: false,
duration: 2000,
mask: false,
forbidClick: false,
type: 'text',
position: 'middle',
message: '',
loadingType: 'circular',
selector: '#van-toast'
}),
_useState2 = _slicedToArray(_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 = _objectWithoutProperties(props, _excluded);
var _id = props.id || defaultId;
useLayoutEffect(function () {
setState(function (state) {
return _objectSpread({}, state);
});
}, [props]);
var noop = function noop() {};
var clear = 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.clear();
setState(function (state) {
return _objectSpread(_objectSpread({}, state), options);
});
clearTimeout(timer);
if (options.duration != null && options.duration > 0) {
timer = setTimeout(function () {
trigger('toast_clear', toastOptions);
}, options.duration);
}
}
};
var tClearListener = useCallback(function (toastOptions) {
clear(toastOptions);
}, []);
var tSetDftOptsListener = useCallback(function (options) {
currentOptions = Object.assign(currentOptions, options);
}, []);
var tResetDftOptsListener = useCallback(function () {
currentOptions = Object.assign({}, defaultOptions);
}, []);
useEffect(function () {
on('toast_show', tShowListener);
on('toast_clear', tClearListener);
on('toast_setDefaultOptions', tSetDftOptsListener);
on('toast_resetDefaultOptions', tResetDftOptsListener);
return function () {
off('toast_show', tShowListener);
off('toast_clear', tClearListener);
off('toast_setDefaultOptions', tSetDftOptsListener);
off('toast_resetDefaultOptions', tResetDftOptsListener);
};
/* eslint-disable-next-line */
}, []);
return /*#__PURE__*/_jsxs(View, {
children: [(state.mask || state.forbidClick) && /*#__PURE__*/_jsx(VanOverlay, {
show: state.show,
zIndex: zIndex,
style: state.mask ? '' : 'background-color: transparent;'
}), /*#__PURE__*/_jsx(VanTransition, {
show: state.show,
style: zIndex ? {
zIndex: zIndex
} : {},
className: "van-toast__container",
children: /*#__PURE__*/_jsxs(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__*/_jsx(Text, {
children: state.message
}) : state.type === 'html' ? /*#__PURE__*/_jsx(RichText, {
nodes: state.message
}) : /*#__PURE__*/_jsxs(View, {
className: "van-toast__box",
children: [state.type === 'loading' ? /*#__PURE__*/_jsx(VanLoading, {
color: "white",
type: state.loadingType,
className: "van-toast__loading"
}) : /*#__PURE__*/_jsx(VanIcon, {
className: "van-toast__icon",
name: state.type
}), state.message && /*#__PURE__*/_jsx(Text, {
className: "van-toast__text",
children: state.message
})]
}), children]
}))
})]
});
}
Toast.show = toast;
Toast.loading = toast.loading;
Toast.success = toast.success;
Toast.fail = toast.fail;
Toast.clear = toast.clear;
Toast.setDefaultOptions = toast.setDefaultOptions;
Toast.resetDefaultOptions = toast.resetDefaultOptions;
export default Toast;