UNPKG

zmp-react

Version:

Build full featured iOS & Android apps using ZMP & React

57 lines (52 loc) 1.69 kB
import _extends from "@babel/runtime/helpers/extends"; import React, { forwardRef, useRef, useImperativeHandle, useState } from 'react'; import { useIsomorphicLayoutEffect } from '../shared/use-isomorphic-layout-effect'; import { zmpevents, zmprouters, zmp } from '../shared/zmp'; var RoutableModals = /*#__PURE__*/forwardRef(function (props, ref) { var _useState = useState([]), modals = _useState[0], _setModals = _useState[1]; var elRef = useRef(null); var routerData = useRef(null); useImperativeHandle(ref, function () { return { el: elRef.current }; }); var onMount = function onMount() { routerData.current = { modals: modals, el: elRef.current, setModals: function setModals(newModals) { _setModals([].concat(newModals)); } }; zmprouters.modals = routerData.current; }; var onDestroy = function onDestroy() { if (!routerData.current) return; zmprouters.modals = null; routerData.current = null; }; useIsomorphicLayoutEffect(function () { onMount(); return onDestroy; }, []); useIsomorphicLayoutEffect(function () { if (!routerData.current || !zmp) return; zmpevents.emit('modalsRouterDidUpdate', routerData.current); }); return /*#__PURE__*/React.createElement("div", { ref: elRef, className: "zmp-modals" }, modals.map(function (_ref) { var ModalComponent = _ref.component, modalId = _ref.id, modalProps = _ref.props; return /*#__PURE__*/React.createElement(ModalComponent, _extends({ key: modalId }, modalProps)); })); }); RoutableModals.displayName = 'zmp-routable-modals'; export default RoutableModals;