import { type ReactNode, type MouseEventHandler } from 'react'; export interface TRow { id: string; } export type TDataTableManagerColumnProps = { /** * The unique key of the column that is used to identify your data type. * You can use this value to determine which value from a row item should be rendered. *
* For example, if the data is a list of users, where each user has a `firstName` property, * the column key should be `firstName`, which renders the correct value by default. * The key can also be some custom or computed value, in which case you need to provide * an explicit mapping of the value by implementing either the `itemRendered` function or * the column-specific `renderItem` function. */ key: string; /** * The label of the column that will be shown on the column header. */ label: ReactNode; /** * Sets a width for this column. Accepts the same values as the ones specified for * individual [grid-template-columns](https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns). *
* For example, using `minmax` pairs (e.g. `minmax(200px, 400px)`), a combinations of * fraction values (`1fr`/`2fr`/etc), or fixed values such as `200px`. * By default, the column grows according to the content and respecting the total table available width. */ width?: string; /** * Use this to override the table's own `horizontalCellAlignment` prop for this specific column. */ align?: 'left' | 'center' | 'right'; /** * A callback function, called when the header cell is clicked. */ onClick?: (event: MouseEventHandler) => void; /** * A callback function to render the content of cells under this column, overriding * the default `itemRenderer` prop of the table. */ renderItem?: (row: Row, isRowCollapsed: boolean) => ReactNode; /** * Use this prop to place an `Icon` or `IconButton` on the left of the column label. * It is advised to place these types of components through this prop instead of `label`, * in order to properly position and align the elements. * This is particularly useful for medium-sized icons which require more vertical space than the typography. */ headerIcon?: ReactNode; /** * Set this to `true` to allow text content of this cell to be truncated with an ellipsis, * instead of breaking into multiple lines. *
* NOTE: when using this option, it is recommended to specify a `width` for the column, because * if the table doesn't have enough space for all columns, it will start clipping the columns * with _truncated_ content, and if no `width` is set (or the value is set `auto` -- the default) * it can shrink until the column disappears completely. * By enforcing a minimum width for these columns, the table will respect them and grow horizontally, * adding scrollbars if needed. */ isTruncated?: boolean; /** * Set this to `true` to show a sorting button, which calls `onSortChange` upon being clicked. * You should enable this flag for every column you want to be able to sort. * When at least one column is sortable, the table props `sortBy`, `sortDirection` and `onSortChange` should be provided. */ isSortable?: boolean; /** * Set this to `true` to prevent this column from being manually resized by dragging * the edge of the header with a mouse. */ disableResizing?: boolean; /** * Set this to `true` to prevent click event propagation for this cell. * You might want this if you need the column to have its own call-to-action or input while * the row also has a defined `onRowClick`. */ shouldIgnoreRowClick?: boolean; };