import React, { ElementType, FC, HTMLAttributes, ReactNode } from 'react'; import { classNames } from '../../lib/classNames'; import { usePlatform } from '../../hooks/usePlatform'; import { getClassName } from '../../helpers/getClassName'; import Text from '../Typography/Text/Text'; import Tappable from '../../components/Tappable/Tappable'; import { hasReactNode } from '../../lib/utils'; export interface MiniInfoCellProps extends HTMLAttributes { /** * Иконка слева.
* Рекомендуется использовать иконки размера 20. */ before: ReactNode; /** * Содержимое справа.
* `` или `` */ after?: ReactNode; /** * Тип ячейки: * * - `base` – базовая ячейка с серой иконкой и серым текстом.
* В компонент можно передать `Link`, чтобы визуально сделать часть текста ссылкой. * - `add` – тип ячейки, который показывает, что взаимодействие с ней должно вызывать действие добавления чего-то. * - `more` – взаимодействие с такой ячейкой должно открывать какую-то подробную информацию. */ mode?: 'base' | 'add' | 'more'; /** * Тип отображения текста: * * - `nowrap` – в одну строку, текст не переносится и обрезается. * - `short` – максимально отображается 3 строки, остальное обрезается. * - `full` – текст отображается полностью. */ textWrap?: 'nowrap' | 'short' | 'full'; /** * Стиль текста: * * - `primary` – используйте этот стиль, если хотите выделить информацию в общем списке.
Пример использования: подробная информация на странице сообщества * - `secondary` – стиль по-умолчанию. */ textLevel?: 'primary' | 'secondary'; } export const MiniInfoCell: FC = (props) => { const platform = usePlatform(); const { before, after, mode, textWrap, textLevel, children, className, ...restProps } = props; const Component: ElementType = restProps.onClick ? Tappable : 'div'; return (
{before}
{children} {hasReactNode(after) &&
{after}
}
); }; MiniInfoCell.defaultProps = { mode: 'base', textWrap: 'nowrap', textLevel: 'secondary', };