'use client'; /* eslint-disable jsdoc/require-jsdoc */ import { Icon20Cancel } from '@vkontakte/icons'; import { classNames, hasReactNode, noop } from '@vkontakte/vkjs'; import { BLOCK_SHEET_BEHAVIOR_DATA_ATTRIBUTE } from '../../lib/sheet'; import { type HasRef, type HTMLAttributesWithRootRef } from '../../types'; import { ModalOutsideButton } from '../ModalOutsideButton/ModalOutsideButton'; import { ModalOutsideButtons } from '../ModalOutsideButtons/ModalOutsideButtons'; import { ModalPageContent } from '../ModalPageContent/ModalPageContent'; import { RootComponent } from '../RootComponent/RootComponent'; import { type ModalPageInternalProps } from './ModalPageInternal'; import styles from './ModalPage.module.css'; export interface ModalPageBaseProps extends Omit, 'title'>, HasRef, Pick< ModalPageInternalProps, | 'disableContentPanningGesture' | 'header' | 'children' | 'footer' | 'outsideButtons' | 'modalContentTestId' | 'modalDismissButtonTestId' | 'modalDismissButtonLabel' | 'hideCloseButton' | 'onClose' > { isDesktop?: boolean; closable?: boolean; } export const ModalPageBase = ({ isDesktop, getRef, disableContentPanningGesture, header, children, footer, outsideButtons, modalContentTestId, modalDismissButtonTestId, modalDismissButtonLabel, hideCloseButton, closable, onClose = noop, ...restProps }: ModalPageBaseProps) => { const disableContentPanningGestureProp = disableContentPanningGesture ? BLOCK_SHEET_BEHAVIOR_DATA_ATTRIBUTE : undefined; const closeButton = hideCloseButton || !isDesktop ? null : ( ); return (
{hasReactNode(header) && header} {children} {hasReactNode(footer) && footer}
{isDesktop && (closeButton || outsideButtons) && ( {closeButton} {outsideButtons} )}
); };