import React, { HTMLAttributes, ReactNode, FC, useContext } from 'react'; import PanelHeaderButton from '../PanelHeaderButton/PanelHeaderButton'; import { getClassName } from '../../helpers/getClassName'; import { classNames } from '../../lib/classNames'; import { Icon24Dismiss } from '@vkontakte/icons'; import { IOS } from '../../lib/platform'; import { hasReactNode } from '../../lib/utils'; import { withPlatform } from '../../hoc/withPlatform'; import { HasPlatform } from '../../types'; import { withAdaptivity, AdaptivityProps, ViewHeight, ViewWidth } from '../../hoc/withAdaptivity'; import Subhead from '../Typography/Subhead/Subhead'; import Title from '../Typography/Title/Title'; import ModalDismissButton from '../ModalDismissButton/ModalDismissButton'; import ModalRootContext from '../ModalRoot/ModalRootContext'; export interface ModalCardProps extends HTMLAttributes, HasPlatform, AdaptivityProps { /** * Иконка. * * Может быть компонентом иконки, например, ``, или `` */ icon?: ReactNode; /** * Заголовок карточки */ header?: ReactNode; /** * Подзаголовок */ subheader?: ReactNode; /** * Кнопки-действия. * * Рекомендуется использовать `` или `` */ actions?: ReactNode; /** * Тип отображения кнопок: вертикальный или горизонтальный */ actionsLayout?: 'vertical' | 'horizontal'; /** * Будет вызван при закрытии карточки жестом */ onClose?: VoidFunction; } const ModalCard: FC = (props: ModalCardProps) => { const { icon, header, subheader, children, actions, actionsLayout, onClose, platform, className, viewWidth, viewHeight, hasMouse, ...restProps } = props; const isDesktop = viewWidth >= ViewWidth.SMALL_TABLET && (hasMouse || viewHeight >= ViewHeight.MEDIUM); const canShowCloseBtn = viewWidth >= ViewWidth.SMALL_TABLET; const canShowCloseBtnIos = platform === IOS && !canShowCloseBtn; const modalContext = useContext(ModalRootContext); return ( {hasReactNode(icon) && {icon}} {hasReactNode(header) && {header}} {hasReactNode(subheader) && {subheader}} {children} {hasReactNode(actions) && {actions} } {canShowCloseBtn && } {canShowCloseBtnIos && } ); }; ModalCard.defaultProps = { actionsLayout: 'horizontal', }; export default withAdaptivity(withPlatform(ModalCard), { viewWidth: true, viewHeight: true, hasMouse: true, });