iTwin / iTwinUI

A design system for building beautiful and well-working web interfaces.
https://itwin.github.io/iTwinUI/
MIT License
92 stars 35 forks source link

only clamp `DefaultCell` for string children #1968

Closed mayank99 closed 1 month ago

mayank99 commented 1 month ago

Changes

This is a follow-up to #1863. In addition to checking for cellProps.value, we now also check the original columns prop. If a custom Cell is passed, we bail on setting the default clamp value.

Fixes #1965

Note: This is technically a user error, as they are misusing the Cell prop (meant for small transformations) to add custom cell content, when they should instead be using cellRenderer+DefaultCell. But it is a regression nontheless, and we can't really blame our users because our current (nonexistent) documentation leaves a lot to be desired.

Testing

Tested by recreating the linked issue in vite playground.

Code ```tsx import * as React from 'react'; import { IconButton, Table, Text } from '@itwin/itwinui-react'; import { SvgMore, SvgPlaceholder } from '@itwin/itwinui-icons-react'; const lorem100 = 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Eveniet sequi beatae sunt illo rerum, quo sint doloribus quia inventore illum, dolorum pariatur temporibus explicabo dicta. Hic corrupti ipsum accusamus temporibus illo sint voluptate assumenda, ipsa ratione iusto dicta, a adipisci aliquam sapiente recusandae voluptas! Corporis culpa possimus expedita fugit non magnam sed sapiente vitae soluta quod, neque rem dignissimos voluptate eaque vel cum rerum? Magni magnam nobis accusamus possimus, eius necessitatibus iste fuga molestias omnis pariatur quod assumenda iusto sequi quasi in quibusdam cumque illum vitae distinctio corrupti incidunt explicabo minus! Vitae ratione eum tenetur amet id at, ipsa officiis!'; export default function MyTable(): JSX.Element { const columns = React.useMemo( () => [ { id: 'product', Header: 'Product', accessor: 'product', Cell: (props) => { return ( <> {props.value} ); }, }, { id: 'price', Header: 'Price', accessor: 'price', }, ], [], ); const generateItem = React.useCallback((index, parentRow = '', depth = 0) => { const keyValue = parentRow ? `${parentRow}.${index + 1}` : `${index + 1}`; return { product: `Product ${keyValue}`, price: lorem100, inStock: index % 2 == 0, }; }, []); const data = React.useMemo( () => Array(10) .fill(null) .map((_, index) => generateItem(index)), [generateItem], ); const rowProps = React.useCallback((row) => { return { status: row.original.status, }; }, []); return ( ); } ```
Before After
image image

Docs

Added changeset.