UNPKG

@nutui/nutui-react-taro

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

73 lines (72 loc) 3.13 kB
import { _ as _object_spread } from "@swc/helpers/_/_object_spread"; import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props"; import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties"; import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array"; import React, { useEffect, useState } from "react"; import classNames from "classnames"; import { View } from "@tarojs/components"; import { ComponentDefaults } from "../../utils/typings"; import { useLockScrollTaro } from "../../hooks/taro/use-lock-scoll"; import ConfigurableCSSTransition from "../../utils/taro/ConfigurableCSSTransition"; export var defaultOverlayProps = _object_spread_props(_object_spread({}, ComponentDefaults), { zIndex: 1000, duration: 300, closeOnOverlayClick: true, visible: false, lockScroll: true, onClick: function onClick() {}, afterShow: function afterShow() {}, afterClose: function afterClose() {} }); export var Overlay = function Overlay(props) { var _$_object_spread = _object_spread({}, defaultOverlayProps, props), children = _$_object_spread.children, zIndex = _$_object_spread.zIndex, duration = _$_object_spread.duration, className = _$_object_spread.className, closeOnOverlayClick = _$_object_spread.closeOnOverlayClick, visible = _$_object_spread.visible, lockScroll = _$_object_spread.lockScroll, style = _$_object_spread.style, afterShow = _$_object_spread.afterShow, afterClose = _$_object_spread.afterClose, onClick = _$_object_spread.onClick, rest = _object_without_properties(_$_object_spread, [ "children", "zIndex", "duration", "className", "closeOnOverlayClick", "visible", "lockScroll", "style", "afterShow", "afterClose", "onClick" ]); var classPrefix = 'nut-overlay'; var _useState = _sliced_to_array(useState(visible), 2), innerVisible = _useState[0], setInnerVisible = _useState[1]; var nodeRef = useLockScrollTaro(!!lockScroll && innerVisible); useEffect(function() { setInnerVisible(visible); }, [ visible ]); var classes = classNames(classPrefix, className); var styles = _object_spread({ zIndex: zIndex }, style); var handleClick = function handleClick(e) { if (closeOnOverlayClick) { onClick && onClick(e); } }; var renderOverlay = function renderOverlay() { return /*#__PURE__*/ React.createElement(View, _object_spread_props(_object_spread({ ref: nodeRef, className: classes, style: styles }, rest), { catchMove: lockScroll, onClick: handleClick }), children); }; return /*#__PURE__*/ React.createElement(ConfigurableCSSTransition, { nodeRef: nodeRef, classNames: "".concat(classPrefix, "-slide"), unmountOnExit: true, timeout: Number(duration), in: innerVisible, onEntered: afterShow, onExited: afterClose }, renderOverlay()); }; Overlay.displayName = 'NutOverlay';