import React, { FC, HTMLAttributes, ReactNode, useContext } from 'react'; import { usePlatform } from '../../hooks/usePlatform'; import { getClassName } from '../../helpers/getClassName'; import { classNames } from '../../lib/classNames'; import FixedLayout from '../FixedLayout/FixedLayout'; import Separator from '../Separator/Separator'; import { VKCOM } from '../../lib/platform'; import { HasRef, HasRootRef } from '../../types'; import { ConfigProviderContext, WebviewType } from '../ConfigProvider/ConfigProviderContext'; import { withAdaptivity, AdaptivityProps, SizeType } from '../../hoc/withAdaptivity'; import { isPrimitiveReactNode } from '../../lib/utils'; import Text from '../Typography/Text/Text'; export interface PanelHeaderProps extends HTMLAttributes, HasRef, HasRootRef, AdaptivityProps { left?: ReactNode; right?: ReactNode; separator?: boolean; transparent?: boolean; shadow?: boolean; /** * Если `false`, то шапка будет нулевой высоты и контент панели "залезет" под неё */ visor?: boolean; /** * Если `false`, то шапка будет в потоке */ fixed?: boolean; } const PanelHeaderInTypography: FC = ({ children }: PanelHeaderProps) => { const platform = usePlatform(); return platform === VKCOM ? {children} : {children}; }; const PanelHeaderIn: FC = ({ children, left, right }) => { const { webviewType } = useContext(ConfigProviderContext); const isPrimitive = isPrimitiveReactNode(children); return ( {left} {isPrimitive ? {children} : children} {webviewType !== WebviewType.VKAPPS && right} ); }; const PanelHeader: FC = (props) => { const { className, left, children, right, separator, visor, transparent, shadow, getRef, getRootRef, sizeX, sizeY, fixed, ...restProps } = props; const platform = usePlatform(); const { webviewType } = useContext(ConfigProviderContext); const needShadow = shadow && sizeX === SizeType.REGULAR; const isFixed = platform === VKCOM ? false : fixed; return ( {isFixed ? : } {separator && visor && platform !== VKCOM && } ); }; PanelHeader.defaultProps = { separator: true, transparent: false, visor: true, fixed: true, }; export default withAdaptivity(PanelHeader, { sizeX: true, sizeY: true, });