UNPKG

@carbon/react

Version:

React components for the Carbon Design System

47 lines (41 loc) 1.69 kB
/** * Copyright IBM Corp. 2016, 2023 * * This source code is licensed under the Apache-2.0 license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; var React = require('react'); var usePresenceContext = require('../../internal/usePresenceContext.js'); var useComposedModalState = require('./useComposedModalState.js'); const ComposedModalPresence = ({ open, _presenceId: presenceId, _autoEnablePresence: autoEnablePresence = true, children }) => { // Since the modal could be used without an onClose callback, we need to be aware of the internal isOpen state const modalState = useComposedModalState.useComposedModalState(open); const [isOpen] = modalState; const [isPresent, context] = usePresenceContext.usePresenceContext(isOpen, presenceId); const presenceContextValue = React.useMemo(() => ({ modalState, autoEnablePresence, ...context }), [modalState, autoEnablePresence, context]); if (!isPresent) return null; return /*#__PURE__*/React.createElement(ComposedModalPresenceContext, { value: presenceContextValue }, children); }; const ComposedModalPresenceContext = /*#__PURE__*/React.createContext(undefined); /** * Handles occurrences where only a single composed modal must consume a context. */ const useExclusiveComposedModalPresenceContext = id => { const ctx = React.useContext(ComposedModalPresenceContext); return ctx?.isPresenceExclusive(id) ? ctx : undefined; }; exports.ComposedModalPresence = ComposedModalPresence; exports.ComposedModalPresenceContext = ComposedModalPresenceContext; exports.useExclusiveComposedModalPresenceContext = useExclusiveComposedModalPresenceContext;