@mui/x-data-grid-generator 8.26.1 → 8.27.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 (98) hide show
  1. package/CHANGELOG.md +85 -9
  2. package/columns/commodities.columns.d.ts +1 -1
  3. package/columns/commodities.columns.js +2 -0
  4. package/columns/employees.columns.d.ts +1 -1
  5. package/columns/employees.columns.js +1 -0
  6. package/constants/prompts.d.ts +1 -1
  7. package/esm/columns/commodities.columns.d.ts +1 -1
  8. package/esm/columns/commodities.columns.js +3 -1
  9. package/esm/columns/employees.columns.d.ts +1 -1
  10. package/esm/columns/employees.columns.js +2 -1
  11. package/esm/constants/prompts.d.ts +1 -1
  12. package/esm/hooks/serverUtils.d.ts +1 -1
  13. package/esm/hooks/useBasicDemoData.d.ts +1 -1
  14. package/esm/hooks/useDemoData.d.ts +4 -4
  15. package/esm/hooks/useEditDropdownState.d.ts +39 -0
  16. package/esm/hooks/useEditDropdownState.js +158 -0
  17. package/esm/hooks/useMockServer.d.ts +1 -1
  18. package/esm/hooks/useMovieData.d.ts +1 -1
  19. package/esm/hooks/useQuery.d.ts +2 -2
  20. package/esm/hooks/useRowEditHandlers.d.ts +25 -0
  21. package/esm/hooks/useRowEditHandlers.js +84 -0
  22. package/esm/index.js +1 -1
  23. package/esm/renderer/index.d.ts +2 -1
  24. package/esm/renderer/index.js +2 -1
  25. package/esm/renderer/renderAvatar.d.ts +1 -1
  26. package/esm/renderer/renderCountry.d.ts +2 -2
  27. package/esm/renderer/renderEditBoolean.d.ts +2 -0
  28. package/esm/renderer/renderEditBoolean.js +56 -0
  29. package/esm/renderer/renderEditCountry.d.ts +2 -2
  30. package/esm/renderer/renderEditCountry.js +68 -48
  31. package/esm/renderer/renderEditCurrency.d.ts +1 -1
  32. package/esm/renderer/renderEditCurrency.js +67 -47
  33. package/esm/renderer/renderEditIncoterm.d.ts +1 -1
  34. package/esm/renderer/renderEditIncoterm.js +30 -27
  35. package/esm/renderer/renderEditProgress.d.ts +1 -1
  36. package/esm/renderer/renderEditProgress.js +3 -2
  37. package/esm/renderer/renderEditRating.d.ts +1 -1
  38. package/esm/renderer/renderEditRating.js +3 -2
  39. package/esm/renderer/renderEditStatus.d.ts +1 -1
  40. package/esm/renderer/renderEditStatus.js +30 -28
  41. package/esm/renderer/renderEmail.d.ts +1 -1
  42. package/esm/renderer/renderIncoterm.d.ts +1 -1
  43. package/esm/renderer/renderLink.d.ts +1 -1
  44. package/esm/renderer/renderPnl.d.ts +1 -1
  45. package/esm/renderer/renderProgress.d.ts +1 -1
  46. package/esm/renderer/renderRating.d.ts +1 -1
  47. package/esm/renderer/renderStatus.d.ts +1 -1
  48. package/esm/renderer/renderTotalPrice.d.ts +1 -1
  49. package/esm/services/basic-data-service.d.ts +1 -1
  50. package/esm/services/gridColDefGenerator.d.ts +1 -1
  51. package/esm/services/prompt-resolver.d.ts +1 -1
  52. package/esm/services/random-generator.d.ts +1 -1
  53. package/esm/services/real-data-service.d.ts +2 -2
  54. package/esm/services/tree-data-generator.d.ts +2 -2
  55. package/hooks/serverUtils.d.ts +1 -1
  56. package/hooks/useBasicDemoData.d.ts +1 -1
  57. package/hooks/useDemoData.d.ts +4 -4
  58. package/hooks/useEditDropdownState.d.ts +39 -0
  59. package/hooks/useEditDropdownState.js +165 -0
  60. package/hooks/useMockServer.d.ts +1 -1
  61. package/hooks/useMovieData.d.ts +1 -1
  62. package/hooks/useQuery.d.ts +2 -2
  63. package/hooks/useRowEditHandlers.d.ts +25 -0
  64. package/hooks/useRowEditHandlers.js +90 -0
  65. package/index.js +1 -1
  66. package/package.json +5 -5
  67. package/renderer/index.d.ts +2 -1
  68. package/renderer/index.js +11 -0
  69. package/renderer/renderAvatar.d.ts +1 -1
  70. package/renderer/renderCountry.d.ts +2 -2
  71. package/renderer/renderEditBoolean.d.ts +2 -0
  72. package/renderer/renderEditBoolean.js +63 -0
  73. package/renderer/renderEditCountry.d.ts +2 -2
  74. package/renderer/renderEditCountry.js +67 -48
  75. package/renderer/renderEditCurrency.d.ts +1 -1
  76. package/renderer/renderEditCurrency.js +66 -47
  77. package/renderer/renderEditIncoterm.d.ts +1 -1
  78. package/renderer/renderEditIncoterm.js +30 -27
  79. package/renderer/renderEditProgress.d.ts +1 -1
  80. package/renderer/renderEditProgress.js +3 -2
  81. package/renderer/renderEditRating.d.ts +1 -1
  82. package/renderer/renderEditRating.js +3 -2
  83. package/renderer/renderEditStatus.d.ts +1 -1
  84. package/renderer/renderEditStatus.js +30 -28
  85. package/renderer/renderEmail.d.ts +1 -1
  86. package/renderer/renderIncoterm.d.ts +1 -1
  87. package/renderer/renderLink.d.ts +1 -1
  88. package/renderer/renderPnl.d.ts +1 -1
  89. package/renderer/renderProgress.d.ts +1 -1
  90. package/renderer/renderRating.d.ts +1 -1
  91. package/renderer/renderStatus.d.ts +1 -1
  92. package/renderer/renderTotalPrice.d.ts +1 -1
  93. package/services/basic-data-service.d.ts +1 -1
  94. package/services/gridColDefGenerator.d.ts +1 -1
  95. package/services/prompt-resolver.d.ts +1 -1
  96. package/services/random-generator.d.ts +1 -1
  97. package/services/real-data-service.d.ts +2 -2
  98. package/services/tree-data-generator.d.ts +2 -2
