@linzjs/step-ag-grid 2.1.2 → 2.2.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.
Files changed (72) hide show
  1. package/README.md +2 -2
  2. package/dist/index.js +122 -25
  3. package/dist/index.js.map +1 -1
  4. package/dist/src/components/Grid.d.ts +1 -0
  5. package/dist/src/components/GridCell.d.ts +1 -1
  6. package/dist/src/components/gridForm/GridFormEditBearing.d.ts +1 -1
  7. package/dist/src/components/gridForm/GridFormMessage.d.ts +1 -1
  8. package/dist/src/components/gridForm/GridFormMultiSelect.d.ts +1 -1
  9. package/dist/src/components/gridForm/GridFormPopoutMenu.d.ts +1 -1
  10. package/dist/src/components/gridForm/GridFormTextArea.d.ts +1 -1
  11. package/dist/src/components/gridForm/GridFormTextInput.d.ts +1 -1
  12. package/dist/src/components/gridPopoverEdit/GridPopoutEditMultiSelect.d.ts +1 -1
  13. package/dist/src/components/gridPopoverEdit/GridPopoverEditBearing.d.ts +1 -1
  14. package/dist/src/components/gridPopoverEdit/GridPopoverEditDropDown.d.ts +1 -1
  15. package/dist/src/components/gridPopoverEdit/GridPopoverMenu.d.ts +1 -1
  16. package/dist/src/components/gridPopoverEdit/GridPopoverMessage.d.ts +1 -1
  17. package/dist/src/components/gridPopoverEdit/GridPopoverTextArea.d.ts +1 -1
  18. package/dist/src/components/gridPopoverEdit/GridPopoverTextInput.d.ts +1 -1
  19. package/dist/src/components/gridRender/GridRenderGenericCell.d.ts +1 -1
  20. package/dist/src/contexts/GridContext.d.ts +1 -1
  21. package/dist/src/index.d.ts +29 -28
  22. package/dist/src/lui/ActionButton.d.ts +15 -0
  23. package/dist/src/lui/reactUtils.d.ts +6 -0
  24. package/dist/src/lui/reactUtils.test.d.ts +1 -0
  25. package/dist/src/lui/stateDeferredHook.d.ts +4 -0
  26. package/dist/src/lui/timeoutHook.d.ts +8 -0
  27. package/dist/src/lui/timeoutHook.test.d.ts +1 -0
  28. package/dist/step-ag-grid.esm.js +123 -27
  29. package/dist/step-ag-grid.esm.js.map +1 -1
  30. package/package.json +6 -4
  31. package/src/components/Grid.tsx +5 -4
  32. package/src/components/GridCell.tsx +7 -7
  33. package/src/components/GridPopoverHook.tsx +3 -3
  34. package/src/components/PostSortRowsHook.ts +8 -2
  35. package/src/components/gridForm/GridFormDropDown.tsx +2 -2
  36. package/src/components/gridForm/GridFormEditBearing.tsx +2 -2
  37. package/src/components/gridForm/GridFormMessage.tsx +1 -1
  38. package/src/components/gridForm/GridFormMultiSelect.tsx +3 -3
  39. package/src/components/gridForm/GridFormPopoutMenu.tsx +3 -3
  40. package/src/components/gridForm/GridFormTextArea.tsx +1 -1
  41. package/src/components/gridForm/GridFormTextInput.tsx +1 -1
  42. package/src/components/gridPopoverEdit/GridPopoutEditMultiSelect.ts +1 -3
  43. package/src/components/gridPopoverEdit/GridPopoverEditBearing.ts +2 -4
  44. package/src/components/gridPopoverEdit/GridPopoverEditDropDown.ts +1 -3
  45. package/src/components/gridPopoverEdit/GridPopoverMenu.tsx +1 -1
  46. package/src/components/gridPopoverEdit/GridPopoverMessage.ts +1 -1
  47. package/src/components/gridPopoverEdit/GridPopoverTextArea.ts +1 -1
  48. package/src/components/gridPopoverEdit/GridPopoverTextInput.ts +1 -1
  49. package/src/components/gridRender/GridRenderGenericCell.tsx +2 -2
  50. package/src/components/gridRender/GridRenderPopoutMenuCell.tsx +1 -1
  51. package/src/contexts/GridContext.tsx +1 -1
  52. package/src/contexts/GridContextProvider.tsx +2 -2
  53. package/src/contexts/GridPopoverContextProvider.tsx +2 -2
  54. package/src/index.ts +34 -32
  55. package/src/lui/ActionButton.scss +32 -0
  56. package/src/lui/ActionButton.tsx +76 -0
  57. package/src/lui/reactUtils.test.tsx +47 -0
  58. package/src/lui/reactUtils.tsx +14 -0
  59. package/src/lui/stateDeferredHook.tsx +29 -0
  60. package/src/lui/timeoutHook.test.tsx +38 -0
  61. package/src/lui/timeoutHook.tsx +40 -0
  62. package/src/react-menu3/components/ControlledMenu.tsx +1 -1
  63. package/src/stories/components/ActionButton.stories.tsx +33 -0
  64. package/src/stories/{components → grid}/FormTest.scss +0 -0
  65. package/src/stories/{components → grid}/FormTest.tsx +4 -4
  66. package/src/stories/{components → grid}/GridPopoutBearing.stories.tsx +13 -16
  67. package/src/stories/{components → grid}/GridPopoutEditDropDown.stories.tsx +27 -30
  68. package/src/stories/{components → grid}/GridPopoutEditGeneric.stories.tsx +10 -13
  69. package/src/stories/{components → grid}/GridPopoutEditGenericTextArea.stories.tsx +64 -25
  70. package/src/stories/{components → grid}/GridPopoutEditMultiSelect.stories.tsx +15 -18
  71. package/src/stories/{components → grid}/GridReadOnly.stories.tsx +13 -15
  72. package/src/stories/{components → react-menu}/ReactMenu.stories.tsx +2 -2
