/
kaws
/
ui-kit-ce
Обзор
Документация
Войти
/
kaws
/
ui-kit-ce
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
packages/table/src/components/TableCellContent.tsx
182 строки
3 KB
Denis Svyatovets
refactor: правки по тестированию
30 окт 2025, 11:29
30 окт 2025, 11:29
b487f36
Код
Авторство
О чём код?
'use client' import * as React from 'react' import { createUseStyles, clsx } from '@v-uik/theme' import { TableSizeProp, TableEventType, ReservedDataSourceProps, TableColumnKind, ColumnProps, } from '../interfaces' import { ExpandButton } from './ExpandButton' import { TreeExpandButton } from './TreeExpandButton' export const useTableCellContentStyles = createUseStyles({ bodyCellContent: { '&$sm': { padding: [10, 16], }, '&$md': { padding: [14, 16], }, '&$lg': { padding: [18, 16], }, }, sm: {}, md: {}, lg: {}, treeCellContent: { '&$sm': { paddingLeft: 4, }, '&$md': { paddingLeft: 4, }, '&$lg': { paddingLeft: 4, }, }, }) export interface TableCellContentProps<DataSource = unknown> { /** * * @inner */ cell: ColumnProps<DataSource> /** * * @inner */ row: DataSource /** * * @inner */ cellIndex: number /** * * @inner */ rowIndex: number /** * * @inner */ onChange?: (params: TableEventType<DataSource>) => void /** * * @inner */ size: TableSizeProp /** * * @inner */ indentLevel: number /** * * @inner */ hoverable?: boolean } export const TableCellContent = < DataSource extends ReservedDataSourceProps<DataSource> >({ cell, cellIndex, row, rowIndex, onChange, size, indentLevel, hoverable, }: TableCellContentProps<DataSource>): JSX.Element | null => { const classesList = useTableCellContentStyles() const { kind, dataIndex, renderCellContent, isRowExpanded } = cell const isExpandCell = kind === TableColumnKind.expand const isTreeCell = kind === TableColumnKind.tree const className = clsx(classesList.bodyCellContent, classesList[size], { [classesList.treeCellContent]: isTreeCell, }) const leadDataIndex = dataIndex as keyof DataSource if (renderCellContent) { return renderCellContent({ cell: leadDataIndex ? row[leadDataIndex] : null, cellIndex, row, rowIndex, originClassName: className, indentLevel, }) as JSX.Element } if (isExpandCell && isRowExpanded != null) { const expanded = isRowExpanded?.({ row, rowIndex }) if (expanded === null) { return null } return ( <ExpandButton expanded={expanded} hoverable={!hoverable} onClick={(event) => { event.stopPropagation() onChange?.({ type: 'expand', row, rowIndex }) }} /> ) } const text = ( <div className={className}>{leadDataIndex ? row[leadDataIndex] : null}</div> ) const rowHasChildren = !!row.children?.length if (isTreeCell) { return ( <> <div style={{ // 12 - отступ слева, 32 - ширина кнопки paddingLeft: (rowHasChildren ? 12 : 44) + indentLevel * 32, }} /> {rowHasChildren && ( <TreeExpandButton expanded={!!isRowExpanded?.({ row, rowIndex })} hoverable={!hoverable} onClick={(event) => { event.stopPropagation() onChange?.({ type: 'treeExpand', row, rowIndex }) }} /> )} {text} </> ) } return text }