@mui/x-data-grid-generator 8.26.1 → 8.27.1
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/CHANGELOG.md +138 -9
- package/columns/commodities.columns.d.ts +1 -1
- package/columns/commodities.columns.js +2 -0
- package/columns/employees.columns.d.ts +1 -1
- package/columns/employees.columns.js +1 -0
- package/constants/prompts.d.ts +1 -1
- package/esm/columns/commodities.columns.d.ts +1 -1
- package/esm/columns/commodities.columns.js +3 -1
- package/esm/columns/employees.columns.d.ts +1 -1
- package/esm/columns/employees.columns.js +2 -1
- package/esm/constants/prompts.d.ts +1 -1
- package/esm/hooks/serverUtils.d.ts +1 -1
- package/esm/hooks/useBasicDemoData.d.ts +1 -1
- package/esm/hooks/useDemoData.d.ts +4 -4
- package/esm/hooks/useEditDropdownState.d.ts +39 -0
- package/esm/hooks/useEditDropdownState.js +158 -0
- package/esm/hooks/useMockServer.d.ts +1 -1
- package/esm/hooks/useMovieData.d.ts +1 -1
- package/esm/hooks/useQuery.d.ts +2 -2
- package/esm/hooks/useRowEditHandlers.d.ts +25 -0
- package/esm/hooks/useRowEditHandlers.js +84 -0
- package/esm/index.js +1 -1
- package/esm/renderer/index.d.ts +2 -1
- package/esm/renderer/index.js +2 -1
- package/esm/renderer/renderAvatar.d.ts +1 -1
- package/esm/renderer/renderCountry.d.ts +2 -2
- package/esm/renderer/renderEditBoolean.d.ts +2 -0
- package/esm/renderer/renderEditBoolean.js +56 -0
- package/esm/renderer/renderEditCountry.d.ts +2 -2
- package/esm/renderer/renderEditCountry.js +68 -48
- package/esm/renderer/renderEditCurrency.d.ts +1 -1
- package/esm/renderer/renderEditCurrency.js +67 -47
- package/esm/renderer/renderEditIncoterm.d.ts +1 -1
- package/esm/renderer/renderEditIncoterm.js +30 -27
- package/esm/renderer/renderEditProgress.d.ts +1 -1
- package/esm/renderer/renderEditProgress.js +3 -2
- package/esm/renderer/renderEditRating.d.ts +1 -1
- package/esm/renderer/renderEditRating.js +3 -2
- package/esm/renderer/renderEditStatus.d.ts +1 -1
- package/esm/renderer/renderEditStatus.js +30 -28
- package/esm/renderer/renderEmail.d.ts +1 -1
- package/esm/renderer/renderIncoterm.d.ts +1 -1
- package/esm/renderer/renderLink.d.ts +1 -1
- package/esm/renderer/renderPnl.d.ts +1 -1
- package/esm/renderer/renderProgress.d.ts +1 -1
- package/esm/renderer/renderRating.d.ts +1 -1
- package/esm/renderer/renderStatus.d.ts +1 -1
- package/esm/renderer/renderTotalPrice.d.ts +1 -1
- package/esm/services/basic-data-service.d.ts +1 -1
- package/esm/services/gridColDefGenerator.d.ts +1 -1
- package/esm/services/prompt-resolver.d.ts +1 -1
- package/esm/services/random-generator.d.ts +1 -1
- package/esm/services/real-data-service.d.ts +2 -2
- package/esm/services/tree-data-generator.d.ts +2 -2
- package/hooks/serverUtils.d.ts +1 -1
- package/hooks/useBasicDemoData.d.ts +1 -1
- package/hooks/useDemoData.d.ts +4 -4
- package/hooks/useEditDropdownState.d.ts +39 -0
- package/hooks/useEditDropdownState.js +165 -0
- package/hooks/useMockServer.d.ts +1 -1
- package/hooks/useMovieData.d.ts +1 -1
- package/hooks/useQuery.d.ts +2 -2
- package/hooks/useRowEditHandlers.d.ts +25 -0
- package/hooks/useRowEditHandlers.js +90 -0
- package/index.js +1 -1
- package/package.json +4 -4
- package/renderer/index.d.ts +2 -1
- package/renderer/index.js +11 -0
- package/renderer/renderAvatar.d.ts +1 -1
- package/renderer/renderCountry.d.ts +2 -2
- package/renderer/renderEditBoolean.d.ts +2 -0
- package/renderer/renderEditBoolean.js +63 -0
- package/renderer/renderEditCountry.d.ts +2 -2
- package/renderer/renderEditCountry.js +67 -48
- package/renderer/renderEditCurrency.d.ts +1 -1
- package/renderer/renderEditCurrency.js +66 -47
- package/renderer/renderEditIncoterm.d.ts +1 -1
- package/renderer/renderEditIncoterm.js +30 -27
- package/renderer/renderEditProgress.d.ts +1 -1
- package/renderer/renderEditProgress.js +3 -2
- package/renderer/renderEditRating.d.ts +1 -1
- package/renderer/renderEditRating.js +3 -2
- package/renderer/renderEditStatus.d.ts +1 -1
- package/renderer/renderEditStatus.js +30 -28
- package/renderer/renderEmail.d.ts +1 -1
- package/renderer/renderIncoterm.d.ts +1 -1
- package/renderer/renderLink.d.ts +1 -1
- package/renderer/renderPnl.d.ts +1 -1
- package/renderer/renderProgress.d.ts +1 -1
- package/renderer/renderRating.d.ts +1 -1
- package/renderer/renderStatus.d.ts +1 -1
- package/renderer/renderTotalPrice.d.ts +1 -1
- package/services/basic-data-service.d.ts +1 -1
- package/services/gridColDefGenerator.d.ts +1 -1
- package/services/prompt-resolver.d.ts +1 -1
- package/services/random-generator.d.ts +1 -1
- package/services/real-data-service.d.ts +2 -2
- package/services/tree-data-generator.d.ts +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { GridRowModel, GridInitialState } from '@mui/x-data-grid-premium';
|
|
2
|
-
import { GridColDefGenerator } from "./gridColDefGenerator.js";
|
|
1
|
+
import type { GridRowModel, GridInitialState } from '@mui/x-data-grid-premium';
|
|
2
|
+
import type { GridColDefGenerator } from "./gridColDefGenerator.js";
|
|
3
3
|
export interface GridDemoData {
|
|
4
4
|
rows: GridRowModel[];
|
|
5
5
|
columns: GridColDefGenerator[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DataGridPremiumProps } from '@mui/x-data-grid-premium';
|
|
2
|
-
import { GridDemoData } from "./real-data-service.js";
|
|
1
|
+
import type { DataGridPremiumProps } from '@mui/x-data-grid-premium';
|
|
2
|
+
import type { GridDemoData } from "./real-data-service.js";
|
|
3
3
|
export interface AddPathToDemoDataOptions {
|
|
4
4
|
/**
|
|
5
5
|
* The field used to generate the path
|
package/hooks/serverUtils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GridRowModel, GridFilterModel, GridSortModel, GridColDef, GridRowId, GridPaginationModel, GridValidRowModel, GridAggregationModel, GridPivotModel, GridGetRowsResponse } from '@mui/x-data-grid-premium';
|
|
1
|
+
import { type GridRowModel, type GridFilterModel, type GridSortModel, type GridColDef, type GridRowId, type GridPaginationModel, type GridValidRowModel, type GridAggregationModel, type GridPivotModel, type GridGetRowsResponse } from '@mui/x-data-grid-premium';
|
|
2
2
|
export interface FakeServerResponse {
|
|
3
3
|
returnedRows: GridRowModel[];
|
|
4
4
|
aggregateRow?: GridValidRowModel;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { GridBasicData } from "../services/index.js";
|
|
1
|
+
import { type GridBasicData } from "../services/index.js";
|
|
2
2
|
export declare const useBasicDemoData: (nbRows: number, nbCols: number) => GridBasicData;
|
package/hooks/useDemoData.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';
|
|
2
|
-
import { GridDemoData } from "../services/real-data-service.js";
|
|
3
|
-
import { GridColDefGenerator } from "../services/gridColDefGenerator.js";
|
|
4
|
-
import { AddPathToDemoDataOptions, DemoTreeDataValue } from "../services/tree-data-generator.js";
|
|
1
|
+
import type { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';
|
|
2
|
+
import { type GridDemoData } from "../services/real-data-service.js";
|
|
3
|
+
import type { GridColDefGenerator } from "../services/gridColDefGenerator.js";
|
|
4
|
+
import { type AddPathToDemoDataOptions, type DemoTreeDataValue } from "../services/tree-data-generator.js";
|
|
5
5
|
export type DemoDataReturnType = {
|
|
6
6
|
data: DemoTreeDataValue;
|
|
7
7
|
loading: boolean;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type GridRowId } from '@mui/x-data-grid-premium';
|
|
3
|
+
interface UseEditDropdownStateParams {
|
|
4
|
+
id: GridRowId;
|
|
5
|
+
field: string;
|
|
6
|
+
hasFocus: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Hook that manages dropdown state and keyboard handling for custom edit cells
|
|
10
|
+
* with dropdowns (Select, Autocomplete).
|
|
11
|
+
*
|
|
12
|
+
* Provides:
|
|
13
|
+
* - Auto-open on mount if cell had focus when edit started
|
|
14
|
+
* - Focus management when tabbing into the cell
|
|
15
|
+
* - Keyboard handlers for Tab, Enter, Escape that work in both cell and row edit modes
|
|
16
|
+
* - Handlers for Select and Autocomplete components
|
|
17
|
+
*/
|
|
18
|
+
export declare function useEditDropdownState(params: UseEditDropdownStateParams): {
|
|
19
|
+
open: boolean;
|
|
20
|
+
setOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
21
|
+
inputRef: React.RefObject<HTMLInputElement | null>;
|
|
22
|
+
shouldAutoOpen: boolean;
|
|
23
|
+
handleSelectKeyDown: (event: React.KeyboardEvent) => void;
|
|
24
|
+
handleSelectMenuClose: (event: object, reason: "escapeKeyDown" | "backdropClick" | "tabKeyDown") => void;
|
|
25
|
+
handleSelectMenuListKeyDown: (event: React.KeyboardEvent) => void;
|
|
26
|
+
createSelectChangeHandler: (getValue: (event: {
|
|
27
|
+
target: {
|
|
28
|
+
value: unknown;
|
|
29
|
+
};
|
|
30
|
+
}) => unknown) => (event: {
|
|
31
|
+
target: {
|
|
32
|
+
value: unknown;
|
|
33
|
+
};
|
|
34
|
+
}) => Promise<void>;
|
|
35
|
+
handleAutocompleteInputKeyDown: (event: React.KeyboardEvent) => void;
|
|
36
|
+
handleAutocompleteWrapperKeyDown: (event: React.KeyboardEvent) => void;
|
|
37
|
+
createAutocompleteChangeHandler: <T>(transformValue?: (value: T) => unknown) => (event: React.SyntheticEvent, newValue: T) => Promise<void>;
|
|
38
|
+
};
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.useEditDropdownState = useEditDropdownState;
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
var React = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
|
|
13
|
+
var _xDataGridPremium = require("@mui/x-data-grid-premium");
|
|
14
|
+
var _useRowEditHandlers = require("./useRowEditHandlers");
|
|
15
|
+
/**
|
|
16
|
+
* Hook that manages dropdown state and keyboard handling for custom edit cells
|
|
17
|
+
* with dropdowns (Select, Autocomplete).
|
|
18
|
+
*
|
|
19
|
+
* Provides:
|
|
20
|
+
* - Auto-open on mount if cell had focus when edit started
|
|
21
|
+
* - Focus management when tabbing into the cell
|
|
22
|
+
* - Keyboard handlers for Tab, Enter, Escape that work in both cell and row edit modes
|
|
23
|
+
* - Handlers for Select and Autocomplete components
|
|
24
|
+
*/
|
|
25
|
+
function useEditDropdownState(params) {
|
|
26
|
+
const {
|
|
27
|
+
id,
|
|
28
|
+
field,
|
|
29
|
+
hasFocus
|
|
30
|
+
} = params;
|
|
31
|
+
const apiRef = (0, _xDataGridPremium.useGridApiContext)();
|
|
32
|
+
const rootProps = (0, _xDataGridPremium.useGridRootProps)();
|
|
33
|
+
const inputRef = React.useRef(null);
|
|
34
|
+
|
|
35
|
+
// Only auto-open if this cell had focus when edit started
|
|
36
|
+
const shouldAutoOpen = React.useRef(hasFocus).current;
|
|
37
|
+
const [open, setOpen] = React.useState(shouldAutoOpen);
|
|
38
|
+
|
|
39
|
+
// Track open state in a ref for event handlers that need current value
|
|
40
|
+
const openRef = React.useRef(open);
|
|
41
|
+
openRef.current = open;
|
|
42
|
+
const isRowEditMode = rootProps.editMode === _xDataGridPremium.GridEditModes.Row;
|
|
43
|
+
const closeMenu = React.useCallback(() => setOpen(false), []);
|
|
44
|
+
const {
|
|
45
|
+
handleTabKeyDown,
|
|
46
|
+
handleMenuKeyDown
|
|
47
|
+
} = (0, _useRowEditHandlers.useRowEditHandlers)({
|
|
48
|
+
id,
|
|
49
|
+
field,
|
|
50
|
+
onClose: closeMenu
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Focus input when hasFocus becomes true (e.g., when tabbing into this cell)
|
|
54
|
+
(0, _useEnhancedEffect.default)(() => {
|
|
55
|
+
if (hasFocus) {
|
|
56
|
+
inputRef.current?.focus();
|
|
57
|
+
}
|
|
58
|
+
}, [hasFocus]);
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Handler for Select's onKeyDown - handles Tab when menu is closed
|
|
62
|
+
*/
|
|
63
|
+
const handleSelectKeyDown = React.useCallback(event => {
|
|
64
|
+
if (event.key === 'Tab') {
|
|
65
|
+
handleTabKeyDown(event);
|
|
66
|
+
}
|
|
67
|
+
}, [handleTabKeyDown]);
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Handler for Select's MenuProps.onClose - closes menu and exits cell edit on backdrop click
|
|
71
|
+
*/
|
|
72
|
+
const handleSelectMenuClose = React.useCallback((event, reason) => {
|
|
73
|
+
setOpen(false);
|
|
74
|
+
if (reason === 'backdropClick' && rootProps.editMode === _xDataGridPremium.GridEditModes.Cell && apiRef.current.getCellMode(id, field) === 'edit') {
|
|
75
|
+
const cellParams = apiRef.current.getCellParams(id, field);
|
|
76
|
+
apiRef.current.publishEvent('cellEditStop', (0, _extends2.default)({}, cellParams, {
|
|
77
|
+
reason: _xDataGridPremium.GridCellEditStopReasons.cellFocusOut
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
}, [apiRef, id, field, rootProps.editMode]);
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Creates a change handler for Select that closes menu and optionally exits edit mode
|
|
84
|
+
*/
|
|
85
|
+
const createSelectChangeHandler = React.useCallback(getValue => {
|
|
86
|
+
return async event => {
|
|
87
|
+
// Close menu after selection
|
|
88
|
+
setOpen(false);
|
|
89
|
+
const newValue = getValue(event);
|
|
90
|
+
const isValid = await apiRef.current.setEditCellValue({
|
|
91
|
+
id,
|
|
92
|
+
field,
|
|
93
|
+
value: newValue
|
|
94
|
+
}, event);
|
|
95
|
+
|
|
96
|
+
// In cell edit mode, selecting closes the menu and exits edit mode
|
|
97
|
+
// In row edit mode, selecting only closes the menu (already done above)
|
|
98
|
+
// Check if still in edit mode to avoid double-exit when Enter key also triggers grid's handler
|
|
99
|
+
if (isValid && !isRowEditMode && apiRef.current.getCellMode(id, field) === 'edit') {
|
|
100
|
+
const cellParams = apiRef.current.getCellParams(id, field);
|
|
101
|
+
apiRef.current.publishEvent('cellEditStop', (0, _extends2.default)({}, cellParams, {
|
|
102
|
+
reason: _xDataGridPremium.GridCellEditStopReasons.enterKeyDown
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
}, [apiRef, id, field, isRowEditMode]);
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Handler for Autocomplete's InputBase onKeyDown - handles Tab
|
|
110
|
+
*/
|
|
111
|
+
const handleAutocompleteInputKeyDown = React.useCallback(event => {
|
|
112
|
+
if (event.key === 'Tab') {
|
|
113
|
+
handleTabKeyDown(event);
|
|
114
|
+
}
|
|
115
|
+
}, [handleTabKeyDown]);
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Handler for Autocomplete's wrapper div - stops Enter/Escape only when dropdown is open
|
|
119
|
+
*/
|
|
120
|
+
const handleAutocompleteWrapperKeyDown = React.useCallback(event => {
|
|
121
|
+
if (isRowEditMode && openRef.current && (event.key === 'Enter' || event.key === 'Escape')) {
|
|
122
|
+
event.stopPropagation();
|
|
123
|
+
}
|
|
124
|
+
}, [isRowEditMode]);
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Creates a change handler for Autocomplete that optionally exits edit mode
|
|
128
|
+
*/
|
|
129
|
+
const createAutocompleteChangeHandler = React.useCallback(transformValue => {
|
|
130
|
+
return async (event, newValue) => {
|
|
131
|
+
const valueToSet = transformValue ? transformValue(newValue) : newValue;
|
|
132
|
+
await apiRef.current.setEditCellValue({
|
|
133
|
+
id,
|
|
134
|
+
field,
|
|
135
|
+
value: valueToSet
|
|
136
|
+
}, event);
|
|
137
|
+
|
|
138
|
+
// In cell edit mode, selecting exits edit mode
|
|
139
|
+
// In row edit mode, selecting only closes the dropdown (Autocomplete handles this)
|
|
140
|
+
// Check if still in edit mode to avoid double-exit when Enter key also triggers grid's handler
|
|
141
|
+
if (!isRowEditMode && apiRef.current.getCellMode(id, field) === 'edit') {
|
|
142
|
+
apiRef.current.stopCellEditMode({
|
|
143
|
+
id,
|
|
144
|
+
field
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}, [apiRef, id, field, isRowEditMode]);
|
|
149
|
+
return {
|
|
150
|
+
// State
|
|
151
|
+
open,
|
|
152
|
+
setOpen,
|
|
153
|
+
inputRef,
|
|
154
|
+
shouldAutoOpen,
|
|
155
|
+
// Select handlers
|
|
156
|
+
handleSelectKeyDown,
|
|
157
|
+
handleSelectMenuClose,
|
|
158
|
+
handleSelectMenuListKeyDown: handleMenuKeyDown,
|
|
159
|
+
createSelectChangeHandler,
|
|
160
|
+
// Autocomplete handlers
|
|
161
|
+
handleAutocompleteInputKeyDown,
|
|
162
|
+
handleAutocompleteWrapperKeyDown,
|
|
163
|
+
createAutocompleteChangeHandler
|
|
164
|
+
};
|
|
165
|
+
}
|
package/hooks/useMockServer.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type GridGetRowsResponse, type GridRowId, type GridRowModel, type GridColDef, type GridInitialState } from '@mui/x-data-grid-premium';
|
|
2
|
-
import { AddPathToDemoDataOptions } from "../services/tree-data-generator.js";
|
|
2
|
+
import { type AddPathToDemoDataOptions } from "../services/tree-data-generator.js";
|
|
3
3
|
import type { ServerOptions } from "./serverUtils.js";
|
|
4
4
|
export declare const BASE_URL = "https://mui.com/x/api/data-grid";
|
|
5
5
|
type UseMockServerResponse<T> = {
|
package/hooks/useMovieData.d.ts
CHANGED
package/hooks/useQuery.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { GridRowModel } from '@mui/x-data-grid-pro';
|
|
3
|
-
import { UseDemoDataOptions } from "./useDemoData.js";
|
|
2
|
+
import { type GridRowModel } from '@mui/x-data-grid-pro';
|
|
3
|
+
import { type UseDemoDataOptions } from "./useDemoData.js";
|
|
4
4
|
import type { ServerOptions, QueryOptions, PageInfo } from "./serverUtils.js";
|
|
5
5
|
export declare const createFakeServer: (dataSetOptions?: Partial<UseDemoDataOptions>, serverOptions?: ServerOptions) => {
|
|
6
6
|
columns: import("../index.js").GridColDefGenerator[];
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type GridRowId } from '@mui/x-data-grid-premium';
|
|
3
|
+
interface UseRowEditHandlersParams {
|
|
4
|
+
id: GridRowId;
|
|
5
|
+
field: string;
|
|
6
|
+
onClose?: () => void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Hook that provides keyboard event handlers for custom edit cells
|
|
10
|
+
* to work correctly in both cell and row edit modes.
|
|
11
|
+
*
|
|
12
|
+
* In row edit mode:
|
|
13
|
+
* - Tab moves focus to the next/previous editable cell
|
|
14
|
+
* - Enter/Escape are stopped from propagating to prevent exiting row edit
|
|
15
|
+
*
|
|
16
|
+
* In cell edit mode:
|
|
17
|
+
* - Default behavior is preserved
|
|
18
|
+
*/
|
|
19
|
+
export declare function useRowEditHandlers(params: UseRowEditHandlersParams): {
|
|
20
|
+
handleTabKeyDown: (event: React.KeyboardEvent) => void;
|
|
21
|
+
handleEnterEscapeKeyDown: (event: React.KeyboardEvent) => void;
|
|
22
|
+
handleMenuKeyDown: (event: React.KeyboardEvent) => void;
|
|
23
|
+
moveFocusToNextCell: (shiftKey: boolean) => void;
|
|
24
|
+
};
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useRowEditHandlers = useRowEditHandlers;
|
|
9
|
+
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _xDataGridPremium = require("@mui/x-data-grid-premium");
|
|
11
|
+
/**
|
|
12
|
+
* Hook that provides keyboard event handlers for custom edit cells
|
|
13
|
+
* to work correctly in both cell and row edit modes.
|
|
14
|
+
*
|
|
15
|
+
* In row edit mode:
|
|
16
|
+
* - Tab moves focus to the next/previous editable cell
|
|
17
|
+
* - Enter/Escape are stopped from propagating to prevent exiting row edit
|
|
18
|
+
*
|
|
19
|
+
* In cell edit mode:
|
|
20
|
+
* - Default behavior is preserved
|
|
21
|
+
*/
|
|
22
|
+
function useRowEditHandlers(params) {
|
|
23
|
+
const {
|
|
24
|
+
id,
|
|
25
|
+
field,
|
|
26
|
+
onClose
|
|
27
|
+
} = params;
|
|
28
|
+
const apiRef = (0, _xDataGridPremium.useGridApiContext)();
|
|
29
|
+
const rootProps = (0, _xDataGridPremium.useGridRootProps)();
|
|
30
|
+
const isRowEditMode = rootProps.editMode === _xDataGridPremium.GridEditModes.Row;
|
|
31
|
+
const moveFocusToNextCell = React.useCallback(shiftKey => {
|
|
32
|
+
const editableFields = apiRef.current.getVisibleColumns().filter(column => column.type === 'actions' || apiRef.current.isCellEditable(apiRef.current.getCellParams(id, column.field))).map(column => column.field);
|
|
33
|
+
const currentIndex = editableFields.indexOf(field);
|
|
34
|
+
if (currentIndex === -1) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const nextIndex = shiftKey ? currentIndex - 1 : currentIndex + 1;
|
|
38
|
+
if (nextIndex < 0 || nextIndex >= editableFields.length) {
|
|
39
|
+
// At boundary - exit row edit mode
|
|
40
|
+
apiRef.current.stopRowEditMode({
|
|
41
|
+
id,
|
|
42
|
+
field,
|
|
43
|
+
cellToFocusAfter: shiftKey ? 'left' : 'right'
|
|
44
|
+
});
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
apiRef.current.setCellFocus(id, editableFields[nextIndex]);
|
|
48
|
+
}, [apiRef, id, field]);
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Handle Tab key in row edit mode.
|
|
52
|
+
* Closes any open popup and moves focus to the next/previous editable cell.
|
|
53
|
+
*/
|
|
54
|
+
const handleTabKeyDown = React.useCallback(event => {
|
|
55
|
+
if (!isRowEditMode || event.key !== 'Tab') {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
event.preventDefault();
|
|
59
|
+
event.stopPropagation();
|
|
60
|
+
onClose?.();
|
|
61
|
+
moveFocusToNextCell(event.shiftKey);
|
|
62
|
+
}, [isRowEditMode, onClose, moveFocusToNextCell]);
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Prevent Enter/Escape from bubbling in row edit mode.
|
|
66
|
+
* This prevents the grid from exiting row edit when selecting from a dropdown.
|
|
67
|
+
*/
|
|
68
|
+
const handleEnterEscapeKeyDown = React.useCallback(event => {
|
|
69
|
+
if (!isRowEditMode) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (event.key === 'Enter' || event.key === 'Escape') {
|
|
73
|
+
event.stopPropagation();
|
|
74
|
+
}
|
|
75
|
+
}, [isRowEditMode]);
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Combined handler for menus/listboxes that need to handle both Tab and Enter/Escape.
|
|
79
|
+
*/
|
|
80
|
+
const handleMenuKeyDown = React.useCallback(event => {
|
|
81
|
+
handleEnterEscapeKeyDown(event);
|
|
82
|
+
handleTabKeyDown(event);
|
|
83
|
+
}, [handleEnterEscapeKeyDown, handleTabKeyDown]);
|
|
84
|
+
return {
|
|
85
|
+
handleTabKeyDown,
|
|
86
|
+
handleEnterEscapeKeyDown,
|
|
87
|
+
handleMenuKeyDown,
|
|
88
|
+
moveFocusToNextCell
|
|
89
|
+
};
|
|
90
|
+
}
|
package/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/x-data-grid-generator",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.27.1",
|
|
4
4
|
"author": "MUI Team",
|
|
5
5
|
"description": "Generate fake data for demo purposes only.",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -25,10 +25,10 @@
|
|
|
25
25
|
"chance": "^1.1.13",
|
|
26
26
|
"clsx": "^2.1.1",
|
|
27
27
|
"lru-cache": "^11.2.2",
|
|
28
|
-
"@mui/x-data-grid
|
|
29
|
-
"@mui/x-data-grid": "8.
|
|
28
|
+
"@mui/x-data-grid": "8.27.1",
|
|
29
|
+
"@mui/x-data-grid-pro": "8.27.1",
|
|
30
30
|
"@mui/x-internals": "8.26.0",
|
|
31
|
-
"@mui/x-data-grid-
|
|
31
|
+
"@mui/x-data-grid-premium": "8.27.1"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"@emotion/react": "^11.9.0",
|
package/renderer/index.d.ts
CHANGED
|
@@ -13,4 +13,5 @@ export * from "./renderEditProgress.js";
|
|
|
13
13
|
export * from "./renderEditStatus.js";
|
|
14
14
|
export * from "./renderEditIncoterm.js";
|
|
15
15
|
export * from "./renderEditRating.js";
|
|
16
|
-
export * from "./renderEditCountry.js";
|
|
16
|
+
export * from "./renderEditCountry.js";
|
|
17
|
+
export * from "./renderEditBoolean.js";
|
package/renderer/index.js
CHANGED
|
@@ -178,4 +178,15 @@ Object.keys(_renderEditCountry).forEach(function (key) {
|
|
|
178
178
|
return _renderEditCountry[key];
|
|
179
179
|
}
|
|
180
180
|
});
|
|
181
|
+
});
|
|
182
|
+
var _renderEditBoolean = require("./renderEditBoolean");
|
|
183
|
+
Object.keys(_renderEditBoolean).forEach(function (key) {
|
|
184
|
+
if (key === "default" || key === "__esModule") return;
|
|
185
|
+
if (key in exports && exports[key] === _renderEditBoolean[key]) return;
|
|
186
|
+
Object.defineProperty(exports, key, {
|
|
187
|
+
enumerable: true,
|
|
188
|
+
get: function () {
|
|
189
|
+
return _renderEditBoolean[key];
|
|
190
|
+
}
|
|
191
|
+
});
|
|
181
192
|
});
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { GridRenderCellParams } from '@mui/x-data-grid-premium';
|
|
2
|
-
import { CountryIsoOption } from "../services/static-data.js";
|
|
1
|
+
import { type GridRenderCellParams } from '@mui/x-data-grid-premium';
|
|
2
|
+
import type { CountryIsoOption } from "../services/static-data.js";
|
|
3
3
|
export declare function renderCountry(params: GridRenderCellParams<CountryIsoOption, any, any>): any;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.renderEditBoolean = renderEditBoolean;
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
var React = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
|
|
13
|
+
var _xDataGridPremium = require("@mui/x-data-grid-premium");
|
|
14
|
+
var _useRowEditHandlers = require("../hooks/useRowEditHandlers");
|
|
15
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
16
|
+
function EditBoolean(props) {
|
|
17
|
+
const {
|
|
18
|
+
id,
|
|
19
|
+
value,
|
|
20
|
+
field,
|
|
21
|
+
hasFocus
|
|
22
|
+
} = props;
|
|
23
|
+
const apiRef = (0, _xDataGridPremium.useGridApiContext)();
|
|
24
|
+
const rootProps = (0, _xDataGridPremium.useGridRootProps)();
|
|
25
|
+
const inputRef = React.useRef(null);
|
|
26
|
+
const {
|
|
27
|
+
handleTabKeyDown
|
|
28
|
+
} = (0, _useRowEditHandlers.useRowEditHandlers)({
|
|
29
|
+
id,
|
|
30
|
+
field
|
|
31
|
+
});
|
|
32
|
+
const handleChange = React.useCallback(async event => {
|
|
33
|
+
await apiRef.current.setEditCellValue({
|
|
34
|
+
id,
|
|
35
|
+
field,
|
|
36
|
+
value: event.target.checked
|
|
37
|
+
}, event);
|
|
38
|
+
}, [apiRef, field, id]);
|
|
39
|
+
(0, _useEnhancedEffect.default)(() => {
|
|
40
|
+
if (hasFocus) {
|
|
41
|
+
inputRef.current?.focus();
|
|
42
|
+
}
|
|
43
|
+
}, [hasFocus]);
|
|
44
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
45
|
+
onKeyDownCapture: handleTabKeyDown,
|
|
46
|
+
style: {
|
|
47
|
+
display: 'flex',
|
|
48
|
+
alignItems: 'center',
|
|
49
|
+
justifyContent: 'center',
|
|
50
|
+
width: '100%',
|
|
51
|
+
height: '100%'
|
|
52
|
+
},
|
|
53
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseCheckbox, (0, _extends2.default)({
|
|
54
|
+
inputRef: inputRef,
|
|
55
|
+
checked: Boolean(value),
|
|
56
|
+
onChange: handleChange,
|
|
57
|
+
size: "small"
|
|
58
|
+
}, rootProps.slotProps?.baseCheckbox))
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function renderEditBoolean(params) {
|
|
62
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(EditBoolean, (0, _extends2.default)({}, params));
|
|
63
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { GridRenderEditCellParams } from '@mui/x-data-grid-premium';
|
|
2
|
-
import { CountryIsoOption } from "../services/static-data.js";
|
|
1
|
+
import type { GridRenderEditCellParams } from '@mui/x-data-grid-premium';
|
|
2
|
+
import { type CountryIsoOption } from "../services/static-data.js";
|
|
3
3
|
export declare function renderEditCountry(params: GridRenderEditCellParams<CountryIsoOption>): import("react/jsx-runtime").JSX.Element;
|