'use client'; import * as React from 'react'; import { classNames, hasReactNode } from '@vkontakte/vkjs'; import { useAdaptivity } from '../../hooks/useAdaptivity'; import { usePlatform } from '../../hooks/usePlatform'; import type { HasComponent } from '../../types'; import { Tappable, type TappableOmitProps } from '../Tappable/Tappable'; import { Footnote } from '../Typography/Footnote/Footnote'; import { Headline } from '../Typography/Headline/Headline'; import { Subhead } from '../Typography/Subhead/Subhead'; import { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden'; import { Chevron } from './Chevron/Chevron'; import styles from './SimpleCell.module.css'; const sizeYClassNames = { none: styles.sizeYNone, compact: styles.sizeYCompact, }; export interface SimpleCellOwnProps extends HasComponent { /** * Иконка 28 или ``. */ before?: React.ReactNode; /** * Иконка 12 или ``. Добавится слева от текста `children`. */ badgeBeforeTitle?: React.ReactNode; /** * Иконка 12 или ``. Добавится справа от текста `children`. */ badgeAfterTitle?: React.ReactNode; /** * Иконка 12. Добавится слева от текста `subtitle`. */ badgeBeforeSubtitle?: React.ReactNode; /** * Иконка 12. Добавится справа от текста `subtitle`. */ badgeAfterSubtitle?: React.ReactNode; /** * Контейнер для текста справа от `children`. */ indicator?: React.ReactNode; /** * Дополнительная строка текста над `children`. */ overTitle?: React.ReactNode; /** * Дополнительная строка текста под `children`. */ subtitle?: React.ReactNode; /** * Дополнительная строка текста под `children` и `subtitle`. */ extraSubtitle?: React.ReactNode; /** * Иконка 24|28 или ``. Располагается справа от `indicator`. */ after?: React.ReactNode; /** * Блокировка взаимодействия с компонентом. */ disabled?: boolean; /** * Управляет видимостью иконки шеврона `›`. * * - `auto` - добавляет шеврон справа только для платформы `ios`; * - `always` - всегда показывает шеврон. */ chevron?: 'auto' | 'always'; /** * Размер chevron. */ chevronSize?: 's' | 'm'; /** * Включает многострочный режим для отображения текста. */ multiline?: boolean; } export interface SimpleCellProps extends SimpleCellOwnProps, TappableOmitProps {} /** * @see https://vkui.io/components/simple-cell */ export const SimpleCell = ({ badgeBeforeTitle, badgeAfterTitle, badgeBeforeSubtitle, badgeAfterSubtitle, before, indicator, children, after, chevron, multiline, overTitle, subtitle, extraSubtitle, chevronSize = 'm', ...restProps }: SimpleCellProps): React.ReactNode => { const platform = usePlatform(); const hasChevron = chevron === 'always' || (chevron === 'auto' && platform === 'ios'); const hasAfter = hasReactNode(after) || hasChevron; const { sizeY = 'none' } = useAdaptivity(); return (
{before}
{overTitle && ( {overTitle}   )}
{badgeBeforeTitle && {badgeBeforeTitle}} {children}   {hasReactNode(badgeAfterTitle) && {badgeAfterTitle}}
{subtitle && (
{badgeBeforeSubtitle && {badgeBeforeSubtitle}} {subtitle}   {badgeAfterSubtitle && {badgeAfterSubtitle}}
)} {extraSubtitle && ( {extraSubtitle}   )}
{hasReactNode(indicator) && ( {indicator} )} {hasAfter && (
{after} {hasChevron && }
)}
); };