@vuu-ui/vuu-table 2.1.15 → 2.1.16
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/cjs/Table.js +4 -6
- package/cjs/Table.js.map +1 -1
- package/cjs/{useHighlighting.js → applyHighlighting.js} +3 -3
- package/cjs/applyHighlighting.js.map +1 -0
- package/cjs/bulk-edit/BulkEditPanel.js +46 -3
- package/cjs/bulk-edit/BulkEditPanel.js.map +1 -1
- package/cjs/bulk-edit/ColumnCascadingUpdateEditor.css.js +6 -0
- package/cjs/bulk-edit/ColumnCascadingUpdateEditor.css.js.map +1 -0
- package/cjs/bulk-edit/ColumnCascadingUpdateEditor.js +80 -0
- package/cjs/bulk-edit/ColumnCascadingUpdateEditor.js.map +1 -0
- package/cjs/bulk-edit/{BulkEditRow.css.js → InsertNewRowEditor.css.js} +1 -1
- package/cjs/bulk-edit/InsertNewRowEditor.css.js.map +1 -0
- package/cjs/bulk-edit/{BulkEditRow.js → InsertNewRowEditor.js} +7 -7
- package/cjs/bulk-edit/InsertNewRowEditor.js.map +1 -0
- package/cjs/bulk-edit/useBulkEditPanel.js.map +1 -1
- package/cjs/bulk-edit/{useBulkEditRow.js → useColumnCascadingEditor.js} +1 -1
- package/cjs/bulk-edit/useColumnCascadingEditor.js.map +1 -0
- package/cjs/cell-renderers/input-cell/InputCell.css.js +1 -1
- package/cjs/cell-renderers/input-cell/InputCell.js +15 -5
- package/cjs/cell-renderers/input-cell/InputCell.js.map +1 -1
- package/cjs/cell-renderers/input-cell/useInputCell.js +211 -0
- package/cjs/cell-renderers/input-cell/useInputCell.js.map +1 -0
- package/cjs/data-row/DataRow.js +11 -2
- package/cjs/data-row/DataRow.js.map +1 -1
- package/cjs/index.js +2 -6
- package/cjs/index.js.map +1 -1
- package/cjs/table-cell/TableCell.css.js +1 -1
- package/cjs/table-cell/TableCell.js +19 -36
- package/cjs/table-cell/TableCell.js.map +1 -1
- package/cjs/table-cell/TableGroupCell.js +2 -2
- package/cjs/table-cell/TableGroupCell.js.map +1 -1
- package/cjs/table-data-source/useDataSource.js +2 -0
- package/cjs/table-data-source/useDataSource.js.map +1 -1
- package/cjs/table-dom-utils.js +26 -2
- package/cjs/table-dom-utils.js.map +1 -1
- package/cjs/useCell.js +3 -4
- package/cjs/useCell.js.map +1 -1
- package/cjs/useCellEditing.js +3 -30
- package/cjs/useCellEditing.js.map +1 -1
- package/cjs/useCellFocus.js.map +1 -1
- package/cjs/useKeyboardNavigation.js +10 -0
- package/cjs/useKeyboardNavigation.js.map +1 -1
- package/cjs/useTable.js +4 -32
- package/cjs/useTable.js.map +1 -1
- package/esm/Table.js +4 -6
- package/esm/Table.js.map +1 -1
- package/esm/{useHighlighting.js → applyHighlighting.js} +3 -3
- package/esm/applyHighlighting.js.map +1 -0
- package/esm/bulk-edit/BulkEditPanel.js +46 -3
- package/esm/bulk-edit/BulkEditPanel.js.map +1 -1
- package/esm/bulk-edit/ColumnCascadingUpdateEditor.css.js +4 -0
- package/esm/bulk-edit/ColumnCascadingUpdateEditor.css.js.map +1 -0
- package/esm/bulk-edit/ColumnCascadingUpdateEditor.js +78 -0
- package/esm/bulk-edit/ColumnCascadingUpdateEditor.js.map +1 -0
- package/esm/bulk-edit/{BulkEditRow.css.js → InsertNewRowEditor.css.js} +1 -1
- package/esm/bulk-edit/InsertNewRowEditor.css.js.map +1 -0
- package/esm/bulk-edit/{BulkEditRow.js → InsertNewRowEditor.js} +5 -5
- package/esm/bulk-edit/InsertNewRowEditor.js.map +1 -0
- package/esm/bulk-edit/useBulkEditPanel.js.map +1 -1
- package/esm/bulk-edit/{useBulkEditRow.js → useColumnCascadingEditor.js} +1 -1
- package/esm/bulk-edit/useColumnCascadingEditor.js.map +1 -0
- package/esm/cell-renderers/input-cell/InputCell.css.js +1 -1
- package/esm/cell-renderers/input-cell/InputCell.js +17 -7
- package/esm/cell-renderers/input-cell/InputCell.js.map +1 -1
- package/esm/cell-renderers/input-cell/useInputCell.js +209 -0
- package/esm/cell-renderers/input-cell/useInputCell.js.map +1 -0
- package/esm/data-row/DataRow.js +11 -2
- package/esm/data-row/DataRow.js.map +1 -1
- package/esm/index.js +1 -3
- package/esm/index.js.map +1 -1
- package/esm/table-cell/TableCell.css.js +1 -1
- package/esm/table-cell/TableCell.js +20 -37
- package/esm/table-cell/TableCell.js.map +1 -1
- package/esm/table-cell/TableGroupCell.js +2 -2
- package/esm/table-cell/TableGroupCell.js.map +1 -1
- package/esm/table-data-source/useDataSource.js +2 -0
- package/esm/table-data-source/useDataSource.js.map +1 -1
- package/esm/table-dom-utils.js +25 -3
- package/esm/table-dom-utils.js.map +1 -1
- package/esm/useCell.js +3 -4
- package/esm/useCell.js.map +1 -1
- package/esm/useCellEditing.js +5 -32
- package/esm/useCellEditing.js.map +1 -1
- package/esm/useCellFocus.js.map +1 -1
- package/esm/useKeyboardNavigation.js +11 -1
- package/esm/useKeyboardNavigation.js.map +1 -1
- package/esm/useTable.js +5 -33
- package/esm/useTable.js.map +1 -1
- package/package.json +10 -10
- package/types/Table.d.ts +14 -2
- package/types/applyHighlighting.d.ts +2 -0
- package/types/bulk-edit/BulkEditPanel.d.ts +3 -1
- package/types/bulk-edit/ColumnCascadingUpdateEditor.d.ts +9 -0
- package/types/bulk-edit/{BulkEditRow.d.ts → InsertNewRowEditor.d.ts} +1 -1
- package/types/bulk-edit/useBulkEditPanel.d.ts +1 -1
- package/types/cell-renderers/input-cell/InputCell.d.ts +1 -1
- package/types/cell-renderers/input-cell/useInputCell.d.ts +21 -0
- package/types/index.d.ts +2 -2
- package/types/table-cell/TableCell.d.ts +1 -1
- package/types/table-dom-utils.d.ts +3 -1
- package/types/useCell.d.ts +1 -1
- package/types/useCellEditing.d.ts +1 -3
- package/types/useKeyboardNavigation.d.ts +2 -1
- package/types/useTable.d.ts +4 -5
- package/cjs/bulk-edit/BulkEditRow.css.js.map +0 -1
- package/cjs/bulk-edit/BulkEditRow.js.map +0 -1
- package/cjs/bulk-edit/useBulkEditRow.js.map +0 -1
- package/cjs/useHighlighting.js.map +0 -1
- package/esm/bulk-edit/BulkEditRow.css.js.map +0 -1
- package/esm/bulk-edit/BulkEditRow.js.map +0 -1
- package/esm/bulk-edit/useBulkEditRow.js.map +0 -1
- package/esm/useHighlighting.js.map +0 -1
- package/types/bulk-edit/index.d.ts +0 -3
- package/types/useHighlighting.d.ts +0 -2
- /package/types/bulk-edit/{useBulkEditRow.d.ts → useColumnCascadingEditor.d.ts} +0 -0
package/package.json
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.1.
|
|
2
|
+
"version": "2.1.16",
|
|
3
3
|
"author": "heswell",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"devDependencies": {
|
|
6
|
-
"@vuu-ui/vuu-data-types": "2.1.
|
|
7
|
-
"@vuu-ui/vuu-table-types": "2.1.
|
|
8
|
-
"@vuu-ui/vuu-protocol-types": "2.1.
|
|
6
|
+
"@vuu-ui/vuu-data-types": "2.1.16",
|
|
7
|
+
"@vuu-ui/vuu-table-types": "2.1.16",
|
|
8
|
+
"@vuu-ui/vuu-protocol-types": "2.1.16"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@salt-ds/core": "1.54.1",
|
|
12
12
|
"@salt-ds/styles": "0.2.1",
|
|
13
13
|
"@salt-ds/window": "0.1.1",
|
|
14
|
-
"@vuu-ui/vuu-context-menu": "2.1.
|
|
15
|
-
"@vuu-ui/vuu-data-react": "2.1.
|
|
16
|
-
"@vuu-ui/vuu-popups": "2.1.
|
|
17
|
-
"@vuu-ui/vuu-table-extras": "2.1.
|
|
18
|
-
"@vuu-ui/vuu-ui-controls": "2.1.
|
|
19
|
-
"@vuu-ui/vuu-utils": "2.1.
|
|
14
|
+
"@vuu-ui/vuu-context-menu": "2.1.16",
|
|
15
|
+
"@vuu-ui/vuu-data-react": "2.1.16",
|
|
16
|
+
"@vuu-ui/vuu-popups": "2.1.16",
|
|
17
|
+
"@vuu-ui/vuu-table-extras": "2.1.16",
|
|
18
|
+
"@vuu-ui/vuu-ui-controls": "2.1.16",
|
|
19
|
+
"@vuu-ui/vuu-utils": "2.1.16"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
22
|
"clsx": "^2.0.0",
|
package/types/Table.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DataSource, SchemaColumn } from "@vuu-ui/vuu-data-types";
|
|
2
|
-
import { CustomHeader,
|
|
2
|
+
import { CustomHeader, GroupToggleTarget, HeaderCellProps, RowActionHandler, RowProps, SelectionChangeHandler, ShowColumnHeaderMenus, TableConfig, TableConfigChangeHandler, TableRowClickHandler, TableRowSelectHandler, TableSelectionModel } from "@vuu-ui/vuu-table-types";
|
|
3
3
|
import type { DragDropState } from "@vuu-ui/vuu-ui-controls";
|
|
4
4
|
import { DragStartHandler, MeasuredContainerProps, dragStrategy } from "@vuu-ui/vuu-ui-controls";
|
|
5
5
|
import { ComponentType, FC, ForwardedRef } from "react";
|
|
@@ -26,6 +26,19 @@ export interface TableProps extends Omit<MeasuredContainerProps, "onDragStart" |
|
|
|
26
26
|
* Allow a block of cells to be selected. Typically to be copied.
|
|
27
27
|
*/
|
|
28
28
|
allowCellBlockSelection?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Allow columns to be manually resized by user. Default is true. This can also be
|
|
31
|
+
* set on individual ColumnDescriptors for more fine grained control.
|
|
32
|
+
*/
|
|
33
|
+
allowColumnResizing?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* If a ColumnPicker is offered for a table, default behaviour is to allow column
|
|
36
|
+
* addition and removal. If a ColumnMenu is configured, default behaviour is likewise
|
|
37
|
+
* to offer a 'remove' option. By setting this prop to false, column removal will not
|
|
38
|
+
* be supported. No 'remove' menu item will be made available in the column menu and the
|
|
39
|
+
* ColumnPicker will offer column position management only.
|
|
40
|
+
*/
|
|
41
|
+
allowColumnRemoval?: boolean;
|
|
29
42
|
/**
|
|
30
43
|
* Allow column headers to be dragged to re-arrange
|
|
31
44
|
*/
|
|
@@ -112,7 +125,6 @@ export interface TableProps extends Omit<MeasuredContainerProps, "onDragStart" |
|
|
|
112
125
|
* In a Table with editable cells, this callback will be invoked every time
|
|
113
126
|
* a user performs any edit operation on an editable field.
|
|
114
127
|
*/
|
|
115
|
-
onDataEdited?: DataCellEditNotification;
|
|
116
128
|
onDragStart?: DragStartHandler;
|
|
117
129
|
onDrop?: (dragDropState: DragDropState) => void;
|
|
118
130
|
onHighlight?: (idx: number) => void;
|
|
@@ -3,6 +3,8 @@ import type { ColumnDescriptor } from "@vuu-ui/vuu-table-types";
|
|
|
3
3
|
import { HTMLAttributes, ReactElement } from "react";
|
|
4
4
|
export interface BulkEditPanelProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
5
|
columns?: ColumnDescriptor[];
|
|
6
|
+
showColumnCascadingUpdateEditor?: boolean;
|
|
7
|
+
showInsertNewRowEditor?: boolean;
|
|
6
8
|
/**
|
|
7
9
|
* The session dataSource. This is where the edits will be processed until final
|
|
8
10
|
* confirmation, at which point edits will be applied to parent dataSource and
|
|
@@ -17,4 +19,4 @@ export interface BulkEditPanelProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
17
19
|
parentDs: DataSource;
|
|
18
20
|
width?: number;
|
|
19
21
|
}
|
|
20
|
-
export declare const BulkEditPanel: ({ className, columns, sessionDs, parentDs, style, width, ...htmlAttributes }: BulkEditPanelProps) => ReactElement;
|
|
22
|
+
export declare const BulkEditPanel: ({ className, columns, sessionDs, showColumnCascadingUpdateEditor, showInsertNewRowEditor, parentDs, style, width, ...htmlAttributes }: BulkEditPanelProps) => ReactElement;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { VuuRowDataItemType } from "@vuu-ui/vuu-protocol-types";
|
|
2
|
+
import { BaseRowProps, ColumnDescriptor } from "@vuu-ui/vuu-table-types";
|
|
3
|
+
import { HTMLAttributes } from "react";
|
|
4
|
+
export type EditValueChangeHandler = (column: ColumnDescriptor, value: VuuRowDataItemType) => void;
|
|
5
|
+
export interface ColumnCascadingUpdateEditorProps extends Partial<BaseRowProps>, Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
|
|
6
|
+
onBulkChange: EditValueChangeHandler;
|
|
7
|
+
onRowChange: (isValid: boolean) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare const ColumnCascadingUpdateEditor: ({ ariaRole, onBulkChange, onRowChange, ...htmlAttributes }: ColumnCascadingUpdateEditorProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -6,4 +6,4 @@ export interface BulkEditProps extends Partial<BaseRowProps>, Omit<HTMLAttribute
|
|
|
6
6
|
onBulkChange: EditValueChangeHandler;
|
|
7
7
|
onRowChange: (isValid: boolean) => void;
|
|
8
8
|
}
|
|
9
|
-
export declare const
|
|
9
|
+
export declare const InsertNewRowEditor: ({ ariaRole, onBulkChange, onRowChange, ...htmlAttributes }: BulkEditProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TableConfig } from "@vuu-ui/vuu-table-types";
|
|
2
2
|
import type { BulkEditPanelProps } from "./BulkEditPanel";
|
|
3
|
-
import { EditValueChangeHandler } from "./
|
|
3
|
+
import { EditValueChangeHandler } from "./useColumnCascadingEditor";
|
|
4
4
|
export type BulkEditPanelHookProps = Pick<BulkEditPanelProps, "columns" | "sessionDs">;
|
|
5
5
|
export declare const useBulkEditPanel: ({ columns, sessionDs: dataSource, }: BulkEditPanelHookProps) => {
|
|
6
6
|
tableConfig: TableConfig;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { TableCellRendererProps } from "@vuu-ui/vuu-table-types";
|
|
2
|
-
export declare const InputCell: ({ column, dataRow, onEdit, }: TableCellRendererProps) => import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare const InputCell: ({ column, dataRow, editedDuringCurrentSession, onEdit, }: TableCellRendererProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { VuuRowDataItemType } from "@vuu-ui/vuu-protocol-types";
|
|
2
|
+
import type { RuntimeColumnDescriptor, TableCellEditHandler } from "@vuu-ui/vuu-table-types";
|
|
3
|
+
import { FocusEventHandler, FormEventHandler, KeyboardEvent } from "react";
|
|
4
|
+
export interface InputCellHookProps<T extends VuuRowDataItemType = VuuRowDataItemType> {
|
|
5
|
+
column: Pick<RuntimeColumnDescriptor, "clientSideEditValidationCheck" | "label" | "name">;
|
|
6
|
+
value?: T;
|
|
7
|
+
onEdit?: TableCellEditHandler;
|
|
8
|
+
type?: "string" | "number" | "boolean";
|
|
9
|
+
}
|
|
10
|
+
export declare const useInputCell: <T extends string | number | boolean = string>({ column, value, onEdit, type, }: InputCellHookProps<T>) => {
|
|
11
|
+
editing: boolean;
|
|
12
|
+
inputProps: {
|
|
13
|
+
onBlur: FocusEventHandler<HTMLElement>;
|
|
14
|
+
onFocus: FocusEventHandler<HTMLElement>;
|
|
15
|
+
onKeyDown: (evt: KeyboardEvent<HTMLElement>) => Promise<void>;
|
|
16
|
+
};
|
|
17
|
+
onChange: FormEventHandler;
|
|
18
|
+
previousValue: string | undefined;
|
|
19
|
+
value: string;
|
|
20
|
+
warningMessage: string | undefined;
|
|
21
|
+
};
|
package/types/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { BulkEditPanel, type BulkEditPanelProps, } from "./bulk-edit/BulkEditPanel";
|
|
2
2
|
export * from "./cell-renderers";
|
|
3
3
|
export * from "./header-cell";
|
|
4
4
|
export { dataRowFactory, type DataRowFunc } from "./data-row/DataRow";
|
|
@@ -11,7 +11,7 @@ export { useTableConfig } from "./table-config/useTableConfig";
|
|
|
11
11
|
export * from "./table-header";
|
|
12
12
|
export * from "./useControlledTableNavigation";
|
|
13
13
|
export * from "./useEditableCell";
|
|
14
|
-
export * from "./
|
|
14
|
+
export * from "./applyHighlighting";
|
|
15
15
|
export * from "./useKeyboardNavigation";
|
|
16
16
|
export * from "./useTableContextMenu";
|
|
17
17
|
export * from "./useTableModel";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { TableCellProps } from "@vuu-ui/vuu-table-types";
|
|
2
|
-
export declare const TableCell: ({ column, dataRow, onClick,
|
|
2
|
+
export declare const TableCell: ({ column, dataRow, onClick, searchPattern, }: TableCellProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -6,7 +6,8 @@ export type NavigationKey = PageKey | ArrowKey;
|
|
|
6
6
|
export declare const headerCellQuery: (colIdx: number) => string;
|
|
7
7
|
export declare const dataCellQuery: (ariaRowIdx: number, ariaColIdx: number) => string;
|
|
8
8
|
export declare const getLevelUp: (containerRef: RefObject<HTMLElement | null>, cellPos: CellPos) => CellPos;
|
|
9
|
-
export declare const
|
|
9
|
+
export declare const getTableCellElement: (containerRef: RefObject<HTMLElement | null>, [rowIdx, colIdx]: CellPos) => HTMLDivElement;
|
|
10
|
+
export declare const getTableCell: (containerRef: RefObject<HTMLElement | null>, cellPos: CellPos) => HTMLElement;
|
|
10
11
|
export declare const getHeaderCell: (containerRef: RefObject<HTMLElement | null>, columnName: string) => HTMLDivElement | null;
|
|
11
12
|
export declare const getFocusedCell: (el: HTMLElement | Element | null) => HTMLDivElement | null;
|
|
12
13
|
export declare const cellIsEditable: (cell: HTMLDivElement | null) => boolean | undefined;
|
|
@@ -17,6 +18,7 @@ export declare const getIndexFromCellElement: (cellElement: HTMLElement | null)
|
|
|
17
18
|
export declare const getAriaCellPos: (tableCell: HTMLDivElement) => CellPos;
|
|
18
19
|
export declare const closestRowIndex: (el: HTMLElement) => number;
|
|
19
20
|
export declare function getNextCellPos(key: ArrowKey, [rowIdx, colIdx]: CellPos, columnCount: number, maxRowIndex: number): CellPos;
|
|
21
|
+
export declare const getNextEditableCellPos: (containerRef: RefObject<HTMLElement | null>, key: ArrowKey, cellPos: CellPos, columnCount: number, maxRowIndex: number) => number[];
|
|
20
22
|
export type TreeNodeOperation = "expand" | "collapse" | "level-up";
|
|
21
23
|
export declare const getTreeNodeOperation: (containerRef: RefObject<HTMLElement | null>, navigationStyle: "cell" | "tree", cellPos: CellPos, key: NavigationKey, shiftKey: boolean) => TreeNodeOperation | undefined;
|
|
22
24
|
export declare const howFarIsRowOutsideViewport: (rowEl: HTMLElement, totalHeaderHeight: number, contentContainer?: Element | null) => readonly [ScrollDirection | undefined, number | undefined];
|
package/types/useCell.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RuntimeColumnDescriptor } from "@vuu-ui/vuu-table-types";
|
|
2
|
-
export declare const useCell: (column: RuntimeColumnDescriptor, classBase: string, isHeader?: boolean
|
|
2
|
+
export declare const useCell: (column: RuntimeColumnDescriptor, classBase: string, isHeader?: boolean) => {
|
|
3
3
|
className: string;
|
|
4
4
|
style: import("react").CSSProperties;
|
|
5
5
|
};
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { FocusEventHandler, KeyboardEvent as ReactKeyboardEvent, MouseEvent } from "react";
|
|
2
|
-
import { FocusCell } from "./useCellFocus";
|
|
3
2
|
export interface CellEditingHookProps {
|
|
4
|
-
focusCell: FocusCell;
|
|
5
3
|
navigate: () => void;
|
|
6
4
|
}
|
|
7
|
-
export declare const useCellEditing: ({
|
|
5
|
+
export declare const useCellEditing: ({ navigate }: CellEditingHookProps) => {
|
|
8
6
|
onBlur: FocusEventHandler;
|
|
9
7
|
onDoubleClick: (e: MouseEvent<HTMLElement>) => void;
|
|
10
8
|
onFocus: FocusEventHandler;
|
|
@@ -17,6 +17,7 @@ export interface NavigationHookProps {
|
|
|
17
17
|
defaultHighlightedIndex?: number;
|
|
18
18
|
disableFocus?: boolean;
|
|
19
19
|
disableHighlightOnFocus?: boolean;
|
|
20
|
+
editSessionInProgress?: boolean;
|
|
20
21
|
focusCell: FocusCell;
|
|
21
22
|
highlightedIndex?: number;
|
|
22
23
|
label?: string;
|
|
@@ -30,7 +31,7 @@ export interface NavigationHookProps {
|
|
|
30
31
|
selected?: unknown;
|
|
31
32
|
viewportRowCount: number;
|
|
32
33
|
}
|
|
33
|
-
export declare const useKeyboardNavigation: ({ cellFocusStateRef, columnCount, containerRef, defaultHighlightedIndex, disableHighlightOnFocus, focusCell, headerCount, highlightedIndex: highlightedIndexProp, navigationStyle, requestScroll, onHighlight, onToggleGroup, rowCount, viewportRowCount, }: NavigationHookProps) => {
|
|
34
|
+
export declare const useKeyboardNavigation: ({ cellFocusStateRef, columnCount, containerRef, defaultHighlightedIndex, disableHighlightOnFocus, editSessionInProgress, focusCell, headerCount, highlightedIndex: highlightedIndexProp, navigationStyle, requestScroll, onHighlight, onToggleGroup, rowCount, viewportRowCount, }: NavigationHookProps) => {
|
|
34
35
|
highlightedIndexRef: RefObject<number | undefined>;
|
|
35
36
|
navigateCell: () => void;
|
|
36
37
|
onClick: (evt: MouseEvent) => void;
|
package/types/useTable.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { ColumnDescriptor, ColumnMoveHandler,
|
|
1
|
+
import type { VuuSortType } from "@vuu-ui/vuu-protocol-types";
|
|
2
|
+
import type { ColumnDescriptor, ColumnMoveHandler, RuntimeColumnDescriptor, TableColumnResizeHandler, TableConfig, TableRowClickHandlerInternal, TableSelectionModel, DataRow } from "@vuu-ui/vuu-table-types";
|
|
3
3
|
import { MeasuredProps, MeasuredSize } from "@vuu-ui/vuu-ui-controls";
|
|
4
4
|
import { FocusEvent, KeyboardEvent, MouseEventHandler, RefObject } from "react";
|
|
5
5
|
import { TableProps } from "./Table";
|
|
@@ -7,13 +7,13 @@ type HeaderState = {
|
|
|
7
7
|
height: number;
|
|
8
8
|
count: number;
|
|
9
9
|
};
|
|
10
|
-
export interface TableHookProps extends MeasuredProps, Pick<TableProps, "allowCellBlockSelection" | "allowDragDrop" | "allowSelectCheckboxRow" | "autoSelectFirstRow" | "autoSelectRowKey" | "config" | "dataSource" | "disableFocus" | "highlightedIndex" | "id" | "navigationStyle" | "onConfigChange" | "
|
|
10
|
+
export interface TableHookProps extends MeasuredProps, Pick<TableProps, "allowCellBlockSelection" | "allowDragDrop" | "allowSelectCheckboxRow" | "autoSelectFirstRow" | "autoSelectRowKey" | "config" | "dataSource" | "disableFocus" | "highlightedIndex" | "id" | "navigationStyle" | "onConfigChange" | "onDragStart" | "onDrop" | "onHighlight" | "onSelect" | "onSelectCellBlock" | "onSelectionChange" | "onRowClick" | "renderBufferSize" | "revealSelected" | "scrollingApiRef" | "showColumnHeaders" | "showPaginationControls"> {
|
|
11
11
|
containerRef: RefObject<HTMLDivElement | null>;
|
|
12
12
|
rowHeight: number;
|
|
13
13
|
selectionModel: TableSelectionModel;
|
|
14
14
|
size: MeasuredSize;
|
|
15
15
|
}
|
|
16
|
-
export declare const useTable: ({ allowCellBlockSelection, allowSelectCheckboxRow, allowDragDrop, autoSelectFirstRow, autoSelectRowKey, config, containerRef, dataSource, disableFocus, highlightedIndex: highlightedIndexProp, id, navigationStyle, onConfigChange,
|
|
16
|
+
export declare const useTable: ({ allowCellBlockSelection, allowSelectCheckboxRow, allowDragDrop, autoSelectFirstRow, autoSelectRowKey, config, containerRef, dataSource, disableFocus, highlightedIndex: highlightedIndexProp, id, navigationStyle, onConfigChange, onDragStart, onDrop, onHighlight, onRowClick: onRowClickProp, onSelect, onSelectCellBlock, onSelectionChange, renderBufferSize, revealSelected, rowHeight, scrollingApiRef, selectionModel, showColumnHeaders, showPaginationControls, size, }: TableHookProps) => {
|
|
17
17
|
allRowsSelected: boolean;
|
|
18
18
|
"aria-rowcount": number;
|
|
19
19
|
cellBlock: import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | null;
|
|
@@ -35,7 +35,6 @@ export declare const useTable: ({ allowCellBlockSelection, allowSelectCheckboxRo
|
|
|
35
35
|
onKeyDown: (e: KeyboardEvent<HTMLElement>) => void;
|
|
36
36
|
onMouseDown: MouseEventHandler;
|
|
37
37
|
onContextMenu: ((evt: import("react").MouseEvent<HTMLElement>) => void) | undefined;
|
|
38
|
-
onDataEdited: (editState: DataCellEditEvent) => Promise<RpcResult | undefined>;
|
|
39
38
|
onHeaderHeightMeasured: (height: number, count: number) => void;
|
|
40
39
|
onMoveColumn: ColumnMoveHandler;
|
|
41
40
|
onMoveGroupColumn: (columns: ColumnDescriptor[]) => void;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BulkEditRow.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BulkEditRow.js","sources":["../../../../packages/vuu-table/src/bulk-edit/BulkEditRow.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { BaseRowProps, ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport cx from \"clsx\";\nimport { HTMLAttributes } from \"react\";\nimport { VirtualColSpan } from \"../VirtualColSpan\";\nimport { useHeaderProps } from \"../table-header\";\nimport { useBulkEditRow } from \"./useBulkEditRow\";\n\nimport bulkEditRowCss from \"./BulkEditRow.css\";\nimport { isNotHidden } from \"@vuu-ui/vuu-utils\";\n\nconst classBase = \"vuuBulkEditRow\";\n\nexport type EditValueChangeHandler = (\n column: ColumnDescriptor,\n value: VuuRowDataItemType,\n) => void;\nexport interface BulkEditProps\n extends Partial<BaseRowProps>,\n Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n onBulkChange: EditValueChangeHandler;\n onRowChange: (isValid: boolean) => void;\n}\n\nexport const BulkEditRow = ({\n ariaRole,\n onBulkChange,\n onRowChange,\n ...htmlAttributes\n}: BulkEditProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-bulk-edit-row\",\n css: bulkEditRowCss,\n window: targetWindow,\n });\n\n const { columns, virtualColSpan = 0 } = useHeaderProps();\n\n const {\n errorMessages,\n formFieldsContainerRef,\n InputProps,\n onCommit,\n onFocus,\n onKeyDown,\n } = useBulkEditRow({\n descriptors: columns,\n onBulkChange,\n onRowChange,\n });\n\n return (\n <div\n {...htmlAttributes}\n className={classBase}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n ref={formFieldsContainerRef}\n role={ariaRole}\n >\n <VirtualColSpan width={virtualColSpan} />\n {columns.filter(isNotHidden).map((column, i) => {\n const errorMessage = errorMessages[column.name];\n return (\n <div\n aria-colindex={i + 1}\n className={cx(`${classBase}Cell`, \"vuuTableCell\", {\n \"vuuTableCell-right\": column.align === \"right\",\n })}\n data-field={column.name}\n key={column.name}\n role=\"cell\"\n style={{ width: column.width }}\n >\n {column.editable\n ? getDataItemEditControl({\n InputProps,\n dataDescriptor: column,\n errorMessage,\n onCommit,\n })\n : null}\n </div>\n );\n })}\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","bulkEditRowCss","useHeaderProps","useBulkEditRow","jsxs","jsx","VirtualColSpan","isNotHidden","getDataItemEditControl"],"mappings":";;;;;;;;;;;;;;AAcA,MAAM,SAAY,GAAA,gBAAA;AAaX,MAAM,cAAc,CAAC;AAAA,EAC1B,QAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAG;AACL,CAAqB,KAAA;AACnB,EAAA,MAAM,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAAC,aAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,OAAA,EAAS,cAAiB,GAAA,CAAA,KAAMC,6BAAe,EAAA;AAEvD,EAAM,MAAA;AAAA,IACJ,aAAA;AAAA,IACA,sBAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,MACEC,6BAAe,CAAA;AAAA,IACjB,WAAa,EAAA,OAAA;AAAA,IACb,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EACE,uBAAAC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAW,EAAA,SAAA;AAAA,MACX,OAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAK,EAAA,sBAAA;AAAA,MACL,IAAM,EAAA,QAAA;AAAA,MAEN,QAAA,EAAA;AAAA,wBAACC,cAAA,CAAAC,6BAAA,EAAA,EAAe,OAAO,cAAgB,EAAA,CAAA;AAAA,QACtC,QAAQ,MAAO,CAAAC,oBAAW,EAAE,GAAI,CAAA,CAAC,QAAQ,CAAM,KAAA;AAC9C,UAAM,MAAA,YAAA,GAAe,aAAc,CAAA,MAAA,CAAO,IAAI,CAAA;AAC9C,UACE,uBAAAF,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,iBAAe,CAAI,GAAA,CAAA;AAAA,cACnB,SAAW,EAAA,EAAA,CAAG,CAAG,EAAA,SAAS,QAAQ,cAAgB,EAAA;AAAA,gBAChD,oBAAA,EAAsB,OAAO,KAAU,KAAA;AAAA,eACxC,CAAA;AAAA,cACD,cAAY,MAAO,CAAA,IAAA;AAAA,cAEnB,IAAK,EAAA,MAAA;AAAA,cACL,KAAO,EAAA,EAAE,KAAO,EAAA,MAAA,CAAO,KAAM,EAAA;AAAA,cAE5B,QAAA,EAAA,MAAA,CAAO,WACJG,mCAAuB,CAAA;AAAA,gBACrB,UAAA;AAAA,gBACA,cAAgB,EAAA,MAAA;AAAA,gBAChB,YAAA;AAAA,gBACA;AAAA,eACD,CACD,GAAA;AAAA,aAAA;AAAA,YAXC,MAAO,CAAA;AAAA,WAYd;AAAA,SAEH;AAAA;AAAA;AAAA,GACH;AAEJ;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useBulkEditRow.js","sources":["../../../../packages/vuu-table/src/bulk-edit/useBulkEditRow.tsx"],"sourcesContent":["import {\n buildValidationChecker,\n getEditValidationRules,\n} from \"@vuu-ui/vuu-data-react\";\nimport { DataValueDescriptor, EditPhase } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { CommitHandler, getTypedValue, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport { InputProps } from \"@salt-ds/core\";\nimport {\n FocusEventHandler,\n SyntheticEvent,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useEditableCell } from \"../useEditableCell\";\n\nexport type EditValueChangeHandler = (\n column: ColumnDescriptor,\n value: VuuRowDataItemType,\n) => void;\n\nexport interface EditableBulkHookProps {\n descriptors: DataValueDescriptor[];\n onBulkChange: EditValueChangeHandler;\n onRowChange: (isValid: boolean) => void;\n}\ntype ValidationState = {\n ok: boolean;\n messages: Record<string, string>;\n};\n\nconst getValidationChecker = (\n descriptor: DataValueDescriptor,\n editPhase: EditPhase | \"*\",\n) => {\n const rules = getEditValidationRules(descriptor, editPhase);\n return buildValidationChecker(rules);\n};\n\nconst nextValidationState = (\n state: ValidationState,\n dataDescriptor: DataValueDescriptor,\n value: VuuRowDataItemType,\n): ValidationState => {\n const check = getValidationChecker(dataDescriptor, \"change\");\n const result = check(value, \"change\");\n const { name } = dataDescriptor;\n\n const { ok: wasOk, messages: existingMessages } = state;\n\n if (result.ok) {\n if (!wasOk) {\n // if this field was the only one in error, the overall state\n // will now be ok, but not if there is still one or more other\n // field still in error.\n const fieldsInError = Object.keys(existingMessages);\n if (fieldsInError.includes(name)) {\n if (fieldsInError.length === 1) {\n return { ok: true, messages: {} };\n } else {\n const messages = { ...existingMessages };\n delete messages[name];\n return { ok: false, messages };\n }\n }\n }\n } else {\n return {\n ok: false,\n messages: {\n ...existingMessages,\n [name]: result.messages.join(\"\\n\"),\n },\n };\n }\n\n return state;\n};\n\nfunction find(descriptors: DataValueDescriptor[], fieldname: string) {\n const d = descriptors.find(({ name }) => name === fieldname);\n if (d) {\n return d;\n }\n throw Error(`DataValueDescriptor not found for field ${fieldname}`);\n}\n\nconst getField = (target: EventTarget | HTMLElement) => {\n const fieldElement = queryClosest(target, \"[data-field]\");\n if (fieldElement) {\n return fieldElement.dataset.field as string;\n } else {\n throw Error(\"no field \");\n }\n};\n\nexport const useBulkEditRow = ({\n descriptors,\n onBulkChange,\n onRowChange,\n}: EditableBulkHookProps) => {\n const formFieldsContainerRef = useRef<HTMLDivElement>(null);\n const focusedFieldRef = useRef(\"\");\n const [, forceUpdate] = useState({});\n const validationStateRef = useRef<ValidationState>({\n ok: true,\n messages: {},\n });\n\n const bulkRowValidationState = useCallback(\n (state: ValidationState) => {\n validationStateRef.current = state;\n onRowChange(state.ok);\n forceUpdate({});\n },\n [onRowChange],\n );\n\n const handleFocus = useCallback<FocusEventHandler>((evt) => {\n // Ignore focus on popup Calendars, Lists etc\n if (formFieldsContainerRef.current?.contains(evt.target)) {\n const fieldName = getField(evt.target);\n if (fieldName) {\n if (fieldName) {\n focusedFieldRef.current = fieldName;\n }\n }\n }\n }, []);\n\n const handleChange = useCallback(\n (evt: SyntheticEvent<HTMLInputElement>) => {\n const { current: fieldName } = focusedFieldRef;\n if (fieldName) {\n const input = queryClosest<HTMLInputElement>(evt.target, \"input\", true);\n const dataDescriptor = find(descriptors, fieldName);\n const value = input.value as string;\n const { current: state } = validationStateRef;\n const newState = nextValidationState(state, dataDescriptor, value);\n if (newState !== state) {\n bulkRowValidationState(newState);\n }\n }\n },\n [descriptors, bulkRowValidationState],\n );\n\n const {\n current: { messages: errorMessages },\n } = validationStateRef;\n\n const handleCommit = useCallback<CommitHandler<HTMLElement>>(\n (evt, value) => {\n if (typeof value === \"string\" && value.trim() !== \"\") {\n const columnName = focusedFieldRef.current;\n if (columnName) {\n const column = descriptors.find((c) => c.name === columnName);\n if (column && errorMessages[columnName] === undefined) {\n const { serverDataType = \"string\" } = column;\n const typedValue = getTypedValue(value, serverDataType, true);\n onBulkChange(column, typedValue);\n }\n }\n }\n },\n [descriptors, errorMessages, onBulkChange],\n );\n\n const InputProps = useMemo<Partial<InputProps>>(\n () => ({\n inputProps: {\n placeholder: \"Enter value\",\n },\n onChange: handleChange,\n variant: \"primary\",\n }),\n [handleChange],\n );\n\n const onKeyDown = useEditableCell();\n\n return {\n errorMessages,\n formFieldsContainerRef,\n InputProps,\n onCommit: handleCommit,\n onFocus: handleFocus,\n onKeyDown,\n };\n};\n"],"names":["getEditValidationRules","buildValidationChecker","queryClosest","useRef","useState","useCallback","getTypedValue","InputProps","useMemo","useEditableCell"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useHighlighting.js","sources":["../../../packages/vuu-table/src/useHighlighting.tsx"],"sourcesContent":["import { ReactElement } from \"react\";\n\nexport const useHighlighting = (\n value: string,\n pattern: Lowercase<string>,\n): string | ReactElement => {\n if (pattern === \"\") {\n return value;\n }\n // eslint-disable-next-line react/display-name\n const lowercaseValue = value.toLowerCase();\n let start = 0;\n let end = lowercaseValue.indexOf(pattern);\n if (end === -1) {\n return value;\n }\n const results = [];\n\n while (end !== -1) {\n results.push(value.slice(start, end));\n start = end;\n end = start + pattern.length;\n results.push(\n <span className=\"vuuHighlight\" key={start}>\n {value.slice(start, end)}\n </span>,\n );\n start = end;\n end = lowercaseValue.indexOf(pattern, start);\n if (end === -1 && start < lowercaseValue.length) {\n results.push(value.slice(start));\n }\n }\n\n return <span style={{ whiteSpace: \"pre\" }}>{results}</span>;\n};\n"],"names":["jsx"],"mappings":";;;;AAEa,MAAA,eAAA,GAAkB,CAC7B,KAAA,EACA,OAC0B,KAAA;AAC1B,EAAA,IAAI,YAAY,EAAI,EAAA;AAClB,IAAO,OAAA,KAAA;AAAA;AAGT,EAAM,MAAA,cAAA,GAAiB,MAAM,WAAY,EAAA;AACzC,EAAA,IAAI,KAAQ,GAAA,CAAA;AACZ,EAAI,IAAA,GAAA,GAAM,cAAe,CAAA,OAAA,CAAQ,OAAO,CAAA;AACxC,EAAA,IAAI,QAAQ,CAAI,CAAA,EAAA;AACd,IAAO,OAAA,KAAA;AAAA;AAET,EAAA,MAAM,UAAU,EAAC;AAEjB,EAAA,OAAO,QAAQ,CAAI,CAAA,EAAA;AACjB,IAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAM,KAAM,CAAA,KAAA,EAAO,GAAG,CAAC,CAAA;AACpC,IAAQ,KAAA,GAAA,GAAA;AACR,IAAA,GAAA,GAAM,QAAQ,OAAQ,CAAA,MAAA;AACtB,IAAQ,OAAA,CAAA,IAAA;AAAA,sBACNA,cAAA,CAAC,UAAK,SAAU,EAAA,cAAA,EACb,gBAAM,KAAM,CAAA,KAAA,EAAO,GAAG,CAAA,EAAA,EADW,KAEpC;AAAA,KACF;AACA,IAAQ,KAAA,GAAA,GAAA;AACR,IAAM,GAAA,GAAA,cAAA,CAAe,OAAQ,CAAA,OAAA,EAAS,KAAK,CAAA;AAC3C,IAAA,IAAI,GAAQ,KAAA,CAAA,CAAA,IAAM,KAAQ,GAAA,cAAA,CAAe,MAAQ,EAAA;AAC/C,MAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAM,KAAM,CAAA,KAAK,CAAC,CAAA;AAAA;AACjC;AAGF,EAAA,sCAAQ,MAAK,EAAA,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,KAAA,IAAU,QAAQ,EAAA,OAAA,EAAA,CAAA;AACtD;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BulkEditRow.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BulkEditRow.js","sources":["../../../../packages/vuu-table/src/bulk-edit/BulkEditRow.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { getDataItemEditControl } from \"@vuu-ui/vuu-data-react\";\nimport { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { BaseRowProps, ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport cx from \"clsx\";\nimport { HTMLAttributes } from \"react\";\nimport { VirtualColSpan } from \"../VirtualColSpan\";\nimport { useHeaderProps } from \"../table-header\";\nimport { useBulkEditRow } from \"./useBulkEditRow\";\n\nimport bulkEditRowCss from \"./BulkEditRow.css\";\nimport { isNotHidden } from \"@vuu-ui/vuu-utils\";\n\nconst classBase = \"vuuBulkEditRow\";\n\nexport type EditValueChangeHandler = (\n column: ColumnDescriptor,\n value: VuuRowDataItemType,\n) => void;\nexport interface BulkEditProps\n extends Partial<BaseRowProps>,\n Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n onBulkChange: EditValueChangeHandler;\n onRowChange: (isValid: boolean) => void;\n}\n\nexport const BulkEditRow = ({\n ariaRole,\n onBulkChange,\n onRowChange,\n ...htmlAttributes\n}: BulkEditProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-bulk-edit-row\",\n css: bulkEditRowCss,\n window: targetWindow,\n });\n\n const { columns, virtualColSpan = 0 } = useHeaderProps();\n\n const {\n errorMessages,\n formFieldsContainerRef,\n InputProps,\n onCommit,\n onFocus,\n onKeyDown,\n } = useBulkEditRow({\n descriptors: columns,\n onBulkChange,\n onRowChange,\n });\n\n return (\n <div\n {...htmlAttributes}\n className={classBase}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n ref={formFieldsContainerRef}\n role={ariaRole}\n >\n <VirtualColSpan width={virtualColSpan} />\n {columns.filter(isNotHidden).map((column, i) => {\n const errorMessage = errorMessages[column.name];\n return (\n <div\n aria-colindex={i + 1}\n className={cx(`${classBase}Cell`, \"vuuTableCell\", {\n \"vuuTableCell-right\": column.align === \"right\",\n })}\n data-field={column.name}\n key={column.name}\n role=\"cell\"\n style={{ width: column.width }}\n >\n {column.editable\n ? getDataItemEditControl({\n InputProps,\n dataDescriptor: column,\n errorMessage,\n onCommit,\n })\n : null}\n </div>\n );\n })}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAcA,MAAM,SAAY,GAAA,gBAAA;AAaX,MAAM,cAAc,CAAC;AAAA,EAC1B,QAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAG;AACL,CAAqB,KAAA;AACnB,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAA,cAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,OAAA,EAAS,cAAiB,GAAA,CAAA,KAAM,cAAe,EAAA;AAEvD,EAAM,MAAA;AAAA,IACJ,aAAA;AAAA,IACA,sBAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,MACE,cAAe,CAAA;AAAA,IACjB,WAAa,EAAA,OAAA;AAAA,IACb,YAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EACE,uBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAW,EAAA,SAAA;AAAA,MACX,OAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAK,EAAA,sBAAA;AAAA,MACL,IAAM,EAAA,QAAA;AAAA,MAEN,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,cAAA,EAAA,EAAe,OAAO,cAAgB,EAAA,CAAA;AAAA,QACtC,QAAQ,MAAO,CAAA,WAAW,EAAE,GAAI,CAAA,CAAC,QAAQ,CAAM,KAAA;AAC9C,UAAM,MAAA,YAAA,GAAe,aAAc,CAAA,MAAA,CAAO,IAAI,CAAA;AAC9C,UACE,uBAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,iBAAe,CAAI,GAAA,CAAA;AAAA,cACnB,SAAW,EAAA,EAAA,CAAG,CAAG,EAAA,SAAS,QAAQ,cAAgB,EAAA;AAAA,gBAChD,oBAAA,EAAsB,OAAO,KAAU,KAAA;AAAA,eACxC,CAAA;AAAA,cACD,cAAY,MAAO,CAAA,IAAA;AAAA,cAEnB,IAAK,EAAA,MAAA;AAAA,cACL,KAAO,EAAA,EAAE,KAAO,EAAA,MAAA,CAAO,KAAM,EAAA;AAAA,cAE5B,QAAA,EAAA,MAAA,CAAO,WACJ,sBAAuB,CAAA;AAAA,gBACrB,UAAA;AAAA,gBACA,cAAgB,EAAA,MAAA;AAAA,gBAChB,YAAA;AAAA,gBACA;AAAA,eACD,CACD,GAAA;AAAA,aAAA;AAAA,YAXC,MAAO,CAAA;AAAA,WAYd;AAAA,SAEH;AAAA;AAAA;AAAA,GACH;AAEJ;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useBulkEditRow.js","sources":["../../../../packages/vuu-table/src/bulk-edit/useBulkEditRow.tsx"],"sourcesContent":["import {\n buildValidationChecker,\n getEditValidationRules,\n} from \"@vuu-ui/vuu-data-react\";\nimport { DataValueDescriptor, EditPhase } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { CommitHandler, getTypedValue, queryClosest } from \"@vuu-ui/vuu-utils\";\nimport { InputProps } from \"@salt-ds/core\";\nimport {\n FocusEventHandler,\n SyntheticEvent,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useEditableCell } from \"../useEditableCell\";\n\nexport type EditValueChangeHandler = (\n column: ColumnDescriptor,\n value: VuuRowDataItemType,\n) => void;\n\nexport interface EditableBulkHookProps {\n descriptors: DataValueDescriptor[];\n onBulkChange: EditValueChangeHandler;\n onRowChange: (isValid: boolean) => void;\n}\ntype ValidationState = {\n ok: boolean;\n messages: Record<string, string>;\n};\n\nconst getValidationChecker = (\n descriptor: DataValueDescriptor,\n editPhase: EditPhase | \"*\",\n) => {\n const rules = getEditValidationRules(descriptor, editPhase);\n return buildValidationChecker(rules);\n};\n\nconst nextValidationState = (\n state: ValidationState,\n dataDescriptor: DataValueDescriptor,\n value: VuuRowDataItemType,\n): ValidationState => {\n const check = getValidationChecker(dataDescriptor, \"change\");\n const result = check(value, \"change\");\n const { name } = dataDescriptor;\n\n const { ok: wasOk, messages: existingMessages } = state;\n\n if (result.ok) {\n if (!wasOk) {\n // if this field was the only one in error, the overall state\n // will now be ok, but not if there is still one or more other\n // field still in error.\n const fieldsInError = Object.keys(existingMessages);\n if (fieldsInError.includes(name)) {\n if (fieldsInError.length === 1) {\n return { ok: true, messages: {} };\n } else {\n const messages = { ...existingMessages };\n delete messages[name];\n return { ok: false, messages };\n }\n }\n }\n } else {\n return {\n ok: false,\n messages: {\n ...existingMessages,\n [name]: result.messages.join(\"\\n\"),\n },\n };\n }\n\n return state;\n};\n\nfunction find(descriptors: DataValueDescriptor[], fieldname: string) {\n const d = descriptors.find(({ name }) => name === fieldname);\n if (d) {\n return d;\n }\n throw Error(`DataValueDescriptor not found for field ${fieldname}`);\n}\n\nconst getField = (target: EventTarget | HTMLElement) => {\n const fieldElement = queryClosest(target, \"[data-field]\");\n if (fieldElement) {\n return fieldElement.dataset.field as string;\n } else {\n throw Error(\"no field \");\n }\n};\n\nexport const useBulkEditRow = ({\n descriptors,\n onBulkChange,\n onRowChange,\n}: EditableBulkHookProps) => {\n const formFieldsContainerRef = useRef<HTMLDivElement>(null);\n const focusedFieldRef = useRef(\"\");\n const [, forceUpdate] = useState({});\n const validationStateRef = useRef<ValidationState>({\n ok: true,\n messages: {},\n });\n\n const bulkRowValidationState = useCallback(\n (state: ValidationState) => {\n validationStateRef.current = state;\n onRowChange(state.ok);\n forceUpdate({});\n },\n [onRowChange],\n );\n\n const handleFocus = useCallback<FocusEventHandler>((evt) => {\n // Ignore focus on popup Calendars, Lists etc\n if (formFieldsContainerRef.current?.contains(evt.target)) {\n const fieldName = getField(evt.target);\n if (fieldName) {\n if (fieldName) {\n focusedFieldRef.current = fieldName;\n }\n }\n }\n }, []);\n\n const handleChange = useCallback(\n (evt: SyntheticEvent<HTMLInputElement>) => {\n const { current: fieldName } = focusedFieldRef;\n if (fieldName) {\n const input = queryClosest<HTMLInputElement>(evt.target, \"input\", true);\n const dataDescriptor = find(descriptors, fieldName);\n const value = input.value as string;\n const { current: state } = validationStateRef;\n const newState = nextValidationState(state, dataDescriptor, value);\n if (newState !== state) {\n bulkRowValidationState(newState);\n }\n }\n },\n [descriptors, bulkRowValidationState],\n );\n\n const {\n current: { messages: errorMessages },\n } = validationStateRef;\n\n const handleCommit = useCallback<CommitHandler<HTMLElement>>(\n (evt, value) => {\n if (typeof value === \"string\" && value.trim() !== \"\") {\n const columnName = focusedFieldRef.current;\n if (columnName) {\n const column = descriptors.find((c) => c.name === columnName);\n if (column && errorMessages[columnName] === undefined) {\n const { serverDataType = \"string\" } = column;\n const typedValue = getTypedValue(value, serverDataType, true);\n onBulkChange(column, typedValue);\n }\n }\n }\n },\n [descriptors, errorMessages, onBulkChange],\n );\n\n const InputProps = useMemo<Partial<InputProps>>(\n () => ({\n inputProps: {\n placeholder: \"Enter value\",\n },\n onChange: handleChange,\n variant: \"primary\",\n }),\n [handleChange],\n );\n\n const onKeyDown = useEditableCell();\n\n return {\n errorMessages,\n formFieldsContainerRef,\n InputProps,\n onCommit: handleCommit,\n onFocus: handleFocus,\n onKeyDown,\n };\n};\n"],"names":["InputProps"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useHighlighting.js","sources":["../../../packages/vuu-table/src/useHighlighting.tsx"],"sourcesContent":["import { ReactElement } from \"react\";\n\nexport const useHighlighting = (\n value: string,\n pattern: Lowercase<string>,\n): string | ReactElement => {\n if (pattern === \"\") {\n return value;\n }\n // eslint-disable-next-line react/display-name\n const lowercaseValue = value.toLowerCase();\n let start = 0;\n let end = lowercaseValue.indexOf(pattern);\n if (end === -1) {\n return value;\n }\n const results = [];\n\n while (end !== -1) {\n results.push(value.slice(start, end));\n start = end;\n end = start + pattern.length;\n results.push(\n <span className=\"vuuHighlight\" key={start}>\n {value.slice(start, end)}\n </span>,\n );\n start = end;\n end = lowercaseValue.indexOf(pattern, start);\n if (end === -1 && start < lowercaseValue.length) {\n results.push(value.slice(start));\n }\n }\n\n return <span style={{ whiteSpace: \"pre\" }}>{results}</span>;\n};\n"],"names":[],"mappings":";;AAEa,MAAA,eAAA,GAAkB,CAC7B,KAAA,EACA,OAC0B,KAAA;AAC1B,EAAA,IAAI,YAAY,EAAI,EAAA;AAClB,IAAO,OAAA,KAAA;AAAA;AAGT,EAAM,MAAA,cAAA,GAAiB,MAAM,WAAY,EAAA;AACzC,EAAA,IAAI,KAAQ,GAAA,CAAA;AACZ,EAAI,IAAA,GAAA,GAAM,cAAe,CAAA,OAAA,CAAQ,OAAO,CAAA;AACxC,EAAA,IAAI,QAAQ,CAAI,CAAA,EAAA;AACd,IAAO,OAAA,KAAA;AAAA;AAET,EAAA,MAAM,UAAU,EAAC;AAEjB,EAAA,OAAO,QAAQ,CAAI,CAAA,EAAA;AACjB,IAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAM,KAAM,CAAA,KAAA,EAAO,GAAG,CAAC,CAAA;AACpC,IAAQ,KAAA,GAAA,GAAA;AACR,IAAA,GAAA,GAAM,QAAQ,OAAQ,CAAA,MAAA;AACtB,IAAQ,OAAA,CAAA,IAAA;AAAA,sBACN,GAAA,CAAC,UAAK,SAAU,EAAA,cAAA,EACb,gBAAM,KAAM,CAAA,KAAA,EAAO,GAAG,CAAA,EAAA,EADW,KAEpC;AAAA,KACF;AACA,IAAQ,KAAA,GAAA,GAAA;AACR,IAAM,GAAA,GAAA,cAAA,CAAe,OAAQ,CAAA,OAAA,EAAS,KAAK,CAAA;AAC3C,IAAA,IAAI,GAAQ,KAAA,CAAA,CAAA,IAAM,KAAQ,GAAA,cAAA,CAAe,MAAQ,EAAA;AAC/C,MAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAM,KAAM,CAAA,KAAK,CAAC,CAAA;AAAA;AACjC;AAGF,EAAA,2BAAQ,MAAK,EAAA,EAAA,KAAA,EAAO,EAAE,UAAY,EAAA,KAAA,IAAU,QAAQ,EAAA,OAAA,EAAA,CAAA;AACtD;;;;"}
|
|
File without changes
|