@linzjs/step-ag-grid 17.8.0 → 17.9.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.
@@ -68,6 +68,7 @@ export interface GridProps {
68
68
  * Defaults to false.
69
69
  */
70
70
  singleClickEdit?: boolean;
71
+ loading?: boolean;
71
72
  }
72
73
  /**
73
74
  * Wrapper for AgGrid to add commonly used functionality.
@@ -61,6 +61,7 @@ export interface GridContextType<RowType extends GridBaseRow> {
61
61
  setInvisibleColumnIds: (colIds: string[]) => void;
62
62
  downloadCsv: (csvExportParams?: CsvExportParams) => void;
63
63
  setOnCellEditingComplete: (callback: (() => void) | undefined) => void;
64
+ showNoRowsOverlay: () => void;
64
65
  }
65
66
  export declare const GridContext: import("react").Context<GridContextType<any>>;
66
67
  export declare const useGridContext: <RowType extends GridBaseRow>() => GridContextType<RowType>;
@@ -224,6 +224,9 @@ const GridContext = React.createContext({
224
224
  setOnCellEditingComplete: () => {
225
225
  console.error("no context provider for setOnCellEditingComplete");
226
226
  },
227
+ showNoRowsOverlay: () => {
228
+ console.error("no context provider for showLoadingOverlay");
229
+ },
227
230
  });
228
231
  const useGridContext = () => React.useContext(GridContext);
229
232
 
@@ -2360,9 +2363,8 @@ const useGridContextMenu = ({ contextMenuSelectRow, contextMenu: ContextMenu, })
2360
2363
  * Wrapper for AgGrid to add commonly used functionality.
2361
2364
  */
