import React, { forwardRef } from "react"; import { cl } from "../utils/helpers"; import Body from "./Body"; import ColumnHeader from "./ColumnHeader"; import DataCell from "./DataCell"; import ExpandableRow from "./ExpandableRow"; import Header from "./Header"; import HeaderCell from "./HeaderCell"; import Row from "./Row"; import { TableContext } from "./context"; import { SortState } from "./types"; export interface TableProps extends React.TableHTMLAttributes { /** * Changes padding around Cells * @default "medium" */ size?: "large" | "medium" | "small"; /** * Zebra striped table * @default false */ zebraStripes?: boolean; /** * Makes the header sticky * @default false */ stickyHeader?: boolean; /** * Sort state */ sort?: SortState; /** * Callback whens sort state changes */ onSortChange?: (sortKey: string) => void; } export interface TableType extends React.ForwardRefExoticComponent< TableProps & React.RefAttributes > { Header: typeof Header; Body: typeof Body; Row: typeof Row; DataCell: typeof DataCell; HeaderCell: typeof HeaderCell; ColumnHeader: typeof ColumnHeader; ExpandableRow: typeof ExpandableRow; } /** * A component that displays a table with headers and rows. * * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/table) * @see 🏷️ {@link TableProps} * * @example * ```jsx * * * * Navn * Fødselsnr. * Start * * * * {data.map(({ name, fnr, start }, i) => { * return ( * * {name} * {fnr} * * {format(new Date(start), "dd.MM.yyyy")} * * * ); * })} * *
* ``` */ export const Table = forwardRef( ( { className, zebraStripes = false, size = "medium", onSortChange, sort, stickyHeader = false, ...rest }, ref, ) => { return ( ); }, ) as TableType; Table.Header = Header; Table.Body = Body; Table.Row = Row; Table.ColumnHeader = ColumnHeader; Table.HeaderCell = HeaderCell; Table.DataCell = DataCell; Table.ExpandableRow = ExpandableRow; export default Table;