@linzjs/step-ag-grid 1.5.3 → 2.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.
Files changed (64) hide show
  1. package/dist/index.d.ts +9 -9
  2. package/dist/index.js +410 -358
  3. package/dist/index.js.map +1 -1
  4. package/dist/src/components/Grid.d.ts +1 -1
  5. package/dist/src/components/GridCell.d.ts +18 -27
  6. package/dist/src/components/GridPopoverHook.d.ts +4 -2
  7. package/dist/src/components/gridForm/GridFormDropDown.d.ts +8 -3
  8. package/dist/src/components/gridForm/GridFormEditBearing.d.ts +3 -4
  9. package/dist/src/components/gridForm/GridFormMessage.d.ts +4 -5
  10. package/dist/src/components/gridForm/GridFormMultiSelect.d.ts +5 -10
  11. package/dist/src/components/gridForm/GridFormPopoutMenu.d.ts +3 -4
  12. package/dist/src/components/gridForm/GridFormTextArea.d.ts +2 -3
  13. package/dist/src/components/gridForm/GridFormTextInput.d.ts +3 -4
  14. package/dist/src/components/gridPopoverEdit/GridPopoutEditMultiSelect.d.ts +3 -2
  15. package/dist/src/components/gridPopoverEdit/GridPopoverEditBearing.d.ts +5 -270
  16. package/dist/src/components/gridPopoverEdit/GridPopoverEditDropDown.d.ts +3 -2
  17. package/dist/src/components/gridPopoverEdit/GridPopoverMenu.d.ts +2 -2
  18. package/dist/src/components/gridPopoverEdit/GridPopoverMessage.d.ts +3 -2
  19. package/dist/src/components/gridPopoverEdit/GridPopoverTextArea.d.ts +3 -2
  20. package/dist/src/components/gridPopoverEdit/GridPopoverTextInput.d.ts +3 -2
  21. package/dist/src/components/gridRender/GridRenderGenericCell.d.ts +1 -3
  22. package/dist/src/contexts/GridContext.d.ts +1 -0
  23. package/dist/src/contexts/GridPopoverContext.d.ts +17 -0
  24. package/dist/src/contexts/GridPopoverContextProvider.d.ts +6 -0
  25. package/dist/src/contexts/{UpdatingContext.d.ts → GridUpdatingContext.d.ts} +2 -2
  26. package/dist/src/contexts/GridUpdatingContextProvider.d.ts +7 -0
  27. package/dist/src/stories/components/FormTest.d.ts +1 -2
  28. package/dist/step-ag-grid.esm.js +404 -356
  29. package/dist/step-ag-grid.esm.js.map +1 -1
  30. package/package.json +1 -1
  31. package/src/components/Grid.tsx +20 -15
  32. package/src/components/GridCell.tsx +57 -79
  33. package/src/components/GridLoadableCell.tsx +4 -1
  34. package/src/components/GridPopoverHook.tsx +10 -14
  35. package/src/components/gridForm/GridFormDropDown.tsx +41 -30
  36. package/src/components/gridForm/GridFormEditBearing.tsx +13 -13
  37. package/src/components/gridForm/GridFormMessage.tsx +8 -13
  38. package/src/components/gridForm/GridFormMultiSelect.tsx +27 -29
  39. package/src/components/gridForm/GridFormPopoutMenu.tsx +10 -11
  40. package/src/components/gridForm/GridFormTextArea.tsx +16 -17
  41. package/src/components/gridForm/GridFormTextInput.tsx +19 -18
  42. package/src/components/gridPopoverEdit/GridPopoutEditMultiSelect.ts +17 -16
  43. package/src/components/gridPopoverEdit/GridPopoverEditBearing.ts +53 -45
  44. package/src/components/gridPopoverEdit/GridPopoverEditDropDown.ts +17 -16
  45. package/src/components/gridPopoverEdit/GridPopoverMenu.tsx +20 -21
  46. package/src/components/gridPopoverEdit/GridPopoverMessage.ts +18 -16
  47. package/src/components/gridPopoverEdit/GridPopoverTextArea.ts +12 -16
  48. package/src/components/gridPopoverEdit/GridPopoverTextInput.ts +15 -15
  49. package/src/components/gridRender/GridRenderGenericCell.tsx +3 -5
  50. package/src/components/gridRender/GridRenderPopoutMenuCell.tsx +2 -2
  51. package/src/contexts/GridContext.tsx +4 -0
  52. package/src/contexts/GridContextProvider.tsx +13 -5
  53. package/src/contexts/GridPopoverContext.tsx +32 -0
  54. package/src/contexts/GridPopoverContextProvider.tsx +53 -0
  55. package/src/contexts/{UpdatingContext.tsx → GridUpdatingContext.tsx} +2 -2
  56. package/src/contexts/{UpdatingContextProvider.tsx → GridUpdatingContextProvider.tsx} +8 -6
  57. package/src/stories/components/FormTest.tsx +4 -3
  58. package/src/stories/components/GridPopoutBearing.stories.tsx +28 -25
  59. package/src/stories/components/GridPopoutEditDropDown.stories.tsx +91 -50
  60. package/src/stories/components/GridPopoutEditGeneric.stories.tsx +18 -13
  61. package/src/stories/components/GridPopoutEditGenericTextArea.stories.tsx +76 -61
  62. package/src/stories/components/GridPopoutEditMultiSelect.stories.tsx +58 -51
  63. package/src/stories/components/GridReadOnly.stories.tsx +73 -57
  64. package/dist/src/contexts/UpdatingContextProvider.d.ts +0 -7
@@ -1632,7 +1632,7 @@ var MenuRadioGroupFr = function (_a, externalRef) {
1632
1632
  };
1633
1633
  var MenuRadioGroup = forwardRef(MenuRadioGroupFr);
1634
1634
 
