diff --git a/src/Body/BodyRow.tsx b/src/Body/BodyRow.tsx index a1753da58..8a4b9a017 100644 --- a/src/Body/BodyRow.tsx +++ b/src/Body/BodyRow.tsx @@ -24,7 +24,9 @@ export interface BodyRowProps { childrenColumnName: string; } -function BodyRow(props: BodyRowProps) { +function BodyRow }>( + props: BodyRowProps, +) { const { className, style, diff --git a/src/Body/index.tsx b/src/Body/index.tsx index 23401d2d8..c914776ec 100644 --- a/src/Body/index.tsx +++ b/src/Body/index.tsx @@ -9,7 +9,7 @@ import ResizeContext from '../context/ResizeContext'; import MeasureCell from './MeasureCell'; export interface BodyProps { - data: RecordType[]; + data: ReadonlyArray; getRowKey: GetRowKey; measureColumnWidth: boolean; expandedKeys: Set; diff --git a/src/ColGroup.tsx b/src/ColGroup.tsx index 9630d6431..147400d60 100644 --- a/src/ColGroup.tsx +++ b/src/ColGroup.tsx @@ -3,8 +3,8 @@ import { ColumnType } from './interface'; import { INTERNAL_COL_DEFINE } from './utils/legacyUtil'; export interface ColGroupProps { - colWidths: (number | string)[]; - columns?: ColumnType[]; + colWidths: ReadonlyArray; + columns?: ReadonlyArray>; columCount?: number; } diff --git a/src/Header/FixedHeader.tsx b/src/Header/FixedHeader.tsx index 3a04172c5..551457f30 100644 --- a/src/Header/FixedHeader.tsx +++ b/src/Header/FixedHeader.tsx @@ -7,7 +7,7 @@ import ColGroup from '../ColGroup'; import { ColumnsType, ColumnType } from '../interface'; import TableContext from '../context/TableContext'; -function useColumnWidth(colWidths: number[], columCount: number) { +function useColumnWidth(colWidths: ReadonlyArray, columCount: number) { return useMemo(() => { const cloneColumns: number[] = []; for (let i = 0; i < columCount; i += 1) { @@ -24,7 +24,7 @@ function useColumnWidth(colWidths: number[], columCount: number) { export interface FixedHeaderProps extends HeaderProps { noData: boolean; - colWidths: number[]; + colWidths: ReadonlyArray; columCount: number; direction: 'ltr' | 'rtl'; fixHeader: boolean; @@ -92,7 +92,7 @@ const FixedHeader = React.forwardRef>( [combinationScrollBarSize, columns], ); - const flattenColumnsWithScrollbar = useMemo[]>( + const flattenColumnsWithScrollbar = useMemo( () => (combinationScrollBarSize ? [...flattenColumns, ScrollBarColumn] : flattenColumns), [combinationScrollBarSize, flattenColumns], ); diff --git a/src/Header/Header.tsx b/src/Header/Header.tsx index e3acc74c2..0d7f2af95 100644 --- a/src/Header/Header.tsx +++ b/src/Header/Header.tsx @@ -83,9 +83,9 @@ function parseHeaderRows( export interface HeaderProps { columns: ColumnsType; - flattenColumns: ColumnType[]; + flattenColumns: ReadonlyArray>; stickyOffsets: StickyOffsets; - onHeaderRow: GetComponentProps[]>; + onHeaderRow: GetComponentProps>>; } function Header({ diff --git a/src/Header/HeaderRow.tsx b/src/Header/HeaderRow.tsx index 36de20617..b3d855416 100644 --- a/src/Header/HeaderRow.tsx +++ b/src/Header/HeaderRow.tsx @@ -12,12 +12,12 @@ import { getCellFixedInfo } from '../utils/fixUtil'; import { getColumnsKey } from '../utils/valueUtil'; export interface RowProps { - cells: CellType[]; + cells: ReadonlyArray>; stickyOffsets: StickyOffsets; - flattenColumns: ColumnType[]; + flattenColumns: ReadonlyArray>; rowComponent: CustomizeComponent; cellComponent: CustomizeComponent; - onHeaderRow: GetComponentProps[]>; + onHeaderRow: GetComponentProps>>; index: number; } diff --git a/src/Table.tsx b/src/Table.tsx index de1a41eaa..f2d6bc4fe 100644 --- a/src/Table.tsx +++ b/src/Table.tsx @@ -106,7 +106,7 @@ export interface TableProps extends LegacyExpandableProps< className?: string; style?: React.CSSProperties; children?: React.ReactNode; - data?: RecordType[]; + data?: ReadonlyArray; columns?: ColumnsType; rowKey?: string | GetRowKey; tableLayout?: TableLayout; @@ -123,14 +123,14 @@ export interface TableProps extends LegacyExpandableProps< // Additional Part title?: PanelRender; footer?: PanelRender; - summary?: (data: RecordType[]) => React.ReactNode; + summary?: (data: ReadonlyArray) => React.ReactNode; // Customize id?: string; showHeader?: boolean; components?: TableComponents; onRow?: GetComponentProps; - onHeaderRow?: GetComponentProps[]>; + onHeaderRow?: GetComponentProps>>; emptyText?: React.ReactNode | (() => React.ReactNode); direction?: 'ltr' | 'rtl'; @@ -303,7 +303,7 @@ function Table(props: TableProps(() => { + const [innerExpandedKeys, setInnerExpandedKeys] = React.useState(() => { if (defaultExpandedRowKeys) { return defaultExpandedRowKeys; } diff --git a/src/context/BodyContext.tsx b/src/context/BodyContext.tsx index 55c693b97..e19dacddd 100644 --- a/src/context/BodyContext.tsx +++ b/src/context/BodyContext.tsx @@ -16,7 +16,7 @@ export interface BodyContextProps { expandedRowClassName: RowClassName; columns: ColumnsType; - flattenColumns: ColumnType[]; + flattenColumns: ReadonlyArray>; componentWidth: number; tableLayout: TableLayout; diff --git a/src/context/TableContext.tsx b/src/context/TableContext.tsx index f24c84425..f05fe172e 100644 --- a/src/context/TableContext.tsx +++ b/src/context/TableContext.tsx @@ -12,7 +12,7 @@ export interface TableContextProps { direction: 'ltr' | 'rtl'; - fixedInfoList: FixedInfo[]; + fixedInfoList: ReadonlyArray; isSticky: boolean; } diff --git a/src/hooks/useColumns.tsx b/src/hooks/useColumns.tsx index c1f33329a..792363ad2 100644 --- a/src/hooks/useColumns.tsx +++ b/src/hooks/useColumns.tsx @@ -60,7 +60,7 @@ function flatColumns(columns: ColumnsType): ColumnType) { let allFixLeft = true; for (let i = 0; i < flattenColumns.length; i += 1) { const col = flattenColumns[i]; @@ -136,7 +136,7 @@ function useColumns( columnWidth?: number | string; }, transformColumns: (columns: ColumnsType) => ColumnsType, -): [ColumnsType, ColumnType[]] { +): [ColumnsType, ReadonlyArray>] { const baseColumns = React.useMemo>( () => columns || convertChildrenToColumns(children), [columns, children], diff --git a/src/interface.ts b/src/interface.ts index c70ba1013..5f9de5636 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -53,7 +53,7 @@ export interface RenderedCell { children?: React.ReactNode; } -export type DataIndex = string | number | (string | number)[]; +export type DataIndex = string | number | ReadonlyArray; export type CellEllipsisType = { showTitle?: boolean } | boolean; @@ -89,17 +89,16 @@ export interface ColumnType extends ColumnSharedType { onCellClick?: (record: RecordType, e: React.MouseEvent) => void; } -export type ColumnsType = ( - | ColumnGroupType - | ColumnType -)[]; +export type ColumnsType = ReadonlyArray< + ColumnGroupType | ColumnType +>; export type GetRowKey = (record: RecordType, index?: number) => Key; // ================= Fix Column ================= export interface StickyOffsets { - left: number[]; - right: number[]; + left: ReadonlyArray; + right: ReadonlyArray; isSticky?: boolean; } @@ -118,7 +117,7 @@ type Component

= export type CustomizeComponent = Component; export type CustomizeScrollBody = ( - data: RecordType[], + data: ReadonlyArray, info: { scrollbarSize: number; ref: React.Ref<{ scrollLeft: number }>; @@ -143,7 +142,7 @@ export interface TableComponents { } export type GetComponent = ( - path: string[], + path: ReadonlyArray, defaultComponent?: CustomizeComponent, ) => CustomizeComponent; @@ -197,13 +196,13 @@ export type RenderExpandIcon = ( ) => React.ReactNode; export interface ExpandableConfig { - expandedRowKeys?: Key[]; - defaultExpandedRowKeys?: Key[]; + expandedRowKeys?: ReadonlyArray; + defaultExpandedRowKeys?: ReadonlyArray; expandedRowRender?: ExpandedRowRender; expandRowByClick?: boolean; expandIcon?: RenderExpandIcon; onExpand?: (expanded: boolean, record: RecordType) => void; - onExpandedRowsChange?: (expandedKeys: Key[]) => void; + onExpandedRowsChange?: (expandedKeys: ReadonlyArray) => void; defaultExpandAllRows?: boolean; indentSize?: number; expandIconColumnIndex?: number; @@ -214,7 +213,7 @@ export interface ExpandableConfig { } // =================== Render =================== -export type PanelRender = (data: RecordType[]) => React.ReactNode; +export type PanelRender = (data: ReadonlyArray) => React.ReactNode; // =================== Events =================== export type TriggerEventHandler = ( diff --git a/src/sugar/ColumnGroup.tsx b/src/sugar/ColumnGroup.tsx index 5bd4c1802..21c5ef6f8 100644 --- a/src/sugar/ColumnGroup.tsx +++ b/src/sugar/ColumnGroup.tsx @@ -5,7 +5,7 @@ import { ColumnType } from '../interface'; export interface ColumnGroupProps extends Omit, 'children'> { children: | React.ReactElement> - | React.ReactElement>[]; + | ReadonlyArray>>; } /* istanbul ignore next */ diff --git a/src/utils/expandUtil.tsx b/src/utils/expandUtil.tsx index 8a0112b88..c0aff27b5 100644 --- a/src/utils/expandUtil.tsx +++ b/src/utils/expandUtil.tsx @@ -32,13 +32,13 @@ export function renderExpandIcon({ } export function findAllChildrenKeys( - data: RecordType[], + data: ReadonlyArray, getRowKey: GetRowKey, childrenColumnName: string, ): Key[] { const keys: Key[] = []; - function dig(list: RecordType[]) { + function dig(list: ReadonlyArray) { (list || []).forEach((item, index) => { keys.push(getRowKey(item, index)); diff --git a/src/utils/fixUtil.ts b/src/utils/fixUtil.ts index 35afb064a..72563b3dd 100644 --- a/src/utils/fixUtil.ts +++ b/src/utils/fixUtil.ts @@ -16,7 +16,7 @@ export interface FixedInfo { export function getCellFixedInfo( colStart: number, colEnd: number, - columns: { fixed?: FixedType }[], + columns: ReadonlyArray<{ fixed?: FixedType }>, stickyOffsets: StickyOffsets, direction: 'ltr' | 'rtl', ): FixedInfo { diff --git a/src/utils/valueUtil.tsx b/src/utils/valueUtil.tsx index e4f224ec9..d291f57af 100644 --- a/src/utils/valueUtil.tsx +++ b/src/utils/valueUtil.tsx @@ -2,11 +2,11 @@ import { Key, DataIndex } from '../interface'; const INTERNAL_KEY_PREFIX = 'RC_TABLE_KEY'; -function toArray(arr: T | T[]): T[] { +function toArray(arr: T | ReadonlyArray): T[] { if (arr === undefined || arr === null) { return []; } - + // @ts-expect-error return Array.isArray(arr) ? arr : [arr]; } @@ -40,7 +40,7 @@ interface GetColumnKeyColumn { dataIndex?: DataIndex; } -export function getColumnsKey(columns: GetColumnKeyColumn[]) { +export function getColumnsKey(columns: ReadonlyArray) { const columnKeys: React.Key[] = []; const keys: Record = {};