@@ -0,0 +1,14 @@
1
+ import { useEffect, useRef } from "react";
2
+
3
+ /**
4
+ * Track previous values of states.
5
+ *
6
+ * @param value Value to track.
7
+ */
8
+ export const usePrevious = <T extends unknown>(value: T): T | undefined => {
9
+ const ref = useRef<T>();
10
+ useEffect(() => {
11
+ ref.current = value;
12
+ }, [value]);
13
+ return ref.current;
14
+ };
@@ -0,0 +1,29 @@
1
+ import { useCallback, useRef, useState } from "react";
2
+ import { useTimeoutHook } from "./timeoutHook";
3
+
4
+ /**
5
+ * Defers state change up to a minimum time since last state change.
6
+ */
7
+ export const useStateDeferred = <T extends unknown>(
8
+ initialValue: T,
9
+ ): [T, (v: T) => void, (v: T, w: number) => void] => {
10
+ const startTime = useRef<number>(0);
11
+ const timeoutHook = useTimeoutHook();
12
+
13
+ const [value, _setValue] = useState(initialValue);
14
+
15
+ const setValue = useCallback((newValue: T) => {
16
+ startTime.current = Date.now();
17
+ _setValue(newValue);
18
+ }, []);
19
+
20
+ const setValueDeferred = useCallback(
21
+ (newValue: T, minimumWaitTimeMs: number) => {
22
+ const waitTimeMs = Math.max(minimumWaitTimeMs - (Date.now() - startTime.current), 0);
23
+ timeoutHook(() => _setValue(newValue), waitTimeMs);
24
+ },
25
+ [timeoutHook],
26
+ );
27
+
28
+ return [value, setValue, setValueDeferred];
29
+ };
@@ -0,0 +1,38 @@
1
+ import { useTimeoutHook } from "./timeoutHook";
2
+ import { render } from "@testing-library/react";
3
+
4
+ describe("useTimeoutHook", () => {
5
+ beforeEach(() => {
6
+ jest.useFakeTimers();
7
+ });
8
+
9
+ afterEach(() => {
10
+ jest.useRealTimers();
11
+ });
12
+
13
+ const TestComponent = (props: { callback: () => void; repeat?: number }) => {
14
+ const timeoutHook = useTimeoutHook();
15
+ for (let i = 0; i < (props.repeat ?? 1); i++) {
16
+ timeoutHook(() => props.callback(), 1000);
17
+ }
18
+ return <div />;
19
+ };
20
+
21
+ test("invokes on timeout", async () => {
22
+ const callback = jest.fn();
23
+
24
+ render(<TestComponent callback={callback} />);
25
+ expect(callback).toHaveBeenCalledTimes(0);
26
+ jest.runAllTimers();
27
+ expect(callback).toHaveBeenCalledTimes(1);
28
+ });
29
+
30
+ test("invokes once on double invocation", async () => {
31
+ const callback = jest.fn();
32
+
33
+ render(<TestComponent callback={callback} repeat={2} />);
34
+ expect(callback).toHaveBeenCalledTimes(0);
35
+ jest.runAllTimers();
36
+ expect(callback).toHaveBeenCalledTimes(1);
37
+ });
38
+ });
@@ -0,0 +1,40 @@
1
+ import { useCallback, useEffect, useRef } from "react";
2
+
3
+ /**
4
+ * Cancels timeouts on scope being destroyed.
5
+ *
6
+ * This could almost be a debounce, but debounce tracks by function reference, this tracks by hook reference.
7
+ * This could have been implemented using debounce if the callers function was wrapped in useCallback,
8
+ * but there's no way to enforce that, so it would lead to bugs.
9
+ */
10
+ export const useTimeoutHook = () => {
11
+ const timeout = useRef<ReturnType<typeof setTimeout>>();
12
+
13
+ /**
14
+ * Clear any pending timeouts.
15
+ */
16
+ const clearTimeouts = () => {
17
+ if (timeout.current) {
18
+ const tc = timeout.current;
19
+ timeout.current = undefined;
20
+ clearTimeout(tc);
21
+ }
22
+ };
23
+
24
+ /**
25
+ * Call this when your action has completed.
26
+ */
27
+ const invoke = useCallback((fn: () => void, waitTimeMs: number) => {
28
+ clearTimeouts();
29
+ timeout.current = setTimeout(fn, waitTimeMs);
30
+ }, []);
31
+
32
+ /**
33
+ * Clear timeout on loss of scope.
34
+ */
35
+ useEffect(() => {
36
+ return () => clearTimeouts();
37
+ }, []);
38
+
39
+ return invoke;
40
+ };
@@ -13,7 +13,7 @@ import { createPortal } from "react-dom";
13
13
  import { MenuList } from "./MenuList";
