UNPKG

@gizwits/vantui

Version:

机智云组件库

160 lines (159 loc) 6.56 kB
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;