@linzjs/step-ag-grid 16.0.0 → 17.0.0
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/GridTheme.scss +138 -106
- package/dist/index.css +1 -8
- package/dist/node_modules/@linzjs/lui/dist/assets/svg-content.d.ts +7 -0
- package/dist/src/components/ComponentLoadingWrapper.d.ts +3 -4
- package/dist/src/components/Grid.d.ts +2 -2
- package/dist/src/components/GridCell.d.ts +5 -5
- package/dist/src/components/GridCellMultiEditor.d.ts +2 -2
- package/dist/src/components/GridNoRowsOverlay.d.ts +3 -2
- package/dist/src/components/GridPopoverHook.d.ts +3 -3
- package/dist/src/components/GridWrapper.d.ts +2 -3
- package/dist/src/components/PostSortRowsHook.d.ts +1 -1
- package/dist/src/components/gridFilter/GridFilterButtons.d.ts +2 -2
- package/dist/src/components/gridFilter/GridFilterColumnsToggle.d.ts +2 -2
- package/dist/src/components/gridFilter/GridFilters.d.ts +2 -5
- package/dist/src/components/gridForm/GridFormDropDown.d.ts +2 -2
- package/dist/src/components/gridForm/GridFormMessage.d.ts +2 -2
- package/dist/src/components/gridForm/GridFormMultiSelect.d.ts +2 -2
- package/dist/src/components/gridForm/GridFormPopoverMenu.d.ts +3 -3
- package/dist/src/components/gridForm/GridFormSubComponentTextArea.d.ts +2 -2
- package/dist/src/components/gridForm/GridFormSubComponentTextInput.d.ts +2 -2
- package/dist/src/components/gridForm/GridFormTextArea.d.ts +2 -2
- package/dist/src/components/gridRender/GridRenderGenericCell.d.ts +2 -2
- package/dist/src/contexts/GridContext.d.ts +4 -4
- package/dist/src/contexts/GridContextProvider.d.ts +2 -6
- package/dist/src/contexts/GridPopoverContextProvider.d.ts +2 -3
- package/dist/src/contexts/GridUpdatingContextProvider.d.ts +2 -6
- package/dist/src/lui/ActionButton.d.ts +2 -2
- package/dist/src/lui/FormError.d.ts +2 -2
- package/dist/src/lui/TextAreaInput.d.ts +3 -3
- package/dist/src/lui/TextInputFormatted.d.ts +3 -3
- package/dist/src/react-menu3/components/FocusableItem.d.ts +2 -2
- package/dist/src/react-menu3/utils/withHovering.d.ts +2 -2
- package/dist/src/utils/textValidator.d.ts +3 -3
- package/dist/step-ag-grid.cjs.js +31 -15
- package/dist/step-ag-grid.cjs.js.map +1 -1
- package/dist/step-ag-grid.esm.js +31 -15
- package/dist/step-ag-grid.esm.js.map +1 -1
- package/package.json +45 -45
- package/src/components/ComponentLoadingWrapper.tsx +9 -6
- package/src/components/Grid.tsx +19 -10
- package/src/components/GridCell.tsx +5 -5
- package/src/components/GridCellMultiEditor.tsx +2 -2
- package/src/components/GridNoRowsOverlay.tsx +4 -2
- package/src/components/GridPopoverHook.tsx +4 -4
- package/src/components/GridWrapper.tsx +2 -3
- package/src/components/PostSortRowsHook.ts +4 -4
- package/src/components/gridFilter/GridFilterButtons.tsx +2 -2
- package/src/components/gridFilter/GridFilterColumnsToggle.tsx +2 -2
- package/src/components/gridFilter/GridFilters.tsx +4 -6
- package/src/components/gridForm/GridFormDropDown.tsx +4 -4
- package/src/components/gridForm/GridFormMessage.tsx +3 -3
- package/src/components/gridForm/GridFormMultiSelect.tsx +2 -1
- package/src/components/gridForm/GridFormPopoverMenu.tsx +4 -4
- package/src/components/gridForm/GridFormSubComponentTextArea.tsx +2 -2
- package/src/components/gridForm/GridFormSubComponentTextInput.tsx +2 -2
- package/src/components/gridForm/GridFormTextArea.tsx +2 -2
- package/src/components/gridPopoverEdit/GridPopoverMessage.ts +1 -1
- package/src/components/gridRender/GridRenderGenericCell.tsx +2 -1
- package/src/contexts/GridContext.tsx +4 -4
- package/src/contexts/GridContextProvider.tsx +26 -20
- package/src/contexts/GridPopoverContextProvider.tsx +2 -3
- package/src/contexts/GridUpdatingContextProvider.tsx +2 -6
- package/src/lui/ActionButton.tsx +2 -2
- package/src/lui/FormError.tsx +3 -1
- package/src/lui/TextAreaInput.tsx +3 -3
- package/src/lui/TextInputFormatted.tsx +3 -3
- package/src/lui/reactUtils.test.tsx +3 -3
- package/src/react-menu3/components/FocusableItem.tsx +2 -2
- package/src/react-menu3/utils/utils.ts +1 -1
- package/src/react-menu3/utils/withHovering.tsx +2 -2
- package/src/stories/grid/FormTest.tsx +2 -2
- package/src/stories/grid/GridFilterButtons.stories.tsx +8 -1
- package/src/stories/grid/GridNoRowsOverlay.stories.tsx +8 -8
- package/src/stories/grid/GridNonEditableRow.stories.tsx +9 -2
- package/src/stories/grid/GridPopoutContextMenu.stories.tsx +8 -1
- package/src/stories/grid/GridPopoutEditGeneric.stories.tsx +8 -1
- package/src/stories/grid/GridPopoutEditGenericTextArea.stories.tsx +8 -1
- package/src/stories/grid/GridPopoverEditBearing.stories.tsx +7 -0
- package/src/stories/grid/GridPopoverEditDropDown.stories.tsx +7 -0
- package/src/stories/grid/GridPopoverEditMultiSelect.stories.tsx +7 -0
- package/src/stories/grid/GridPopoverEditMultiSelectGrid.stories.tsx +8 -0
- package/src/stories/grid/GridReadOnly.stories.tsx +10 -2
- package/src/stories/grid/gridFormInteraction/GridFormDropDownInteraction.stories.tsx +2 -2
- package/src/stories/grid/gridFormInteraction/GridFormEditBearingCorrectionInteraction.stories.tsx +7 -2
- package/src/stories/grid/gridFormInteraction/GridFormEditBearingInteraction.stories.tsx +7 -2
- package/src/stories/grid/gridFormInteraction/GridFormMultiSelectGridInteraction.stories.tsx +1 -1
- package/src/stories/grid/gridFormInteraction/GridFormMultiSelectInteraction.stories.tsx +2 -2
- package/src/stories/grid/gridFormInteraction/GridFormPopoverMenuInteraction.stories.tsx +4 -3
- package/src/stories/grid/gridFormInteraction/GridFormTextAreaInteraction.stories.tsx +3 -3
- package/src/stories/grid/gridFormInteraction/GridFormTextInputInteraction.stories.tsx +3 -3
- package/src/stories/grid/gridFormStatic/GridFormDropDown.stories.tsx +1 -1
- package/src/stories/grid/gridFormStatic/GridFormEditBearing.stories.tsx +1 -1
- package/src/stories/grid/gridFormStatic/GridFormEditBearingCorrection.stories.tsx +1 -1
- package/src/stories/grid/gridFormStatic/GridFormMessage.stories.tsx +2 -2
- package/src/stories/grid/gridFormStatic/GridFormTextArea.stories.tsx +1 -1
- package/src/stories/grid/gridFormStatic/GridFormTextInput.stories.tsx +1 -1
- package/src/stories/grid/interactions/GridKeyboardInteractions.stories.tsx +4 -0
- package/src/styles/ComponentLoadingWrapper.scss +1 -4
- package/src/styles/Grid.scss +0 -4
- package/src/styles/GridTheme.scss +138 -106
- package/src/utils/testUtil.ts +3 -0
- package/src/utils/textValidator.ts +3 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { ColDef, ColumnApi, GridApi,
|
|
1
|
+
import { ColDef, ColumnApi, GridApi, IRowNode } from "ag-grid-community";
|
|
2
2
|
import { CsvExportParams } from "ag-grid-community/dist/lib/interfaces/exportParams";
|
|
3
3
|
import { createContext, useContext } from "react";
|
|
4
4
|
|
|
5
5
|
import { ColDefT, GridBaseRow } from "../components";
|
|
6
6
|
|
|
7
|
-
export type GridFilterExternal<RowType extends GridBaseRow> = (data: RowType, rowNode:
|
|
7
|
+
export type GridFilterExternal<RowType extends GridBaseRow> = (data: RowType, rowNode: IRowNode) => boolean;
|
|
8
8
|
|
|
9
9
|
export interface AutoSizeColumnsProps {
|
|
10
10
|
skipHeader?: boolean;
|
|
@@ -51,14 +51,14 @@ export interface GridContextType<RowType extends GridBaseRow> {
|
|
|
51
51
|
setSaving?: (saving: boolean) => void,
|
|
52
52
|
tabDirection?: 1 | 0 | -1,
|
|
53
53
|
) => Promise<boolean>;
|
|
54
|
-
redrawRows: (rowNodes?:
|
|
54
|
+
redrawRows: (rowNodes?: IRowNode[]) => void;
|
|
55
55
|
externallySelectedItemsAreInSync: boolean;
|
|
56
56
|
setExternallySelectedItemsAreInSync: (inSync: boolean) => void;
|
|
57
57
|
waitForExternallySelectedItemsToBeInSync: () => Promise<void>;
|
|
58
58
|
addExternalFilter: (filter: GridFilterExternal<RowType>) => void;
|
|
59
59
|
removeExternalFilter: (filter: GridFilterExternal<RowType>) => void;
|
|
60
60
|
isExternalFilterPresent: () => boolean;
|
|
61
|
-
doesExternalFilterPass: (node:
|
|
61
|
+
doesExternalFilterPass: (node: IRowNode) => boolean;
|
|
62
62
|
invisibleColumnIds: string[] | undefined;
|
|
63
63
|
setInvisibleColumnIds: (colIds: string[]) => void;
|
|
64
64
|
downloadCsv: (csvExportParams?: CsvExportParams) => void;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { ColDef, ColumnApi, GridApi, RowNode } from "ag-grid-community";
|
|
2
|
-
import { CellPosition } from "ag-grid-community/dist/lib/entities/cellPosition";
|
|
1
|
+
import { CellPosition, ColDef, ColumnApi, GridApi, IRowNode, RowNode } from "ag-grid-community";
|
|
3
2
|
import { ValueFormatterParams } from "ag-grid-community/dist/lib/entities/colDef";
|
|
4
3
|
import { CsvExportParams, ProcessCellForExportParams } from "ag-grid-community/dist/lib/interfaces/exportParams";
|
|
5
4
|
import debounce from "debounce-promise";
|
|
6
5
|
import { compact, defer, delay, difference, filter, isEmpty, last, pull, remove, sortBy, sumBy } from "lodash-es";
|
|
7
|
-
import {
|
|
6
|
+
import { PropsWithChildren, ReactElement, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
8
7
|
|
|
9
8
|
import { ColDefT, GridBaseRow } from "../components";
|
|
10
9
|
import { GridCellFillerColId, isGridCellFiller } from "../components/GridCellFiller";
|
|
@@ -13,16 +12,12 @@ import { isNotEmpty, sanitiseFileName, wait } from "../utils/util";
|
|
|
13
12
|
import { AutoSizeColumnsProps, AutoSizeColumnsResult, GridContext, GridFilterExternal } from "./GridContext";
|
|
14
13
|
import { GridUpdatingContext } from "./GridUpdatingContext";
|
|
15
14
|
|
|
16
|
-
interface GridContextProps {
|
|
17
|
-
children: ReactNode;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
15
|
/**
|
|
21
16
|
* Context for AgGrid operations.
|
|
22
17
|
* Make sure you wrap AgGrid in this.
|
|
23
18
|
* Also, make sure the provider is created in a separate component, otherwise it won't be found.
|
|
24
19
|
*/
|
|
25
|
-
export const GridContextProvider = <RowType extends GridBaseRow>(props:
|
|
20
|
+
export const GridContextProvider = <RowType extends GridBaseRow>(props: PropsWithChildren): ReactElement => {
|
|
26
21
|
const { modifyUpdating, checkUpdating } = useContext(GridUpdatingContext);
|
|
27
22
|
const [gridApi, setGridApi] = useState<GridApi>();
|
|
28
23
|
const [columnApi, setColumnApi] = useState<ColumnApi>();
|
|
@@ -167,7 +162,7 @@ export const GridContextProvider = <RowType extends GridBaseRow>(props: GridCont
|
|
|
167
162
|
* Find new row ids
|
|
168
163
|
* Uses beforeUpdate ids to find new nodes.
|
|
169
164
|
*/
|
|
170
|
-
const _getNewNodes = useCallback(():
|
|
165
|
+
const _getNewNodes = useCallback((): IRowNode[] => {
|
|
171
166
|
return gridApiOp(
|
|
172
167
|
(gridApi) =>
|
|
173
168
|
compact(difference(_getAllRowIds(), idsBeforeUpdate.current).map((rowId) => gridApi.getRowNode("" + rowId))),
|
|
@@ -182,7 +177,7 @@ export const GridContextProvider = <RowType extends GridBaseRow>(props: GridCont
|
|
|
182
177
|
* @param rowIds Row ids to get from grid.
|
|
183
178
|
*/
|
|
184
179
|
const _rowIdsToNodes = useCallback(
|
|
185
|
-
(rowIds: number[]):
|
|
180
|
+
(rowIds: number[]): IRowNode[] => {
|
|
186
181
|
return gridApiOp(
|
|
187
182
|
(gridApi) => compact(rowIds.map((rowId) => gridApi.getRowNode("" + rowId))),
|
|
188
183
|
() => [] as RowNode[],
|
|
@@ -240,7 +235,14 @@ export const GridContextProvider = <RowType extends GridBaseRow>(props: GridCont
|
|
|
240
235
|
// After retry count expires we give-up and deselect all rows, then select any subset of rows that have updated
|
|
241
236
|
if (gridHasNotUpdated && retryCount > 0) {
|
|
242
237
|
delay(
|
|
243
|
-
() =>
|
|
238
|
+
() =>
|
|
239
|
+
_selectRowsWithOptionalFlash({
|
|
240
|
+
rowIds,
|
|
241
|
+
select,
|
|
242
|
+
flash,
|
|
243
|
+
ifNoCellFocused,
|
|
244
|
+
retryCount: retryCount - 1,
|
|
245
|
+
}),
|
|
244
246
|
250,
|
|
245
247
|
);
|
|
246
248
|
return;
|
|
@@ -394,13 +396,17 @@ export const GridContextProvider = <RowType extends GridBaseRow>(props: GridCont
|
|
|
394
396
|
const autoSizeColumns = useCallback(
|
|
395
397
|
({ skipHeader, colIds, userSizedColIds }: AutoSizeColumnsProps = {}): AutoSizeColumnsResult => {
|
|
396
398
|
if (!columnApi) return null;
|
|
397
|
-
const colIdsSet = colIds instanceof Set ? colIds : new Set
|
|
398
|
-
columnApi.getColumnState().
|
|
399
|
-
const colId =
|
|
400
|
-
|
|
401
|
-
columnApi.autoSizeColumn(colId, skipHeader);
|
|
402
|
-
}
|
|
399
|
+
const colIdsSet = colIds instanceof Set ? colIds : new Set(colIds);
|
|
400
|
+
const colsToResize = columnApi.getColumnState().filter((colState) => {
|
|
401
|
+
const colId = colState.colId;
|
|
402
|
+
return (isEmpty(colIdsSet) || colIdsSet.has(colId)) && !userSizedColIds?.has(colId) && !colState.flex;
|
|
403
403
|
});
|
|
404
|
+
if (!isEmpty(colsToResize)) {
|
|
405
|
+
columnApi.autoSizeColumns(
|
|
406
|
+
colsToResize.map((colState) => colState.colId),
|
|
407
|
+
skipHeader,
|
|
408
|
+
);
|
|
409
|
+
}
|
|
404
410
|
return {
|
|
405
411
|
width: sumBy(
|
|
406
412
|
columnApi.getColumnState().filter((col) => !col.hide),
|
|
@@ -415,7 +421,7 @@ export const GridContextProvider = <RowType extends GridBaseRow>(props: GridCont
|
|
|
415
421
|
* Resize columns to fit container
|
|
416
422
|
*/
|
|
417
423
|
const sizeColumnsToFit = useCallback((): void => {
|
|
418
|
-
gridApi
|
|
424
|
+
gridApi?.sizeColumnsToFit();
|
|
419
425
|
}, [gridApi]);
|
|
420
426
|
|
|
421
427
|
const stopEditing = useCallback((): void => {
|
|
@@ -584,7 +590,7 @@ export const GridContextProvider = <RowType extends GridBaseRow>(props: GridCont
|
|
|
584
590
|
);
|
|
585
591
|
|
|
586
592
|
const redrawRows = useCallback(
|
|
587
|
-
(rowNodes?:
|
|
593
|
+
(rowNodes?: IRowNode[]) => {
|
|
588
594
|
gridApiOp((gridApi) => gridApi.redrawRows(rowNodes ? { rowNodes } : undefined));
|
|
589
595
|
},
|
|
590
596
|
[gridApiOp],
|
|
@@ -623,7 +629,7 @@ export const GridContextProvider = <RowType extends GridBaseRow>(props: GridCont
|
|
|
623
629
|
|
|
624
630
|
const isExternalFilterPresent = (): boolean => !isEmpty(externalFilters.current);
|
|
625
631
|
|
|
626
|
-
const doesExternalFilterPass = (node:
|
|
632
|
+
const doesExternalFilterPass = (node: IRowNode): boolean =>
|
|
627
633
|
externalFilters.current.every((filter) => filter(node.data, node));
|
|
628
634
|
|
|
629
635
|
const getColDef = useCallback(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ICellEditorParams } from "ag-grid-community";
|
|
2
2
|
import { sortBy } from "lodash-es";
|
|
3
|
-
import {
|
|
3
|
+
import { PropsWithChildren, RefObject, useCallback, useContext, useMemo, useRef, useState } from "react";
|
|
4
4
|
|
|
5
5
|
import { GridBaseRow } from "../components/Grid";
|
|
6
6
|
import { GridContext } from "./GridContext";
|
|
@@ -8,10 +8,9 @@ import { GridPopoverContext } from "./GridPopoverContext";
|
|
|
8
8
|
|
|
9
9
|
interface GridPopoverContextProps {
|
|
10
10
|
props: ICellEditorParams;
|
|
11
|
-
children: ReactNode;
|
|
12
11
|
}
|
|
13
12
|
|
|
14
|
-
export const GridPopoverContextProvider = ({ props, children }: GridPopoverContextProps) => {
|
|
13
|
+
export const GridPopoverContextProvider = ({ props, children }: PropsWithChildren<GridPopoverContextProps>) => {
|
|
15
14
|
const { getFilteredSelectedRows, updatingCells } = useContext(GridContext);
|
|
16
15
|
const anchorRef = useRef<Element>(props.eGridCell);
|
|
17
16
|
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
import { castArray, flatten, remove } from "lodash-es";
|
|
2
|
-
import {
|
|
2
|
+
import { PropsWithChildren, useRef, useState } from "react";
|
|
3
3
|
|
|
4
4
|
import { GridUpdatingContext } from "./GridUpdatingContext";
|
|
5
5
|
|
|
6
|
-
interface UpdatingContextProviderProps {
|
|
7
|
-
children: ReactNode;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
6
|
export type GridUpdatingContextStatus = Record<string, (number | string)[] | undefined>;
|
|
11
7
|
|
|
12
8
|
type FieldName = string;
|
|
13
9
|
type IdList = (number | string)[];
|
|
14
10
|
type UpdatingBlock = Record<FieldName, IdList[]>;
|
|
15
11
|
|
|
16
|
-
export const GridUpdatingContextProvider = (props:
|
|
12
|
+
export const GridUpdatingContextProvider = (props: PropsWithChildren) => {
|
|
17
13
|
const updatingBlocks = useRef<UpdatingBlock>({});
|
|
18
14
|
const updating = useRef<GridUpdatingContextStatus>({});
|
|
19
15
|
const [updatedDep, setUpdatedDep] = useState(0);
|
package/src/lui/ActionButton.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./ActionButton.scss";
|
|
2
2
|
|
|
3
3
|
import clsx from "clsx";
|
|
4
|
-
import { CSSProperties, useEffect, useState } from "react";
|
|
4
|
+
import { CSSProperties, ReactElement, useEffect, useState } from "react";
|
|
5
5
|
|
|
6
6
|
import { LuiButton, LuiIcon, LuiMiniSpinner } from "@linzjs/lui";
|
|
7
7
|
import { LuiButtonProps } from "@linzjs/lui/dist/components/LuiButton/LuiButton";
|
|
@@ -43,7 +43,7 @@ export const ActionButton = ({
|
|
|
43
43
|
iconPosition = "left",
|
|
44
44
|
level = "tertiary",
|
|
45
45
|
"aria-label": ariaLabel,
|
|
46
|
-
}: ActionButtonProps):
|
|
46
|
+
}: ActionButtonProps): ReactElement => {
|
|
47
47
|
const [inProgress, setInProgress] = useState(false);
|
|
48
48
|
const lastInProgress = usePrevious(inProgress ?? false);
|
|
49
49
|
const [localInProgress, setLocalInProgress, setLocalInProgressDeferred] = useStateDeferred<boolean>(inProgress);
|
package/src/lui/FormError.tsx
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import "./FormError.scss";
|
|
2
2
|
|
|
3
|
+
import { ReactElement } from "react";
|
|
4
|
+
|
|
3
5
|
export interface FormErrorProps {
|
|
4
6
|
helpText?: string;
|
|
5
|
-
error?:
|
|
7
|
+
error?: ReactElement | string | boolean | null;
|
|
6
8
|
}
|
|
7
9
|
|
|
8
10
|
export const FormError = (props: FormErrorProps) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import clsx from "clsx";
|
|
2
2
|
import { omit } from "lodash-es";
|
|
3
|
-
import { InputHTMLAttributes, useState } from "react";
|
|
3
|
+
import { InputHTMLAttributes, ReactElement, useState } from "react";
|
|
4
4
|
import { v4 as uuidVersion4 } from "uuid";
|
|
5
5
|
|
|
6
6
|
import { FormError } from "./FormError";
|
|
@@ -15,10 +15,10 @@ export interface LuiTextAreaInputProps extends InputHTMLAttributes<HTMLTextAreaE
|
|
|
15
15
|
value: string;
|
|
16
16
|
|
|
17
17
|
// Custom fields
|
|
18
|
-
label?:
|
|
18
|
+
label?: ReactElement | string;
|
|
19
19
|
mandatory?: boolean;
|
|
20
20
|
helpText?: string;
|
|
21
|
-
error?:
|
|
21
|
+
error?: ReactElement | string | boolean | null;
|
|
22
22
|
allowTabToSave?: boolean;
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -2,7 +2,7 @@ import "./TextInputFormatted.scss";
|
|
|
2
2
|
|
|
3
3
|
import clsx from "clsx";
|
|
4
4
|
import { omit } from "lodash-es";
|
|
5
|
-
import { DetailedHTMLProps, InputHTMLAttributes } from "react";
|
|
5
|
+
import { DetailedHTMLProps, InputHTMLAttributes, ReactElement } from "react";
|
|
6
6
|
|
|
7
7
|
import { FormError } from "./FormError";
|
|
8
8
|
|
|
@@ -12,12 +12,12 @@ export interface LuiTextInputProps extends DetailedHTMLProps<InputHTMLAttributes
|
|
|
12
12
|
|
|
13
13
|
// Custom fields
|
|
14
14
|
helpText?: string;
|
|
15
|
-
error?:
|
|
15
|
+
error?: ReactElement | string | boolean | null;
|
|
16
16
|
formatted?: string;
|
|
17
17
|
allowTabToSave?: boolean;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
export const TextInputFormatted = (props: LuiTextInputProps):
|
|
20
|
+
export const TextInputFormatted = (props: LuiTextInputProps): ReactElement => {
|
|
21
21
|
return (
|
|
22
22
|
<div className={clsx("LuiTextInput Grid-popoverContainer", props.error && "hasError", props.className)}>
|
|
23
23
|
<span className="LuiTextInput-inputWrapper">
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { screen } from "@testing-library/dom";
|
|
2
2
|
import { render } from "@testing-library/react";
|
|
3
3
|
import userEvent from "@testing-library/user-event";
|
|
4
|
-
import { useEffect, useState } from "react";
|
|
4
|
+
import { ReactElement, useEffect, useState } from "react";
|
|
5
5
|
|
|
6
6
|
import { usePrevious } from "./reactUtils";
|
|
7
7
|
|
|
@@ -11,7 +11,7 @@ interface WrapperProps {
|
|
|
11
11
|
|
|
12
12
|
let extPrevious: boolean | undefined = undefined;
|
|
13
13
|
|
|
14
|
-
const UsePreviousWrapper = ({ value }: WrapperProps):
|
|
14
|
+
const UsePreviousWrapper = ({ value }: WrapperProps): ReactElement => {
|
|
15
15
|
const previous = usePrevious<boolean>(value);
|
|
16
16
|
useEffect(() => {
|
|
17
17
|
extPrevious = previous;
|
|
@@ -20,7 +20,7 @@ const UsePreviousWrapper = ({ value }: WrapperProps): JSX.Element => {
|
|
|
20
20
|
return <div />;
|
|
21
21
|
};
|
|
22
22
|
|
|
23
|
-
const TestComponent = ():
|
|
23
|
+
const TestComponent = (): ReactElement => {
|
|
24
24
|
const [value, setValue] = useState(false);
|
|
25
25
|
|
|
26
26
|
const toggleValue = () => setValue((value) => !value);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LegacyRef, useContext, useMemo, useRef } from "react";
|
|
1
|
+
import { LegacyRef, ReactElement, useContext, useMemo, useRef } from "react";
|
|
2
2
|
|
|
3
3
|
import { EventHandlersContext } from "../contexts/EventHandlersContext";
|
|
4
4
|
import { useBEM, useCombinedRef, useItemState } from "../hooks";
|
|
@@ -8,7 +8,7 @@ import { withHoveringResultProps } from "../utils/withHovering";
|
|
|
8
8
|
|
|
9
9
|
export interface FocusableItemProps extends BaseProps, withHoveringResultProps {
|
|
10
10
|
disabled?: boolean;
|
|
11
|
-
children: (ref: LegacyRef<any>) =>
|
|
11
|
+
children: (ref: LegacyRef<any>) => ReactElement;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export const FocusableItemFr = ({
|
|
@@ -25,7 +25,7 @@ export function safeCall<T, R>(fn: (arg?: T) => R, arg?: T): T | R {
|
|
|
25
25
|
|
|
26
26
|
const internalKey = "_szhsinMenu";
|
|
27
27
|
export const getName = (component: Record<string, any | undefined>) => component[internalKey];
|
|
28
|
-
//export const defineName = <T extends any[]>(name: string, component: (...args: T) =>
|
|
28
|
+
//export const defineName = <T extends any[]>(name: string, component: (...args: T) => ReactElement) =>
|
|
29
29
|
// Object.defineProperty(component, internalKey, { value: name });
|
|
30
30
|
|
|
31
31
|
export const defineName = (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MutableRefObject, PropsWithRef, forwardRef, memo, useContext, useRef } from "react";
|
|
1
|
+
import { MutableRefObject, PropsWithRef, ReactElement, forwardRef, memo, useContext, useRef } from "react";
|
|
2
2
|
|
|
3
3
|
import { HoverItemContext } from "../contexts/HoverItemContext";
|
|
4
4
|
|
|
@@ -8,7 +8,7 @@ export interface withHoveringResultProps {
|
|
|
8
8
|
menuItemRef?: MutableRefObject<HTMLLIElement>;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
export const withHovering = <T,>(name: string, WrappedComponent: (props: T) =>
|
|
11
|
+
export const withHovering = <T,>(name: string, WrappedComponent: (props: T) => ReactElement) => {
|
|
12
12
|
const Component = memo(WrappedComponent);
|
|
13
13
|
const WithHovering = forwardRef((props: PropsWithRef<T>, ref) => {
|
|
14
14
|
const menuItemRef = useRef<any>(null);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "./FormTest.scss";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useState } from "react";
|
|
3
|
+
import { ReactElement, useCallback, useState } from "react";
|
|
4
4
|
|
|
5
5
|
import { LuiAlertModal, LuiAlertModalButtons, LuiButton, LuiTextInput } from "@linzjs/lui";
|
|
6
6
|
|
|
@@ -15,7 +15,7 @@ export interface IFormTestRow {
|
|
|
15
15
|
distance: number | null;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
export const FormTest = (props: CellEditorCommon):
|
|
18
|
+
export const FormTest = (props: CellEditorCommon): ReactElement => {
|
|
19
19
|
const { value } = useGridPopoverContext<IFormTestRow>();
|
|
20
20
|
const [v1, ...v2] = value.split(" ");
|
|
21
21
|
|
|
@@ -2,7 +2,9 @@ import "../../styles/GridTheme.scss";
|
|
|
2
2
|
import "../../styles/index.scss";
|
|
3
3
|
import "@linzjs/lui/dist/scss/base.scss";
|
|
4
4
|
|
|
5
|
+
import { expect } from "@storybook/jest";
|
|
5
6
|
import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
|
|
7
|
+
import { waitFor } from "@storybook/testing-library";
|
|
6
8
|
import { useMemo, useState } from "react";
|
|
7
9
|
|
|
8
10
|
import "@linzjs/lui/dist/fonts";
|
|
@@ -103,4 +105,9 @@ const GridFilterButtonsTemplate: ComponentStory<typeof Grid> = (props: GridProps
|
|
|
103
105
|
);
|
|
104
106
|
};
|
|
105
107
|
|
|
106
|
-
export const
|
|
108
|
+
export const _FilterButtonsExample = GridFilterButtonsTemplate.bind({});
|
|
109
|
+
_FilterButtonsExample.play = async ({ canvasElement }) => {
|
|
110
|
+
await waitFor(() => {
|
|
111
|
+
expect(canvasElement.querySelector(".Grid-ready")).toBeInTheDocument();
|
|
112
|
+
});
|
|
113
|
+
};
|
|
@@ -6,7 +6,7 @@ import { within } from "@storybook/testing-library";
|
|
|
6
6
|
|
|
7
7
|
import "@linzjs/lui/dist/fonts";
|
|
8
8
|
|
|
9
|
-
import { GridNoRowsOverlay } from "../../components";
|
|
9
|
+
import { GridNoRowsOverlay, GridNoRowsOverlayProps } from "../../components";
|
|
10
10
|
|
|
11
11
|
export default {
|
|
12
12
|
title: "Components / Grids / GridNoRowsOverlay",
|
|
@@ -14,26 +14,26 @@ export default {
|
|
|
14
14
|
args: {},
|
|
15
15
|
} as ComponentMeta<typeof GridNoRowsOverlay>;
|
|
16
16
|
|
|
17
|
-
const GridNoRowsOverlayTemplate: ComponentStory<typeof GridNoRowsOverlay> = (params) => {
|
|
17
|
+
const GridNoRowsOverlayTemplate: ComponentStory<typeof GridNoRowsOverlay> = (params: GridNoRowsOverlayProps) => {
|
|
18
18
|
return <GridNoRowsOverlay {...params} />;
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
export const
|
|
22
|
-
|
|
21
|
+
export const _GridNoRowsEmpty = GridNoRowsOverlayTemplate.bind({});
|
|
22
|
+
_GridNoRowsEmpty.args = {
|
|
23
23
|
rowCount: 0,
|
|
24
24
|
filteredRowCount: 0,
|
|
25
25
|
};
|
|
26
|
-
|
|
26
|
+
_GridNoRowsEmpty.play = async ({ canvasElement }) => {
|
|
27
27
|
const canvas = within(canvasElement);
|
|
28
28
|
expect(await canvas.findByText("There are currently no rows")).toBeInTheDocument();
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
-
export const
|
|
32
|
-
|
|
31
|
+
export const _GridNoRowsFiltered = GridNoRowsOverlayTemplate.bind({});
|
|
32
|
+
_GridNoRowsFiltered.args = {
|
|
33
33
|
rowCount: 1,
|
|
34
34
|
filteredRowCount: 0,
|
|
35
35
|
};
|
|
36
|
-
|
|
36
|
+
_GridNoRowsFiltered.play = async ({ canvasElement }) => {
|
|
37
37
|
const canvas = within(canvasElement);
|
|
38
38
|
expect(await canvas.findByText("All rows have been filtered")).toBeInTheDocument();
|
|
39
39
|
};
|
|
@@ -2,7 +2,9 @@ import "../../styles/GridTheme.scss";
|
|
|
2
2
|
import "../../styles/index.scss";
|
|
3
3
|
import "@linzjs/lui/dist/scss/base.scss";
|
|
4
4
|
|
|
5
|
+
import { expect } from "@storybook/jest";
|
|
5
6
|
import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
|
|
7
|
+
import { waitFor } from "@storybook/testing-library";
|
|
6
8
|
import { ColDef } from "ag-grid-community";
|
|
7
9
|
import { GridPopoverEditDropDown } from "components/gridPopoverEdit/GridPopoverEditDropDown";
|
|
8
10
|
import { GridPopoverTextArea } from "components/gridPopoverEdit/GridPopoverTextArea";
|
|
@@ -176,5 +178,10 @@ const GridNonEditableRowTemplate: ComponentStory<typeof Grid> = (props: GridProp
|
|
|
176
178
|
);
|
|
177
179
|
};
|
|
178
180
|
|
|
179
|
-
export const
|
|
180
|
-
|
|
181
|
+
export const _NonEditableRow = GridNonEditableRowTemplate.bind({});
|
|
182
|
+
_NonEditableRow.args = { autoSelectFirstRow: true, selectable: true };
|
|
183
|
+
_NonEditableRow.play = async ({ canvasElement }) => {
|
|
184
|
+
await waitFor(() => {
|
|
185
|
+
expect(canvasElement.querySelector(".Grid-ready")).toBeInTheDocument();
|
|
186
|
+
});
|
|
187
|
+
};
|
|
@@ -2,7 +2,9 @@ import "../../styles/GridTheme.scss";
|
|
|
2
2
|
import "../../styles/index.scss";
|
|
3
3
|
import "@linzjs/lui/dist/scss/base.scss";
|
|
4
4
|
|
|
5
|
+
import { expect } from "@storybook/jest";
|
|
5
6
|
import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
|
|
7
|
+
import { waitFor } from "@storybook/testing-library";
|
|
6
8
|
import { ReactElement, useCallback, useContext, useMemo, useState } from "react";
|
|
7
9
|
|
|
8
10
|
import "@linzjs/lui/dist/fonts";
|
|
@@ -134,4 +136,9 @@ const GridPopoutContextMenuTemplate: ComponentStory<typeof Grid> = (props: GridP
|
|
|
134
136
|
);
|
|
135
137
|
};
|
|
136
138
|
|
|
137
|
-
export const
|
|
139
|
+
export const _EditContextMenu = GridPopoutContextMenuTemplate.bind({});
|
|
140
|
+
_EditContextMenu.play = async ({ canvasElement }) => {
|
|
141
|
+
await waitFor(() => {
|
|
142
|
+
expect(canvasElement.querySelector(".Grid-ready")).toBeInTheDocument();
|
|
143
|
+
});
|
|
144
|
+
};
|
|
@@ -2,7 +2,9 @@ import "../../styles/GridTheme.scss";
|
|
|
2
2
|
import "../../styles/index.scss";
|
|
3
3
|
import "@linzjs/lui/dist/scss/base.scss";
|
|
4
4
|
|
|
5
|
+
import { expect } from "@storybook/jest";
|
|
5
6
|
import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
|
|
7
|
+
import { waitFor } from "@storybook/testing-library";
|
|
6
8
|
import { useMemo, useState } from "react";
|
|
7
9
|
|
|
8
10
|
import "@linzjs/lui/dist/fonts";
|
|
@@ -70,4 +72,9 @@ const GridPopoutEditGenericTemplate: ComponentStory<typeof Grid> = (props: GridP
|
|
|
70
72
|
);
|
|
71
73
|
};
|
|
72
74
|
|
|
73
|
-
export const
|
|
75
|
+
export const _EditGeneric = GridPopoutEditGenericTemplate.bind({});
|
|
76
|
+
_EditGeneric.play = async ({ canvasElement }) => {
|
|
77
|
+
await waitFor(() => {
|
|
78
|
+
expect(canvasElement.querySelector(".Grid-ready")).toBeInTheDocument();
|
|
79
|
+
});
|
|
80
|
+
};
|
|
@@ -2,7 +2,9 @@ import "../../styles/GridTheme.scss";
|
|
|
2
2
|
import "../../styles/index.scss";
|
|
3
3
|
import "@linzjs/lui/dist/scss/base.scss";
|
|
4
4
|
|
|
5
|
+
import { expect } from "@storybook/jest";
|
|
5
6
|
import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
|
|
7
|
+
import { waitFor } from "@storybook/testing-library";
|
|
6
8
|
import { useCallback, useContext, useMemo, useState } from "react";
|
|
7
9
|
|
|
8
10
|
import "@linzjs/lui/dist/fonts";
|
|
@@ -225,4 +227,9 @@ const GridPopoutEditGenericTemplate: ComponentStory<typeof Grid> = (props: GridP
|
|
|
225
227
|
);
|
|
226
228
|
};
|
|
227
229
|
|
|
228
|
-
export const
|
|
230
|
+
export const _EditGenericTextArea = GridPopoutEditGenericTemplate.bind({});
|
|
231
|
+
_EditGenericTextArea.play = async ({ canvasElement }) => {
|
|
232
|
+
await waitFor(() => {
|
|
233
|
+
expect(canvasElement.querySelector(".Grid-ready")).toBeInTheDocument();
|
|
234
|
+
});
|
|
235
|
+
};
|
|
@@ -2,7 +2,9 @@ import "../../styles/GridTheme.scss";
|
|
|
2
2
|
import "../../styles/index.scss";
|
|
3
3
|
import "@linzjs/lui/dist/scss/base.scss";
|
|
4
4
|
|
|
5
|
+
import { expect } from "@storybook/jest";
|
|
5
6
|
import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
|
|
7
|
+
import { waitFor } from "@storybook/testing-library";
|
|
6
8
|
import { useMemo, useState } from "react";
|
|
7
9
|
|
|
8
10
|
import "@linzjs/lui/dist/fonts";
|
|
@@ -122,3 +124,8 @@ const GridPopoverEditBearingTemplate: ComponentStory<typeof Grid> = (props: Grid
|
|
|
122
124
|
};
|
|
123
125
|
|
|
124
126
|
export const _GridPopoverEditBearing = GridPopoverEditBearingTemplate.bind({});
|
|
127
|
+
_GridPopoverEditBearing.play = async ({ canvasElement }) => {
|
|
128
|
+
await waitFor(() => {
|
|
129
|
+
expect(canvasElement.querySelector(".Grid-ready")).toBeInTheDocument();
|
|
130
|
+
});
|
|
131
|
+
};
|
|
@@ -2,7 +2,9 @@ import "../../styles/GridTheme.scss";
|
|
|
2
2
|
import "../../styles/index.scss";
|
|
3
3
|
import "@linzjs/lui/dist/scss/base.scss";
|
|
4
4
|
|
|
5
|
+
import { expect } from "@storybook/jest";
|
|
5
6
|
import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
|
|
7
|
+
import { waitFor } from "@storybook/testing-library";
|
|
6
8
|
import { useCallback, useMemo, useState } from "react";
|
|
7
9
|
|
|
8
10
|
import "@linzjs/lui/dist/fonts";
|
|
@@ -314,3 +316,8 @@ const GridEditDropDownTemplate: ComponentStory<typeof Grid> = (props: GridProps)
|
|
|
314
316
|
};
|
|
315
317
|
|
|
316
318
|
export const EditDropdown = GridEditDropDownTemplate.bind({});
|
|
319
|
+
EditDropdown.play = async ({ canvasElement }) => {
|
|
320
|
+
await waitFor(() => {
|
|
321
|
+
expect(canvasElement.querySelector(".Grid-ready")).toBeInTheDocument();
|
|
322
|
+
});
|
|
323
|
+
};
|
|
@@ -2,7 +2,9 @@ import "../../styles/GridTheme.scss";
|
|
|
2
2
|
import "../../styles/index.scss";
|
|
3
3
|
import "@linzjs/lui/dist/scss/base.scss";
|
|
4
4
|
|
|
5
|
+
import { expect } from "@storybook/jest";
|
|
5
6
|
import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
|
|
7
|
+
import { waitFor } from "@storybook/testing-library";
|
|
6
8
|
import { isEmpty, partition } from "lodash-es";
|
|
7
9
|
import { useMemo, useState } from "react";
|
|
8
10
|
|
|
@@ -194,3 +196,8 @@ const GridEditMultiSelectTemplate: ComponentStory<typeof Grid> = (props: GridPro
|
|
|
194
196
|
};
|
|
195
197
|
|
|
196
198
|
export const EditMultiSelect = GridEditMultiSelectTemplate.bind({});
|
|
199
|
+
EditMultiSelect.play = async ({ canvasElement }) => {
|
|
200
|
+
await waitFor(() => {
|
|
201
|
+
expect(canvasElement.querySelector(".Grid-ready")).toBeInTheDocument();
|
|
202
|
+
});
|
|
203
|
+
};
|
|
@@ -2,7 +2,9 @@ import "../../styles/GridTheme.scss";
|
|
|
2
2
|
import "../../styles/index.scss";
|
|
3
3
|
import "@linzjs/lui/dist/scss/base.scss";
|
|
4
4
|
|
|
5
|
+
import { expect } from "@storybook/jest";
|
|
5
6
|
import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
|
|
7
|
+
import { waitFor } from "@storybook/testing-library";
|
|
6
8
|
import { countBy, mergeWith, pull, range, union } from "lodash-es";
|
|
7
9
|
import { useMemo, useState } from "react";
|
|
8
10
|
|
|
@@ -11,6 +13,7 @@ import "@linzjs/lui/dist/fonts";
|
|
|
11
13
|
import { ColDefT, Grid, GridCell, GridContextProvider, GridProps, GridUpdatingContextProvider } from "../..";
|
|
12
14
|
import { MultiSelectGridOption } from "../../components/gridForm/GridFormMultiSelectGrid";
|
|
13
15
|
import { GridPopoutEditMultiSelectGrid } from "../../components/gridPopoverEdit/GridPopoutEditMultiSelectGrid";
|
|
16
|
+
import { EditMultiSelect } from "./GridPopoverEditMultiSelect.stories";
|
|
14
17
|
|
|
15
18
|
export default {
|
|
16
19
|
title: "Components / Grids",
|
|
@@ -108,3 +111,8 @@ const GridEditMultiSelectGridTemplate: ComponentStory<typeof Grid> = (props: Gri
|
|
|
108
111
|
};
|
|
109
112
|
|
|
110
113
|
export const EditMultiSelectGrid = GridEditMultiSelectGridTemplate.bind({});
|
|
114
|
+
EditMultiSelect.play = async ({ canvasElement }) => {
|
|
115
|
+
await waitFor(() => {
|
|
116
|
+
expect(canvasElement.querySelector(".Grid-ready")).toBeInTheDocument();
|
|
117
|
+
});
|
|
118
|
+
};
|
|
@@ -2,8 +2,10 @@ import "../../styles/GridTheme.scss";
|
|
|
2
2
|
import "../../styles/index.scss";
|
|
3
3
|
import "@linzjs/lui/dist/scss/base.scss";
|
|
4
4
|
|
|
5
|
+
import { expect } from "@storybook/jest";
|
|
5
6
|
import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
|
|
6
|
-
import {
|
|
7
|
+
import { waitFor } from "@storybook/testing-library";
|
|
8
|
+
import { ReactElement, useCallback, useMemo, useState } from "react";
|
|
7
9
|
|
|
8
10
|
import "@linzjs/lui/dist/fonts";
|
|
9
11
|
|
|
@@ -127,6 +129,7 @@ const GridReadOnlyTemplate: ComponentStory<typeof Grid> = (props: GridProps) =>
|
|
|
127
129
|
GridCell({
|
|
128
130
|
headerName: "Custom edit",
|
|
129
131
|
editable: true,
|
|
132
|
+
flex: 1,
|
|
130
133
|
valueFormatter: () => "Press E",
|
|
131
134
|
cellRendererParams: {
|
|
132
135
|
rightHoverElement: (
|
|
@@ -249,7 +252,7 @@ const GridReadOnlyTemplate: ComponentStory<typeof Grid> = (props: GridProps) =>
|
|
|
249
252
|
);
|
|
250
253
|
};
|
|
251
254
|
|
|
252
|
-
const GridFilterLessThan = (props: { field: keyof ITestRow; text: string }):
|
|
255
|
+
const GridFilterLessThan = (props: { field: keyof ITestRow; text: string }): ReactElement => {
|
|
253
256
|
const [value, setValue] = useState<number>();
|
|
254
257
|
|
|
255
258
|
const filter = useCallback(
|
|
@@ -277,3 +280,8 @@ const GridFilterLessThan = (props: { field: keyof ITestRow; text: string }): JSX
|
|
|
277
280
|
};
|
|
278
281
|
|
|
279
282
|
export const ReadOnlySingleSelection = GridReadOnlyTemplate.bind({});
|
|
283
|
+
ReadOnlySingleSelection.play = async ({ canvasElement }) => {
|
|
284
|
+
await waitFor(() => {
|
|
285
|
+
expect(canvasElement.querySelector(".Grid-ready")).toBeInTheDocument();
|
|
286
|
+
});
|
|
287
|
+
};
|
|
@@ -32,7 +32,7 @@ const onSelectedItem = jest
|
|
|
32
32
|
.fn<Promise<void>, [GridPopoutEditDropDownSelectedItem<any>]>()
|
|
33
33
|
.mockImplementation(async () => undefined);
|
|
34
34
|
|
|
35
|
-
const Template: ComponentStory<typeof GridFormDropDown> = (props) => {
|
|
35
|
+
const Template: ComponentStory<typeof GridFormDropDown> = (props: GridFormDropDownProps<any>) => {
|
|
36
36
|
const config: GridFormDropDownProps<any> = {
|
|
37
37
|
filtered: "local",
|
|
38
38
|
onSelectedItem,
|
|
@@ -128,7 +128,7 @@ GridFormDropDownInteractions_.play = async ({ canvasElement }) => {
|
|
|
128
128
|
|
|
129
129
|
// Test invalid value doesn't save
|
|
130
130
|
updateValue.mockClear();
|
|
131
|
-
userEvent.clear(textInput);
|
|
131
|
+
await userEvent.clear(textInput);
|
|
132
132
|
await userEvent.type(textInput, "{Enter}");
|
|
133
133
|
expect(updateValue).not.toHaveBeenCalled();
|
|
134
134
|
|