// Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import React, { useState, ReactElement, ReactNode } from 'react'; import classNames from 'classnames'; import { noop } from 'lodash'; import { LocalizerType } from '../types/Util'; import { ModalHost } from './ModalHost'; import { Theme } from '../util/theme'; import { getClassNamesFor } from '../util/getClassNamesFor'; import { useHasWrapped } from '../util/hooks'; type PropsType = { children: ReactNode; hasXButton?: boolean; i18n: LocalizerType; moduleClassName?: string; noMouseClose?: boolean; onClose?: () => void; title?: ReactNode; theme?: Theme; }; const BASE_CLASS_NAME = 'module-Modal'; export function Modal({ children, hasXButton, i18n, moduleClassName, noMouseClose, onClose = noop, title, theme, }: Readonly): ReactElement { const [scrolled, setScrolled] = useState(false); const hasHeader = Boolean(hasXButton || title); const getClassName = getClassNamesFor(BASE_CLASS_NAME, moduleClassName); return (
{hasHeader && (
{hasXButton && (
)}
{ setScrolled((event.target as HTMLDivElement).scrollTop > 2); }} > {children}
); } Modal.ButtonFooter = function ButtonFooter({ children, moduleClassName, }: Readonly<{ children: ReactNode; moduleClassName?: string; }>): ReactElement { const [ref, hasWrapped] = useHasWrapped(); const className = getClassNamesFor( BASE_CLASS_NAME, moduleClassName )('__button-footer'); return (
{children}
); };