14
14
  import { useBEM } from "../hooks";
15
15
  import { menuContainerClass, mergeProps, safeCall, isMenuOpen, getTransition, CloseReason, Keys } from "../utils";
16
- import { hasParentClass } from "@utils/util";
16
+ import { hasParentClass } from "../../utils/util";
17
17
  import { ControlledMenuProps, PortalFieldType, RadioChangeEvent } from "../types";
18
18
  import { ItemSettingsContext } from "../contexts/ItemSettingsContext";
19
19
  import { SettingsContext } from "../contexts/SettingsContext";
@@ -0,0 +1,33 @@
1
+ import "@linzjs/lui/dist/scss/base.scss";
2
+ import "@linzjs/lui/dist/fonts";
3
+
4
+ import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
5
+ import { ActionButton } from "../../lui/ActionButton";
6
+ import { useCallback, useState } from "react";
7
+ import { wait } from "../../utils/util";
8
+
9
+ export default {
10
+ title: "Components / ButtonTextWithIcon",
11
+ component: ActionButton,
12
+ args: {},
13
+ } as ComponentMeta<typeof ActionButton>;
14
+
15
+ const ActionButtonTemplate: ComponentStory<typeof ActionButton> = () => {
16
+ const [inProgress, setInProgress] = useState(false);
17
+ const performAction = useCallback(async () => {
18
+ setInProgress(true);
19
+ await wait(1000);
20
+ setInProgress(false);
21
+ }, []);
22
+ return (
23
+ <ActionButton
24
+ icon={"ic_add"}
25
+ name={"Add new row"}
26
+ inProgressName={"Adding..."}
27
+ inProgress={inProgress}
28
+ onClick={performAction}
29
+ />
30
+ );
31
+ };
32
+
33
+ export const ActionButtonSimple = ActionButtonTemplate.bind({});
File without changes
@@ -2,10 +2,10 @@ import "./FormTest.scss";
2
2
 
3
3
  import { useCallback, useState } from "react";
4
4
  import { LuiTextInput } from "@linzjs/lui";
5
- import { wait } from "@utils/util";
6
- import { CellEditorCommon, CellParams } from "@components/GridCell";
7
- import { useGridPopoverHook } from "@components/GridPopoverHook";
8
- import { GridBaseRow } from "@components/Grid";
5
+ import { wait } from "../../utils/util";
6
+ import { CellEditorCommon, CellParams } from "../../components/GridCell";
7
+ import { useGridPopoverHook } from "../../components/GridPopoverHook";
8
+ import { GridBaseRow } from "../../components/Grid";
9
9
 
