@salt-ds/data-grid 1.0.3 → 1.0.4-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-cjs/packages/grid/src/BaseCell.css.js +1 -1
- package/dist-cjs/packages/grid/src/BaseCell.js +35 -3
- package/dist-cjs/packages/grid/src/BaseCell.js.map +1 -1
- package/dist-cjs/packages/grid/src/ColumnSortContext.js +20 -0
- package/dist-cjs/packages/grid/src/ColumnSortContext.js.map +1 -0
- package/dist-cjs/packages/grid/src/Grid.js +211 -128
- package/dist-cjs/packages/grid/src/Grid.js.map +1 -1
- package/dist-cjs/packages/grid/src/GridColumn.js +1 -1
- package/dist-cjs/packages/grid/src/GridColumn.js.map +1 -1
- package/dist-cjs/packages/grid/src/HeaderCell.css.js +1 -1
- package/dist-cjs/packages/grid/src/HeaderCell.js +66 -2
- package/dist-cjs/packages/grid/src/HeaderCell.js.map +1 -1
- package/dist-cjs/packages/grid/src/NumericColumn.js +12 -0
- package/dist-cjs/packages/grid/src/NumericColumn.js.map +1 -1
- package/dist-cjs/packages/grid/src/RowSelectionCheckboxCellValue.js +2 -2
- package/dist-cjs/packages/grid/src/RowSelectionCheckboxCellValue.js.map +1 -1
- package/dist-cjs/packages/grid/src/RowSelectionCheckboxColumn.js +14 -7
- package/dist-cjs/packages/grid/src/RowSelectionCheckboxColumn.js.map +1 -1
- package/dist-cjs/packages/grid/src/RowSelectionCheckboxHeaderCellValue.js +2 -2
- package/dist-cjs/packages/grid/src/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
- package/dist-cjs/packages/grid/src/RowSelectionRadioCellValue.js +2 -2
- package/dist-cjs/packages/grid/src/RowSelectionRadioCellValue.js.map +1 -1
- package/dist-cjs/packages/grid/src/RowSelectionRadioColumn.js +11 -7
- package/dist-cjs/packages/grid/src/RowSelectionRadioColumn.js.map +1 -1
- package/dist-cjs/packages/grid/src/RowSelectionRadioHeaderCell.js +2 -2
- package/dist-cjs/packages/grid/src/RowSelectionRadioHeaderCell.js.map +1 -1
- package/dist-cjs/packages/grid/src/RowValidationStatus.js +13 -0
- package/dist-cjs/packages/grid/src/RowValidationStatus.js.map +1 -0
- package/dist-cjs/packages/grid/src/TextCellEditor.js +12 -0
- package/dist-cjs/packages/grid/src/TextCellEditor.js.map +1 -1
- package/dist-cjs/packages/grid/src/index.js +1 -0
- package/dist-cjs/packages/grid/src/index.js.map +1 -1
- package/dist-cjs/packages/grid/src/internal/Cell.css.js +1 -1
- package/dist-cjs/packages/grid/src/internal/CellStatusIcons.js +46 -0
- package/dist-cjs/packages/grid/src/internal/CellStatusIcons.js.map +1 -0
- package/dist-cjs/packages/grid/src/internal/LeftPart.js +4 -2
- package/dist-cjs/packages/grid/src/internal/LeftPart.js.map +1 -1
- package/dist-cjs/packages/grid/src/internal/MiddlePart.js +4 -2
- package/dist-cjs/packages/grid/src/internal/MiddlePart.js.map +1 -1
- package/dist-cjs/packages/grid/src/internal/RightPart.js +4 -2
- package/dist-cjs/packages/grid/src/internal/RightPart.js.map +1 -1
- package/dist-cjs/packages/grid/src/internal/TableBody.js +11 -4
- package/dist-cjs/packages/grid/src/internal/TableBody.js.map +1 -1
- package/dist-cjs/packages/grid/src/internal/TableRow.css.js +1 -1
- package/dist-cjs/packages/grid/src/internal/TableRow.js +33 -12
- package/dist-cjs/packages/grid/src/internal/TableRow.js.map +1 -1
- package/dist-es/packages/grid/src/BaseCell.css.js +1 -1
- package/dist-es/packages/grid/src/BaseCell.js +35 -3
- package/dist-es/packages/grid/src/BaseCell.js.map +1 -1
- package/dist-es/packages/grid/src/ColumnSortContext.js +15 -0
- package/dist-es/packages/grid/src/ColumnSortContext.js.map +1 -0
- package/dist-es/packages/grid/src/Grid.js +211 -129
- package/dist-es/packages/grid/src/Grid.js.map +1 -1
- package/dist-es/packages/grid/src/GridColumn.js +1 -1
- package/dist-es/packages/grid/src/GridColumn.js.map +1 -1
- package/dist-es/packages/grid/src/HeaderCell.css.js +1 -1
- package/dist-es/packages/grid/src/HeaderCell.js +66 -2
- package/dist-es/packages/grid/src/HeaderCell.js.map +1 -1
- package/dist-es/packages/grid/src/NumericColumn.js +12 -0
- package/dist-es/packages/grid/src/NumericColumn.js.map +1 -1
- package/dist-es/packages/grid/src/RowSelectionCheckboxCellValue.js +2 -2
- package/dist-es/packages/grid/src/RowSelectionCheckboxCellValue.js.map +1 -1
- package/dist-es/packages/grid/src/RowSelectionCheckboxColumn.js +14 -7
- package/dist-es/packages/grid/src/RowSelectionCheckboxColumn.js.map +1 -1
- package/dist-es/packages/grid/src/RowSelectionCheckboxHeaderCellValue.js +2 -2
- package/dist-es/packages/grid/src/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
- package/dist-es/packages/grid/src/RowSelectionRadioCellValue.js +1 -1
- package/dist-es/packages/grid/src/RowSelectionRadioCellValue.js.map +1 -1
- package/dist-es/packages/grid/src/RowSelectionRadioColumn.js +11 -7
- package/dist-es/packages/grid/src/RowSelectionRadioColumn.js.map +1 -1
- package/dist-es/packages/grid/src/RowSelectionRadioHeaderCell.js +1 -1
- package/dist-es/packages/grid/src/RowSelectionRadioHeaderCell.js.map +1 -1
- package/dist-es/packages/grid/src/RowValidationStatus.js +9 -0
- package/dist-es/packages/grid/src/RowValidationStatus.js.map +1 -0
- package/dist-es/packages/grid/src/TextCellEditor.js +12 -0
- package/dist-es/packages/grid/src/TextCellEditor.js.map +1 -1
- package/dist-es/packages/grid/src/index.js +1 -1
- package/dist-es/packages/grid/src/internal/Cell.css.js +1 -1
- package/dist-es/packages/grid/src/internal/CellStatusIcons.js +40 -0
- package/dist-es/packages/grid/src/internal/CellStatusIcons.js.map +1 -0
- package/dist-es/packages/grid/src/internal/LeftPart.js +4 -2
- package/dist-es/packages/grid/src/internal/LeftPart.js.map +1 -1
- package/dist-es/packages/grid/src/internal/MiddlePart.js +4 -2
- package/dist-es/packages/grid/src/internal/MiddlePart.js.map +1 -1
- package/dist-es/packages/grid/src/internal/RightPart.js +4 -2
- package/dist-es/packages/grid/src/internal/RightPart.js.map +1 -1
- package/dist-es/packages/grid/src/internal/TableBody.js +11 -4
- package/dist-es/packages/grid/src/internal/TableBody.js.map +1 -1
- package/dist-es/packages/grid/src/internal/TableRow.css.js +1 -1
- package/dist-es/packages/grid/src/internal/TableRow.js +33 -12
- package/dist-es/packages/grid/src/internal/TableRow.js.map +1 -1
- package/dist-es/packages/grid/src/internal/gridHooks.js +1 -1
- package/dist-types/ColumnSortContext.d.ts +12 -0
- package/dist-types/Grid.d.ts +7 -1
- package/dist-types/GridColumn.d.ts +54 -2
- package/dist-types/RowValidationStatus.d.ts +7 -0
- package/dist-types/internal/CellStatusIcons.d.ts +4 -0
- package/dist-types/internal/LeftPart.d.ts +2 -0
- package/dist-types/internal/MiddlePart.d.ts +2 -0
- package/dist-types/internal/RightPart.d.ts +2 -0
- package/dist-types/internal/TableBody.d.ts +2 -0
- package/dist-types/internal/TableRow.d.ts +2 -1
- package/package.json +6 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableRow.js","sources":["../src/internal/TableRow.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n isValidElement,\n MouseEventHandler,\n} from \"react\";\nimport \"./TableRow.css\";\nimport { BaseCell } from \"../BaseCell\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { GridColumnModel, GridRowModel } from \"../Grid\";\nimport { FakeCell } from \"./FakeCell\";\nimport { DefaultCellValue } from \"./DefaultCellValue\";\nimport { useGridContext } from \"../GridContext\";\n\nconst withBaseName = makePrefixer(\"saltGridTableRow\");\n\nexport interface TableRowProps<T> {\n row: GridRowModel<T>;\n isSelected?: boolean
|
|
1
|
+
{"version":3,"file":"TableRow.js","sources":["../src/internal/TableRow.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n isValidElement,\n MouseEventHandler,\n} from \"react\";\nimport \"./TableRow.css\";\nimport { BaseCell } from \"../BaseCell\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { GridColumnModel, GridRowModel } from \"../Grid\";\nimport { FakeCell } from \"./FakeCell\";\nimport { DefaultCellValue } from \"./DefaultCellValue\";\nimport { useGridContext } from \"../GridContext\";\nimport { CellValidationState } from \"../GridColumn\";\nimport { RowValidationStatusContext } from \"../RowValidationStatus\";\n\nconst withBaseName = makePrefixer(\"saltGridTableRow\");\n\nexport interface TableRowProps<T> {\n row: GridRowModel<T>;\n isSelected?: boolean;\n isHoverOver?: boolean;\n zebra?: boolean;\n columns: GridColumnModel<T>[];\n cursorColIdx?: number;\n onMouseEnter?: MouseEventHandler<HTMLTableRowElement>;\n onMouseLeave?: MouseEventHandler<HTMLTableRowElement>;\n gap?: number;\n editorColIdx?: number;\n isCellSelected?: (rowIdx: number, colIdx: number) => boolean;\n headerIsFocusable?: boolean;\n validationStatus?: CellValidationState;\n}\n\nexport function TableRow<T>(props: TableRowProps<T>) {\n const {\n row,\n isSelected,\n zebra,\n isHoverOver,\n columns,\n onMouseEnter,\n onMouseLeave,\n cursorColIdx,\n gap,\n editorColIdx,\n isCellSelected,\n headerIsFocusable,\n validationStatus: rowValidationStatus,\n } = props;\n\n const grid = useGridContext();\n\n if (!row.key) {\n throw new Error(`Invalid row`);\n }\n\n const ariaRowIndex = headerIsFocusable ? row.index + 2 : row.index + 1;\n\n return (\n <tr\n aria-rowindex={ariaRowIndex}\n aria-selected={isSelected ? true : undefined}\n className={clsx(withBaseName(), {\n [withBaseName(\"zebra\")]: zebra,\n [withBaseName(\"hover\")]: isHoverOver,\n [withBaseName(\"selected\")]: isSelected,\n [withBaseName(\"first\")]: row.index === 0,\n [withBaseName(`validationStatus-${rowValidationStatus}`)]:\n rowValidationStatus,\n })}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n data-row-index={row.index}\n data-row-key={row.key}\n role=\"row\"\n >\n {columns.map((column, i) => {\n const colKey = column.info.props.id;\n const editorInfo = grid.getEditor(column.info.props.id);\n const isEditable = !!editorInfo;\n\n if (editorColIdx === column.index) {\n if (isEditable) {\n if (isValidElement(editorInfo.children)) {\n const editorElement = Children.only(editorInfo.children);\n return cloneElement(editorElement, {\n key: colKey,\n row,\n column,\n } as any);\n }\n }\n }\n\n const Cell = column.info.props.cellComponent || BaseCell;\n const CellValue =\n column.info.props.cellValueComponent || DefaultCellValue;\n const value =\n column.info.props.getValue && row.data\n ? column.info.props.getValue(row.data)\n : null;\n const isFocused = cursorColIdx === column.index;\n const isSelected =\n isCellSelected && isCellSelected(row.index, column.index);\n const validationFnArg = {\n row,\n column,\n isFocused,\n value,\n };\n const validationStatus =\n column.info.props.getValidationStatus?.(validationFnArg);\n const validationMessage =\n validationStatus &&\n column.info.props.getValidationMessage?.(validationFnArg);\n\n return (\n <RowValidationStatusContext.Provider\n value={{ status: rowValidationStatus }}\n >\n <Cell\n key={colKey}\n row={row}\n column={column}\n isFocused={isFocused}\n isSelected={isSelected}\n isEditable={isEditable}\n validationStatus={validationStatus}\n validationMessage={validationMessage}\n validationType={column.info.props.validationType}\n value={value}\n align={column.info.props.align}\n >\n <CellValue\n column={column}\n row={row}\n value={value}\n isFocused={isFocused}\n validationStatus={validationStatus}\n validationMessage={validationMessage}\n validationType={column.info.props.validationType}\n />\n </Cell>\n </RowValidationStatusContext.Provider>\n );\n })}\n {gap !== undefined && gap > 0 ? <FakeCell row={row} /> : null}\n </tr>\n );\n}\n"],"names":["isSelected"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useMemo, useCallback, useRef, useState, useEffect, Children, isValidElement } from 'react';
|
|
2
2
|
import { NumberRange } from '../NumberRange.js';
|
|
3
3
|
import { getAttribute, makeMapAdder, makeMapDeleter, getCellPosition } from './utils.js';
|
|
4
4
|
import { useControlled } from '@salt-ds/core';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { SortOrder } from "./Grid";
|
|
3
|
+
import { GridColumnProps } from "./GridColumn";
|
|
4
|
+
export interface ColumnSortContext {
|
|
5
|
+
sortByColumnId?: GridColumnProps["id"];
|
|
6
|
+
setSortByColumnId: (c: React.SetStateAction<GridColumnProps["id"]>) => void;
|
|
7
|
+
sortOrder: SortOrder;
|
|
8
|
+
setSortOrder: (o: SortOrder) => void;
|
|
9
|
+
onClickSortColumn: (colHeaderId: GridColumnProps["id"]) => void;
|
|
10
|
+
}
|
|
11
|
+
export declare const ColumnSortContext: React.Context<ColumnSortContext | undefined>;
|
|
12
|
+
export declare const useColumnSortContext: () => ColumnSortContext;
|
package/dist-types/Grid.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CSSProperties, ReactNode } from "react";
|
|
2
|
-
import { GridColumnInfo } from "./GridColumn";
|
|
2
|
+
import { CellValidationState, GridColumnInfo } from "./GridColumn";
|
|
3
3
|
import "./Grid.css";
|
|
4
4
|
import { ColumnGroupProps } from "./ColumnGroup";
|
|
5
5
|
export declare type ColumnSeparatorType = "regular" | "none" | "groupEdge" | "pinned";
|
|
@@ -7,6 +7,11 @@ export declare type ColumnGroupRowSeparatorType = "first" | "regular" | "last";
|
|
|
7
7
|
export declare type ColumnGroupColumnSeparatorType = "regular" | "none" | "pinned";
|
|
8
8
|
export declare type GridRowSelectionMode = "single" | "multi" | "none";
|
|
9
9
|
export declare type GridCellSelectionMode = "range" | "none";
|
|
10
|
+
export declare enum SortOrder {
|
|
11
|
+
ASC = "asc",
|
|
12
|
+
DESC = "desc",
|
|
13
|
+
NONE = "none"
|
|
14
|
+
}
|
|
10
15
|
export declare type RowKeyGetter<T> = (row: T, index: number) => string;
|
|
11
16
|
export declare type GridColumnMoveHandler = (columnId: string, fromIndex: number, toIndex: number) => void;
|
|
12
17
|
export interface GridProps<T = any> {
|
|
@@ -77,6 +82,7 @@ export interface GridProps<T = any> {
|
|
|
77
82
|
* If `true`, keyboard navigation is enabled for the header.
|
|
78
83
|
* */
|
|
79
84
|
headerIsFocusable?: boolean;
|
|
85
|
+
getRowValidationStatus?: (row: GridRowModel<T>) => CellValidationState | undefined;
|
|
80
86
|
}
|
|
81
87
|
export interface GridRowModel<T> {
|
|
82
88
|
key: string;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { ComponentType, CSSProperties, KeyboardEvent, ReactNode } from "react";
|
|
2
|
-
import { GridColumnModel, GridRowModel } from "./Grid";
|
|
2
|
+
import { GridColumnModel, GridRowModel, SortOrder } from "./Grid";
|
|
3
3
|
export declare type GridColumnPin = "left" | "right" | null;
|
|
4
|
-
export
|
|
4
|
+
export declare type CellValidationState = "error" | "warning" | "success";
|
|
5
|
+
declare type CellValidationType = "strong" | "light";
|
|
6
|
+
export interface GridCellProps<T, U = any> {
|
|
5
7
|
row: GridRowModel<T>;
|
|
6
8
|
column: GridColumnModel<T>;
|
|
7
9
|
className?: string;
|
|
@@ -10,12 +12,20 @@ export interface GridCellProps<T> {
|
|
|
10
12
|
isSelected?: boolean;
|
|
11
13
|
isEditable?: boolean;
|
|
12
14
|
children?: ReactNode;
|
|
15
|
+
align?: GridColumnProps["align"];
|
|
16
|
+
value?: U;
|
|
17
|
+
validationStatus?: CellValidationState;
|
|
18
|
+
validationMessage?: string;
|
|
19
|
+
validationType?: CellValidationType;
|
|
13
20
|
}
|
|
14
21
|
export interface GridCellValueProps<T, U = any> {
|
|
15
22
|
row: GridRowModel<T>;
|
|
16
23
|
column: GridColumnModel<T>;
|
|
17
24
|
isFocused?: boolean;
|
|
18
25
|
value?: U;
|
|
26
|
+
validationStatus?: CellValidationState;
|
|
27
|
+
validationMessage?: string;
|
|
28
|
+
validationType?: CellValidationType;
|
|
19
29
|
}
|
|
20
30
|
export interface HeaderCellProps<T> {
|
|
21
31
|
column: GridColumnModel<T>;
|
|
@@ -35,6 +45,26 @@ export interface GridColumnProps<T = any> {
|
|
|
35
45
|
* Unique identifier of the column.
|
|
36
46
|
* */
|
|
37
47
|
id: string;
|
|
48
|
+
/**
|
|
49
|
+
* Enables sorting (by sort order: `asc | desc | none`) for the column.
|
|
50
|
+
* To enable column header's keyboard navigation on sort,
|
|
51
|
+
* users need to set `headerIsFocusable` prop to `true` in Grid component.
|
|
52
|
+
* To customise how GridColumn data sorts, use also `customSort` or `onSortOrderChanged`.
|
|
53
|
+
* */
|
|
54
|
+
sortable?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Custom sorting function. Use for client side sorting.
|
|
57
|
+
* */
|
|
58
|
+
customSort?: (args: {
|
|
59
|
+
rowData: T[];
|
|
60
|
+
sortOrder: SortOrder;
|
|
61
|
+
}) => T[];
|
|
62
|
+
/**
|
|
63
|
+
* Exposes GridColumn sort order. Use for server side sorting.
|
|
64
|
+
* */
|
|
65
|
+
onSortOrderChange?: (args: {
|
|
66
|
+
sortOrder: SortOrder;
|
|
67
|
+
}) => void;
|
|
38
68
|
/**
|
|
39
69
|
* Name is displayed on the column header by default.
|
|
40
70
|
* */
|
|
@@ -77,6 +107,23 @@ export interface GridColumnProps<T = any> {
|
|
|
77
107
|
* for the given row data item.
|
|
78
108
|
* */
|
|
79
109
|
getValue?: (rowData: T) => any;
|
|
110
|
+
/**
|
|
111
|
+
* Cell validation status getter. Should return one of the known validation status names: "none" | "error" | "warning"
|
|
112
|
+
* If you require a custom validation status, you can achieve that by providing a custom cell component.
|
|
113
|
+
* */
|
|
114
|
+
getValidationStatus?: (value: GridCellValueProps<T>) => CellValidationState | undefined;
|
|
115
|
+
/**
|
|
116
|
+
* Cell validation status message getter. Should return a string description of the validation state that can be used for the screen reader.
|
|
117
|
+
* This prop is optional but if you don't provide a function a default message will be used.
|
|
118
|
+
* */
|
|
119
|
+
getValidationMessage?: (value: GridCellValueProps<T>) => string | undefined;
|
|
120
|
+
/**
|
|
121
|
+
* Cell validation type. Determines the visual style of the validation. The available values are "strong" and "light". Strong will display the icon
|
|
122
|
+
* along side the background and border. Light will only affect border and background. Use light if you are validation the whole row, and optionally
|
|
123
|
+
* strong on one of the columns, and strong if you are validating user input on a particular cell.
|
|
124
|
+
* The default value is "light".
|
|
125
|
+
* */
|
|
126
|
+
validationType?: GridCellProps<T>["validationType"];
|
|
80
127
|
/**
|
|
81
128
|
* CSS class to be applied to the column header.
|
|
82
129
|
* Useful for minor customizations
|
|
@@ -104,6 +151,10 @@ export interface GridColumnProps<T = any> {
|
|
|
104
151
|
* Children is optional, and accepts non-rendered elements i.e. `CellEditor`
|
|
105
152
|
*/
|
|
106
153
|
children?: ReactNode;
|
|
154
|
+
/**
|
|
155
|
+
* aria-label is optional, and accepts any string value
|
|
156
|
+
*/
|
|
157
|
+
"aria-label"?: string;
|
|
107
158
|
}
|
|
108
159
|
export interface GridColumnInfo<T> {
|
|
109
160
|
width: number;
|
|
@@ -111,3 +162,4 @@ export interface GridColumnInfo<T> {
|
|
|
111
162
|
props: GridColumnProps<T>;
|
|
112
163
|
}
|
|
113
164
|
export declare const GridColumn: <T = any>(props: GridColumnProps<T>) => JSX.Element;
|
|
165
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { CellValidationState, GridColumnProps } from "./GridColumn";
|
|
3
|
+
export declare const RowValidationStatusContext: import("react").Context<{
|
|
4
|
+
status?: CellValidationState | undefined;
|
|
5
|
+
}>;
|
|
6
|
+
export declare type RowValidationStatusColumnProps<T> = Omit<GridColumnProps<T>, "width" | "name">;
|
|
7
|
+
export declare function RowValidationStatusColumn<T>(props: RowValidationStatusColumnProps<T>): JSX.Element;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { RefObject } from "react";
|
|
2
2
|
import "./LeftPart.css";
|
|
3
3
|
import { GridColumnModel, GridRowModel } from "../Grid";
|
|
4
|
+
import { CellValidationState } from "../GridColumn";
|
|
4
5
|
export interface LeftPartProps<T> {
|
|
5
6
|
leftRef: RefObject<HTMLDivElement>;
|
|
6
7
|
onWheel: EventListener;
|
|
@@ -10,5 +11,6 @@ export interface LeftPartProps<T> {
|
|
|
10
11
|
hoverOverRowKey?: string;
|
|
11
12
|
setHoverOverRowKey: (key: string | undefined) => void;
|
|
12
13
|
zebra?: boolean;
|
|
14
|
+
getRowValidationStatus?: (row: GridRowModel<T>) => CellValidationState | undefined;
|
|
13
15
|
}
|
|
14
16
|
export declare function LeftPart<T>(props: LeftPartProps<T>): JSX.Element | null;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { RefObject } from "react";
|
|
2
2
|
import "./MiddlePart.css";
|
|
3
3
|
import { GridColumnModel, GridRowModel } from "../Grid";
|
|
4
|
+
import { CellValidationState } from "../GridColumn";
|
|
4
5
|
export interface MiddlePartProps<T> {
|
|
5
6
|
middleRef: RefObject<HTMLDivElement>;
|
|
6
7
|
onWheel: EventListener;
|
|
@@ -10,5 +11,6 @@ export interface MiddlePartProps<T> {
|
|
|
10
11
|
setHoverOverRowKey: (key: string | undefined) => void;
|
|
11
12
|
midGap: number;
|
|
12
13
|
zebra?: boolean;
|
|
14
|
+
getRowValidationStatus?: (row: GridRowModel<T>) => CellValidationState | undefined;
|
|
13
15
|
}
|
|
14
16
|
export declare function MiddlePart<T>(props: MiddlePartProps<T>): JSX.Element;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { RefObject } from "react";
|
|
2
2
|
import "./RightPart.css";
|
|
3
3
|
import { GridColumnModel, GridRowModel } from "../Grid";
|
|
4
|
+
import { CellValidationState } from "../GridColumn";
|
|
4
5
|
export interface RightPartProps<T> {
|
|
5
6
|
rightRef: RefObject<HTMLDivElement>;
|
|
6
7
|
onWheel: EventListener;
|
|
@@ -10,5 +11,6 @@ export interface RightPartProps<T> {
|
|
|
10
11
|
hoverOverRowKey?: string;
|
|
11
12
|
setHoverOverRowKey: (key: string | undefined) => void;
|
|
12
13
|
zebra?: boolean;
|
|
14
|
+
getRowValidationStatus?: (row: GridRowModel<T>) => CellValidationState | undefined;
|
|
13
15
|
}
|
|
14
16
|
export declare function RightPart<T>(props: RightPartProps<T>): JSX.Element | null;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { GridColumnModel, GridRowModel } from "../Grid";
|
|
3
|
+
import { CellValidationState } from "../GridColumn";
|
|
3
4
|
export interface TableBodyProps<T> {
|
|
4
5
|
columns: GridColumnModel<T>[];
|
|
5
6
|
rows: GridRowModel<T>[];
|
|
@@ -7,5 +8,6 @@ export interface TableBodyProps<T> {
|
|
|
7
8
|
setHoverRowKey: (key: string | undefined) => void;
|
|
8
9
|
gap?: number;
|
|
9
10
|
zebra?: boolean;
|
|
11
|
+
getRowValidationStatus?: (row: GridRowModel<T>) => CellValidationState | undefined;
|
|
10
12
|
}
|
|
11
13
|
export declare function TableBody<T>(props: TableBodyProps<T>): JSX.Element;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { MouseEventHandler } from "react";
|
|
2
2
|
import "./TableRow.css";
|
|
3
3
|
import { GridColumnModel, GridRowModel } from "../Grid";
|
|
4
|
+
import { CellValidationState } from "../GridColumn";
|
|
4
5
|
export interface TableRowProps<T> {
|
|
5
6
|
row: GridRowModel<T>;
|
|
6
7
|
isSelected?: boolean;
|
|
7
|
-
isFollowedBySelected?: boolean;
|
|
8
8
|
isHoverOver?: boolean;
|
|
9
9
|
zebra?: boolean;
|
|
10
10
|
columns: GridColumnModel<T>[];
|
|
@@ -15,5 +15,6 @@ export interface TableRowProps<T> {
|
|
|
15
15
|
editorColIdx?: number;
|
|
16
16
|
isCellSelected?: (rowIdx: number, colIdx: number) => boolean;
|
|
17
17
|
headerIsFocusable?: boolean;
|
|
18
|
+
validationStatus?: CellValidationState;
|
|
18
19
|
}
|
|
19
20
|
export declare function TableRow<T>(props: TableRowProps<T>): JSX.Element;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salt-ds/data-grid",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4-alpha.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist-cjs/packages/grid/src/index.js",
|
|
6
6
|
"sideEffects": [
|
|
@@ -18,14 +18,16 @@
|
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
"publishConfig": {
|
|
21
|
-
"directory": "../../dist/salt-ds-data-grid"
|
|
21
|
+
"directory": "../../dist/salt-ds-data-grid",
|
|
22
|
+
"tag": "next"
|
|
22
23
|
},
|
|
23
24
|
"module": "dist-es/packages/grid/src/index.js",
|
|
24
25
|
"typings": "dist-types/index.d.ts",
|
|
25
26
|
"dependencies": {
|
|
26
27
|
"clsx": "^1.2.1",
|
|
27
|
-
"@salt-ds/core": "1.
|
|
28
|
-
"@salt-ds/
|
|
28
|
+
"@salt-ds/core": "1.6.0",
|
|
29
|
+
"@salt-ds/icons": "1.3.0",
|
|
30
|
+
"@salt-ds/lab": "1.0.0-alpha.6"
|
|
29
31
|
},
|
|
30
32
|
"files": [
|
|
31
33
|
"dist-cjs",
|