@@ -0,0 +1,56 @@
1
+ 'use client';
2
+
3
+ import _extends from "@babel/runtime/helpers/esm/extends";
4
+ import * as React from 'react';
5
+ import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
6
+ import { useGridApiContext, useGridRootProps } from '@mui/x-data-grid-premium';
7
+ import { useRowEditHandlers } from "../hooks/useRowEditHandlers.js";
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ function EditBoolean(props) {
10
+ const {
11
+ id,
12
+ value,
13
+ field,
14
+ hasFocus
15
+ } = props;
16
+ const apiRef = useGridApiContext();
17
+ const rootProps = useGridRootProps();
18
+ const inputRef = React.useRef(null);
19
+ const {
20
+ handleTabKeyDown
21
+ } = useRowEditHandlers({
22
+ id,
23
+ field
24
+ });
25
+ const handleChange = React.useCallback(async event => {
26
+ await apiRef.current.setEditCellValue({
27
+ id,
28
+ field,
29
+ value: event.target.checked
30
+ }, event);
31
+ }, [apiRef, field, id]);
32
+ useEnhancedEffect(() => {
33
+ if (hasFocus) {
34
+ inputRef.current?.focus();
35
+ }
36
+ }, [hasFocus]);
37
+ return /*#__PURE__*/_jsx("div", {
38
+ onKeyDownCapture: handleTabKeyDown,
39
+ style: {
40
+ display: 'flex',
41
+ alignItems: 'center',
42
+ justifyContent: 'center',
43
+ width: '100%',
44
+ height: '100%'
45
+ },
46
+ children: /*#__PURE__*/_jsx(rootProps.slots.baseCheckbox, _extends({
47
+ inputRef: inputRef,
48
+ checked: Boolean(value),
49
+ onChange: handleChange,
50
+ size: "small"
51
+ }, rootProps.slotProps?.baseCheckbox))
52
+ });
53
+ }
54
+ export function renderEditBoolean(params) {
55
+ return /*#__PURE__*/_jsx(EditBoolean, _extends({}, params));
56
+ }
@@ -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;
@@ -1,11 +1,13 @@
1
+ 'use client';
2
+
1
3
  import _extends from "@babel/runtime/helpers/esm/extends";