1635
- var UpdatingContext = createContext({
1635
+ var GridUpdatingContext = createContext({
1636
1636
  checkUpdating: function () {
1637
1637
  console.error("Missing UpdatingContext");
1638
1638
  return false;
@@ -1645,7 +1645,7 @@ var UpdatingContext = createContext({
1645
1645
  }); }
1646
1646
  });
1647
1647
 
1648
- var UpdatingContextProvider = function (props) {
1648
+ var GridUpdatingContextProvider = function (props) {
1649
1649
  var updatingBlocks = useRef({});
1650
1650
  var updating = useRef({});
1651
1651
  var resetUpdating = function () {
@@ -1677,7 +1677,7 @@ var UpdatingContextProvider = function (props) {
1677
1677
  var checkUpdating = function (fields, id) {
1678
1678
  return castArray(fields).some(function (f) { var _a; return (_a = updating.current[f]) === null || _a === void 0 ? void 0 : _a.includes(id); });
1679
1679
  };
1680
- return (jsx(UpdatingContext.Provider, __assign({ value: { modifyUpdating: modifyUpdating, checkUpdating: checkUpdating } }, { children: props.children })));
1680
+ return (jsx(GridUpdatingContext.Provider, __assign({ value: { modifyUpdating: modifyUpdating, checkUpdating: checkUpdating } }, { children: props.children })));
1681
1681
  };
1682
1682
 
1683
1683
  var GridContext = createContext({
@@ -1732,6 +1732,9 @@ var GridContext = createContext({
1732
1732
  ensureSelectedRowIsVisible: function () {
1733
1733
  console.error("no context provider for ensureSelectedRowIsVisible");
1734
1734
  },
1735
+ sizeColumnsToFit: function () {
1736
+ console.error("no context provider for sizeColumnsToFit");
1737
+ },
1735
1738
  editingCells: function () {
1736
1739
  console.error("no context provider for editingCells");
1737
1740
  return false;
@@ -1753,7 +1756,7 @@ var GridContext = createContext({
1753
1756
  * Also, make sure the provider is created in a separate component, otherwise it won't be found.
1754
1757
  */
1755
1758
  var GridContextProvider = function (props) {
1756
- var modifyUpdating = useContext(UpdatingContext).modifyUpdating;
1759
+ var modifyUpdating = useContext(GridUpdatingContext).modifyUpdating;
1757
1760
  var gridApiRef = useRef();
1758
1761
  var idsBeforeUpdate = useRef([]);
1759
1762
  /**
@@ -1779,10 +1782,7 @@ var GridContextProvider = function (props) {
1779
1782
  noApiFn = (function () { });
1780
1783
  }
1781
1784
  var gridApi = gridApiRef.current;
1782
- if (gridApi)
1783
- return hasApiFn(gridApi);
1784
- console.error("GridApi not ready");
1785
- return noApiFn();
1785
+ return gridApi ? hasApiFn(gridApi) : noApiFn();
1786
1786
  };
1787
1787
  /**
1788
1788
  * Set the quick filter value to grid.
@@ -1942,6 +1942,14 @@ var GridContextProvider = function (props) {
1942
1942
  gridApi.ensureNodeVisible(last(selectedNodes));
1943
1943
  });
1944
1944
  };
1945
+ /**
1946
+ * Resize columns to fit container
1947
+ */
1948
+ var sizeColumnsToFit = function () {
1949
+ gridApiOp(function (gridApi) {
1950
+ gridApi.sizeColumnsToFit();
1951
+ });
1952
+ };
1945
1953
  var stopEditing = function () { return gridApiOp(function (gridApi) { return gridApi.stopEditing(); }); };
1946
1954
  var updatingCells = function (props, fnUpdate, setSaving) { return __awaiter(void 0, void 0, void 0, function () {
1947
1955
  return __generator(this, function (_a) {
@@ -2008,6 +2016,7 @@ var GridContextProvider = function (props) {
2008
2016
  editingCells: editingCells,
2009
2017
  ensureRowVisible: ensureRowVisible,
2010
2018
  ensureSelectedRowIsVisible: ensureSelectedRowIsVisible,
2019
+ sizeColumnsToFit: sizeColumnsToFit,
2011
2020
  stopEditing: stopEditing,
2012
2021
  updatingCells: updatingCells
2013
2022
  } }, { children: props.children })));
@@ -2193,8 +2202,8 @@ var GridHeaderSelect = function (_a) {
2193
2202
  */
2194
2203
  var Grid = function (params) {
2195
2204
  var _a;
2196
- var _b = useContext(GridContext), gridReady = _b.gridReady, setGridApi = _b.setGridApi, setQuickFilter = _b.setQuickFilter, ensureRowVisible = _b.ensureRowVisible, selectRowsById = _b.selectRowsById, ensureSelectedRowIsVisible = _b.ensureSelectedRowIsVisible;
2197
- var checkUpdating = useContext(UpdatingContext).checkUpdating;
2205
+ var _b = useContext(GridContext), gridReady = _b.gridReady, setGridApi = _b.setGridApi, setQuickFilter = _b.setQuickFilter, ensureRowVisible = _b.ensureRowVisible, selectRowsById = _b.selectRowsById, ensureSelectedRowIsVisible = _b.ensureSelectedRowIsVisible, sizeColumnsToFit = _b.sizeColumnsToFit;
2206
+ var checkUpdating = useContext(GridUpdatingContext).checkUpdating;
2198
2207
  var _c = useState(""), internalQuickFilter = _c[0], setInternalQuickFilter = _c[1];
2199
2208
  var lastSelectedIds = useRef([]);
2200
2209
  var _d = useState(false), staleGrid = _d[0], setStaleGrid = _d[1];
@@ -2292,14 +2301,6 @@ var Grid = function (params) {
2292
2301
  var _a;
2293
2302
  return (jsx("span", __assign({ className: "ag-overlay-no-rows-center" }, { children: (_a = params.noRowsOverlayText) !== null && _a !== void 0 ? _a : "There are currently no rows" })));
2294
2303
  }, [params.noRowsOverlayText]);
2295
- var sizeColumnsToFit = useCallback(function (event) {
2296
- // @ts-ignore (gridBodyCtrl is private)
2297
- if (event.api.gridBodyCtrl == undefined) {
2298
- return;
2299
- // this is here because ag grid was throwing api undefined error when closing POPPED OUT panel
2300
- }
2301
- event.api.sizeColumnsToFit();
2302
- }, []);
2303
2304
  var refreshSelectedRows = useCallback(function (event) {
2304
2305
  // Force-refresh all selected rows to re-run class function, to update selection highlighting
2305
2306
  event.api.refreshCells({
@@ -2345,6 +2346,12 @@ var Grid = function (params) {
2345
2346
  var cell = event.api.getFocusedCell();
2346
2347
  cell && event.api.setFocusedCell(cell.rowIndex, cell.column);
2347
2348
  }, [refreshSelectedRows]);
2349
+ // When rows added or removed then resize columns
2350
+ useEffect(function () {
2351
+ if (columnDefs === null || columnDefs === void 0 ? void 0 : columnDefs.length) {
2352
+ sizeColumnsToFit();
2353
+ }
2354
+ }, [columnDefs === null || columnDefs === void 0 ? void 0 : columnDefs.length, sizeColumnsToFit]);
2348
2355
  return (jsxs("div", __assign({ "data-testid": params.dataTestId, className: clsx("Grid-container", "ag-theme-alpine", staleGrid && "Grid-sortIsStale") }, { children: [params.quickFilter && (jsx("div", __assign({ className: "Grid-quickFilter" }, { children: jsx("input", { "aria-label": "Search", className: "lui-margin-top-xxs lui-margin-bottom-xxs Grid-quickFilterBox", type: "text", placeholder: (_a = params.quickFilterPlaceholder) !== null && _a !== void 0 ? _a : "Search...", value: internalQuickFilter, onChange: function (event) {
2349
2356
  setInternalQuickFilter(event.target.value);
2350
2357
  } }) }))), jsx(AgGridReact, { getRowId: function (params) { return "".concat(params.data.id); }, suppressRowClickSelection: true, rowSelection: "multiple", suppressBrowserResizeObserver: true, colResizeDefault: "shift", onFirstDataRendered: sizeColumnsToFit, onGridSizeChanged: sizeColumnsToFit, suppressClickEdit: true, onCellKeyDown: onCellKeyDown, onCellClicked: onCellClicked, onCellDoubleClicked: onCellDoubleClick, onCellEditingStarted: refreshSelectedRows, onCellEditingStopped: onCellEditingStopped, domLayout: params.domLayout, columnDefs: columnDefs, rowData: params.rowData, noRowsOverlayComponent: noRowsOverlayComponent, onGridReady: onGridReady, onSortChanged: ensureSelectedRowIsVisible, postSortRows: postSortRows, onSelectionChanged: synchroniseExternalStateToGridSelection })] })));
@@ -2369,8 +2376,24 @@ styleInject(css_248z$5);
2369
2376
  var css_248z$4 = ".GridLoadableCell-container {\n display: flex;\n align-items: center;\n}";
2370
2377
  styleInject(css_248z$4);
2371
2378
 
2379
+ var GridPopoverContext = createContext({
2380
+ anchorRef: { current: null },
2381
+ updateValueRef: {
2382
+ current: function () { return __awaiter(void 0, void 0, void 0, function () {
2383
+ return __generator(this, function (_a) {
2384
+ console.error("Missing GridPopoverContext updateValueRef");
2385
+ return [2 /*return*/, false];
2386
+ });
2387
+ }); }
2388
+ },
2389
+ saving: false,
2390
+ setSaving: function () { },
2391
+ setProps: function () { },
2392
+ propsRef: { current: null }
2393
+ });
2394
+
2372
2395
  var GridLoadableCell = function (props) {
2373
- // console.log(`Rendering LoadableCell - loading: ${props.isLoading}`);
2396
+ useContext(GridPopoverContext).saving;
2374
2397
  if (props.isLoading) {
2375
2398
  return (jsx("div", __assign({ style: { display: "flex", alignItems: "center" } }, { children: jsx(LuiMiniSpinner, { size: 22, divProps: { role: "status", "aria-label": "Loading", style: { marginBottom: 4 } } }) })));
2376
2399
  }
@@ -2382,7 +2405,7 @@ var GridIcon = function (props) { return (jsx(LuiIcon, { name: props.icon, title
2382
2405
 
2383
2406
  var GridRendererGenericCell = function (props) {
2384
2407
  var _a, _b, _c;
2385
- var checkUpdating = useContext(UpdatingContext).checkUpdating;
2408
+ var checkUpdating = useContext(GridUpdatingContext).checkUpdating;
2386
2409
  var colDef = props.colDef;
2387
2410
  var cellRendererParams = colDef.cellRendererParams;
2388
2411
  var warningFn = cellRendererParams === null || cellRendererParams === void 0 ? void 0 : cellRendererParams.warning;
@@ -2399,9 +2422,57 @@ var GridRendererGenericCell = function (props) {
2399
2422
  return (jsx(GridLoadableCell, __assign({ isLoading: checkUpdating((_c = (_b = colDef.field) !== null && _b !== void 0 ? _b : colDef.colId) !== null && _c !== void 0 ? _c : "", props.data.id) }, { children: jsxs(Fragment$1, { children: [typeof warningText === "string" && jsx(GridIcon, { icon: "ic_warning", title: warningText }), typeof infoText === "string" && jsx(GridIcon, { icon: "ic_info", title: infoText }), jsx("span", __assign({ title: formatted }, { children: formatted }))] }) })));
2400
2423
  };
2401
2424
 
2425
+ var GridPopoverContextProvider = function (props) {
2426
+ var _a = useContext(GridContext), getSelectedRows = _a.getSelectedRows, updatingCells = _a.updatingCells;
2427
+ var anchorRef = useRef();
2428
+ var propsRef = useRef({});
2429
+ var updateValueRef = useRef(function () { return __awaiter(void 0, void 0, void 0, function () {
2430
+ return __generator(this, function (_a) {
2431
+ console.error("updateValueRef.current is not set");
2432
+ return [2 /*return*/, false];
2433
+ });
2434
+ }); });
2435
+ var _b = useState(false), saving = _b[0], setSaving = _b[1];
2436
+ var setProps = function (props, multiEdit) {
2437
+ var _a, _b;
2438
+ var selectedRows = multiEdit ? getSelectedRows() : [props.data];
2439
+ var field = (_b = (_a = props.colDef) === null || _a === void 0 ? void 0 : _a.field) !== null && _b !== void 0 ? _b : "";
2440
+ anchorRef.current = props.eGridCell;
2441
+ propsRef.current = {
2442
+ value: props.value,
2443
+ data: props.data,
2444
+ field: field,
2445
+ selectedRows: selectedRows
2446
+ };
2447
+ updateValueRef.current = function (saveFn) { return __awaiter(void 0, void 0, void 0, function () {
2448
+ var _a;
2449
+ return __generator(this, function (_b) {
2450
+ switch (_b.label) {
2451
+ case 0:
2452
+ _a = !saving;
2453
+ if (!_a) return [3 /*break*/, 2];
2454
+ return [4 /*yield*/, updatingCells({ selectedRows: selectedRows, field: field }, saveFn, setSaving)];
2455
+ case 1:
2456
+ _a = (_b.sent());
2457
+ _b.label = 2;
2458
+ case 2: return [2 /*return*/, _a];
2459
+ }
2460
+ });
2461
+ }); };
2462
+ };
2463
+ return (jsx(GridPopoverContext.Provider, __assign({ value: {
2464
+ anchorRef: anchorRef,
2465
+ saving: saving,
2466
+ setSaving: setSaving,
2467
+ updateValueRef: updateValueRef,
2468
+ propsRef: propsRef,
2469
+ setProps: setProps
2470
+ } }, { children: props.children })));
2471
+ };
2472
+
2402
2473
  var GridCellRenderer = function (props) {
2403
2474
  var _a, _b, _c;
2404
- var checkUpdating = useContext(UpdatingContext).checkUpdating;
2475
+ var checkUpdating = useContext(GridUpdatingContext).checkUpdating;
2405
2476
  var colDef = props.colDef;
2406
2477
  var rendererParams = colDef.cellRendererParams;
2407
2478
  var warningFn = rendererParams === null || rendererParams === void 0 ? void 0 : rendererParams.warning;
@@ -2410,15 +2481,17 @@ var GridCellRenderer = function (props) {
2410
2481
  var infoText = infoFn ? infoFn(props) : undefined;
2411
2482
  return ((_a = colDef === null || colDef === void 0 ? void 0 : colDef.cellRendererParams) === null || _a === void 0 ? void 0 : _a.originalCellRenderer) ? (jsx(GridLoadableCell, __assign({ isLoading: checkUpdating((_c = (_b = colDef.field) !== null && _b !== void 0 ? _b : colDef.colId) !== null && _c !== void 0 ? _c : "", props.data.id) }, { children: jsxs(Fragment$1, { children: [typeof warningText === "string" && jsx(GridIcon, { icon: "ic_warning", title: warningText }), typeof infoText === "string" && jsx(GridIcon, { icon: "ic_info", title: infoText }), jsx(colDef.cellRendererParams.originalCellRenderer, __assign({}, props))] }) }))) : (jsx(GridRendererGenericCell, __assign({}, props)));
2412
2483
  };
2413
- /**
2484
+ /*
2414
2485
  * For editing a text area.
2415
2486
  */
2416
- var GridCell = function (props) {
2487
+ var GridCell = function (props, custom) {
2417
2488
  var _a;
2418
- return __assign(__assign(__assign(__assign({ sortable: !!((props === null || props === void 0 ? void 0 : props.field) || (props === null || props === void 0 ? void 0 : props.valueGetter)), resizable: true }, (props.cellEditorParams && {
2419
- cellClass: ((_a = props === null || props === void 0 ? void 0 : props.cellEditorParams) === null || _a === void 0 ? void 0 : _a.multiEdit) ? GenericMultiEditCellClass : undefined,
2420
- editable: true,
2421
- cellEditor: GenericCellEditorComponent
2489
+ return __assign(__assign(__assign(__assign(__assign({ sortable: !!((props === null || props === void 0 ? void 0 : props.field) || (props === null || props === void 0 ? void 0 : props.valueGetter)), resizable: true }, ((custom === null || custom === void 0 ? void 0 : custom.editor) && {
2490
+ cellClass: (custom === null || custom === void 0 ? void 0 : custom.multiEdit) ? GenericMultiEditCellClass : undefined,
2491
+ editable: (_a = props.editable) !== null && _a !== void 0 ? _a : true,
2492
+ cellEditor: GenericCellEditorComponent(custom.editor)
2493
+ })), ((custom === null || custom === void 0 ? void 0 : custom.editorParams) && {
2494
+ cellEditorParams: __assign(__assign({}, custom.editorParams), { multiEdit: custom.multiEdit })
2422
2495
  })), {
2423
2496
  // Default value formatter, otherwise react freaks out on objects
2424
2497
  valueFormatter: function (params) {
@@ -2431,37 +2504,22 @@ var GridCell = function (props) {
2431
2504
  return JSON.stringify(params.value);
2432
2505
  } }), props), { cellRenderer: GridCellRenderer, cellRendererParams: __assign({ originalCellRenderer: props.cellRenderer }, props.cellRendererParams) });
2433
2506
  };
2434
- var GenericCellEditorComponentFr = function (props, _) {
2435
- var _a, _b, _c;
2436
- var _d = useContext(GridContext), updatingCells = _d.updatingCells, getSelectedRows = _d.getSelectedRows;
2437
- var colDef = props.colDef, data = props.data;
2438
- var cellEditorParams = props.colDef.cellEditorParams;
2439
- var multiEdit = (_a = cellEditorParams === null || cellEditorParams === void 0 ? void 0 : cellEditorParams.multiEdit) !== null && _a !== void 0 ? _a : false;
2440
- var field = (_b = props.colDef.field) !== null && _b !== void 0 ? _b : "";
2441
- var formProps = (_c = colDef.cellEditorParams) !== null && _c !== void 0 ? _c : {};
2442
- var value = props.value;
2443
- var selectedRows = useMemo(function () { return (multiEdit ? getSelectedRows() : [data]); }, [data, getSelectedRows, multiEdit]);
2444
- var _e = useState(false), saving = _e[0], setSaving = _e[1];
2445
- var updateValue = useCallback(function (saveFn) { return __awaiter(void 0, void 0, void 0, function () {
2446
- var _a;
2447
- return __generator(this, function (_b) {
2448
- switch (_b.label) {
2449
- case 0:
2450
- _a = !saving;
2451
- if (!_a) return [3 /*break*/, 2];
2452
- return [4 /*yield*/, updatingCells({ selectedRows: selectedRows, field: field }, saveFn, setSaving)];
2453
- case 1:
2454
- _a = (_b.sent());
2455
- _b.label = 2;
2456
- case 2: return [2 /*return*/, _a];
2457
- }
2458
- });
2459
- }); }, [field, saving, selectedRows, updatingCells]);
2460
- if (cellEditorParams == null)
2461
- return jsx(Fragment$1, {});
2462
- return (jsxs(Fragment$1, { children: [jsx("div", { children: colDef.cellRenderer ? jsx(colDef.cellRenderer, __assign({}, props, { saving: saving })) : props.value }), (cellEditorParams === null || cellEditorParams === void 0 ? void 0 : cellEditorParams.form) && (jsx(cellEditorParams.form, { cellEditorParams: props, updateValue: updateValue, saving: saving, formProps: formProps, data: data, value: value, field: field, selectedRows: selectedRows }))] }));
2507
+ // TODO memo?
2508
+ var GenericCellEditorComponent = function (editor) {
2509
+ return forwardRef(function GenericCellEditorComponent2(props, _) {
2510
+ return (jsx(GridPopoverContextProvider, { children: jsx(GenericCellEditorComponent3, __assign({}, __assign(__assign({}, props), { editor: editor }))) }));
2511
+ });
2463
2512
  };
2464
- var GenericCellEditorComponent = forwardRef(GenericCellEditorComponentFr);
2513
+ var GenericCellEditorComponent3 = function (props) {
2514
+ var _a;
2515
+ var _b = useContext(GridPopoverContext), setProps = _b.setProps, propsRef = _b.propsRef;
2516
+ var colDef = props.colDef;
2517
+ var cellEditorParams = colDef.cellEditorParams;
2518
+ var multiEdit = (_a = cellEditorParams === null || cellEditorParams === void 0 ? void 0 : cellEditorParams.multiEdit) !== null && _a !== void 0 ? _a : false;
2519
+ // TODO don't need all these props in context
2520
+ setProps(props, multiEdit);
2521
+ return (jsxs(Fragment$1, { children: [jsx("div", { children: colDef.cellRenderer ? jsx(colDef.cellRenderer, __assign({}, props)) : props.value }), (props === null || props === void 0 ? void 0 : props.editor) && jsx(props.editor, __assign({}, cellEditorParams, propsRef.current))] }));
2522
+ };
2465
2523
 
2466
2524
  /**
2467
2525
  * If loading is true this returns a loading spinner, otherwise it returns its children.
@@ -2479,29 +2537,32 @@ var ComponentLoadingWrapper = function (props) {
2479
2537
  } })), props.children] })));
2480
2538
  };
2481
2539
 
2482
- var useGridPopoverHook = function (props, save) {
2483
- var cellEditorParams = props.cellEditorParams, saving = props.saving, updateValue = props.updateValue;
2484
- var eGridCell = cellEditorParams.eGridCell;
2540
+ var useGridPopoverHook = function (props) {
2541
+ if (props === void 0) { props = {}; }
2485
2542
  var stopEditing = useContext(GridContext).stopEditing;
2543
+ var _a = useContext(GridPopoverContext), anchorRef = _a.anchorRef, saving = _a.saving, updateValueRef = _a.updateValueRef;
2486
2544
  var saveButtonRef = useRef(null);
2487
- var anchorRef = useRef(eGridCell);
2488
- anchorRef.current = eGridCell;
2489
- var _a = useState(false), isOpen = _a[0], setOpen = _a[1];
2545
+ var _b = useState(false), isOpen = _b[0], setOpen = _b[1];
2490
2546
  useEffect(function () {
2491
2547
  setOpen(true);
2492
2548
  }, []);
2493
2549
  var triggerSave = useCallback(function (reason) { return __awaiter(void 0, void 0, void 0, function () {
2494
- var _a;
2495
- return __generator(this, function (_b) {
2496
- switch (_b.label) {
2550
+ var _a, _b;
2551
+ return __generator(this, function (_c) {
2552
+ switch (_c.label) {
2497
2553
  case 0:
2498
- _a = reason == "cancel" || !save;
2499
- if (_a) return [3 /*break*/, 2];
2500
- return [4 /*yield*/, updateValue(save)];
2554
+ _a = reason == "cancel" || !props.save;
2555
+ if (_a) return [3 /*break*/, 3];
2556
+ _b = updateValueRef.current;
2557
+ if (!_b) return [3 /*break*/, 2];
2558
+ return [4 /*yield*/, updateValueRef.current(props.save)];
2501
2559
  case 1:
2502
- _a = (_b.sent());
2503
- _b.label = 2;
2560
+ _b = (_c.sent());
2561
+ _c.label = 2;
2504
2562
  case 2:
2563
+ _a = (_b);
2564
+ _c.label = 3;
2565
+ case 3:
2505
2566
  if (_a) {
2506
2567
  setOpen(false);
2507
2568
  stopEditing();
@@ -2509,9 +2570,9 @@ var useGridPopoverHook = function (props, save) {
2509
2570
  return [2 /*return*/];
2510
2571
  }
2511
2572
  });
2512
- }); }, [save, stopEditing, updateValue]);
2573
+ }); }, [props, stopEditing, updateValueRef]);
2513
2574
  var popoverWrapper = useCallback(function (children) {
2514
- return (jsx(Fragment$1, { children: anchorRef.current && (jsxs(ControlledMenu, __assign({ state: isOpen ? "open" : "closed", portal: true, unmountOnClose: true, anchorRef: anchorRef, saveButtonRef: saveButtonRef, menuClassName: "lui-menu", onClose: function (event) { return triggerSave(event.reason).then(); }, reposition: "initial", viewScroll: "auto", dontShrinkIfDirectionIsTop: true }, { children: [saving && (jsx("div", { style: {
2575
+ return (jsx(Fragment$1, { children: anchorRef.current && (jsxs(ControlledMenu, __assign({ state: isOpen ? "open" : "closed", portal: true, unmountOnClose: true, anchorRef: anchorRef, saveButtonRef: saveButtonRef, menuClassName: "lui-menu", onClose: function (event) { return triggerSave(event.reason).then(); }, viewScroll: "auto", dontShrinkIfDirectionIsTop: true }, { children: [saving && (jsx("div", { style: {
2515
2576
  position: "absolute",
2516
2577
  left: 0,
2517
2578
  top: 0,
@@ -2520,7 +2581,7 @@ var useGridPopoverHook = function (props, save) {
2520
2581
  backgroundColor: "rgba(64,64,64,0.1)",
2521
2582
  zIndex: 1000
2522
2583
  } })), children, jsx("button", { ref: saveButtonRef, onClick: function () { return triggerSave().then(); }, style: { display: "none" } })] }))) }));
2523
- }, [isOpen, saving, triggerSave]);
2584
+ }, [anchorRef, isOpen, saving, triggerSave]);
2524
2585
  return {
2525
2586
  popoverWrapper: popoverWrapper,
2526
2587
  triggerSave: triggerSave
@@ -2529,7 +2590,7 @@ var useGridPopoverHook = function (props, save) {
2529
2590
 
2530
2591
  var GridRenderPopoutMenuCell = function (props) {
2531
2592
  var _a, _b, _c;
2532
- var checkUpdating = useContext(UpdatingContext).checkUpdating;
2593
+ var checkUpdating = useContext(GridUpdatingContext).checkUpdating;
2533
2594
  var isLoading = checkUpdating((_b = (_a = props.colDef) === null || _a === void 0 ? void 0 : _a.field) !== null && _b !== void 0 ? _b : "", props.data.id);
2534
2595
  var editable = (_c = props.colDef) === null || _c === void 0 ? void 0 : _c.editable;
2535
2596
  var disabled = !(typeof editable === "function"
@@ -2549,17 +2610,189 @@ var GridRenderPopoutMenuCell = function (props) {
2549
2610
  var css_248z$3 = "@charset \"UTF-8\";\n.szh-menu {\n margin: 0;\n padding: 0;\n list-style: none;\n box-sizing: border-box;\n width: max-content;\n z-index: 100;\n border: 1px solid rgba(0, 0, 0, 0.1);\n background-color: #fff;\n}\n.szh-menu:focus {\n outline: none;\n}\n.szh-menu__arrow {\n box-sizing: border-box;\n width: 0.75rem;\n height: 0.75rem;\n background-color: #fff;\n border: 1px solid transparent;\n border-left-color: rgba(0, 0, 0, 0.1);\n border-top-color: rgba(0, 0, 0, 0.1);\n z-index: -1;\n}\n.szh-menu__arrow--dir-left {\n right: -0.375rem;\n transform: translateY(-50%) rotate(135deg);\n}\n.szh-menu__arrow--dir-right {\n left: -0.375rem;\n transform: translateY(-50%) rotate(-45deg);\n}\n.szh-menu__arrow--dir-top {\n bottom: -0.375rem;\n transform: translateX(-50%) rotate(-135deg);\n}\n.szh-menu__arrow--dir-bottom {\n top: -0.375rem;\n transform: translateX(-50%) rotate(45deg);\n}\n.szh-menu__item {\n cursor: pointer;\n}\n.szh-menu__item:focus {\n outline: none;\n}\n.szh-menu__item--hover {\n background-color: #ebebeb;\n}\n.szh-menu__item--focusable {\n cursor: default;\n background-color: inherit;\n}\n.szh-menu__item--disabled {\n cursor: default;\n color: #aaa;\n}\n.szh-menu__group {\n box-sizing: border-box;\n}\n.szh-menu__radio-group {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.szh-menu__divider {\n height: 1px;\n margin: 0.5rem 0;\n background-color: rgba(0, 0, 0, 0.12);\n}\n\n.szh-menu-button {\n box-sizing: border-box;\n}\n\n.szh-menu {\n user-select: none;\n color: #212529;\n border: none;\n border-radius: 0.25rem;\n box-shadow: 0 3px 7px rgba(0, 0, 0, 0.133), 0 0.6px 2px rgba(0, 0, 0, 0.1);\n min-width: 10rem;\n padding: 0.5rem 0;\n}\n.szh-menu__item {\n display: flex;\n align-items: center;\n position: relative;\n padding: 0.375rem 1.5rem;\n}\n.szh-menu-container--itemTransition .szh-menu__item {\n transition-property: background-color, color;\n transition-duration: 0.15s;\n transition-timing-function: ease-in-out;\n}\n.szh-menu__item--type-radio {\n padding-left: 2.2rem;\n}\n.szh-menu__item--type-radio::before {\n content: \"○\";\n position: absolute;\n left: 0.8rem;\n top: 0.55rem;\n font-size: 0.8rem;\n}\n.szh-menu__item--type-radio.szh-menu__item--checked::before {\n content: \"●\";\n}\n.szh-menu__item--type-checkbox {\n padding-left: 2.2rem;\n}\n.szh-menu__item--type-checkbox::before {\n position: absolute;\n left: 0.8rem;\n}\n.szh-menu__item--type-checkbox.szh-menu__item--checked::before {\n content: \"✔\";\n}\n.szh-menu__submenu > .szh-menu__item {\n padding-right: 2.5rem;\n}\n.szh-menu__submenu > .szh-menu__item::after {\n content: \"❯\";\n position: absolute;\n right: 1rem;\n}\n.szh-menu__header {\n color: #888;\n font-size: 0.8rem;\n padding: 0.2rem 1.5rem;\n text-transform: uppercase;\n}";
2550
2611
  styleInject(css_248z$3);
2551
2612
 
2552
- var MenuSeparatorString$1 = "_____MENU_SEPARATOR_____";
2553
- Object.freeze({ value: MenuSeparatorString$1 });
2613
+ var MenuSeparatorString = "_____MENU_SEPARATOR_____";
2614
+ var MenuSeparator = Object.freeze({ value: MenuSeparatorString });
2615
+ var MenuHeaderString = "_____MENU_HEADER_____";
2616
+ var MenuHeaderItem = function (title) {
2617
+ return { label: title, value: MenuHeaderString };
2618
+ };
2619
+ var GridFormDropDown = function (_props) {
2620
+ var props = _props;
2621
+ var _a = useContext(GridContext), updatingCells = _a.updatingCells, stopEditing = _a.stopEditing;
2622
+ var _b = useState(""), filter = _b[0], setFilter = _b[1];
2623
+ var _c = useState([]), filteredValues = _c[0], setFilteredValues = _c[1];
2624
+ var optionsInitialising = useRef(false);
2625
+ var _d = useState(null), options = _d[0], setOptions = _d[1];
2626
+ var selectItemHandler = useCallback(function (value) { return __awaiter(void 0, void 0, void 0, function () {
2627
+ var field;
2628
+ return __generator(this, function (_a) {
2629
+ switch (_a.label) {
2630
+ case 0:
2631
+ field = props.field;
2632
+ return [4 /*yield*/, updatingCells({ selectedRows: props.selectedRows, field: field }, function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
2633
+ var hasChanged;
2634
+ return __generator(this, function (_a) {
2635
+ switch (_a.label) {
2636
+ case 0:
2637
+ hasChanged = selectedRows.some(function (row) { return row[field] !== value; });
2638
+ if (!hasChanged) return [3 /*break*/, 3];
2639
+ if (!props.onSelectedItem) return [3 /*break*/, 2];
2640
+ return [4 /*yield*/, props.onSelectedItem({ selectedRows: selectedRows, value: value })];
2641
+ case 1:
2642
+ _a.sent();
2643
+ return [3 /*break*/, 3];
2644
+ case 2:
2645
+ selectedRows.forEach(function (row) { return (row[field] = value); });
2646
+ _a.label = 3;
2647
+ case 3: return [2 /*return*/, true];
2648
+ }
2649
+ });
2650
+ }); })];
2651
+ case 1: return [2 /*return*/, _a.sent()];
2652
+ }
2653
+ });
2654
+ }); }, [props, updatingCells]);
2655
+ var selectFilterHandler = useCallback(function (value) { return __awaiter(void 0, void 0, void 0, function () {
2656
+ var field;
2657
+ return __generator(this, function (_a) {
2658
+ switch (_a.label) {
2659
+ case 0:
2660
+ field = props.field;
2661
+ return [4 /*yield*/, updatingCells({ selectedRows: props.selectedRows, field: field }, function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
2662
+ return __generator(this, function (_a) {
2663
+ switch (_a.label) {
2664
+ case 0:
2665
+ if (!props.onSelectFilter) return [3 /*break*/, 2];
2666
+ return [4 /*yield*/, props.onSelectFilter({ selectedRows: selectedRows, value: value })];
2667
+ case 1:
2668
+ _a.sent();
2669
+ _a.label = 2;
2670
+ case 2: return [2 /*return*/, true];
2671
+ }
2672
+ });
2673
+ }); })];
2674
+ case 1: return [2 /*return*/, _a.sent()];
2675
+ }
2676
+ });
2677
+ }); }, [props, updatingCells]);
2678
+ // Load up options list if it's async function
2679
+ useEffect(function () {
2680
+ var _a;
2681
+ if (options || optionsInitialising.current)
2682
+ return;
2683
+ optionsInitialising.current = true;
2684
+ var optionsConf = (_a = props.options) !== null && _a !== void 0 ? _a : [];
2685
+ (function () { return __awaiter(void 0, void 0, void 0, function () {
2686
+ var optionsList;
2687
+ return __generator(this, function (_a) {
2688
+ switch (_a.label) {
2689
+ case 0:
2690
+ if (!(typeof optionsConf == "function")) return [3 /*break*/, 2];
2691
+ return [4 /*yield*/, optionsConf(props.selectedRows, filter)];
2692
+ case 1:
2693
+ optionsConf = _a.sent();
2694
+ _a.label = 2;
2695
+ case 2:
2696
+ optionsList = optionsConf === null || optionsConf === void 0 ? void 0 : optionsConf.map(function (item) {
2697
+ if (item == null || typeof item == "string" || typeof item == "number") {
2698
+ item = { value: item, label: item, disabled: false };
2699
+ }
2700
+ return item;
2701
+ });
2702
+ if (props.filtered) {
2703
+ // This is needed otherwise when filter input is rendered and sets autofocus
2704
+ // the mouse up of the double click edit triggers the cell to cancel editing
2705
+ delay(function () { return setOptions(optionsList); }, 100);
2706
+ }
2707
+ else {
2708
+ setOptions(optionsList);
2709
+ }
2710
+ optionsInitialising.current = false;
2711
+ return [2 /*return*/];
2712
+ }
2713
+ });
2714
+ }); })();
2715
+ }, [filter, options, props]);
2716
+ // Local filtering.
2717
+ useEffect(function () {
2718
+ if (props.filtered == "local") {
2719
+ if (options == null)
2720
+ return;
2721
+ setFilteredValues(options
2722
+ .map(function (option) {
2723
+ if (option.label != null && typeof option.label !== "string") {
2724
+ console.error("Cannot filter non-string labels", option);
2725
+ return undefined;
2726
+ }
2727
+ var str = option.label || "";
2728
+ return str.toLowerCase().indexOf(filter) === -1 ? option.value : undefined;
2729
+ })
2730
+ .filter(function (r) { return r !== undefined; }));
2731
+ }
2732
+ }, [props.filtered, filter, options]);
2733
+ var researchOnFilterChange = debounce(useCallback(function () {
2734
+ setOptions(null);
2735
+ }, []), 500);
2736
+ var previousFilter = useRef(filter);
2737
+ // Reload filtering.
2738
+ useEffect(function () {
2739
+ if (previousFilter.current != filter && props.filtered == "reload") {
2740
+ previousFilter.current = filter;
2741
+ props.optionsRequestCancel && props.optionsRequestCancel();
2742
+ researchOnFilterChange().then();
2743
+ }
2744
+ }, [filter, props, researchOnFilterChange]);
2745
+ var onFilterKeyDown = useCallback(function (e) { return __awaiter(void 0, void 0, void 0, function () {
2746
+ var activeOptions;
2747
+ return __generator(this, function (_a) {
2748
+ switch (_a.label) {
2749
+ case 0:
2750
+ if (!options)
2751
+ return [2 /*return*/];
2752
+ if (!(e.key == "Enter" || e.key == "Tab")) return [3 /*break*/, 5];
2753
+ activeOptions = options.filter(function (option) { return !filteredValues.includes(option.value); });
2754
+ if (!(activeOptions.length == 1)) return [3 /*break*/, 2];
2755
+ return [4 /*yield*/, selectItemHandler(activeOptions[0].value)];
2756
+ case 1:
2757
+ _a.sent();
2758
+ stopEditing();
2759
+ return [3 /*break*/, 5];
2760
+ case 2:
2761
+ if (!props.onSelectFilter) return [3 /*break*/, 4];
2762
+ return [4 /*yield*/, selectFilterHandler(filter)];
2763
+ case 3:
2764
+ _a.sent();
2765
+ stopEditing();
2766
+ return [3 /*break*/, 5];
2767
+ case 4:
2768
+ e.preventDefault();
2769
+ e.stopPropagation();
2770
+ _a.label = 5;
2771
+ case 5: return [2 /*return*/];
2772
+ }
2773
+ });
2774
+ }); }, [filteredValues, options, selectItemHandler, selectFilterHandler, stopEditing, filter, props]);
2775
+ var maxRowsStyles = props.maxRows !== undefined ? { maxHeight: 62 + 34 * props.maxRows, overFlowY: "auto" } : undefined;
2776
+ var popoverWrapper = useGridPopoverHook().popoverWrapper;
2777
+ return popoverWrapper(jsxs(Fragment$1, { children: [props.filtered && (jsxs(Fragment$1, { children: [jsx(FocusableItem, __assign({ className: "filter-item" }, { children: function (_a) {
2778
+ var _b;
2779
+ var ref = _a.ref;
2780
+ return (jsx("div", __assign({ style: { display: "flex", width: "100%" } }, { children: jsx("input", { autoFocus: true, className: "free-text-input", style: { border: "0px" }, ref: ref, type: "text", placeholder: (_b = props.filterPlaceholder) !== null && _b !== void 0 ? _b : "Placeholder", "data-testid": "filteredMenu-free-text-input", defaultValue: filter, onChange: function (e) { return setFilter(e.target.value.toLowerCase()); }, onKeyDown: function (e) { return onFilterKeyDown(e); } }) })));
2781
+ } })), jsx(MenuDivider, {}, "$$divider_filter")] })), jsx(ComponentLoadingWrapper, __assign({ loading: !options }, { children: jsxs("div", __assign({ style: maxRowsStyles }, { children: [options && options.length == (filteredValues === null || filteredValues === void 0 ? void 0 : filteredValues.length) && jsx(MenuItem, { children: "[Empty]" }), options === null || options === void 0 ? void 0 : options.map(function (item, index) {
2782
+ var _a;
2783
+ return item.value === MenuSeparatorString ? (jsx(MenuDivider, {}, "$$divider_".concat(index))) : item.value === MenuHeaderString ? (jsx(MenuHeader, { children: item.label })) : filteredValues.includes(item.value) ? null : (jsx(MenuItem, __assign({ disabled: !!item.disabled, title: item.disabled && typeof item.disabled !== "boolean" ? item.disabled : "", value: item.value, onClick: function () { return selectItemHandler(item.value); } }, { children: (_a = item.label) !== null && _a !== void 0 ? _a : (item.value == null ? "<".concat(item.value, ">") : "".concat(item.value)) }), "".concat(props.field, "-").concat(index)));
2784
+ })] })) }))] }));
2785
+ };
2786
+
2554
2787
  var GridFormMultiSelect = function (props) {
2555
- var formProps = props.formProps;
2788
+ var selectedRows = props.selectedRows;
2556
2789
  var _a = useState(""), filter = _a[0], setFilter = _a[1];
2557
2790
  var _b = useState([]), filteredValues = _b[0], setFilteredValues = _b[1];
2558
2791
  var optionsInitialising = useRef(false);
2559
2792
  var _c = useState(), options = _c[0], setOptions = _c[1];
2560
2793
  var subSelectedValues = useRef({});
2561
2794
  var _d = useState(function () {
2562
- return formProps.initialSelectedValues ? formProps.initialSelectedValues(props.selectedRows) : [];
2795
+ return props.initialSelectedValues ? props.initialSelectedValues(selectedRows) : [];
2563
2796
  }), selectedValues = _d[0], setSelectedValues = _d[1];
2564
2797
  var save = useCallback(function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
2565
2798
  var values;
@@ -2567,28 +2800,28 @@ var GridFormMultiSelect = function (props) {
2567
2800
  switch (_a.label) {
2568
2801
  case 0:
2569
2802
  values = fromPairs(selectedValues.map(function (value) { var _a; return [value, (_a = subSelectedValues.current[value]) !== null && _a !== void 0 ? _a : true]; }));
2570
- if (!formProps.onSave) return [3 /*break*/, 2];
2571
- return [4 /*yield*/, formProps.onSave({ selectedRows: selectedRows, values: values })];
2803
+ if (!props.onSave) return [3 /*break*/, 2];
2804
+ return [4 /*yield*/, props.onSave({ selectedRows: selectedRows, values: values })];
2572
2805
  case 1: return [2 /*return*/, _a.sent()];
2573
2806
  case 2: return [2 /*return*/, true];
2574
2807
  }
2575
2808
  });
2576
- }); }, [formProps, selectedValues]);
2577
- var _e = useGridPopoverHook(props, save), popoverWrapper = _e.popoverWrapper, triggerSave = _e.triggerSave;
2809
+ }); }, [props, selectedValues]);
2810
+ var _e = useGridPopoverHook({ save: save }), popoverWrapper = _e.popoverWrapper, triggerSave = _e.triggerSave;
2578
2811
  // Load up options list if it's async function
2579
2812
  useEffect(function () {
2580
2813
  var _a;
2581
2814
  if (options || optionsInitialising.current)
2582
2815
  return;
2583
2816
  optionsInitialising.current = true;
2584
- var optionsConf = (_a = formProps.options) !== null && _a !== void 0 ? _a : [];
2817
+ var optionsConf = (_a = props.options) !== null && _a !== void 0 ? _a : [];
2585
2818
  (function () { return __awaiter(void 0, void 0, void 0, function () {
2586
2819
  var optionsList;
2587
2820
  return __generator(this, function (_a) {
2588
2821
  switch (_a.label) {
2589
2822
  case 0:
2590
2823
  if (!(typeof optionsConf == "function")) return [3 /*break*/, 2];
2591
- return [4 /*yield*/, optionsConf(props.selectedRows)];
2824
+ return [4 /*yield*/, optionsConf(selectedRows)];
2592
2825
  case 1:
2593
2826
  optionsConf = _a.sent();
2594
2827
  _a.label = 2;
@@ -2599,7 +2832,7 @@ var GridFormMultiSelect = function (props) {
2599
2832
  }
2600
2833
  return item;
2601
2834
  });
2602
- if (formProps.filtered) {
2835
+ if (props.filtered) {
2603
2836
  // This is needed otherwise when filter input is rendered and sets autofocus
2604
2837
  // the mouse up of the double click edit triggers the cell to cancel editing
2605
2838
  delay(function () { return setOptions(optionsList); }, 100);
@@ -2612,9 +2845,9 @@ var GridFormMultiSelect = function (props) {
2612
2845
  }
2613
2846
  });
2614
2847
  }); })();
2615
- }, [formProps.filtered, formProps.options, options, props.selectedRows]);
2848
+ }, [props.filtered, props.options, options, selectedRows]);
2616
2849
  useEffect(function () {
2617
- if (!formProps.filtered || options == null)
2850
+ if (!props.filtered || options == null)
2618
2851
  return;
2619
2852
  setFilteredValues(options
2620
2853
  .map(function (option) {
@@ -2626,14 +2859,14 @@ var GridFormMultiSelect = function (props) {
2626
2859
  return str.toLowerCase().indexOf(filter.trim()) === -1 ? option.value : undefined;
2627
2860
  })
2628
2861
  .filter(function (r) { return r !== undefined; }));
2629
- }, [formProps.filtered, filter, options]);
2630
- return popoverWrapper(jsx(ComponentLoadingWrapper, __assign({ loading: !options }, { children: jsxs("div", __assign({ className: "Grid-popoverContainerList" }, { children: [options && formProps.filtered && (jsxs(Fragment$1, { children: [jsx(FocusableItem, __assign({ className: "filter-item" }, { children: function (_a) {
2862
+ }, [props.filtered, filter, options]);
2863
+ return popoverWrapper(jsx(ComponentLoadingWrapper, __assign({ loading: !options }, { children: jsxs("div", __assign({ className: "Grid-popoverContainerList" }, { children: [options && props.filtered && (jsxs(Fragment$1, { children: [jsx(FocusableItem, __assign({ className: "filter-item" }, { children: function (_a) {
2631
2864
  var _b;
2632
2865
  var ref = _a.ref;
2633
- return (jsx("div", __assign({ style: { display: "flex", width: "100%" } }, { children: jsx("input", { autoFocus: true, className: "free-text-input", style: { border: "0px" }, ref: ref, type: "text", placeholder: (_b = formProps.filterPlaceholder) !== null && _b !== void 0 ? _b : "Placeholder", "data-testid": "filteredMenu-free-text-input", defaultValue: "", onChange: function (e) { return setFilter(e.target.value.toLowerCase()); } }) })));
2866
+ return (jsx("div", __assign({ style: { display: "flex", width: "100%" } }, { children: jsx("input", { autoFocus: true, className: "free-text-input", style: { border: "0px" }, ref: ref, type: "text", placeholder: (_b = props.filterPlaceholder) !== null && _b !== void 0 ? _b : "Placeholder", "data-testid": "filteredMenu-free-text-input", defaultValue: "", onChange: function (e) { return setFilter(e.target.value.toLowerCase()); } }) })));
2634
2867
  } }), "filter"), jsx(MenuDivider, {}, "$$divider_filter")] })), options === null || options === void 0 ? void 0 : options.map(function (item, index) {
2635
2868
  var _a;
2636
- return item.value === MenuSeparatorString$1 ? (jsx(MenuDivider, {}, "$$divider_".concat(index))) : filteredValues.includes(item.value) ? null : (jsxs(Fragment, { children: [jsx(MenuItem, __assign({ onClick: function (e) {
2869
+ return item.value === MenuSeparatorString ? (jsx(MenuDivider, {}, "$$divider_".concat(index))) : filteredValues.includes(item.value) ? null : (jsxs(Fragment, { children: [jsx(MenuItem, __assign({ onClick: function (e) {
2637
2870
  e.keepOpen = true;
2638
2871
  if (selectedValues.includes(item.value)) {
2639
2872
  setSelectedValues(selectedValues.filter(function (value) { return value != item.value; }));
@@ -2676,24 +2909,21 @@ var GridFormMultiSelect = function (props) {
2676
2909
  })] })) })));
2677
2910
  };
2678
2911
 
2679
- var GridPopoutEditMultiSelect = function (colDef) {
2680
- var _a;
2681
- return GridCell(__assign(__assign({ initialWidth: 65, maxWidth: 150, cellClass: ((_a = colDef.cellEditor) === null || _a === void 0 ? void 0 : _a.multiEdit) ? GenericMultiEditCellClass : undefined }, colDef), ((colDef === null || colDef === void 0 ? void 0 : colDef.cellEditorParams) && {
2682
- cellEditorParams: __assign(__assign({}, colDef.cellEditorParams), { form: GridFormMultiSelect })
2683
- })));
2912
+ var GridPopoutEditMultiSelect = function (colDef, props) {
2913
+ return GridCell(__assign({ initialWidth: 65, maxWidth: 150, cellClass: props.multiEdit ? GenericMultiEditCellClass : undefined }, colDef), __assign({ editor: GridFormMultiSelect }, props));
2684
2914
  };
2685
2915
 
2686
2916
  var css_248z$2 = "/**\n @deprecated\n */\n/**\n @deprecated\n */\n/**\n @deprecated\n */\n.GridPopoutMenu-burger {\n cursor: pointer;\n}\n.GridPopoutMenu-burger svg {\n fill: #007198;\n}\n\n.GridPopoutMenu-burgerDisabled svg {\n fill: #989189;\n}";
2687
2917
  styleInject(css_248z$2);
2688
2918
 
2689
2919
  /** Menu configuration types **/
2690
- var MenuSeparator = Object.freeze({ __isMenuSeparator__: true });
2920
+ var PopoutMenuSeparator = Object.freeze({ __isMenuSeparator__: true });
2691
2921
  /**
2692
2922
  * NOTE: If the popout menu doesn't appear on single click when also selecting row it's because
2693
2923
  * you need a useMemo around your columnDefs
2694
2924
  */
2695
- var GridFormPopoutMenu = function (props) {
2696
- var formProps = props.formProps;
2925
+ var GridFormPopoutMenu = function (_props) {
2926
+ var props = _props;
2697
2927
  var updatingCells = useContext(GridContext).updatingCells;
2698
2928
  var optionsInitialising = useRef(false);
2699
2929
  var _a = useState(), options = _a[0], setOptions = _a[1];
@@ -2703,7 +2933,7 @@ var GridFormPopoutMenu = function (props) {
2703
2933
  if (options || optionsInitialising.current)
2704
2934
  return;
2705
2935
  optionsInitialising.current = true;
2706
- var optionsConf = (_a = formProps.options) !== null && _a !== void 0 ? _a : [];
2936
+ var optionsConf = (_a = props.options) !== null && _a !== void 0 ? _a : [];
2707
2937
  (function () { return __awaiter(void 0, void 0, void 0, function () {
2708
2938
  var _a;
2709
2939
  return __generator(this, function (_b) {
@@ -2724,7 +2954,7 @@ var GridFormPopoutMenu = function (props) {
2724
2954
  }
2725
2955
  });
2726
2956
  }); })();
2727
- }, [options, formProps.options, props.selectedRows]);
2957
+ }, [options, props.options, props.selectedRows]);
2728
2958
  var actionClick = useCallback(function (menuOption) { return __awaiter(void 0, void 0, void 0, function () {
2729
2959
  return __generator(this, function (_a) {
2730
2960
  switch (_a.label) {
@@ -2750,25 +2980,23 @@ var GridFormPopoutMenu = function (props) {
2750
2980
  }); }, [props.field, props.selectedRows, updatingCells]);
2751
2981
  var selectedRowCount = props.selectedRows.length;
2752
2982
  var filteredOptions = options === null || options === void 0 ? void 0 : options.filter(function (menuOption) {
2753
- return menuOption.label === MenuSeparator || selectedRowCount === 1 || menuOption.supportsMultiEdit;
2983
+ return menuOption.label === PopoutMenuSeparator || selectedRowCount === 1 || menuOption.supportsMultiEdit;
2754
2984
  });
2755
- var popoverWrapper = useGridPopoverHook(props).popoverWrapper;
2985
+ var popoverWrapper = useGridPopoverHook().popoverWrapper;
2756
2986
  return popoverWrapper(jsx(ComponentLoadingWrapper, __assign({ loading: !filteredOptions }, { children: jsx("div", __assign({ className: "Grid-popoverContainerList" }, { children: options === null || options === void 0 ? void 0 : options.map(function (item, index) {
2757
- return item.label === MenuSeparator ? (jsx(MenuDivider, {}, "$$divider_".concat(index))) : (!item.hidden && (jsx(MenuItem, __assign({ onClick: function () { return actionClick(item); }, disabled: !!item.disabled || !(filteredOptions === null || filteredOptions === void 0 ? void 0 : filteredOptions.includes(item)), title: item.disabled && typeof item.disabled !== "boolean" ? item.disabled : "" }, { children: item.label }), "".concat(item.label))));
2987
+ return item.label === PopoutMenuSeparator ? (jsx(MenuDivider, {}, "$$divider_".concat(index))) : (!item.hidden && (jsx(MenuItem, __assign({ onClick: function () { return actionClick(item); }, disabled: !!item.disabled || !(filteredOptions === null || filteredOptions === void 0 ? void 0 : filteredOptions.includes(item)), title: item.disabled && typeof item.disabled !== "boolean" ? item.disabled : "" }, { children: item.label }), "".concat(item.label))));
2758
2988
  }) })) })));
2759
2989
  };
2760
2990
 
2761
2991
  /**
2762
2992
  * Popout burger menu
2763
2993
  */
2764
- var GridPopoverMenu = function (colDef) {
2994
+ var GridPopoverMenu = function (colDef, props) {
2765
2995
  var _a;
2766
- return GridCell(__assign(__assign(__assign({ maxWidth: 64, editable: colDef.editable != null ? colDef.editable : true, cellRenderer: GridRenderPopoutMenuCell, cellClass: ((_a = colDef === null || colDef === void 0 ? void 0 : colDef.cellEditorParams) === null || _a === void 0 ? void 0 : _a.multiEdit) !== false ? GenericMultiEditCellClass : undefined }, colDef), { cellRendererParams: {
2996
+ return GridCell(__assign(__assign({ maxWidth: 64, editable: colDef.editable != null ? colDef.editable : true, cellRenderer: GridRenderPopoutMenuCell, cellClass: ((_a = colDef === null || colDef === void 0 ? void 0 : colDef.cellEditorParams) === null || _a === void 0 ? void 0 : _a.multiEdit) !== false ? GenericMultiEditCellClass : undefined }, colDef), { cellRendererParams: {
2767
2997
  // Menus open on single click, this parameter is picked up in Grid.tsx
2768
2998
  singleClickEdit: true
2769
- } }), ((colDef === null || colDef === void 0 ? void 0 : colDef.cellEditorParams) && {
2770
- cellEditorParams: __assign(__assign({ multiEdit: true }, colDef.cellEditorParams), { form: GridFormPopoutMenu })
2771
- })));
2999
+ } }), __assign({ editor: GridFormPopoutMenu }, props));
2772
3000
  };
2773
3001
 
2774
3002
  var bearingValueFormatter = function (params) {
@@ -2859,9 +3087,9 @@ var TextInputFormatted = function (props) {
2859
3087
  return (jsxs("div", __assign({ className: clsx("LuiTextInput Grid-popoverContainer", props.error && "hasError", props.warning && "hasWarning", props.className) }, { children: [jsxs("span", __assign({ className: "LuiTextInput-inputWrapper" }, { children: [jsx("input", __assign({ type: "text", className: "LuiTextInput-input", min: "0", value: props.value, onChange: props.onChange }, props.inputProps)), jsx("span", __assign({ className: "LuiTextInput-formatted" }, { children: props.formatted }))] })), props.error && (jsxs("span", __assign({ className: "LuiTextInput-error" }, { children: [jsx(LuiIcon, { alt: "error", name: "ic_error", className: "LuiTextInput-error-icon", size: "sm", status: "error" }), props.error] }))), props.warning && (jsxs("span", __assign({ className: "LuiTextInput-warning" }, { children: [jsx(LuiIcon, { alt: "warning", name: "ic_warning", className: "LuiTextInput-warning-icon", size: "sm", status: "warning" }), props.warning] })))] })));
2860
3088
  };
2861
3089
 
2862
- var GridFormEditBearing = function (props) {
3090
+ var GridFormEditBearing = function (_props) {
2863
3091
  var _a;
2864
- var formProps = props.formProps;
3092
+ var props = _props;
2865
3093
  var _b = useState("".concat((_a = props.value) !== null && _a !== void 0 ? _a : "")), value = _b[0], setValue = _b[1];
2866
3094
  var save = useCallback(function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
2867
3095
  var parsedValue, field_1;
@@ -2875,8 +3103,8 @@ var GridFormEditBearing = function (props) {
2875
3103
  if (parsedValue === props.value) {
2876
3104
  return [2 /*return*/, true];
2877
3105
  }
2878
- if (!formProps.onSave) return [3 /*break*/, 2];
2879
- return [4 /*yield*/, formProps.onSave(selectedRows, parsedValue)];
3106
+ if (!props.onSave) return [3 /*break*/, 2];
3107
+ return [4 /*yield*/, props.onSave(selectedRows, parsedValue)];
2880
3108
  case 1: return [2 /*return*/, _a.sent()];
2881
3109
  case 2:
2882
3110
  field_1 = props.field;
@@ -2890,42 +3118,42 @@ var GridFormEditBearing = function (props) {
2890
3118
  case 3: return [2 /*return*/, true];
2891
3119
  }
2892
3120
  });
2893
- }); }, [formProps, props.field, props.value, value]);
2894
- var _c = useGridPopoverHook(props, save), popoverWrapper = _c.popoverWrapper, triggerSave = _c.triggerSave;
3121
+ }); }, [props, value]);
3122
+ var _c = useGridPopoverHook({ save: save }), triggerSave = _c.triggerSave, popoverWrapper = _c.popoverWrapper;
2895
3123
  return popoverWrapper(jsx("div", __assign({ className: "GridFormEditBearing-input Grid-popoverContainer" }, { children: jsx(TextInputFormatted, { value: value !== null && value !== void 0 ? value : "", onChange: function (e) {
2896
3124
  setValue(e.target.value.trim());
2897
3125
  }, inputProps: {
2898
3126
  autoFocus: true,
2899
- placeholder: formProps.placeHolder,
3127
+ placeholder: props.placeHolder,
2900
3128
  disabled: false,
2901
3129
  maxLength: 16,
2902
3130
  onKeyDown: function (e) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
2903
3131
  return [2 /*return*/, e.key === "Enter" && triggerSave().then()];
2904
3132
  }); }); }
2905
- }, formatted: bearingStringValidator(value, formProps.range) ? "?" : convertDDToDMS(bearingNumberParser(value)), error: bearingStringValidator(value, formProps.range) }) })));
3133
+ }, formatted: bearingStringValidator(value, props.range) ? "?" : convertDDToDMS(bearingNumberParser(value)), error: bearingStringValidator(value, props.range) }) })));
2906
3134
  };
2907
3135
 
2908
- var GridPopoverEditBearingLike = function (colDef) {
2909
- var _a;
2910
- return GridCell(__assign(__assign({ initialWidth: 65, maxWidth: 150, valueFormatter: bearingValueFormatter, cellClass: ((_a = colDef.cellEditorParams) === null || _a === void 0 ? void 0 : _a.multiEdit) ? GenericMultiEditCellClass : undefined }, colDef), ((colDef === null || colDef === void 0 ? void 0 : colDef.cellEditorParams) && {
2911
- cellEditorParams: __assign(__assign({}, colDef.cellEditorParams), { form: GridFormEditBearing })
2912
- })));
3136
+ var GridPopoverEditBearingLike = function (colDef, props) {
3137
+ return GridCell(__assign({ initialWidth: 65, maxWidth: 150, valueFormatter: bearingValueFormatter, cellClass: props.multiEdit ? GenericMultiEditCellClass : undefined }, colDef), __assign({ editor: GridFormEditBearing }, props));
2913
3138
  };
2914
- var GridPopoverEditBearing = function (colDef) {
2915
- var init = GridPopoverEditBearingLike(colDef);
2916
- return __assign(__assign({}, init), { valueFormatter: bearingValueFormatter, cellEditorParams: __assign({ range: function (value) {
3139
+ var GridPopoverEditBearing = function (colDef, props) {
3140
+ return GridPopoverEditBearingLike(__assign({ valueFormatter: bearingValueFormatter }, colDef), {
3141
+ multiEdit: !!props.multiEdit,
3142
+ editorParams: __assign({ placeHolder: "Enter bearing correction", range: function (value) {
2917
3143
  if (value === null)
2918
- return "Bearing is required";
3144
+ return "Bearing correction is required";
2919
3145
  if (value >= 360)
2920
- return "Bearing must be less than 360 degrees";
3146
+ return "Bearing correction must be less than 360 degrees";
2921
3147
  if (value < 0)
2922
- return "Bearing must not be negative";
3148
+ return "Bearing correction must not be negative";
2923
3149
  return null;
2924
- } }, init.cellEditorParams) });
3150
+ } }, props.editorParams)
3151
+ });
2925
3152
  };
2926
- var GridPopoverEditBearingCorrection = function (colDef) {
2927
- var init = GridPopoverEditBearingLike(colDef);
2928
- return __assign(__assign({}, init), { valueFormatter: bearingCorrectionValueFormatter, cellEditorParams: __assign({ range: function (value) {
3153
+ var GridPopoverEditBearingCorrection = function (colDef, props) {
3154
+ return GridPopoverEditBearingLike(__assign({ valueFormatter: bearingCorrectionValueFormatter }, colDef), {
3155
+ multiEdit: !!props.multiEdit,
3156
+ editorParams: __assign({ placeHolder: "Enter bearing correction", range: function (value) {
2929
3157
  if (value === null)
2930
3158
  return "Bearing is required";
2931
3159
  if (value >= 360)
@@ -2933,189 +3161,18 @@ var GridPopoverEditBearingCorrection = function (colDef) {
2933
3161
  if (value <= -180)
2934
3162
  return "Bearing must be greater then -180 degrees";
2935
3163
  return null;
2936
- } }, init.cellEditorParams) });
2937
- };
2938
-
2939
- var MenuSeparatorString = "_____MENU_SEPARATOR_____";
2940
- Object.freeze({ value: MenuSeparatorString });
2941
- var GridFormDropDown = function (props) {
2942
- var popoverWrapper = useGridPopoverHook(props).popoverWrapper;
2943
- var formProps = props.formProps;
2944
- var _a = useContext(GridContext), updatingCells = _a.updatingCells, stopEditing = _a.stopEditing;
2945
- var _b = useState(""), filter = _b[0], setFilter = _b[1];
2946
- var _c = useState([]), filteredValues = _c[0], setFilteredValues = _c[1];
2947
- var optionsInitialising = useRef(false);
2948
- var _d = useState(null), options = _d[0], setOptions = _d[1];
2949
- var selectItemHandler = useCallback(function (value) { return __awaiter(void 0, void 0, void 0, function () {
2950
- var field;
2951
- return __generator(this, function (_a) {
2952
- switch (_a.label) {
2953
- case 0:
2954
- field = props.field;
2955
- return [4 /*yield*/, updatingCells({ selectedRows: props.selectedRows, field: field }, function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
2956
- var hasChanged;
2957
- return __generator(this, function (_a) {
2958
- switch (_a.label) {
2959
- case 0:
2960
- hasChanged = selectedRows.some(function (row) { return row[field] !== value; });
2961
- if (!hasChanged) return [3 /*break*/, 3];
2962
- if (!formProps.onSelectedItem) return [3 /*break*/, 2];
2963
- return [4 /*yield*/, formProps.onSelectedItem({ selectedRows: selectedRows, value: value })];
2964
- case 1:
2965
- _a.sent();
2966
- return [3 /*break*/, 3];
2967
- case 2:
2968
- selectedRows.forEach(function (row) { return (row[field] = value); });
2969
- _a.label = 3;
2970
- case 3: return [2 /*return*/, true];
2971
- }
2972
- });
2973
- }); })];
2974
- case 1: return [2 /*return*/, _a.sent()];
2975
- }
2976
- });
2977
- }); }, [formProps, props.field, props.selectedRows, updatingCells]);
2978
- var selectFilterHandler = useCallback(function (value) { return __awaiter(void 0, void 0, void 0, function () {
2979
- var field;
2980
- return __generator(this, function (_a) {
2981
- switch (_a.label) {
2982
- case 0:
2983
- field = props.field;
2984
- return [4 /*yield*/, updatingCells({ selectedRows: props.selectedRows, field: field }, function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
2985
- return __generator(this, function (_a) {
2986
- switch (_a.label) {
2987
- case 0:
2988
- if (!formProps.onSelectFilter) return [3 /*break*/, 2];
2989
- return [4 /*yield*/, formProps.onSelectFilter({ selectedRows: selectedRows, value: value })];
2990
- case 1:
2991
- _a.sent();
2992
- _a.label = 2;
2993
- case 2: return [2 /*return*/, true];
2994
- }
2995
- });
2996
- }); })];
2997
- case 1: return [2 /*return*/, _a.sent()];
2998
- }
2999
- });
3000
- }); }, [formProps, props.field, props.selectedRows, updatingCells]);
3001
- // Load up options list if it's async function
3002
- useEffect(function () {
3003
- var _a;
3004
- if (options || optionsInitialising.current)
3005
- return;
3006
- optionsInitialising.current = true;
3007
- var optionsConf = (_a = formProps.options) !== null && _a !== void 0 ? _a : [];
3008
- (function () { return __awaiter(void 0, void 0, void 0, function () {
3009
- var optionsList;
3010
- return __generator(this, function (_a) {
3011
- switch (_a.label) {
3012
- case 0:
3013
- if (!(typeof optionsConf == "function")) return [3 /*break*/, 2];
3014
- return [4 /*yield*/, optionsConf(props.selectedRows, filter)];
3015
- case 1:
3016
- optionsConf = _a.sent();
3017
- _a.label = 2;
3018
- case 2:
3019
- optionsList = optionsConf === null || optionsConf === void 0 ? void 0 : optionsConf.map(function (item) {
3020
- if (item == null || typeof item == "string" || typeof item == "number") {
3021
- item = { value: item, label: item, disabled: false };
3022
- }
3023
- return item;
3024
- });
3025
- if (formProps.filtered) {
3026
- // This is needed otherwise when filter input is rendered and sets autofocus
3027
- // the mouse up of the double click edit triggers the cell to cancel editing
3028
- delay(function () { return setOptions(optionsList); }, 100);
3029
- }
3030
- else {
3031
- setOptions(optionsList);
3032
- }
3033
- optionsInitialising.current = false;
3034
- return [2 /*return*/];
3035
- }
3036
- });
3037
- }); })();
3038
- }, [filter, options, formProps.filtered, formProps.options, props.selectedRows]);
3039
- // Local filtering
3040
- useEffect(function () {
3041
- if (formProps.filtered == "local") {
3042
- if (options == null)
3043
- return;
3044
- setFilteredValues(options
3045
- .map(function (option) {
3046
- if (option.label != null && typeof option.label !== "string") {
3047
- console.error("Cannot filter non-string labels", option);
3048
- return undefined;
3049
- }
3050
- var str = option.label || "";
3051
- return str.toLowerCase().indexOf(filter) === -1 ? option.value : undefined;
3052
- })
3053
- .filter(function (r) { return r !== undefined; }));
3054
- }
3055
- }, [formProps.filtered, filter, options]);
3056
- var researchOnFilterChange = debounce(useCallback(function () {
3057
- setOptions(null);
3058
- }, []), 500);
3059
- var previousFilter = useRef(filter);
3060
- // Reload filtering
3061
- useEffect(function () {
3062
- if (previousFilter.current != filter && formProps.filtered == "reload") {
3063
- previousFilter.current = filter;
3064
- formProps.optionsRequestCancel && formProps.optionsRequestCancel();
3065
- researchOnFilterChange().then();
3066
- }
3067
- }, [filter, formProps, props, researchOnFilterChange]);
3068
- var onFilterKeyDown = useCallback(function (e) { return __awaiter(void 0, void 0, void 0, function () {
3069
- var activeOptions;
3070
- return __generator(this, function (_a) {
3071
- switch (_a.label) {
3072
- case 0:
3073
- if (!options)
3074
- return [2 /*return*/];
3075
- if (!(e.key == "Enter" || e.key == "Tab")) return [3 /*break*/, 5];
3076
- activeOptions = options.filter(function (option) { return !filteredValues.includes(option.value); });
3077
- if (!(activeOptions.length == 1)) return [3 /*break*/, 2];
3078
- return [4 /*yield*/, selectItemHandler(activeOptions[0].value)];
3079
- case 1:
3080
- _a.sent();
3081
- stopEditing();
3082
- return [3 /*break*/, 5];
3083
- case 2:
3084
- if (!formProps.onSelectFilter) return [3 /*break*/, 4];
3085
- return [4 /*yield*/, selectFilterHandler(filter)];
3086
- case 3:
3087
- _a.sent();
3088
- stopEditing();
3089
- return [3 /*break*/, 5];
3090
- case 4:
3091
- e.preventDefault();
3092
- e.stopPropagation();
3093
- _a.label = 5;
3094
- case 5: return [2 /*return*/];
3095
- }
3096
- });
3097
- }); }, [filteredValues, options, selectItemHandler, selectFilterHandler, stopEditing, filter, formProps]);
3098
- return popoverWrapper(jsxs(Fragment$1, { children: [formProps.filtered && (jsxs(Fragment$1, { children: [jsx(FocusableItem, __assign({ className: "filter-item" }, { children: function (_a) {
3099
- var _b;
3100
- var ref = _a.ref;
3101
- return (jsx("div", __assign({ style: { display: "flex", width: "100%" } }, { children: jsx("input", { autoFocus: true, className: "free-text-input", style: { border: "0px" }, ref: ref, type: "text", placeholder: (_b = formProps.filterPlaceholder) !== null && _b !== void 0 ? _b : "Placeholder", "data-testid": "filteredMenu-free-text-input", defaultValue: filter, onChange: function (e) { return setFilter(e.target.value.toLowerCase()); }, onKeyDown: function (e) { return onFilterKeyDown(e); } }) })));
3102
- } })), jsx(MenuDivider, {}, "$$divider_filter")] })), jsx(ComponentLoadingWrapper, __assign({ loading: !options }, { children: jsxs(Fragment$1, { children: [options && options.length == (filteredValues === null || filteredValues === void 0 ? void 0 : filteredValues.length) && jsx(MenuItem, { children: "[Empty]" }), options === null || options === void 0 ? void 0 : options.map(function (item, index) {
3103
- var _a;
3104
- return item.value === MenuSeparatorString ? (jsx(MenuDivider, {}, "$$divider_".concat(index))) : filteredValues.includes(item.value) ? null : (jsx(MenuItem, __assign({ disabled: !!item.disabled, title: item.disabled && typeof item.disabled !== "boolean" ? item.disabled : "", value: item.value, onClick: function () { return selectItemHandler(item.value); } }, { children: (_a = item.label) !== null && _a !== void 0 ? _a : (item.value == null ? "<".concat(item.value, ">") : "".concat(item.value)) }), "".concat(props.field, "-").concat(index)));
3105
- })] }) }))] }));
3164
+ } }, props.editorParams)
3165
+ });
3106
3166
  };
3107
3167
 
3108
- var GridPopoverEditDropDown = function (colDef) {
3109
- var _a;
3110
- return GridCell(__assign(__assign({ initialWidth: 65, maxWidth: 150, cellClass: ((_a = colDef.cellEditor) === null || _a === void 0 ? void 0 : _a.multiEdit) ? GenericMultiEditCellClass : undefined }, colDef), ((colDef === null || colDef === void 0 ? void 0 : colDef.cellEditorParams) && {
3111
- cellEditorParams: __assign(__assign({}, colDef.cellEditorParams), { form: GridFormDropDown })
3112
- })));
3168
+ var GridPopoverEditDropDown = function (colDef, props) {
3169
+ return GridCell(__assign({ initialWidth: 65, maxWidth: 150, cellClass: props.multiEdit ? GenericMultiEditCellClass : undefined }, colDef), __assign({ editor: GridFormDropDown }, props));
3113
3170
  };
3114
3171
 
3115
- var GridFormMessage = function (props) {
3116
- var formProps = props.formProps;
3172
+ var GridFormMessage = function (_props) {
3173
+ var props = _props;
3117
3174
  var _a = useState(null), message = _a[0], setMessage = _a[1];
3118
- var popoverWrapper = useGridPopoverHook(props).popoverWrapper;
3175
+ var popoverWrapper = useGridPopoverHook().popoverWrapper;
3119
3176
  useEffect(function () {
3120
3177
  (function () { return __awaiter(void 0, void 0, void 0, function () {
3121
3178
  var _a;
@@ -3123,24 +3180,19 @@ var GridFormMessage = function (props) {
3123
3180
  switch (_b.label) {
3124
3181
  case 0:
3125
3182
  _a = setMessage;
3126
- return [4 /*yield*/, formProps.message(props.selectedRows, props.cellEditorParams)];
3183
+ return [4 /*yield*/, props.message(props)];
3127
3184
  case 1:
3128
3185
  _a.apply(void 0, [_b.sent()]);
3129
3186
  return [2 /*return*/];
3130
3187
  }
3131
3188
  });
3132
3189
  }); })().then();
3133
- }, [formProps, props.selectedRows, props]);
3190
+ }, [props]);
3134
3191
  return popoverWrapper(jsx(ComponentLoadingWrapper, __assign({ loading: message === null }, { children: jsx("div", __assign({ style: { maxWidth: 400 }, className: "Grid-popoverContainer" }, { children: message })) })));
3135
3192
  };
3136
3193
 
3137
- var GridPopoverMessage = function (colDef) {
3138
- var _a;
3139
- return GridCell(__assign(__assign(__assign({ maxWidth: 140 }, colDef), { cellRendererParams: (_a = colDef.cellRendererParams) !== null && _a !== void 0 ? _a : {
3140
- singleClickEdit: true
3141
- } }), ((colDef === null || colDef === void 0 ? void 0 : colDef.cellEditorParams) && {
3142
- cellEditorParams: __assign(__assign({}, colDef.cellEditorParams), { form: GridFormMessage })
3143
- })));
3194
+ var GridPopoverMessage = function (colDef, props) {
3195
+ return GridCell(__assign(__assign({ maxWidth: 140 }, colDef), { cellRendererParams: __assign({ singleClickEdit: true }, colDef.cellRendererParams) }), __assign({ editor: GridFormMessage }, props));
3144
3196
  };
3145
3197
 
3146
3198
  var useGenerateOrDefaultId = function (idFromProps) {
@@ -3153,22 +3205,22 @@ var TextAreaInput = function (props) {
3153
3205
  return (jsxs("div", __assign({ className: clsx("LuiTextAreaInput Grid-popoverContainer", ((_b = props.inputProps) === null || _b === void 0 ? void 0 : _b.disabled) ? "isDisabled" : "", (props === null || props === void 0 ? void 0 : props.error) ? "hasError" : "") }, { children: [jsxs("label", __assign({ htmlFor: id }, { children: [props.mandatory && jsx("span", __assign({ className: "LuiTextAreaInput-mandatory" }, { children: "*" })), props.label && jsx("span", __assign({ className: "LuiTextAreaInput-label" }, { children: props.label })), jsxs("div", __assign({ className: "LuiTextAreaInput-wrapper" }, { children: [" ", jsx("textarea", __assign({ id: id, value: props.value, onChange: props.onChange, rows: 5 }, props.inputProps))] }))] })), props.error && (jsxs("span", __assign({ className: "LuiTextAreaInput-error" }, { children: [jsx(LuiIcon, { alt: "error", name: "ic_error", className: "LuiTextAreaInput-error-icon", size: "sm", status: "error" }), props.error] })))] })));
3154
3206
  };
3155
3207
 
3156
- var GridFormTextArea = function (props) {
3208
+ var GridFormTextArea = function (_props) {
3157
3209
  var _a, _b;
3158
- var formProps = props.formProps;
3210
+ var props = _props;
3159
3211
  var _c = useState((_a = props.value) !== null && _a !== void 0 ? _a : ""), value = _c[0], setValue = _c[1];
3160
3212
  var invalid = useCallback(function () {
3161
- if (formProps.required && value.length == 0) {
3213
+ if (props.required && value.length == 0) {
3162
3214
  return "Some text is required";
3163
3215
  }
3164
- if (formProps.maxlength && value.length > formProps.maxlength) {
3165
- return "Text must be no longer than ".concat(formProps.maxlength, " characters");
3216
+ if (props.maxlength && value.length > props.maxlength) {
3217
+ return "Text must be no longer than ".concat(props.maxlength, " characters");
3166
3218
  }
3167
- if (formProps.validate) {
3168
- return formProps.validate(value);
3219
+ if (props.validate) {
3220
+ return props.validate(value);
3169
3221
  }
3170
3222
  return null;
3171
- }, [formProps, value]);
3223
+ }, [props, value]);
3172
3224
  var save = useCallback(function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
3173
3225
  var field;
3174
3226
  return __generator(this, function (_a) {
@@ -3178,8 +3230,8 @@ var GridFormTextArea = function (props) {
3178
3230
  return [2 /*return*/, false];
3179
3231
  if (props.value === (value !== null && value !== void 0 ? value : ""))
3180
3232
  return [2 /*return*/, true];
3181
- if (!formProps.onSave) return [3 /*break*/, 2];
3182
- return [4 /*yield*/, formProps.onSave(selectedRows, value)];
3233
+ if (!props.onSave) return [3 /*break*/, 2];
3234
+ return [4 /*yield*/, props.onSave(selectedRows, value)];
3183
3235
  case 1: return [2 /*return*/, _a.sent()];
3184
3236
  case 2:
3185
3237
  field = props.field;
@@ -3191,35 +3243,33 @@ var GridFormTextArea = function (props) {
3191
3243
  return [2 /*return*/, true];
3192
3244
  }
3193
3245
  });
3194
- }); }, [formProps, invalid, props.field, props.value, value]);
3195
- var popoverWrapper = useGridPopoverHook(props, save).popoverWrapper;
3196
- return popoverWrapper(jsx("div", __assign({ style: { display: "flex", flexDirection: "row", width: (_b = formProps.width) !== null && _b !== void 0 ? _b : 240 }, className: "FormTest" }, { children: jsx(TextAreaInput, { value: value, onChange: function (e) { return setValue(e.target.value); }, error: invalid(), inputProps: { placeholder: formProps.placeholder } }) })));
3246
+ }); }, [props, invalid, value]);
3247
+ var popoverWrapper = useGridPopoverHook({ save: save }).popoverWrapper;
3248
+ return popoverWrapper(jsx("div", __assign({ style: { display: "flex", flexDirection: "row", width: (_b = props.width) !== null && _b !== void 0 ? _b : 240 }, className: "FormTest" }, { children: jsx(TextAreaInput, { value: value, onChange: function (e) { return setValue(e.target.value); }, error: invalid(), inputProps: { placeholder: props.placeholder } }) })));
3197
3249
  };
3198
3250
 
3199
- var GridPopoverTextArea = function (colDef) {
3200
- return GridCell(__assign(__assign({ maxWidth: 260 }, colDef), ((colDef === null || colDef === void 0 ? void 0 : colDef.cellEditorParams) && {
3201
- cellEditorParams: __assign(__assign({ width: 260 }, colDef.cellEditorParams), { form: GridFormTextArea })
3202
- })));
3251
+ var GridPopoverTextArea = function (colDef, params) {
3252
+ return GridCell(__assign({ maxWidth: 260 }, colDef), __assign({ editor: GridFormTextArea }, params));
3203
3253
  };
3204
3254
 
3205
- var GridFormTextInput = function (props) {
3255
+ var GridFormTextInput = function (_props) {
3206
3256
  var _a;
3207
- var formProps = props.formProps;
3257
+ var props = _props;
3208
3258
  var initValue = props.value == null ? "" : "".concat(props.value);
3209
3259
  var _b = useState(initValue), value = _b[0], setValue = _b[1];
3210
3260
  var invalid = useCallback(function () {
3211
3261
  var trimmedValue = value.trim();
3212
- if (formProps.required && trimmedValue.length == 0) {
3262
+ if (props.required && trimmedValue.length == 0) {
3213
3263
  return "Some text is required";
3214
3264
  }
3215
- if (formProps.maxlength && trimmedValue.length > formProps.maxlength) {
3216
- return "Text must be no longer than ".concat(formProps.maxlength, " characters");
3265
+ if (props.maxlength && trimmedValue.length > props.maxlength) {
3266
+ return "Text must be no longer than ".concat(props.maxlength, " characters");
3217
3267
  }
3218
- if (formProps.validate) {
3219
- return formProps.validate(trimmedValue);
3268
+ if (props.validate) {
3269
+ return props.validate(trimmedValue, props.data);
3220
3270
  }
3221
3271
  return null;
3222
- }, [formProps, value]);
3272
+ }, [props, value]);
3223
3273
  var save = useCallback(function (selectedRows) { return __awaiter(void 0, void 0, void 0, function () {
3224
3274
  var trimmedValue, field;
3225
3275
  return __generator(this, function (_a) {
@@ -3230,8 +3280,8 @@ var GridFormTextInput = function (props) {
3230
3280
  trimmedValue = value.trim();
3231
3281
  if (initValue === trimmedValue)
3232
3282
  return [2 /*return*/, true];
3233
- if (!formProps.onSave) return [3 /*break*/, 2];
3234
- return [4 /*yield*/, formProps.onSave(selectedRows, trimmedValue)];
3283
+ if (!props.onSave) return [3 /*break*/, 2];
3284
+ return [4 /*yield*/, props.onSave(selectedRows, trimmedValue)];
3235
3285
  case 1: return [2 /*return*/, _a.sent()];
3236
3286
  case 2:
3237
3287
  field = props.field;
@@ -3243,21 +3293,19 @@ var GridFormTextInput = function (props) {
3243
3293
  return [2 /*return*/, true];
3244
3294
  }
3245
3295
  });
3246
- }); }, [invalid, value, initValue, formProps, props.field]);
3247
- var _c = useGridPopoverHook(props, save), popoverWrapper = _c.popoverWrapper, triggerSave = _c.triggerSave;
3248
- return popoverWrapper(jsx("div", __assign({ style: { display: "flex", flexDirection: "row", width: (_a = formProps.width) !== null && _a !== void 0 ? _a : 240 }, className: "FormTest" }, { children: jsx(TextInputFormatted, { value: value, onChange: function (e) { return setValue(e.target.value); }, error: invalid(), formatted: formProps.units, inputProps: {
3296
+ }); }, [invalid, value, initValue, props]);
3297
+ var _c = useGridPopoverHook({ save: save }), popoverWrapper = _c.popoverWrapper, triggerSave = _c.triggerSave;
3298
+ return popoverWrapper(jsx("div", __assign({ style: { display: "flex", flexDirection: "row", width: (_a = props.width) !== null && _a !== void 0 ? _a : 240 }, className: "FormTest" }, { children: jsx(TextInputFormatted, { value: value, onChange: function (e) { return setValue(e.target.value); }, error: invalid(), formatted: props.units, inputProps: {
3249
3299
  style: { width: "100%" },
3250
- placeholder: formProps.placeholder,
3300
+ placeholder: props.placeholder,
3251
3301
  onKeyDown: function (e) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
3252
3302
  return [2 /*return*/, e.key === "Enter" && triggerSave().then()];
3253
3303
  }); }); }
3254
3304
  } }) })));
3255
3305
  };
3256
3306
 
3257
- var GridPopoverTextInput = function (colDef) {
3258
- return GridCell(__assign(__assign({ maxWidth: 140 }, colDef), ((colDef === null || colDef === void 0 ? void 0 : colDef.cellEditorParams) && {
3259
- cellEditorParams: __assign(__assign({ width: 240 }, colDef.cellEditorParams), { form: GridFormTextInput })
3260
- })));
3307
+ var GridPopoverTextInput = function (colDef, params) {
3308
+ return GridCell(__assign({ maxWidth: 140 }, colDef), __assign({ editor: GridFormTextInput }, params));
3261
3309
  };
3262
3310
 
3263
3311
  var GridSubComponentTextArea = function (props) {
@@ -3268,5 +3316,5 @@ var GridSubComponentTextArea = function (props) {
3268
3316
  return (jsx("div", __assign({ className: "FreeTextInput LuiDeprecatedForms" }, { children: jsx("textarea", { autoFocus: true, maxLength: 10000, spellCheck: true, className: "free-text-input", onChange: function (e) { return setValue(e.target.value); }, defaultValue: value }) })));
3269
3317
  };
3270
3318
 
3271
- export { ComponentLoadingWrapper, ControlledMenu, FocusableItem, GenericCellEditorComponent, GenericCellEditorComponentFr, GenericMultiEditCellClass, Grid, GridCell, GridCellRenderer, GridContext, GridContextProvider, GridFormDropDown, GridFormEditBearing, GridFormMessage, GridFormMultiSelect, GridFormPopoutMenu, GridFormTextArea, GridFormTextInput, GridHeaderSelect, GridIcon, GridLoadableCell, GridPopoutEditMultiSelect, GridPopoverEditBearing, GridPopoverEditBearingCorrection, GridPopoverEditDropDown, GridPopoverMenu, GridPopoverMessage, GridPopoverTextArea, GridPopoverTextInput, GridRenderPopoutMenuCell, GridRendererGenericCell, GridSubComponentTextArea, Menu, MenuButton, MenuDivider, MenuGroup, MenuHeader, MenuItem, MenuRadioGroup, SubMenu, TextAreaInput, TextInputFormatted, UpdatingContext, UpdatingContextProvider, bearingCorrectionValueFormatter, bearingNumberParser, bearingStringValidator, bearingValueFormatter, convertDDToDMS, hasParentClass, isFloat, isNotEmpty, useGridPopoverHook, useMenuState, usePostSortRowsHook, wait };
3319
+ export { ComponentLoadingWrapper, ControlledMenu, FocusableItem, GenericCellEditorComponent, GenericMultiEditCellClass, Grid, GridCell, GridCellRenderer, GridContext, GridContextProvider, GridFormDropDown, GridFormEditBearing, GridFormMessage, GridFormMultiSelect, GridFormPopoutMenu, GridFormTextArea, GridFormTextInput, GridHeaderSelect, GridIcon, GridLoadableCell, GridPopoutEditMultiSelect, GridPopoverEditBearing, GridPopoverEditBearingCorrection, GridPopoverEditDropDown, GridPopoverMenu, GridPopoverMessage, GridPopoverTextArea, GridPopoverTextInput, GridRenderPopoutMenuCell, GridRendererGenericCell, GridSubComponentTextArea, GridUpdatingContext, GridUpdatingContextProvider, Menu, MenuButton, MenuDivider, MenuGroup, MenuHeader, MenuHeaderItem, MenuHeaderString, MenuItem, MenuRadioGroup, MenuSeparator, MenuSeparatorString, PopoutMenuSeparator, SubMenu, TextAreaInput, TextInputFormatted, bearingCorrectionValueFormatter, bearingNumberParser, bearingStringValidator, bearingValueFormatter, convertDDToDMS, hasParentClass, isFloat, isNotEmpty, useGridPopoverHook, useMenuState, usePostSortRowsHook, wait };
3272
3320
  //# sourceMappingURL=step-ag-grid.esm.js.map