10
10
  export interface IFormTestRow {
11
11
  id: number;
@@ -5,15 +5,15 @@ import "../../styles/GridTheme.scss";
5
5
 
6
6
  import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
7
7
  import { useMemo, useState } from "react";
8
- import { GridUpdatingContextProvider } from "@contexts/GridUpdatingContextProvider";
9
- import { GridContextProvider } from "@contexts/GridContextProvider";
10
- import { Grid, GridProps } from "@components/Grid";
11
- import { ColDefT, GridCell } from "@components/GridCell";
8
+ import { GridUpdatingContextProvider } from "../../contexts/GridUpdatingContextProvider";
9
+ import { GridContextProvider } from "../../contexts/GridContextProvider";
10
+ import { Grid, GridProps } from "../../components/Grid";
11
+ import { ColDefT, GridCell } from "../../components/GridCell";
12
12
  import {
13
13
  GridPopoverEditBearing,
14
14
  GridPopoverEditBearingCorrection,
15
- } from "@components/gridPopoverEdit/GridPopoverEditBearing";
16
- import { wait } from "@utils/util";
15
+ } from "../../components/gridPopoverEdit/GridPopoverEditBearing";
16
+ import { wait } from "../../utils/util";
17
17
 
18
18
  export default {
19
19
  title: "Components / Grids",
@@ -24,7 +24,7 @@ export default {
24
24
  },
25
25
  decorators: [
26
26
  (Story) => (
27
- <div style={{ width: 1200, height: 400, display: "flex" }}>
27
+ <div style={{ width: 1024, height: 400 }}>
28
28
  <GridUpdatingContextProvider>
29
29
  <GridContextProvider>
30
30
  <Story />
@@ -83,15 +83,11 @@ const GridReadOnlyTemplate: ComponentStory<typeof Grid> = (props: GridProps) =>
83
83
  [],
84
84
  );
85
85
 
86
- const rowData = useMemo(
87
- () =>
88
- [
89
- { id: 1000, bearing1: 1.234, bearingCorrection: 90 },
90
- { id: 1001, bearing1: 1.565, bearingCorrection: 240 },
91
- { id: 1002, bearing1: null, bearingCorrection: 355.1 },
92
- ] as ITestRow[],
93
- [],
94
- );
86
+ const [rowData, setRowData] = useState([
87
+ { id: 1000, bearing1: 1.234, bearingCorrection: 90 },
88
+ { id: 1001, bearing1: 1.565, bearingCorrection: 240 },
89
+ { id: 1002, bearing1: null, bearingCorrection: 355.1 },
90
+ ] as ITestRow[]);
95
91
 
96
92
  return (
97
93
  <Grid
@@ -100,6 +96,7 @@ const GridReadOnlyTemplate: ComponentStory<typeof Grid> = (props: GridProps) =>
100
96
  setExternalSelectedItems={setExternalSelectedItems}
101
97
  columnDefs={columnDefs}
102
98
  rowData={rowData}
99
+ domLayout={"autoHeight"}
103
100
  />
104
101
  );
105
102
  };
@@ -4,14 +4,14 @@ import "../../styles/index.scss";
4
4
  import "../../styles/GridTheme.scss";
5
5
 
6
6
  import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
7
- import { GridUpdatingContextProvider } from "@contexts/GridUpdatingContextProvider";
8
- import { GridContextProvider } from "@contexts/GridContextProvider";
9
- import { Grid, GridProps } from "@components/Grid";
7
+ import { GridUpdatingContextProvider } from "../../contexts/GridUpdatingContextProvider";
8
+ import { GridContextProvider } from "../../contexts/GridContextProvider";
9
+ import { Grid, GridProps } from "../../components/Grid";
10
10
  import { useCallback, useMemo, useState } from "react";
11
- import { MenuHeaderItem, MenuSeparator, MenuSeparatorString } from "@components/gridForm/GridFormDropDown";
12
- import { wait } from "@utils/util";
13
- import { ColDefT, GridCell } from "@components/GridCell";
14
- import { GridPopoverEditDropDown } from "@components/gridPopoverEdit/GridPopoverEditDropDown";
11
+ import { MenuHeaderItem, MenuSeparator, MenuSeparatorString } from "../../components/gridForm/GridFormDropDown";
12
+ import { wait } from "../../utils/util";
13
+ import { ColDefT, GridCell } from "../../components/GridCell";
14
+ import { GridPopoverEditDropDown } from "../../components/gridPopoverEdit/GridPopoverEditDropDown";
15
15
 
16
16
  export default {
17
17
  title: "Components / Grids",
@@ -22,7 +22,7 @@ export default {
22
22
  },
23
23
  decorators: [
24
24
  (Story) => (
25
- <div style={{ width: 1200, height: 400, display: "flex" }}>
25
+ <div style={{ width: 1024, height: 400 }}>
26
26
  <GridUpdatingContextProvider>
27
27
  <GridContextProvider>
28
28
  <Story />
@@ -245,28 +245,24 @@ const GridEditDropDownTemplate: ComponentStory<typeof Grid> = (props: GridProps)
245
245
  [optionsFn, optionsObjects],
246
246
  );
247
247
 
248
- const rowData = useMemo(
249
- () =>
250
- [
251
- {
252
- id: 1000,
253
- position: "Tester",
254
- position2: "1",
255
- position3: "Tester",
256
- position4: { code: "O1", desc: "Object One" },
257
- code: "O1",
258
- },
259
- {
260
- id: 1001,
261
- position: "Developer",
262
- position2: "2",
263
- position3: "Developer",
264
- position4: { code: "O2", desc: "Object Two" },
265
- code: "O2",
266
- },
267
- ] as ITestRow[],
268
- [],
269
- );
248
+ const [rowData, setRowData] = useState([
249
+ {
250
+ id: 1000,
251
+ position: "Tester",
252
+ position2: "1",
253
+ position3: "Tester",
254
+ position4: { code: "O1", desc: "Object One" },
255
+ code: "O1",
256
+ },
257
+ {
258
+ id: 1001,
259
+ position: "Developer",
260
+ position2: "2",
261
+ position3: "Developer",
262
+ position4: { code: "O2", desc: "Object Two" },
263
+ code: "O2",
264
+ },
265
+ ] as ITestRow[]);
270
266
 
271
267
  return (
272
268
  <Grid
@@ -275,6 +271,7 @@ const GridEditDropDownTemplate: ComponentStory<typeof Grid> = (props: GridProps)
275
271
  setExternalSelectedItems={setExternalSelectedItems}
276
272
  columnDefs={columnDefs}
277
273
  rowData={rowData}
274
+ domLayout={"autoHeight"}
278
275
  />
279
276
  );
280
277
  };
@@ -4,11 +4,11 @@ import "../../styles/index.scss";
4
4
  import "../../styles/GridTheme.scss";
5
5
 
6
6
  import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
7
- import { GridUpdatingContextProvider } from "@contexts/GridUpdatingContextProvider";
8
- import { GridContextProvider } from "@contexts/GridContextProvider";
9
- import { Grid, GridProps } from "@components/Grid";
7
+ import { GridUpdatingContextProvider } from "../../contexts/GridUpdatingContextProvider";
8
+ import { GridContextProvider } from "../../contexts/GridContextProvider";
9
+ import { Grid, GridProps } from "../../components/Grid";
10
10
  import { useMemo, useState } from "react";
11
- import { ColDefT, GridCell } from "@components/GridCell";
11
+ import { ColDefT, GridCell } from "../../components/GridCell";
12
12
  import { FormTest, IFormTestRow } from "./FormTest";
13
13
 
14
14
  export default {
@@ -20,7 +20,7 @@ export default {
20
20
  },
21
21
  decorators: [
22
22
  (Story) => (
23
- <div style={{ width: 1200, height: 400, display: "flex" }}>
23
+ <div style={{ width: 1024, height: 400 }}>
24
24
  <GridUpdatingContextProvider>
25
25
  <GridContextProvider>
26
26
  <Story />
@@ -57,14 +57,10 @@ const GridPopoutEditGenericTemplate: ComponentStory<typeof Grid> = (props: GridP
57
57
  [],
58
58
  );
59
59
 
60
- const rowData = useMemo(
61
- () =>
62
- [
63
- { id: 1000, name: "IS IS DP12345", nameType: "IS", numba: "IX", plan: "DP 12345" },
64
- { id: 1001, name: "PEG V SD523", nameType: "PEG", numba: "V", plan: "SD 523" },
65
- ] as IFormTestRow[],
66
- [],
67
- );
60
+ const [rowData, setRowData] = useState([
61
+ { id: 1000, name: "IS IS DP12345", nameType: "IS", numba: "IX", plan: "DP 12345" },
62
+ { id: 1001, name: "PEG V SD523", nameType: "PEG", numba: "V", plan: "SD 523" },
63
+ ] as IFormTestRow[]);
68
64
 
69
65
  return (
70
66
  <Grid
@@ -73,6 +69,7 @@ const GridPopoutEditGenericTemplate: ComponentStory<typeof Grid> = (props: GridP
73
69
  setExternalSelectedItems={setExternalSelectedItems}
74
70
  columnDefs={columnDefs}
75
71
  rowData={rowData}
72
+ domLayout={"autoHeight"}
76
73
  />
77
74
  );
78
75
  };
@@ -4,15 +4,17 @@ import "../../styles/index.scss";
4
4
  import "../../styles/GridTheme.scss";
5
5
 
6
6
  import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
7
- import { GridUpdatingContextProvider } from "@contexts/GridUpdatingContextProvider";
8
- import { GridContextProvider } from "@contexts/GridContextProvider";
9
- import { Grid, GridProps } from "@components/Grid";
10
- import { useMemo, useState } from "react";
11
- import { ColDefT, GridCell } from "@components/GridCell";
7
+ import { GridUpdatingContextProvider } from "../../contexts/GridUpdatingContextProvider";
8
+ import { GridContextProvider } from "../../contexts/GridContextProvider";
9
+ import { Grid, GridProps } from "../../components/Grid";
10
+ import { useCallback, useMemo, useState } from "react";
11
+ import { ColDefT, GridCell } from "../../components/GridCell";
12
12
  import { IFormTestRow } from "./FormTest";
13
- import { isFloat, wait } from "@utils/util";
14
- import { GridPopoverTextArea } from "@components/gridPopoverEdit/GridPopoverTextArea";
15
- import { GridPopoverTextInput } from "@components/gridPopoverEdit/GridPopoverTextInput";
13
+ import { isFloat, wait } from "../../utils/util";
14
+ import { GridPopoverTextArea } from "../../components/gridPopoverEdit/GridPopoverTextArea";
15
+ import { GridPopoverTextInput } from "../../components/gridPopoverEdit/GridPopoverTextInput";
16
+ import { ActionButton } from "../../lui/ActionButton";
17
+ import { GridPopoverMenu } from "../../components/gridPopoverEdit/GridPopoverMenu";
16
18
 
17
19
  export default {
18
20
  title: "Components / Grids",
@@ -23,7 +25,7 @@ export default {
23
25
  },
24
26
  decorators: [
25
27
  (Story) => (
26
- <div style={{ width: 1200, height: 400, display: "flex" }}>
28
+ <div style={{ width: 1024, height: 400 }}>
27
29
  <GridUpdatingContextProvider>
28
30
  <GridContextProvider>
29
31
  <Story />
@@ -36,6 +38,11 @@ export default {
36
38
 
37
39
  const GridPopoutEditGenericTemplate: ComponentStory<typeof Grid> = (props: GridProps) => {
38
40
  const [externalSelectedItems, setExternalSelectedItems] = useState<any[]>([]);
41
+ const [rowData, setRowData] = useState([
42
+ { id: 1000, name: "IS IS DP12345", nameType: "IS", numba: "IX", plan: "DP 12345", distance: 10 },
43
+ { id: 1001, name: "PEG V SD523", nameType: "PEG", numba: "V", plan: "SD 523", distance: null },
44
+ ] as IFormTestRow[]);
45
+
39
46
  const columnDefs: ColDefT<IFormTestRow>[] = useMemo(
40
47
  () => [
41
48
  GridCell({
@@ -123,27 +130,59 @@ const GridPopoutEditGenericTemplate: ComponentStory<typeof Grid> = (props: GridP
123
130
  },
124
131
  },
125
132
  ),
133
+ GridPopoverMenu(
134
+ {
135
+ headerName: "Delete menu",
136
+ },
137
+ {
138
+ multiEdit: true,
139
+ editorParams: {
140
+ options: async (_) => [
141
+ {
142
+ label: "Delete",
143
+ action: async (selectedRows) => {
144
+ await wait(1500);
145
+ setRowData(rowData.filter((data) => !selectedRows.some((row) => row.id == data.id)));
146
+ return true;
147
+ },
148
+ supportsMultiEdit: true,
149
+ },
150
+ ],
151
+ },
152
+ },
153
+ ),
126
154
  ],
127
- [],
155
+ [rowData],
128
156
  );
129
157
 
130
- const rowData = useMemo(
131
- () =>
132
- [
133
- { id: 1000, name: "IS IS DP12345", nameType: "IS", numba: "IX", plan: "DP 12345", distance: 10 },
134
- { id: 1001, name: "PEG V SD523", nameType: "PEG", numba: "V", plan: "SD 523", distance: null },
135
- ] as IFormTestRow[],
136
- [],
137
- );
158
+ const [inProgress, setInProgress] = useState(false);
159
+
160
+ const addRowAction = useCallback(async () => {
161
+ setInProgress(true);
162
+ await wait(1000);
163
+ const lastRow = rowData[rowData.length - 1];
164
+ setRowData([...rowData, { id: lastRow.id + 1, name: "?", nameType: "?", numba: "?", plan: "", distance: null }]);
165
+ setInProgress(false);
166
+ }, [rowData]);
138
167
 
139
168
  return (
140
- <Grid
141
- {...props}
142
- externalSelectedItems={externalSelectedItems}
143
- setExternalSelectedItems={setExternalSelectedItems}
144
- columnDefs={columnDefs}
145
- rowData={rowData}
146
- />
169
+ <>
170
+ <Grid
171
+ {...props}
172
+ externalSelectedItems={externalSelectedItems}
173
+ setExternalSelectedItems={setExternalSelectedItems}
174
+ columnDefs={columnDefs}
175
+ rowData={rowData}
176
+ domLayout={"autoHeight"}
177
+ />
178
+ <ActionButton
179
+ icon={"ic_add"}
180
+ name={"Add new row"}
181
+ inProgressName={"Adding..."}
182
+ inProgress={inProgress}
183
+ onClick={addRowAction}
184
+ />
185
+ </>
147
186
  );
148
187
  };
149
188
 
@@ -4,16 +4,16 @@ import "../../styles/index.scss";
4
4
  import "../../styles/GridTheme.scss";
5
5
 
6
6
  import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
7
- import { GridUpdatingContextProvider } from "@contexts/GridUpdatingContextProvider";
8
- import { GridContextProvider } from "@contexts/GridContextProvider";
9
- import { Grid, GridProps } from "@components/Grid";
7
+ import { GridUpdatingContextProvider } from "../../contexts/GridUpdatingContextProvider";
8
+ import { GridContextProvider } from "../../contexts/GridContextProvider";
9
+ import { Grid, GridProps } from "../../components/Grid";
10
10
  import { useMemo, useState } from "react";
11
- import { MenuSeparator } from "@components/gridForm/GridFormDropDown";
12
- import { wait } from "@utils/util";
13
- import { MultiSelectResult } from "@components/gridForm/GridFormMultiSelect";
14
- import { GridSubComponentTextArea } from "@components/GridSubComponentTextArea";
15
- import { ColDefT, GridCell } from "@components/GridCell";
16
- import { GridPopoutEditMultiSelect } from "@components/gridPopoverEdit/GridPopoutEditMultiSelect";
11
+ import { MenuSeparator } from "../../components/gridForm/GridFormDropDown";
12
+ import { wait } from "../../utils/util";
13
+ import { MultiSelectResult } from "../../components/gridForm/GridFormMultiSelect";
14
+ import { GridSubComponentTextArea } from "../../components/GridSubComponentTextArea";
15
+ import { ColDefT, GridCell } from "../../components/GridCell";
16
+ import { GridPopoutEditMultiSelect } from "../../components/gridPopoverEdit/GridPopoutEditMultiSelect";
17
17
 
18
18
  export default {
19
19
  title: "Components / Grids",
@@ -24,7 +24,7 @@ export default {
24
24
  },
25
25
  decorators: [
26
26
  (Story) => (
27
- <div style={{ width: 1200, height: 400, display: "flex" }}>
27
+ <div style={{ width: 1024, height: 400 }}>
28
28
  <GridUpdatingContextProvider>
29
29
  <GridContextProvider>
30
30
  <Story />
@@ -119,14 +119,10 @@ const GridEditMultiSelectTemplate: ComponentStory<typeof Grid> = (props: GridPro
119
119
  ];
120
120
  }, []);
121
121
 
122
- const rowData = useMemo(
123
- () =>
124
- [
125
- { id: 1000, position: "Tester", position2: "1", position3: "Tester" },
126
- { id: 1001, position: "Developer", position2: "2", position3: "Developer" },
127
- ] as ITestRow[],
128
- [],
129
- );
122
+ const [rowData, setRowData] = useState([
123
+ { id: 1000, position: "Tester", position2: "1", position3: "Tester" },
124
+ { id: 1001, position: "Developer", position2: "2", position3: "Developer" },
125
+ ] as ITestRow[]);
130
126
 
131
127
  return (
132
128
  <Grid
@@ -135,6 +131,7 @@ const GridEditMultiSelectTemplate: ComponentStory<typeof Grid> = (props: GridPro
135
131
  setExternalSelectedItems={setExternalSelectedItems}
136
132
  columnDefs={columnDefs}
137
133
  rowData={rowData}
134
+ domLayout={"autoHeight"}
138
135
  />
139
136
  );
140
137
  };
@@ -4,14 +4,14 @@ import "../../styles/index.scss";
4
4
  import "../../styles/GridTheme.scss";
5
5
 
6
6
  import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
7
- import { GridUpdatingContextProvider } from "@contexts/GridUpdatingContextProvider";
8
- import { GridContextProvider } from "@contexts/GridContextProvider";
9
- import { Grid, GridProps } from "@components/Grid";
7
+ import { GridUpdatingContextProvider } from "../../contexts/GridUpdatingContextProvider";
8
+ import { GridContextProvider } from "../../contexts/GridContextProvider";
9
+ import { Grid, GridProps } from "../../components/Grid";
10
10
  import { useMemo, useState } from "react";
11
- import { wait } from "@utils/util";
12
- import { GridPopoverMenu } from "@components/gridPopoverEdit/GridPopoverMenu";
13
- import { ColDefT, GridCell } from "@components/GridCell";
14
- import { GridPopoverMessage } from "@components/gridPopoverEdit/GridPopoverMessage";
11
+ import { wait } from "../../utils/util";
12
+ import { GridPopoverMenu } from "../../components/gridPopoverEdit/GridPopoverMenu";
13
+ import { ColDefT, GridCell } from "../../components/GridCell";
14
+ import { GridPopoverMessage } from "../../components/gridPopoverEdit/GridPopoverMessage";
15
15
 
16
16
  export default {
17
17
  title: "Components / Grids",
@@ -24,7 +24,7 @@ export default {
24
24
  },
25
25
  decorators: [
26
26
  (Story) => (
27
- <div style={{ width: 1200, height: 400, display: "flex" }}>
27
+ <div style={{ width: 1024, height: 400 }}>
28
28
  <GridUpdatingContextProvider>
29
29
  <GridContextProvider>
30
30
  <Story />
@@ -151,13 +151,10 @@ const GridReadOnlyTemplate: ComponentStory<typeof Grid> = (props: GridProps) =>
151
151
  [],
152
152
  );
153
153
 
154
- const rowData: ITestRow[] = useMemo(
155
- () => [
156
- { id: 1000, position: "Tester", age: 30, desc: "Tests application", dd: "1" },
157
- { id: 1001, position: "Developer", age: 12, desc: "Develops application", dd: "2" },
158
- ],
159
- [],
160
- );
154
+ const [rowData, setRowData] = useState([
155
+ { id: 1000, position: "Tester", age: 30, desc: "Tests application", dd: "1" },
156
+ { id: 1001, position: "Developer", age: 12, desc: "Develops application", dd: "2" },
157
+ ]);
161
158
 
162
159
  return (
163
160
  <Grid
@@ -166,6 +163,7 @@ const GridReadOnlyTemplate: ComponentStory<typeof Grid> = (props: GridProps) =>
166
163
  setExternalSelectedItems={setExternalSelectedItems}
167
164
  columnDefs={columnDefs}
168
165
  rowData={rowData}
166
+ domLayout={"autoHeight"}
169
167
  />
170
168
  );
171
169
  };
@@ -1,6 +1,6 @@
1
1
  import { ComponentMeta, ComponentStory } from "@storybook/react/dist/ts3.9/client/preview/types-6-3";
2
- import { Grid } from "@components/Grid";
3
- import { Menu, MenuItem, MenuButton, MenuDivider, SubMenu } from "@react-menu3";
2
+ import { Grid } from "../../components/Grid";
3
+ import { Menu, MenuItem, MenuButton, MenuDivider, SubMenu } from "../../react-menu3";
4
4
 
5
5
  export default {
6
6
  title: "Components / React-menu",