2362
2365
  const Grid = ({ "data-testid": dataTestId, rowSelection = "multiple", suppressColumnVirtualization = true, theme = "ag-theme-step-default", sizeColumns = "auto", selectColumnPinned = null, contextMenuSelectRow = false, singleClickEdit = false, rowData, rowHeight = theme === "ag-theme-step-default" ? 40 : theme === "ag-theme-step-compact" ? 36 : 40, ...params }) => {
2363
- const { gridReady, gridRenderState, setApis, ensureRowVisible, getFirstRowId, selectRowsById, focusByRowById, ensureSelectedRowIsVisible, autoSizeColumns, sizeColumnsToFit, externallySelectedItemsAreInSync, setExternallySelectedItemsAreInSync, isExternalFilterPresent, doesExternalFilterPass, setOnCellEditingComplete, getColDef, } = React.useContext(GridContext);
2366
+ const { gridReady, gridRenderState, setApis, ensureRowVisible, getFirstRowId, selectRowsById, focusByRowById, ensureSelectedRowIsVisible, autoSizeColumns, sizeColumnsToFit, externallySelectedItemsAreInSync, setExternallySelectedItemsAreInSync, isExternalFilterPresent, doesExternalFilterPass, setOnCellEditingComplete, getColDef, showNoRowsOverlay, prePopupOps, stopEditing, } = React.useContext(GridContext);
2364
2367
  const { checkUpdating, updatedDep, updatingCols } = React.useContext(GridUpdatingContext);
2365
- const { prePopupOps } = React.useContext(GridContext);
2366
2368
  const gridDivRef = React.useRef(null);
2367
2369
  const lastSelectedIds = React.useRef([]);
2368
2370
  const [staleGrid, setStaleGrid] = React.useState(false);
@@ -2529,7 +2531,7 @@ const Grid = ({ "data-testid": dataTestId, rowSelection = "multiple", suppressCo
2529
2531
  const columnDefs = React.useMemo(() => {
2530
2532
  const adjustColDefs = params.columnDefs.map((colDef) => {
2531
2533
  const colDefEditable = colDef.editable;
2532
- const editable = combineEditables(params.readOnly !== true, params.defaultColDef?.editable, colDefEditable);
2534
+ const editable = combineEditables(params.loading !== true && params.readOnly !== true, params.defaultColDef?.editable, colDefEditable);
2533
2535
  return {
2534
2536
  ...colDef,
2535
2537
  editable,
@@ -2576,6 +2578,7 @@ const Grid = ({ "data-testid": dataTestId, rowSelection = "multiple", suppressCo
2576
2578
  params.columnDefs,
2577
2579
  params.selectable,
2578
2580
  params.onRowDragEnd,
2581
+ params.loading,
2579
2582
  params.readOnly,
2580
2583
  params.defaultColDef?.editable,
2581
2584
  selectColumnPinned,
@@ -2739,6 +2742,15 @@ const Grid = ({ "data-testid": dataTestId, rowSelection = "multiple", suppressCo
2739
2742
  });
2740
2743
  }
2741
2744
  }, [autoSizeColumns, getColDef, sizeColumns, updatedDep, updatingCols]);
2745
+ const prevLoading = React.useRef(false);
2746
+ React.useEffect(() => {
2747
+ const newLoading = !rowData || params.loading === true;
2748
+ if (newLoading && !prevLoading.current) {
2749
+ stopEditing();
2750
+ showNoRowsOverlay();
2751
+ }
2752
+ prevLoading.current = newLoading;
2753
+ }, [params.loading, rowData, showNoRowsOverlay, stopEditing]);
2742
2754
  /**
2743
2755
  * Resize columns to fit if required on window/container resize
2744
2756
  */
@@ -2813,7 +2825,7 @@ const Grid = ({ "data-testid": dataTestId, rowSelection = "multiple", suppressCo
2813
2825
  }, onRowDataUpdated: onRowDataChanged, onCellKeyDown: onCellKeyPress, onCellClicked: onCellClicked, onCellDoubleClicked: onCellDoubleClick, onCellEditingStarted: refreshSelectedRows, domLayout: params.domLayout, onColumnResized: onColumnResized, defaultColDef: { minWidth: 48, ...lodashEs.omit(params.defaultColDef, ["editable"]) }, columnDefs: columnDefsAdjusted, rowData: rowData, noRowsOverlayComponent: (event) => {
2814
2826
  let rowCount = 0;
2815
2827
  event.api.forEachNode(() => rowCount++);
2816
- return (jsxRuntime.jsx(GridNoRowsOverlay, { loading: !rowData, rowCount: rowCount, headerRowHeight: headerRowCount * rowHeight, filteredRowCount: event.api.getDisplayedRowCount(), noRowsOverlayText: params.noRowsOverlayText }));
2828
+ return (jsxRuntime.jsx(GridNoRowsOverlay, { loading: !rowData || params.loading === true, rowCount: rowCount, headerRowHeight: headerRowCount * rowHeight, filteredRowCount: event.api.getDisplayedRowCount(), noRowsOverlayText: params.noRowsOverlayText }));
2817
2829
  }, onModelUpdated: onModelUpdated, onGridReady: onGridReady, onSortChanged: ensureSelectedRowIsVisible, postSortRows: params.onRowDragEnd ? undefined : postSortRows, onSelectionChanged: synchroniseExternalStateToGridSelection, onColumnMoved: params.onColumnMoved, alwaysShowVerticalScroll: params.alwaysShowVerticalScroll, isExternalFilterPresent: isExternalFilterPresent, doesExternalFilterPass: doesExternalFilterPass, maintainColumnOrder: true, preventDefaultOnContextMenu: true, onCellContextMenu: gridContextMenu.cellContextMenu, rowDragText: params.rowDragText, onRowDragMove: onRowDragMove, onRowDragEnd: onRowDragEnd, onRowDragLeave: onRowDragLeave }) })] }));
2818
2830
  };
2819
2831
 
@@ -5046,6 +5058,9 @@ const GridContextProvider = (props) => {
5046
5058
  const isExternalFilterPresent = () => !lodashEs.isEmpty(externalFilters.current);
5047
5059
  const doesExternalFilterPass = (node) => externalFilters.current.every((filter) => filter(node.data, node));
5048
5060
  const getColDef = React.useCallback((colId) => (!!colId && gridApi?.getColumnDef(colId)) || undefined, [gridApi]);
5061
+ const showNoRowsOverlay = React.useCallback(() => {
5062
+ gridApi?.showNoRowsOverlay();
5063
+ }, [gridApi]);
5049
5064
  /**
5050
5065
  * Apply column visibility
5051
5066
  */
@@ -5131,6 +5146,7 @@ const GridContextProvider = (props) => {
5131
5146
  doesExternalFilterPass,
5132
5147
  downloadCsv,
5133
5148
  setOnCellEditingComplete,
5149
+ showNoRowsOverlay,
5134
5150
  }, children: props.children }));
5135
5151
  };
5136
5152
  /**