@linzjs/step-ag-grid 17.8.0 → 17.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/components/Grid.d.ts +1 -0
- package/dist/src/components/gridForm/GridFormPopoverMenu.d.ts +1 -0
- package/dist/src/contexts/GridContext.d.ts +1 -0
- package/dist/step-ag-grid.cjs.js +21 -5
- package/dist/step-ag-grid.cjs.js.map +1 -1
- package/dist/step-ag-grid.esm.js +21 -5
- package/dist/step-ag-grid.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Grid.tsx +22 -3
- package/src/components/gridForm/GridFormPopoverMenu.tsx +21 -9
- package/src/contexts/GridContext.tsx +4 -0
- package/src/contexts/GridContextProvider.tsx +5 -0
- package/src/stories/grid/GridReadOnly.stories.tsx +24 -0
|
@@ -19,6 +19,7 @@ export interface SelectedMenuOptionResult<RowType extends GridBaseRow> extends M
|
|
|
19
19
|
}
|
|
20
20
|
export interface MenuOption<RowType extends GridBaseRow> {
|
|
21
21
|
label: ReactElement | string | MenuSeparatorType;
|
|
22
|
+
subMenu?: () => ReactElement;
|
|
22
23
|
action?: (props: {
|
|
23
24
|
selectedRows: RowType[];
|
|
24
25
|
menuOption: SelectedMenuOptionResult<RowType>;
|
|
@@ -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>;
|
package/dist/step-ag-grid.cjs.js
CHANGED
|
@@ -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
|
|
|
@@ -4233,7 +4245,7 @@ const GridFormPopoverMenu = (props) => {
|
|
|
4233
4245
|
invalid: () => subComponentSelected && !subComponentIsValid.current,
|
|
4234
4246
|
save,
|
|
4235
4247
|
});
|
|
4236
|
-
return popoverWrapper(jsxRuntime.jsx(ComponentLoadingWrapper, { loading: !options, className: "GridFormPopupMenu", children: jsxRuntime.jsx(jsxRuntime.Fragment, { children: lodashEs.isEmpty(options) ? (jsxRuntime.jsx(MenuItem, { className: "GridPopoverMenu-noOptions", disabled: true, children: "No actions" }, `GridPopoverMenu-empty`)) : (options?.map((item, index) => item.label === "__isMenuSeparator__" ? (jsxRuntime.jsx(MenuDivider, {}, `$$divider_${index}`)) : (!item.hidden && (jsxRuntime.jsxs(React.Fragment, { children: [jsxRuntime.jsx(MenuItem, { onClick: (e) => onMenuItemClick(e, item), disabled: !!item.disabled, title: item.disabled && typeof item.disabled !== "boolean" ? item.disabled : "", children: item.label }, `${item.label}`), item.subComponent && subComponentSelected === item && (jsxRuntime.jsx(FocusableItem, { className: "LuiDeprecatedForms", children: () => (jsxRuntime.jsx(GridSubComponentContext.Provider, { value: {
|
|
4248
|
+
return popoverWrapper(jsxRuntime.jsx(ComponentLoadingWrapper, { loading: !options, className: "GridFormPopupMenu", children: jsxRuntime.jsx(jsxRuntime.Fragment, { children: lodashEs.isEmpty(options) ? (jsxRuntime.jsx(MenuItem, { className: "GridPopoverMenu-noOptions", disabled: true, children: "No actions" }, `GridPopoverMenu-empty`)) : (options?.map((item, index) => item.label === "__isMenuSeparator__" ? (jsxRuntime.jsx(MenuDivider, {}, `$$divider_${index}`)) : (!item.hidden && (jsxRuntime.jsxs(React.Fragment, { children: [item.subMenu ? (jsxRuntime.jsx(SubMenu, { disabled: !!item.disabled, label: item.label, title: item.disabled && typeof item.disabled !== "boolean" ? item.disabled : "", children: jsxRuntime.jsx(item.subMenu, {}) }, `${item.label}`)) : (jsxRuntime.jsx(MenuItem, { onClick: (e) => onMenuItemClick(e, item), disabled: !!item.disabled, title: item.disabled && typeof item.disabled !== "boolean" ? item.disabled : "", children: item.label }, `${item.label}`)), item.subComponent && subComponentSelected === item && (jsxRuntime.jsx(FocusableItem, { className: "LuiDeprecatedForms", children: () => (jsxRuntime.jsx(GridSubComponentContext.Provider, { value: {
|
|
4237
4249
|
context: {},
|
|
4238
4250
|
data,
|
|
4239
4251
|
value: subSelectedValue,
|
|
@@ -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
|
/**
|