2
4
  import * as React from 'react';
3
- import { useGridApiContext } from '@mui/x-data-grid-premium';
4
5
  import Autocomplete, { autocompleteClasses } from '@mui/material/Autocomplete';
5
6
  import InputBase from '@mui/material/InputBase';
6
7
  import Box from '@mui/material/Box';
7
8
  import { styled } from '@mui/material/styles';
8
9
  import { COUNTRY_ISO_OPTIONS } from "../services/static-data.js";
10
+ import { useEditDropdownState } from "../hooks/useEditDropdownState.js";
9
11
  import { jsx as _jsx } from "react/jsx-runtime";
10
12
  import { createElement as _createElement } from "react";
11
13
  const StyledAutocomplete = styled(Autocomplete)(({
@@ -25,55 +27,73 @@ function EditCountry(props) {
25
27
  const {
26
28
  id,
27
29
  value,
28
- field
30
+ field,
31
+ hasFocus
29
32
  } = props;
30
- const apiRef = useGridApiContext();
31
- const handleChange = React.useCallback(async (event, newValue) => {
32
- await apiRef.current.setEditCellValue({
33
- id,
34
- field,
35
- value: newValue
36
- }, event);
37
- apiRef.current.stopCellEditMode({
38
- id,
39
- field
40
- });
41
- }, [apiRef, field, id]);
42
- return /*#__PURE__*/_jsx(StyledAutocomplete, {
43
- value: value,
44
- onChange: handleChange,
45
- options: COUNTRY_ISO_OPTIONS,
46
- getOptionLabel: option => option.label,
47
- autoHighlight: true,
48
- fullWidth: true,
49
- open: true,
50
- disableClearable: true,
51
- renderOption: (optionProps, option) => /*#__PURE__*/_createElement(Box, _extends({
52
- component: "li",
53
- sx: {
54
- '& > img': {
55
- mr: 1.5,
56
- flexShrink: 0
57
- }
58
- }
59
- }, optionProps, {
60
- key: option.code
61
- }), /*#__PURE__*/_jsx("img", {
62
- loading: "lazy",
63
- width: "20",
64
- src: `https://flagcdn.com/w20/${option.code.toLowerCase()}.png`,
65
- srcSet: `https://flagcdn.com/w40/${option.code.toLowerCase()}.png 2x`,
66
- alt: ""
67
- }), option.label),
68
- renderInput: params => /*#__PURE__*/_jsx(InputBase, _extends({
69
- autoFocus: true,
70
- fullWidth: true,
71
- id: params.id,
72
- inputProps: _extends({}, params.inputProps, {
73
- autoComplete: 'new-password' // disable autocomplete and autofill
74
- })
75
- }, params.InputProps))
33
+ const {
34
+ open,
35
+ setOpen,
36
+ inputRef,
37
+ shouldAutoOpen,
38
+ handleAutocompleteInputKeyDown,
39
+ handleAutocompleteWrapperKeyDown,
40
+ createAutocompleteChangeHandler
41
+ } = useEditDropdownState({
42
+ id,
43
+ field,
44
+ hasFocus
76
45
  });
46
+ const handleChange = createAutocompleteChangeHandler();
47
+ return (
48
+ /*#__PURE__*/
49
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
50
+ _jsx("div", {
51
+ onKeyDown: handleAutocompleteWrapperKeyDown,
52
+ style: {
53
+ height: '100%',
54
+ width: '100%'
55
+ },
56
+ children: /*#__PURE__*/_jsx(StyledAutocomplete, {
57
+ value: value,
58
+ onChange: handleChange,
59
+ options: COUNTRY_ISO_OPTIONS,
60
+ getOptionLabel: option => option.label,
61
+ autoHighlight: true,
62
+ fullWidth: true,
63
+ open: open,
64
+ onOpen: () => setOpen(true),
65
+ onClose: () => setOpen(false),
66
+ disableClearable: true,
67
+ renderOption: (optionProps, option) => /*#__PURE__*/_createElement(Box, _extends({
68
+ component: "li",
69
+ sx: {
70
+ '& > img': {
71
+ mr: 1.5,
72
+ flexShrink: 0
73
+ }
74
+ }
75
+ }, optionProps, {
76
+ key: option.code
77
+ }), /*#__PURE__*/_jsx("img", {
78
+ loading: "lazy",
79
+ width: "20",
80
+ src: `https://flagcdn.com/w20/${option.code.toLowerCase()}.png`,
81
+ srcSet: `https://flagcdn.com/w40/${option.code.toLowerCase()}.png 2x`,
82
+ alt: ""
83
+ }), option.label),
84
+ renderInput: params => /*#__PURE__*/_jsx(InputBase, _extends({
85
+ autoFocus: shouldAutoOpen,
86
+ fullWidth: true,
87
+ id: params.id,
88
+ inputRef: inputRef,
89
+ onKeyDown: handleAutocompleteInputKeyDown,
90
+ inputProps: _extends({}, params.inputProps, {
91
+ autoComplete: 'new-password' // disable autocomplete and autofill
92
+ })
93
+ }, params.InputProps))
94
+ })
95
+ })
96
+ );
77
97
  }
78
98
  export function renderEditCountry(params) {
79
99
  return /*#__PURE__*/_jsx(EditCountry, _extends({}, params));
@@ -1,2 +1,2 @@
1
- import { GridRenderEditCellParams } from '@mui/x-data-grid-premium';
1
+ import type { GridRenderEditCellParams } from '@mui/x-data-grid-premium';
2
2
  export declare function renderEditCurrency(params: GridRenderEditCellParams<any, string>): import("react/jsx-runtime").JSX.Element;
@@ -1,11 +1,13 @@
1
+ 'use client';
2
+
1
3
  import _extends from "@babel/runtime/helpers/esm/extends";
2
4
  import * as React from 'react';
3
- import { useGridApiContext } from '@mui/x-data-grid-premium';
4
5
  import Autocomplete, { autocompleteClasses } from '@mui/material/Autocomplete';
5
6
  import InputBase from '@mui/material/InputBase';
6
7
  import Box from '@mui/material/Box';
7
8
  import { styled } from '@mui/material/styles';
8
9
  import { CURRENCY_OPTIONS } from "../services/static-data.js";
10
+ import { useEditDropdownState } from "../hooks/useEditDropdownState.js";
9
11
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
12
  const StyledAutocomplete = styled(Autocomplete)(({
11
13
  theme
@@ -24,54 +26,72 @@ function EditCurrency(props) {
24
26
  const {
25
27
  id,
26
28
  value,
27
- field
29
+ field,
30
+ hasFocus
28
31
  } = props;
29
- const apiRef = useGridApiContext();
30
- const handleChange = React.useCallback(async (event, newValue) => {
31
- await apiRef.current.setEditCellValue({
32
- id,
33
- field,
34
- value: newValue.toUpperCase()
35
- }, event);
36
- apiRef.current.stopCellEditMode({
37
- id,
38
- field
39
- });
40
- }, [apiRef, field, id]);
41
- return /*#__PURE__*/_jsx(StyledAutocomplete, {
42
- value: value,
43
- onChange: handleChange,
44
- options: CURRENCY_OPTIONS,
45
- autoHighlight: true,
46
- fullWidth: true,
47
- open: true,
48
- disableClearable: true,
49
- renderOption: (optionProps, option) => /*#__PURE__*/_jsxs(Box, _extends({
50
- component: "li",
51
- sx: {
52
- '& > img': {
53
- mr: 1.5,
54
- flexShrink: 0
55
- }
56
- }
57
- }, optionProps, {
58
- children: [/*#__PURE__*/_jsx("img", {
59
- loading: "lazy",
60
- width: "20",
61
- src: `https://flagcdn.com/w20/${option.slice(0, -1).toLowerCase()}.png`,
62
- srcSet: `https://flagcdn.com/w40/${option.slice(0, -1).toLowerCase()}.png 2x`,
63
- alt: ""
64
- }), option]
65
- })),
66
- renderInput: params => /*#__PURE__*/_jsx(InputBase, _extends({
67
- autoFocus: true,
68
- fullWidth: true,
69
- id: params.id,
70
- inputProps: _extends({}, params.inputProps, {
71
- autoComplete: 'new-password' // disable autocomplete and autofill
72
- })
73
- }, params.InputProps))
32
+ const {
33
+ open,
34
+ setOpen,
35
+ inputRef,
36
+ shouldAutoOpen,
37
+ handleAutocompleteInputKeyDown,
38
+ handleAutocompleteWrapperKeyDown,
39
+ createAutocompleteChangeHandler
40
+ } = useEditDropdownState({
41
+ id,
42
+ field,
43
+ hasFocus
74
44
  });
45
+ const handleChange = createAutocompleteChangeHandler(val => val.toUpperCase());
46
+ return (
47
+ /*#__PURE__*/
48
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
49
+ _jsx("div", {
50
+ onKeyDown: handleAutocompleteWrapperKeyDown,
51
+ style: {
52
+ height: '100%',
53
+ width: '100%'
54
+ },
55
+ children: /*#__PURE__*/_jsx(StyledAutocomplete, {
56
+ value: value,
57
+ onChange: handleChange,
58
+ options: CURRENCY_OPTIONS,
59
+ autoHighlight: true,
60
+ fullWidth: true,
61
+ open: open,
62
+ onOpen: () => setOpen(true),
63
+ onClose: () => setOpen(false),
64
+ disableClearable: true,
65
+ renderOption: (optionProps, option) => /*#__PURE__*/_jsxs(Box, _extends({
66
+ component: "li",
67
+ sx: {
68
+ '& > img': {
69
+ mr: 1.5,
70
+ flexShrink: 0
71
+ }
72
+ }
73
+ }, optionProps, {
74
+ children: [/*#__PURE__*/_jsx("img", {
75
+ loading: "lazy",
76
+ width: "20",
77
+ src: `https://flagcdn.com/w20/${option.slice(0, -1).toLowerCase()}.png`,
78
+ srcSet: `https://flagcdn.com/w40/${option.slice(0, -1).toLowerCase()}.png 2x`,
79
+ alt: ""
80
+ }), option]
81
+ })),
82
+ renderInput: params => /*#__PURE__*/_jsx(InputBase, _extends({
83
+ autoFocus: shouldAutoOpen,
84
+ fullWidth: true,
85
+ id: params.id,
86
+ inputRef: inputRef,
87
+ onKeyDown: handleAutocompleteInputKeyDown,
88
+ inputProps: _extends({}, params.inputProps, {
89
+ autoComplete: 'new-password' // disable autocomplete and autofill
90
+ })
91
+ }, params.InputProps))
92
+ })
93
+ })
94
+ );
75
95
  }
76
96
  export function renderEditCurrency(params) {
77
97
  return /*#__PURE__*/_jsx(EditCurrency, _extends({}, params));
@@ -1,2 +1,2 @@
1
- import { GridRenderEditCellParams } from '@mui/x-data-grid-premium';
1
+ import type { GridRenderEditCellParams } from '@mui/x-data-grid-premium';
2
2
  export declare function renderEditIncoterm(params: GridRenderEditCellParams<any, string | null>): import("react/jsx-runtime").JSX.Element;
@@ -1,44 +1,47 @@
1
+ 'use client';
2
+
1
3
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import { GridCellEditStopReasons, useGridApiContext } from '@mui/x-data-grid-premium';
4
+ import * as React from 'react';
3
5
  import Select from '@mui/material/Select';
4
6
  import MenuItem from '@mui/material/MenuItem';
5
7
  import ListItemIcon from '@mui/material/ListItemIcon';
6
8
  import ListItemText from '@mui/material/ListItemText';
7
9
  import { INCOTERM_OPTIONS } from "../services/static-data.js";
10
+ import { useEditDropdownState } from "../hooks/useEditDropdownState.js";
8
11
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
12
  function EditIncoterm(props) {
10
13
  const {
11
14
  id,
12
15
  value,
13
- field
16
+ field,
17
+ hasFocus
14
18
  } = props;
15
- const apiRef = useGridApiContext();
16
- const handleChange = async event => {
17
- const isValid = await apiRef.current.setEditCellValue({
18
- id,
19
- field,
20
- value: event.target.value
21
- }, event);
22
- if (isValid) {
23
- const params = apiRef.current.getCellParams(id, field);
24
- apiRef.current.publishEvent('cellEditStop', _extends({}, params, {
25
- reason: GridCellEditStopReasons.enterKeyDown
26
- }));
27
- }
28
- };
29
- const handleClose = (event, reason) => {
30
- if (reason === 'backdropClick') {
31
- const params = apiRef.current.getCellParams(id, field);
32
- apiRef.current.publishEvent('cellEditStop', _extends({}, params, {
33
- reason: GridCellEditStopReasons.cellFocusOut
34
- }));
35
- }
36
- };
19
+ const {
20
+ open,
21
+ setOpen,
22
+ inputRef,
23
+ shouldAutoOpen,
24
+ handleSelectKeyDown,
25
+ handleSelectMenuClose,
26
+ handleSelectMenuListKeyDown,
27
+ createSelectChangeHandler
28
+ } = useEditDropdownState({
29
+ id,
30
+ field,
31
+ hasFocus
32
+ });
33
+ const handleChange = createSelectChangeHandler(event => event.target.value);
37
34
  return /*#__PURE__*/_jsx(Select, {
38
35
  value: value,
39
36
  onChange: handleChange,
37
+ onKeyDown: handleSelectKeyDown,
38
+ onOpen: () => setOpen(true),
39
+ inputRef: inputRef,
40
40
  MenuProps: {
41
- onClose: handleClose
41
+ onClose: handleSelectMenuClose,
42
+ MenuListProps: {
43
+ onKeyDown: handleSelectMenuListKeyDown
44
+ }
42
45
  },
43
46
  sx: {
44
47
  height: '100%',
@@ -48,9 +51,9 @@ function EditIncoterm(props) {
48
51
  pl: 1
49
52
  }
50
53
  },
51
- autoFocus: true,
54
+ autoFocus: shouldAutoOpen,
52
55
  fullWidth: true,
53
- open: true,
56
+ open: open,
54
57
  children: INCOTERM_OPTIONS.map(option => {
55
58
  const tooltip = option.slice(option.indexOf('(') + 1, option.indexOf(')'));
56
59
  const code = option.slice(0, option.indexOf('(')).trim();
@@ -1,2 +1,2 @@
1
- import { GridRenderEditCellParams } from '@mui/x-data-grid-premium';
1
+ import { type GridRenderEditCellParams } from '@mui/x-data-grid-premium';
2
2
  export declare function renderEditProgress(params: GridRenderEditCellParams<any, number>): import("react/jsx-runtime").JSX.Element;
@@ -64,7 +64,8 @@ function EditProgress(props) {
64
64
  const {
65
65
  id,
66
66
  value,
67
- field
67
+ field,
68
+ hasFocus
68
69
  } = props;
69
70
  const [valueState, setValueState] = React.useState(Number(value));
70
71
  const apiRef = useGridApiContext();
@@ -84,7 +85,7 @@ function EditProgress(props) {
84
85
  setValueState(Number(value));
85
86
  }, [value]);
86
87
  const handleRef = element => {
87
- if (element) {
88
+ if (element && hasFocus) {
88
89
  element.querySelector('[type="range"]').focus();
89
90
  }
90
91
  };
@@ -1,2 +1,2 @@
1
- import { GridRenderEditCellParams } from '@mui/x-data-grid-premium';
1
+ import { type GridRenderEditCellParams } from '@mui/x-data-grid-premium';
2
2
  export declare function renderEditRating(params: GridRenderEditCellParams<any, number>): import("react/jsx-runtime").JSX.Element;
@@ -10,7 +10,8 @@ function EditRating(props) {
10
10
  const {
11
11
  id,
12
12
  value,
13
- field
13
+ field,
14
+ hasFocus
14
15
  } = props;
15
16
  const apiRef = useGridApiContext();
16
17
  const changedThroughKeyboard = React.useRef(false);
@@ -29,7 +30,7 @@ function EditRating(props) {
29
30
  changedThroughKeyboard.current = false;
30
31
  };
31
32
  const handleRef = element => {
32
- if (element) {
33
+ if (element && hasFocus) {
33
34
  if (value) {
34
35
  element.querySelector(`input[value="${Math.round(value)}"]`).focus();
35
36
  } else {
@@ -1,2 +1,2 @@
1
- import { GridRenderEditCellParams } from '@mui/x-data-grid-premium';
1
+ import type { GridRenderEditCellParams } from '@mui/x-data-grid-premium';
2
2
  export declare function renderEditStatus(params: GridRenderEditCellParams<any, string>): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,7 @@
1
+ 'use client';
2
+
1
3
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import { useGridApiContext, useGridRootProps, GridEditModes, GridCellEditStopReasons } from '@mui/x-data-grid-premium';
4
+ import * as React from 'react';
3
5
  import Select from '@mui/material/Select';
4
6
  import MenuItem from '@mui/material/MenuItem';
5
7
  import ListItemIcon from '@mui/material/ListItemIcon';
@@ -9,41 +11,41 @@ import InfoIcon from '@mui/icons-material/Info';
9
11
  import AutorenewIcon from '@mui/icons-material/Autorenew';
10
12
  import DoneIcon from '@mui/icons-material/Done';
11
13
  import { STATUS_OPTIONS } from "../services/static-data.js";
14
+ import { useEditDropdownState } from "../hooks/useEditDropdownState.js";
12
15
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
16
  function EditStatus(props) {
14
17
  const {
15
18
  id,
16
19
  value,
17
- field
20
+ field,
21
+ hasFocus
18
22
  } = props;
19
- const rootProps = useGridRootProps();
20
- const apiRef = useGridApiContext();
21
- const handleChange = async event => {
22
- const isValid = await apiRef.current.setEditCellValue({
23
- id,
24
- field,
25
- value: event.target.value
26
- }, event);
27
- if (isValid && rootProps.editMode === GridEditModes.Cell) {
28
- const params = apiRef.current.getCellParams(id, field);
29
- apiRef.current.publishEvent('cellEditStop', _extends({}, params, {
30
- reason: GridCellEditStopReasons.enterKeyDown
31
- }));
32
- }
33
- };
34
- const handleClose = (event, reason) => {
35
- if (reason === 'backdropClick') {
36
- const params = apiRef.current.getCellParams(id, field);
37
- apiRef.current.publishEvent('cellEditStop', _extends({}, params, {
38
- reason: GridCellEditStopReasons.cellFocusOut
39
- }));
40
- }
41
- };
23
+ const {
24
+ open,
25
+ setOpen,
26
+ inputRef,
27
+ shouldAutoOpen,
28
+ handleSelectKeyDown,
29
+ handleSelectMenuClose,
30
+ handleSelectMenuListKeyDown,
31
+ createSelectChangeHandler
32
+ } = useEditDropdownState({
33
+ id,
34
+ field,
35
+ hasFocus
36
+ });
37
+ const handleChange = createSelectChangeHandler(event => event.target.value);
42
38
  return /*#__PURE__*/_jsx(Select, {
43
39
  value: value,
44
40
  onChange: handleChange,
41
+ onKeyDown: handleSelectKeyDown,
42
+ onOpen: () => setOpen(true),
43
+ inputRef: inputRef,
45
44
  MenuProps: {
46
- onClose: handleClose
45
+ onClose: handleSelectMenuClose,
46
+ MenuListProps: {
47
+ onKeyDown: handleSelectMenuListKeyDown
48
+ }
47
49
  },
48
50
  sx: {
49
51
  height: '100%',
@@ -53,9 +55,9 @@ function EditStatus(props) {
53
55
  pl: 1
54
56
  }
55
57
  },
56
- autoFocus: true,
58
+ autoFocus: shouldAutoOpen,
57
59
  fullWidth: true,
58
- open: true,
60
+ open: open,
59
61
  children: STATUS_OPTIONS.map(option => {
60
62
  let IconComponent = null;
61
63
  if (option === 'Rejected') {
@@ -1,2 +1,2 @@
1
- import { GridRenderCellParams } from '@mui/x-data-grid-premium';
1
+ import type { GridRenderCellParams } from '@mui/x-data-grid-premium';
2
2
  export declare function renderEmail(params: GridRenderCellParams<any, string, any>): import("react/jsx-runtime").JSX.Element;
@@ -1,2 +1,2 @@
1
- import { GridRenderCellParams } from '@mui/x-data-grid-premium';
1
+ import type { GridRenderCellParams } from '@mui/x-data-grid-premium';
2
2
  export declare function renderIncoterm(params: GridRenderCellParams<any, string | null, any>): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { GridRenderCellParams } from '@mui/x-data-grid-premium';
2
+ import type { GridRenderCellParams } from '@mui/x-data-grid-premium';
3
3
  interface DemoLinkProps {
4
4
  href: string;
5
5
  children: string;
@@ -1,2 +1,2 @@
1
- import { GridRenderCellParams } from '@mui/x-data-grid-premium';
1
+ import type { GridRenderCellParams } from '@mui/x-data-grid-premium';
2
2
  export declare function renderPnl(params: GridRenderCellParams<any, number, any>): "" | import("react/jsx-runtime").JSX.Element;
@@ -1,2 +1,2 @@
1
- import { GridRenderCellParams } from '@mui/x-data-grid-premium';
1
+ import type { GridRenderCellParams } from '@mui/x-data-grid-premium';
2
2
  export declare function renderProgress(params: GridRenderCellParams<any, number, any>): string | import("react/jsx-runtime").JSX.Element | null;
@@ -1,2 +1,2 @@
1
- import { GridRenderCellParams } from '@mui/x-data-grid-premium';
1
+ import type { GridRenderCellParams } from '@mui/x-data-grid-premium';
2
2
  export declare function renderRating(params: GridRenderCellParams<any, number, any>): "" | import("react/jsx-runtime").JSX.Element | null;
@@ -1,2 +1,2 @@
1
- import { GridRenderCellParams } from '@mui/x-data-grid-premium';
1
+ import type { GridRenderCellParams } from '@mui/x-data-grid-premium';
2
2
  export declare function renderStatus(params: GridRenderCellParams<any, string>): "" | import("react/jsx-runtime").JSX.Element;
@@ -1,2 +1,2 @@
1
- import { GridRenderCellParams } from '@mui/x-data-grid-premium';
1
+ import type { GridRenderCellParams } from '@mui/x-data-grid-premium';
2
2
  export declare function renderTotalPrice(params: GridRenderCellParams<any, number>): "" | import("react/jsx-runtime").JSX.Element | null;
@@ -1,4 +1,4 @@
1
- import { GridColDef, GridRowId } from '@mui/x-data-grid';
1
+ import type { GridColDef, GridRowId } from '@mui/x-data-grid';
2
2
  export declare const currencyPairs: string[];
3
3
  interface GridBasicRowModel {
4
4
  id: GridRowId;
@@ -1,4 +1,4 @@
1
- import { GridColDef } from '@mui/x-data-grid-pro';
1
+ import type { GridColDef } from '@mui/x-data-grid-pro';
2
2
  export interface GridDataGeneratorContext {
3
3
  /**
4
4
  * Values already attributed to this column.
@@ -1,2 +1,2 @@
1
- import { PromptResponse } from '@mui/x-data-grid-premium';
1
+ import type { PromptResponse } from '@mui/x-data-grid-premium';
2
2
  export declare const mockPromptResolver: (query: string, _: string) => Promise<PromptResponse>;
@@ -1,4 +1,4 @@
1
- import { GridDataGeneratorContext } from "./gridColDefGenerator.js";
1
+ import type { GridDataGeneratorContext } from "./gridColDefGenerator.js";
2
2
  type ColumnDataGenerator<Value> = (data: any, context: GridDataGeneratorContext) => Value;
3
3
  export declare const random: (min: number, max: number) => number;
4
4
  export declare const randomInt: (min: number, max: number) => number;
@@ -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