@redsift/table 11.6.0 → 11.7.0-muiv5
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/_internal/BasePopper.js +2 -2
- package/_internal/ControlledPagination.js +24 -32
- package/_internal/ControlledPagination.js.map +1 -1
- package/_internal/DataGrid2.js +80 -64
- package/_internal/DataGrid2.js.map +1 -1
- package/_internal/GridToolbarFilterSemanticField2.js +12 -12
- package/_internal/GridToolbarFilterSemanticField2.js.map +1 -1
- package/_internal/Portal.js +1 -1
- package/_internal/StatefulDataGrid.js +1 -1
- package/_internal/StatefulDataGrid2.js +238 -1904
- package/_internal/StatefulDataGrid2.js.map +1 -1
- package/_internal/TextCell2.js +1 -1
- package/_internal/Toolbar2.js +3 -3
- package/_internal/Toolbar2.js.map +1 -1
- package/_internal/ToolbarWrapper2.js +17 -11
- package/_internal/ToolbarWrapper2.js.map +1 -1
- package/_internal/_rollupPluginBabelHelpers.js +1 -1
- package/_internal/useControlledDatagridState.js +1859 -24
- package/_internal/useControlledDatagridState.js.map +1 -1
- package/index.d.ts +90 -80
- package/index.js +3 -48
- package/index.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,1763 +1,15 @@
|
|
|
1
|
-
import { _ as _objectSpread2,
|
|
2
|
-
import * as React from 'react';
|
|
1
|
+
import { _ as _objectSpread2, b as _objectWithoutProperties, a as _extends } from './_rollupPluginBabelHelpers.js';
|
|
3
2
|
import React__default, { useCallback, useEffect, useMemo, forwardRef, useRef, useState } from 'react';
|
|
4
3
|
import classNames from 'classnames';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { L as LicenseInfo,
|
|
8
|
-
import {
|
|
9
|
-
import { _ as _objectWithoutPropertiesLoose, a as _extends, d as defaultSxConfig, i as isPlainObject, s as styled, b as styleFunctionSx, u as useTheme, c as clsx, e as createTheme, T as THEME_ID, C as ClassNameGenerator, P as PropTypes, g as generateUtilityClasses, f as generateUtilityClass, h as styled$1, j as useThemeProps, k as capitalize, l as composeClasses, r as rootShouldForwardProp, m as refType } from './Portal.js';
|
|
10
|
-
import { j as jsxRuntimeExports } from './jsx-runtime.js';
|
|
11
|
-
import { u as useFormControl, f as formControlState, i as isAdornedStart, a as isFilled, F as FormControlContext, b as useId, c as Select, I as Input, d as FilledInput, O as OutlinedInput, o as onServerSideSelectionStatusChange, S as ServerSideControlledPagination, C as ControlledPagination } from './ControlledPagination.js';
|
|
4
|
+
import { useTheme, ThemeProvider, RedsiftColorBlueN, RedsiftColorNeutralXDarkGrey, RedsiftColorNeutralWhite } from '@redsift/design-system';
|
|
5
|
+
import { GridLinkOperator, useGridApiRef, DataGridPro, gridPaginatedVisibleSortedGridRowEntriesSelector, gridPaginatedVisibleSortedGridRowIdsSelector, gridFilteredSortedRowEntriesSelector, gridFilteredSortedRowIdsSelector } from '@mui/x-data-grid-pro';
|
|
6
|
+
import { o as operatorList, L as LicenseInfo, K as useControlledDatagridState, T as ThemeProvider$1, M as StyledDataGrid, f as customColumnTypes } from './useControlledDatagridState.js';
|
|
7
|
+
import { g as createTheme } from './Portal.js';
|
|
12
8
|
import { T as Toolbar } from './Toolbar2.js';
|
|
9
|
+
import { o as onServerSideSelectionStatusChange, S as ServerSideControlledPagination, C as ControlledPagination } from './ControlledPagination.js';
|
|
13
10
|
import { B as BaseButton, a as BaseCheckbox, c as BasePopper, b as BaseIcon } from './BasePopper.js';
|
|
14
11
|
import { T as ToolbarWrapper } from './ToolbarWrapper2.js';
|
|
15
12
|
|
|
16
|
-
function isMuiElement(element, muiNames) {
|
|
17
|
-
return /*#__PURE__*/React.isValidElement(element) && muiNames.indexOf(element.type.muiName) !== -1;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const _excluded$7 = ["sx"];
|
|
21
|
-
const splitProps = props => {
|
|
22
|
-
var _props$theme$unstable, _props$theme;
|
|
23
|
-
const result = {
|
|
24
|
-
systemProps: {},
|
|
25
|
-
otherProps: {}
|
|
26
|
-
};
|
|
27
|
-
const config = (_props$theme$unstable = props == null ? void 0 : (_props$theme = props.theme) == null ? void 0 : _props$theme.unstable_sxConfig) != null ? _props$theme$unstable : defaultSxConfig;
|
|
28
|
-
Object.keys(props).forEach(prop => {
|
|
29
|
-
if (config[prop]) {
|
|
30
|
-
result.systemProps[prop] = props[prop];
|
|
31
|
-
} else {
|
|
32
|
-
result.otherProps[prop] = props[prop];
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
return result;
|
|
36
|
-
};
|
|
37
|
-
function extendSxProp(props) {
|
|
38
|
-
const {
|
|
39
|
-
sx: inSx
|
|
40
|
-
} = props,
|
|
41
|
-
other = _objectWithoutPropertiesLoose(props, _excluded$7);
|
|
42
|
-
const {
|
|
43
|
-
systemProps,
|
|
44
|
-
otherProps
|
|
45
|
-
} = splitProps(other);
|
|
46
|
-
let finalSx;
|
|
47
|
-
if (Array.isArray(inSx)) {
|
|
48
|
-
finalSx = [systemProps, ...inSx];
|
|
49
|
-
} else if (typeof inSx === 'function') {
|
|
50
|
-
finalSx = (...args) => {
|
|
51
|
-
const result = inSx(...args);
|
|
52
|
-
if (!isPlainObject(result)) {
|
|
53
|
-
return systemProps;
|
|
54
|
-
}
|
|
55
|
-
return _extends({}, systemProps, result);
|
|
56
|
-
};
|
|
57
|
-
} else {
|
|
58
|
-
finalSx = _extends({}, systemProps, inSx);
|
|
59
|
-
}
|
|
60
|
-
return _extends({}, otherProps, {
|
|
61
|
-
sx: finalSx
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
const _excluded$6 = ["className", "component"];
|
|
66
|
-
function createBox(options = {}) {
|
|
67
|
-
const {
|
|
68
|
-
themeId,
|
|
69
|
-
defaultTheme,
|
|
70
|
-
defaultClassName = 'MuiBox-root',
|
|
71
|
-
generateClassName
|
|
72
|
-
} = options;
|
|
73
|
-
const BoxRoot = styled('div', {
|
|
74
|
-
shouldForwardProp: prop => prop !== 'theme' && prop !== 'sx' && prop !== 'as'
|
|
75
|
-
})(styleFunctionSx);
|
|
76
|
-
const Box = /*#__PURE__*/React.forwardRef(function Box(inProps, ref) {
|
|
77
|
-
const theme = useTheme(defaultTheme);
|
|
78
|
-
const _extendSxProp = extendSxProp(inProps),
|
|
79
|
-
{
|
|
80
|
-
className,
|
|
81
|
-
component = 'div'
|
|
82
|
-
} = _extendSxProp,
|
|
83
|
-
other = _objectWithoutPropertiesLoose(_extendSxProp, _excluded$6);
|
|
84
|
-
return /*#__PURE__*/jsxRuntimeExports.jsx(BoxRoot, _extends({
|
|
85
|
-
as: component,
|
|
86
|
-
ref: ref,
|
|
87
|
-
className: clsx(className, generateClassName ? generateClassName(defaultClassName) : defaultClassName),
|
|
88
|
-
theme: themeId ? theme[themeId] || theme : theme
|
|
89
|
-
}, other));
|
|
90
|
-
});
|
|
91
|
-
return Box;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const defaultTheme = createTheme();
|
|
95
|
-
const Box = createBox({
|
|
96
|
-
themeId: THEME_ID,
|
|
97
|
-
defaultTheme,
|
|
98
|
-
defaultClassName: 'MuiBox-root',
|
|
99
|
-
generateClassName: ClassNameGenerator.generate
|
|
100
|
-
});
|
|
101
|
-
process.env.NODE_ENV !== "production" ? Box.propTypes /* remove-proptypes */ = {
|
|
102
|
-
// ----------------------------- Warning --------------------------------
|
|
103
|
-
// | These PropTypes are generated from the TypeScript type definitions |
|
|
104
|
-
// | To update them edit the d.ts file and run "yarn proptypes" |
|
|
105
|
-
// ----------------------------------------------------------------------
|
|
106
|
-
/**
|
|
107
|
-
* @ignore
|
|
108
|
-
*/
|
|
109
|
-
children: PropTypes.node,
|
|
110
|
-
/**
|
|
111
|
-
* The component used for the root node.
|
|
112
|
-
* Either a string to use a HTML element or a component.
|
|
113
|
-
*/
|
|
114
|
-
component: PropTypes.elementType,
|
|
115
|
-
/**
|
|
116
|
-
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
117
|
-
*/
|
|
118
|
-
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
|
|
119
|
-
} : void 0;
|
|
120
|
-
var Box$1 = Box;
|
|
121
|
-
|
|
122
|
-
function getFormLabelUtilityClasses(slot) {
|
|
123
|
-
return generateUtilityClass('MuiFormLabel', slot);
|
|
124
|
-
}
|
|
125
|
-
const formLabelClasses = generateUtilityClasses('MuiFormLabel', ['root', 'colorSecondary', 'focused', 'disabled', 'error', 'filled', 'required', 'asterisk']);
|
|
126
|
-
var formLabelClasses$1 = formLabelClasses;
|
|
127
|
-
|
|
128
|
-
const _excluded$5 = ["children", "className", "color", "component", "disabled", "error", "filled", "focused", "required"];
|
|
129
|
-
const useUtilityClasses$4 = ownerState => {
|
|
130
|
-
const {
|
|
131
|
-
classes,
|
|
132
|
-
color,
|
|
133
|
-
focused,
|
|
134
|
-
disabled,
|
|
135
|
-
error,
|
|
136
|
-
filled,
|
|
137
|
-
required
|
|
138
|
-
} = ownerState;
|
|
139
|
-
const slots = {
|
|
140
|
-
root: ['root', `color${capitalize(color)}`, disabled && 'disabled', error && 'error', filled && 'filled', focused && 'focused', required && 'required'],
|
|
141
|
-
asterisk: ['asterisk', error && 'error']
|
|
142
|
-
};
|
|
143
|
-
return composeClasses(slots, getFormLabelUtilityClasses, classes);
|
|
144
|
-
};
|
|
145
|
-
const FormLabelRoot = styled$1('label', {
|
|
146
|
-
name: 'MuiFormLabel',
|
|
147
|
-
slot: 'Root',
|
|
148
|
-
overridesResolver: ({
|
|
149
|
-
ownerState
|
|
150
|
-
}, styles) => {
|
|
151
|
-
return _extends({}, styles.root, ownerState.color === 'secondary' && styles.colorSecondary, ownerState.filled && styles.filled);
|
|
152
|
-
}
|
|
153
|
-
})(({
|
|
154
|
-
theme,
|
|
155
|
-
ownerState
|
|
156
|
-
}) => _extends({
|
|
157
|
-
color: (theme.vars || theme).palette.text.secondary
|
|
158
|
-
}, theme.typography.body1, {
|
|
159
|
-
lineHeight: '1.4375em',
|
|
160
|
-
padding: 0,
|
|
161
|
-
position: 'relative',
|
|
162
|
-
[`&.${formLabelClasses$1.focused}`]: {
|
|
163
|
-
color: (theme.vars || theme).palette[ownerState.color].main
|
|
164
|
-
},
|
|
165
|
-
[`&.${formLabelClasses$1.disabled}`]: {
|
|
166
|
-
color: (theme.vars || theme).palette.text.disabled
|
|
167
|
-
},
|
|
168
|
-
[`&.${formLabelClasses$1.error}`]: {
|
|
169
|
-
color: (theme.vars || theme).palette.error.main
|
|
170
|
-
}
|
|
171
|
-
}));
|
|
172
|
-
const AsteriskComponent = styled$1('span', {
|
|
173
|
-
name: 'MuiFormLabel',
|
|
174
|
-
slot: 'Asterisk',
|
|
175
|
-
overridesResolver: (props, styles) => styles.asterisk
|
|
176
|
-
})(({
|
|
177
|
-
theme
|
|
178
|
-
}) => ({
|
|
179
|
-
[`&.${formLabelClasses$1.error}`]: {
|
|
180
|
-
color: (theme.vars || theme).palette.error.main
|
|
181
|
-
}
|
|
182
|
-
}));
|
|
183
|
-
const FormLabel = /*#__PURE__*/React.forwardRef(function FormLabel(inProps, ref) {
|
|
184
|
-
const props = useThemeProps({
|
|
185
|
-
props: inProps,
|
|
186
|
-
name: 'MuiFormLabel'
|
|
187
|
-
});
|
|
188
|
-
const {
|
|
189
|
-
children,
|
|
190
|
-
className,
|
|
191
|
-
component = 'label'
|
|
192
|
-
} = props,
|
|
193
|
-
other = _objectWithoutPropertiesLoose(props, _excluded$5);
|
|
194
|
-
const muiFormControl = useFormControl();
|
|
195
|
-
const fcs = formControlState({
|
|
196
|
-
props,
|
|
197
|
-
muiFormControl,
|
|
198
|
-
states: ['color', 'required', 'focused', 'disabled', 'error', 'filled']
|
|
199
|
-
});
|
|
200
|
-
const ownerState = _extends({}, props, {
|
|
201
|
-
color: fcs.color || 'primary',
|
|
202
|
-
component,
|
|
203
|
-
disabled: fcs.disabled,
|
|
204
|
-
error: fcs.error,
|
|
205
|
-
filled: fcs.filled,
|
|
206
|
-
focused: fcs.focused,
|
|
207
|
-
required: fcs.required
|
|
208
|
-
});
|
|
209
|
-
const classes = useUtilityClasses$4(ownerState);
|
|
210
|
-
return /*#__PURE__*/jsxRuntimeExports.jsxs(FormLabelRoot, _extends({
|
|
211
|
-
as: component,
|
|
212
|
-
ownerState: ownerState,
|
|
213
|
-
className: clsx(classes.root, className),
|
|
214
|
-
ref: ref
|
|
215
|
-
}, other, {
|
|
216
|
-
children: [children, fcs.required && /*#__PURE__*/jsxRuntimeExports.jsxs(AsteriskComponent, {
|
|
217
|
-
ownerState: ownerState,
|
|
218
|
-
"aria-hidden": true,
|
|
219
|
-
className: classes.asterisk,
|
|
220
|
-
children: ["\u2009", '*']
|
|
221
|
-
})]
|
|
222
|
-
}));
|
|
223
|
-
});
|
|
224
|
-
process.env.NODE_ENV !== "production" ? FormLabel.propTypes /* remove-proptypes */ = {
|
|
225
|
-
// ----------------------------- Warning --------------------------------
|
|
226
|
-
// | These PropTypes are generated from the TypeScript type definitions |
|
|
227
|
-
// | To update them edit the d.ts file and run "yarn proptypes" |
|
|
228
|
-
// ----------------------------------------------------------------------
|
|
229
|
-
/**
|
|
230
|
-
* The content of the component.
|
|
231
|
-
*/
|
|
232
|
-
children: PropTypes.node,
|
|
233
|
-
/**
|
|
234
|
-
* Override or extend the styles applied to the component.
|
|
235
|
-
*/
|
|
236
|
-
classes: PropTypes.object,
|
|
237
|
-
/**
|
|
238
|
-
* @ignore
|
|
239
|
-
*/
|
|
240
|
-
className: PropTypes.string,
|
|
241
|
-
/**
|
|
242
|
-
* The color of the component.
|
|
243
|
-
* It supports both default and custom theme colors, which can be added as shown in the
|
|
244
|
-
* [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).
|
|
245
|
-
*/
|
|
246
|
-
color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']), PropTypes.string]),
|
|
247
|
-
/**
|
|
248
|
-
* The component used for the root node.
|
|
249
|
-
* Either a string to use a HTML element or a component.
|
|
250
|
-
*/
|
|
251
|
-
component: PropTypes.elementType,
|
|
252
|
-
/**
|
|
253
|
-
* If `true`, the label should be displayed in a disabled state.
|
|
254
|
-
*/
|
|
255
|
-
disabled: PropTypes.bool,
|
|
256
|
-
/**
|
|
257
|
-
* If `true`, the label is displayed in an error state.
|
|
258
|
-
*/
|
|
259
|
-
error: PropTypes.bool,
|
|
260
|
-
/**
|
|
261
|
-
* If `true`, the label should use filled classes key.
|
|
262
|
-
*/
|
|
263
|
-
filled: PropTypes.bool,
|
|
264
|
-
/**
|
|
265
|
-
* If `true`, the input of this label is focused (used by `FormGroup` components).
|
|
266
|
-
*/
|
|
267
|
-
focused: PropTypes.bool,
|
|
268
|
-
/**
|
|
269
|
-
* If `true`, the label will indicate that the `input` is required.
|
|
270
|
-
*/
|
|
271
|
-
required: PropTypes.bool,
|
|
272
|
-
/**
|
|
273
|
-
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
274
|
-
*/
|
|
275
|
-
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
|
|
276
|
-
} : void 0;
|
|
277
|
-
var FormLabel$1 = FormLabel;
|
|
278
|
-
|
|
279
|
-
function getInputLabelUtilityClasses(slot) {
|
|
280
|
-
return generateUtilityClass('MuiInputLabel', slot);
|
|
281
|
-
}
|
|
282
|
-
generateUtilityClasses('MuiInputLabel', ['root', 'focused', 'disabled', 'error', 'required', 'asterisk', 'formControl', 'sizeSmall', 'shrink', 'animated', 'standard', 'filled', 'outlined']);
|
|
283
|
-
|
|
284
|
-
const _excluded$4 = ["disableAnimation", "margin", "shrink", "variant", "className"];
|
|
285
|
-
const useUtilityClasses$3 = ownerState => {
|
|
286
|
-
const {
|
|
287
|
-
classes,
|
|
288
|
-
formControl,
|
|
289
|
-
size,
|
|
290
|
-
shrink,
|
|
291
|
-
disableAnimation,
|
|
292
|
-
variant,
|
|
293
|
-
required
|
|
294
|
-
} = ownerState;
|
|
295
|
-
const slots = {
|
|
296
|
-
root: ['root', formControl && 'formControl', !disableAnimation && 'animated', shrink && 'shrink', size === 'small' && 'sizeSmall', variant],
|
|
297
|
-
asterisk: [required && 'asterisk']
|
|
298
|
-
};
|
|
299
|
-
const composedClasses = composeClasses(slots, getInputLabelUtilityClasses, classes);
|
|
300
|
-
return _extends({}, classes, composedClasses);
|
|
301
|
-
};
|
|
302
|
-
const InputLabelRoot = styled$1(FormLabel$1, {
|
|
303
|
-
shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',
|
|
304
|
-
name: 'MuiInputLabel',
|
|
305
|
-
slot: 'Root',
|
|
306
|
-
overridesResolver: (props, styles) => {
|
|
307
|
-
const {
|
|
308
|
-
ownerState
|
|
309
|
-
} = props;
|
|
310
|
-
return [{
|
|
311
|
-
[`& .${formLabelClasses$1.asterisk}`]: styles.asterisk
|
|
312
|
-
}, styles.root, ownerState.formControl && styles.formControl, ownerState.size === 'small' && styles.sizeSmall, ownerState.shrink && styles.shrink, !ownerState.disableAnimation && styles.animated, styles[ownerState.variant]];
|
|
313
|
-
}
|
|
314
|
-
})(({
|
|
315
|
-
theme,
|
|
316
|
-
ownerState
|
|
317
|
-
}) => _extends({
|
|
318
|
-
display: 'block',
|
|
319
|
-
transformOrigin: 'top left',
|
|
320
|
-
whiteSpace: 'nowrap',
|
|
321
|
-
overflow: 'hidden',
|
|
322
|
-
textOverflow: 'ellipsis',
|
|
323
|
-
maxWidth: '100%'
|
|
324
|
-
}, ownerState.formControl && {
|
|
325
|
-
position: 'absolute',
|
|
326
|
-
left: 0,
|
|
327
|
-
top: 0,
|
|
328
|
-
// slight alteration to spec spacing to match visual spec result
|
|
329
|
-
transform: 'translate(0, 20px) scale(1)'
|
|
330
|
-
}, ownerState.size === 'small' && {
|
|
331
|
-
// Compensation for the `Input.inputSizeSmall` style.
|
|
332
|
-
transform: 'translate(0, 17px) scale(1)'
|
|
333
|
-
}, ownerState.shrink && {
|
|
334
|
-
transform: 'translate(0, -1.5px) scale(0.75)',
|
|
335
|
-
transformOrigin: 'top left',
|
|
336
|
-
maxWidth: '133%'
|
|
337
|
-
}, !ownerState.disableAnimation && {
|
|
338
|
-
transition: theme.transitions.create(['color', 'transform', 'max-width'], {
|
|
339
|
-
duration: theme.transitions.duration.shorter,
|
|
340
|
-
easing: theme.transitions.easing.easeOut
|
|
341
|
-
})
|
|
342
|
-
}, ownerState.variant === 'filled' && _extends({
|
|
343
|
-
// Chrome's autofill feature gives the input field a yellow background.
|
|
344
|
-
// Since the input field is behind the label in the HTML tree,
|
|
345
|
-
// the input field is drawn last and hides the label with an opaque background color.
|
|
346
|
-
// zIndex: 1 will raise the label above opaque background-colors of input.
|
|
347
|
-
zIndex: 1,
|
|
348
|
-
pointerEvents: 'none',
|
|
349
|
-
transform: 'translate(12px, 16px) scale(1)',
|
|
350
|
-
maxWidth: 'calc(100% - 24px)'
|
|
351
|
-
}, ownerState.size === 'small' && {
|
|
352
|
-
transform: 'translate(12px, 13px) scale(1)'
|
|
353
|
-
}, ownerState.shrink && _extends({
|
|
354
|
-
userSelect: 'none',
|
|
355
|
-
pointerEvents: 'auto',
|
|
356
|
-
transform: 'translate(12px, 7px) scale(0.75)',
|
|
357
|
-
maxWidth: 'calc(133% - 24px)'
|
|
358
|
-
}, ownerState.size === 'small' && {
|
|
359
|
-
transform: 'translate(12px, 4px) scale(0.75)'
|
|
360
|
-
})), ownerState.variant === 'outlined' && _extends({
|
|
361
|
-
// see comment above on filled.zIndex
|
|
362
|
-
zIndex: 1,
|
|
363
|
-
pointerEvents: 'none',
|
|
364
|
-
transform: 'translate(14px, 16px) scale(1)',
|
|
365
|
-
maxWidth: 'calc(100% - 24px)'
|
|
366
|
-
}, ownerState.size === 'small' && {
|
|
367
|
-
transform: 'translate(14px, 9px) scale(1)'
|
|
368
|
-
}, ownerState.shrink && {
|
|
369
|
-
userSelect: 'none',
|
|
370
|
-
pointerEvents: 'auto',
|
|
371
|
-
// Theoretically, we should have (8+5)*2/0.75 = 34px
|
|
372
|
-
// but it feels a better when it bleeds a bit on the left, so 32px.
|
|
373
|
-
maxWidth: 'calc(133% - 32px)',
|
|
374
|
-
transform: 'translate(14px, -9px) scale(0.75)'
|
|
375
|
-
})));
|
|
376
|
-
const InputLabel = /*#__PURE__*/React.forwardRef(function InputLabel(inProps, ref) {
|
|
377
|
-
const props = useThemeProps({
|
|
378
|
-
name: 'MuiInputLabel',
|
|
379
|
-
props: inProps
|
|
380
|
-
});
|
|
381
|
-
const {
|
|
382
|
-
disableAnimation = false,
|
|
383
|
-
shrink: shrinkProp,
|
|
384
|
-
className
|
|
385
|
-
} = props,
|
|
386
|
-
other = _objectWithoutPropertiesLoose(props, _excluded$4);
|
|
387
|
-
const muiFormControl = useFormControl();
|
|
388
|
-
let shrink = shrinkProp;
|
|
389
|
-
if (typeof shrink === 'undefined' && muiFormControl) {
|
|
390
|
-
shrink = muiFormControl.filled || muiFormControl.focused || muiFormControl.adornedStart;
|
|
391
|
-
}
|
|
392
|
-
const fcs = formControlState({
|
|
393
|
-
props,
|
|
394
|
-
muiFormControl,
|
|
395
|
-
states: ['size', 'variant', 'required']
|
|
396
|
-
});
|
|
397
|
-
const ownerState = _extends({}, props, {
|
|
398
|
-
disableAnimation,
|
|
399
|
-
formControl: muiFormControl,
|
|
400
|
-
shrink,
|
|
401
|
-
size: fcs.size,
|
|
402
|
-
variant: fcs.variant,
|
|
403
|
-
required: fcs.required
|
|
404
|
-
});
|
|
405
|
-
const classes = useUtilityClasses$3(ownerState);
|
|
406
|
-
return /*#__PURE__*/jsxRuntimeExports.jsx(InputLabelRoot, _extends({
|
|
407
|
-
"data-shrink": shrink,
|
|
408
|
-
ownerState: ownerState,
|
|
409
|
-
ref: ref,
|
|
410
|
-
className: clsx(classes.root, className)
|
|
411
|
-
}, other, {
|
|
412
|
-
classes: classes
|
|
413
|
-
}));
|
|
414
|
-
});
|
|
415
|
-
process.env.NODE_ENV !== "production" ? InputLabel.propTypes /* remove-proptypes */ = {
|
|
416
|
-
// ----------------------------- Warning --------------------------------
|
|
417
|
-
// | These PropTypes are generated from the TypeScript type definitions |
|
|
418
|
-
// | To update them edit the d.ts file and run "yarn proptypes" |
|
|
419
|
-
// ----------------------------------------------------------------------
|
|
420
|
-
/**
|
|
421
|
-
* The content of the component.
|
|
422
|
-
*/
|
|
423
|
-
children: PropTypes.node,
|
|
424
|
-
/**
|
|
425
|
-
* Override or extend the styles applied to the component.
|
|
426
|
-
*/
|
|
427
|
-
classes: PropTypes.object,
|
|
428
|
-
/**
|
|
429
|
-
* @ignore
|
|
430
|
-
*/
|
|
431
|
-
className: PropTypes.string,
|
|
432
|
-
/**
|
|
433
|
-
* The color of the component.
|
|
434
|
-
* It supports both default and custom theme colors, which can be added as shown in the
|
|
435
|
-
* [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).
|
|
436
|
-
*/
|
|
437
|
-
color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']), PropTypes.string]),
|
|
438
|
-
/**
|
|
439
|
-
* If `true`, the transition animation is disabled.
|
|
440
|
-
* @default false
|
|
441
|
-
*/
|
|
442
|
-
disableAnimation: PropTypes.bool,
|
|
443
|
-
/**
|
|
444
|
-
* If `true`, the component is disabled.
|
|
445
|
-
*/
|
|
446
|
-
disabled: PropTypes.bool,
|
|
447
|
-
/**
|
|
448
|
-
* If `true`, the label is displayed in an error state.
|
|
449
|
-
*/
|
|
450
|
-
error: PropTypes.bool,
|
|
451
|
-
/**
|
|
452
|
-
* If `true`, the `input` of this label is focused.
|
|
453
|
-
*/
|
|
454
|
-
focused: PropTypes.bool,
|
|
455
|
-
/**
|
|
456
|
-
* If `dense`, will adjust vertical spacing. This is normally obtained via context from
|
|
457
|
-
* FormControl.
|
|
458
|
-
*/
|
|
459
|
-
margin: PropTypes.oneOf(['dense']),
|
|
460
|
-
/**
|
|
461
|
-
* if `true`, the label will indicate that the `input` is required.
|
|
462
|
-
*/
|
|
463
|
-
required: PropTypes.bool,
|
|
464
|
-
/**
|
|
465
|
-
* If `true`, the label is shrunk.
|
|
466
|
-
*/
|
|
467
|
-
shrink: PropTypes.bool,
|
|
468
|
-
/**
|
|
469
|
-
* The size of the component.
|
|
470
|
-
* @default 'normal'
|
|
471
|
-
*/
|
|
472
|
-
size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['normal', 'small']), PropTypes.string]),
|
|
473
|
-
/**
|
|
474
|
-
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
475
|
-
*/
|
|
476
|
-
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
477
|
-
/**
|
|
478
|
-
* The variant to use.
|
|
479
|
-
*/
|
|
480
|
-
variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])
|
|
481
|
-
} : void 0;
|
|
482
|
-
var InputLabel$1 = InputLabel;
|
|
483
|
-
|
|
484
|
-
function getFormControlUtilityClasses(slot) {
|
|
485
|
-
return generateUtilityClass('MuiFormControl', slot);
|
|
486
|
-
}
|
|
487
|
-
generateUtilityClasses('MuiFormControl', ['root', 'marginNone', 'marginNormal', 'marginDense', 'fullWidth', 'disabled']);
|
|
488
|
-
|
|
489
|
-
const _excluded$3 = ["children", "className", "color", "component", "disabled", "error", "focused", "fullWidth", "hiddenLabel", "margin", "required", "size", "variant"];
|
|
490
|
-
const useUtilityClasses$2 = ownerState => {
|
|
491
|
-
const {
|
|
492
|
-
classes,
|
|
493
|
-
margin,
|
|
494
|
-
fullWidth
|
|
495
|
-
} = ownerState;
|
|
496
|
-
const slots = {
|
|
497
|
-
root: ['root', margin !== 'none' && `margin${capitalize(margin)}`, fullWidth && 'fullWidth']
|
|
498
|
-
};
|
|
499
|
-
return composeClasses(slots, getFormControlUtilityClasses, classes);
|
|
500
|
-
};
|
|
501
|
-
const FormControlRoot = styled$1('div', {
|
|
502
|
-
name: 'MuiFormControl',
|
|
503
|
-
slot: 'Root',
|
|
504
|
-
overridesResolver: ({
|
|
505
|
-
ownerState
|
|
506
|
-
}, styles) => {
|
|
507
|
-
return _extends({}, styles.root, styles[`margin${capitalize(ownerState.margin)}`], ownerState.fullWidth && styles.fullWidth);
|
|
508
|
-
}
|
|
509
|
-
})(({
|
|
510
|
-
ownerState
|
|
511
|
-
}) => _extends({
|
|
512
|
-
display: 'inline-flex',
|
|
513
|
-
flexDirection: 'column',
|
|
514
|
-
position: 'relative',
|
|
515
|
-
// Reset fieldset default style.
|
|
516
|
-
minWidth: 0,
|
|
517
|
-
padding: 0,
|
|
518
|
-
margin: 0,
|
|
519
|
-
border: 0,
|
|
520
|
-
verticalAlign: 'top'
|
|
521
|
-
}, ownerState.margin === 'normal' && {
|
|
522
|
-
marginTop: 16,
|
|
523
|
-
marginBottom: 8
|
|
524
|
-
}, ownerState.margin === 'dense' && {
|
|
525
|
-
marginTop: 8,
|
|
526
|
-
marginBottom: 4
|
|
527
|
-
}, ownerState.fullWidth && {
|
|
528
|
-
width: '100%'
|
|
529
|
-
}));
|
|
530
|
-
|
|
531
|
-
/**
|
|
532
|
-
* Provides context such as filled/focused/error/required for form inputs.
|
|
533
|
-
* Relying on the context provides high flexibility and ensures that the state always stays
|
|
534
|
-
* consistent across the children of the `FormControl`.
|
|
535
|
-
* This context is used by the following components:
|
|
536
|
-
*
|
|
537
|
-
* - FormLabel
|
|
538
|
-
* - FormHelperText
|
|
539
|
-
* - Input
|
|
540
|
-
* - InputLabel
|
|
541
|
-
*
|
|
542
|
-
* You can find one composition example below and more going to [the demos](/material-ui/react-text-field/#components).
|
|
543
|
-
*
|
|
544
|
-
* ```jsx
|
|
545
|
-
* <FormControl>
|
|
546
|
-
* <InputLabel htmlFor="my-input">Email address</InputLabel>
|
|
547
|
-
* <Input id="my-input" aria-describedby="my-helper-text" />
|
|
548
|
-
* <FormHelperText id="my-helper-text">We'll never share your email.</FormHelperText>
|
|
549
|
-
* </FormControl>
|
|
550
|
-
* ```
|
|
551
|
-
*
|
|
552
|
-
* ⚠️ Only one `InputBase` can be used within a FormControl because it creates visual inconsistencies.
|
|
553
|
-
* For instance, only one input can be focused at the same time, the state shouldn't be shared.
|
|
554
|
-
*/
|
|
555
|
-
const FormControl = /*#__PURE__*/React.forwardRef(function FormControl(inProps, ref) {
|
|
556
|
-
const props = useThemeProps({
|
|
557
|
-
props: inProps,
|
|
558
|
-
name: 'MuiFormControl'
|
|
559
|
-
});
|
|
560
|
-
const {
|
|
561
|
-
children,
|
|
562
|
-
className,
|
|
563
|
-
color = 'primary',
|
|
564
|
-
component = 'div',
|
|
565
|
-
disabled = false,
|
|
566
|
-
error = false,
|
|
567
|
-
focused: visuallyFocused,
|
|
568
|
-
fullWidth = false,
|
|
569
|
-
hiddenLabel = false,
|
|
570
|
-
margin = 'none',
|
|
571
|
-
required = false,
|
|
572
|
-
size = 'medium',
|
|
573
|
-
variant = 'outlined'
|
|
574
|
-
} = props,
|
|
575
|
-
other = _objectWithoutPropertiesLoose(props, _excluded$3);
|
|
576
|
-
const ownerState = _extends({}, props, {
|
|
577
|
-
color,
|
|
578
|
-
component,
|
|
579
|
-
disabled,
|
|
580
|
-
error,
|
|
581
|
-
fullWidth,
|
|
582
|
-
hiddenLabel,
|
|
583
|
-
margin,
|
|
584
|
-
required,
|
|
585
|
-
size,
|
|
586
|
-
variant
|
|
587
|
-
});
|
|
588
|
-
const classes = useUtilityClasses$2(ownerState);
|
|
589
|
-
const [adornedStart, setAdornedStart] = React.useState(() => {
|
|
590
|
-
// We need to iterate through the children and find the Input in order
|
|
591
|
-
// to fully support server-side rendering.
|
|
592
|
-
let initialAdornedStart = false;
|
|
593
|
-
if (children) {
|
|
594
|
-
React.Children.forEach(children, child => {
|
|
595
|
-
if (!isMuiElement(child, ['Input', 'Select'])) {
|
|
596
|
-
return;
|
|
597
|
-
}
|
|
598
|
-
const input = isMuiElement(child, ['Select']) ? child.props.input : child;
|
|
599
|
-
if (input && isAdornedStart(input.props)) {
|
|
600
|
-
initialAdornedStart = true;
|
|
601
|
-
}
|
|
602
|
-
});
|
|
603
|
-
}
|
|
604
|
-
return initialAdornedStart;
|
|
605
|
-
});
|
|
606
|
-
const [filled, setFilled] = React.useState(() => {
|
|
607
|
-
// We need to iterate through the children and find the Input in order
|
|
608
|
-
// to fully support server-side rendering.
|
|
609
|
-
let initialFilled = false;
|
|
610
|
-
if (children) {
|
|
611
|
-
React.Children.forEach(children, child => {
|
|
612
|
-
if (!isMuiElement(child, ['Input', 'Select'])) {
|
|
613
|
-
return;
|
|
614
|
-
}
|
|
615
|
-
if (isFilled(child.props, true) || isFilled(child.props.inputProps, true)) {
|
|
616
|
-
initialFilled = true;
|
|
617
|
-
}
|
|
618
|
-
});
|
|
619
|
-
}
|
|
620
|
-
return initialFilled;
|
|
621
|
-
});
|
|
622
|
-
const [focusedState, setFocused] = React.useState(false);
|
|
623
|
-
if (disabled && focusedState) {
|
|
624
|
-
setFocused(false);
|
|
625
|
-
}
|
|
626
|
-
const focused = visuallyFocused !== undefined && !disabled ? visuallyFocused : focusedState;
|
|
627
|
-
let registerEffect;
|
|
628
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
629
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
630
|
-
const registeredInput = React.useRef(false);
|
|
631
|
-
registerEffect = () => {
|
|
632
|
-
if (registeredInput.current) {
|
|
633
|
-
console.error(['MUI: There are multiple `InputBase` components inside a FormControl.', 'This creates visual inconsistencies, only use one `InputBase`.'].join('\n'));
|
|
634
|
-
}
|
|
635
|
-
registeredInput.current = true;
|
|
636
|
-
return () => {
|
|
637
|
-
registeredInput.current = false;
|
|
638
|
-
};
|
|
639
|
-
};
|
|
640
|
-
}
|
|
641
|
-
const childContext = React.useMemo(() => {
|
|
642
|
-
return {
|
|
643
|
-
adornedStart,
|
|
644
|
-
setAdornedStart,
|
|
645
|
-
color,
|
|
646
|
-
disabled,
|
|
647
|
-
error,
|
|
648
|
-
filled,
|
|
649
|
-
focused,
|
|
650
|
-
fullWidth,
|
|
651
|
-
hiddenLabel,
|
|
652
|
-
size,
|
|
653
|
-
onBlur: () => {
|
|
654
|
-
setFocused(false);
|
|
655
|
-
},
|
|
656
|
-
onEmpty: () => {
|
|
657
|
-
setFilled(false);
|
|
658
|
-
},
|
|
659
|
-
onFilled: () => {
|
|
660
|
-
setFilled(true);
|
|
661
|
-
},
|
|
662
|
-
onFocus: () => {
|
|
663
|
-
setFocused(true);
|
|
664
|
-
},
|
|
665
|
-
registerEffect,
|
|
666
|
-
required,
|
|
667
|
-
variant
|
|
668
|
-
};
|
|
669
|
-
}, [adornedStart, color, disabled, error, filled, focused, fullWidth, hiddenLabel, registerEffect, required, size, variant]);
|
|
670
|
-
return /*#__PURE__*/jsxRuntimeExports.jsx(FormControlContext.Provider, {
|
|
671
|
-
value: childContext,
|
|
672
|
-
children: /*#__PURE__*/jsxRuntimeExports.jsx(FormControlRoot, _extends({
|
|
673
|
-
as: component,
|
|
674
|
-
ownerState: ownerState,
|
|
675
|
-
className: clsx(classes.root, className),
|
|
676
|
-
ref: ref
|
|
677
|
-
}, other, {
|
|
678
|
-
children: children
|
|
679
|
-
}))
|
|
680
|
-
});
|
|
681
|
-
});
|
|
682
|
-
process.env.NODE_ENV !== "production" ? FormControl.propTypes /* remove-proptypes */ = {
|
|
683
|
-
// ----------------------------- Warning --------------------------------
|
|
684
|
-
// | These PropTypes are generated from the TypeScript type definitions |
|
|
685
|
-
// | To update them edit the d.ts file and run "yarn proptypes" |
|
|
686
|
-
// ----------------------------------------------------------------------
|
|
687
|
-
/**
|
|
688
|
-
* The content of the component.
|
|
689
|
-
*/
|
|
690
|
-
children: PropTypes.node,
|
|
691
|
-
/**
|
|
692
|
-
* Override or extend the styles applied to the component.
|
|
693
|
-
*/
|
|
694
|
-
classes: PropTypes.object,
|
|
695
|
-
/**
|
|
696
|
-
* @ignore
|
|
697
|
-
*/
|
|
698
|
-
className: PropTypes.string,
|
|
699
|
-
/**
|
|
700
|
-
* The color of the component.
|
|
701
|
-
* It supports both default and custom theme colors, which can be added as shown in the
|
|
702
|
-
* [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).
|
|
703
|
-
* @default 'primary'
|
|
704
|
-
*/
|
|
705
|
-
color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
|
|
706
|
-
/**
|
|
707
|
-
* The component used for the root node.
|
|
708
|
-
* Either a string to use a HTML element or a component.
|
|
709
|
-
*/
|
|
710
|
-
component: PropTypes.elementType,
|
|
711
|
-
/**
|
|
712
|
-
* If `true`, the label, input and helper text should be displayed in a disabled state.
|
|
713
|
-
* @default false
|
|
714
|
-
*/
|
|
715
|
-
disabled: PropTypes.bool,
|
|
716
|
-
/**
|
|
717
|
-
* If `true`, the label is displayed in an error state.
|
|
718
|
-
* @default false
|
|
719
|
-
*/
|
|
720
|
-
error: PropTypes.bool,
|
|
721
|
-
/**
|
|
722
|
-
* If `true`, the component is displayed in focused state.
|
|
723
|
-
*/
|
|
724
|
-
focused: PropTypes.bool,
|
|
725
|
-
/**
|
|
726
|
-
* If `true`, the component will take up the full width of its container.
|
|
727
|
-
* @default false
|
|
728
|
-
*/
|
|
729
|
-
fullWidth: PropTypes.bool,
|
|
730
|
-
/**
|
|
731
|
-
* If `true`, the label is hidden.
|
|
732
|
-
* This is used to increase density for a `FilledInput`.
|
|
733
|
-
* Be sure to add `aria-label` to the `input` element.
|
|
734
|
-
* @default false
|
|
735
|
-
*/
|
|
736
|
-
hiddenLabel: PropTypes.bool,
|
|
737
|
-
/**
|
|
738
|
-
* If `dense` or `normal`, will adjust vertical spacing of this and contained components.
|
|
739
|
-
* @default 'none'
|
|
740
|
-
*/
|
|
741
|
-
margin: PropTypes.oneOf(['dense', 'none', 'normal']),
|
|
742
|
-
/**
|
|
743
|
-
* If `true`, the label will indicate that the `input` is required.
|
|
744
|
-
* @default false
|
|
745
|
-
*/
|
|
746
|
-
required: PropTypes.bool,
|
|
747
|
-
/**
|
|
748
|
-
* The size of the component.
|
|
749
|
-
* @default 'medium'
|
|
750
|
-
*/
|
|
751
|
-
size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),
|
|
752
|
-
/**
|
|
753
|
-
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
754
|
-
*/
|
|
755
|
-
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
756
|
-
/**
|
|
757
|
-
* The variant to use.
|
|
758
|
-
* @default 'outlined'
|
|
759
|
-
*/
|
|
760
|
-
variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])
|
|
761
|
-
} : void 0;
|
|
762
|
-
var FormControl$1 = FormControl;
|
|
763
|
-
|
|
764
|
-
function getFormHelperTextUtilityClasses(slot) {
|
|
765
|
-
return generateUtilityClass('MuiFormHelperText', slot);
|
|
766
|
-
}
|
|
767
|
-
const formHelperTextClasses = generateUtilityClasses('MuiFormHelperText', ['root', 'error', 'disabled', 'sizeSmall', 'sizeMedium', 'contained', 'focused', 'filled', 'required']);
|
|
768
|
-
var formHelperTextClasses$1 = formHelperTextClasses;
|
|
769
|
-
|
|
770
|
-
var _span;
|
|
771
|
-
const _excluded$2 = ["children", "className", "component", "disabled", "error", "filled", "focused", "margin", "required", "variant"];
|
|
772
|
-
const useUtilityClasses$1 = ownerState => {
|
|
773
|
-
const {
|
|
774
|
-
classes,
|
|
775
|
-
contained,
|
|
776
|
-
size,
|
|
777
|
-
disabled,
|
|
778
|
-
error,
|
|
779
|
-
filled,
|
|
780
|
-
focused,
|
|
781
|
-
required
|
|
782
|
-
} = ownerState;
|
|
783
|
-
const slots = {
|
|
784
|
-
root: ['root', disabled && 'disabled', error && 'error', size && `size${capitalize(size)}`, contained && 'contained', focused && 'focused', filled && 'filled', required && 'required']
|
|
785
|
-
};
|
|
786
|
-
return composeClasses(slots, getFormHelperTextUtilityClasses, classes);
|
|
787
|
-
};
|
|
788
|
-
const FormHelperTextRoot = styled$1('p', {
|
|
789
|
-
name: 'MuiFormHelperText',
|
|
790
|
-
slot: 'Root',
|
|
791
|
-
overridesResolver: (props, styles) => {
|
|
792
|
-
const {
|
|
793
|
-
ownerState
|
|
794
|
-
} = props;
|
|
795
|
-
return [styles.root, ownerState.size && styles[`size${capitalize(ownerState.size)}`], ownerState.contained && styles.contained, ownerState.filled && styles.filled];
|
|
796
|
-
}
|
|
797
|
-
})(({
|
|
798
|
-
theme,
|
|
799
|
-
ownerState
|
|
800
|
-
}) => _extends({
|
|
801
|
-
color: (theme.vars || theme).palette.text.secondary
|
|
802
|
-
}, theme.typography.caption, {
|
|
803
|
-
textAlign: 'left',
|
|
804
|
-
marginTop: 3,
|
|
805
|
-
marginRight: 0,
|
|
806
|
-
marginBottom: 0,
|
|
807
|
-
marginLeft: 0,
|
|
808
|
-
[`&.${formHelperTextClasses$1.disabled}`]: {
|
|
809
|
-
color: (theme.vars || theme).palette.text.disabled
|
|
810
|
-
},
|
|
811
|
-
[`&.${formHelperTextClasses$1.error}`]: {
|
|
812
|
-
color: (theme.vars || theme).palette.error.main
|
|
813
|
-
}
|
|
814
|
-
}, ownerState.size === 'small' && {
|
|
815
|
-
marginTop: 4
|
|
816
|
-
}, ownerState.contained && {
|
|
817
|
-
marginLeft: 14,
|
|
818
|
-
marginRight: 14
|
|
819
|
-
}));
|
|
820
|
-
const FormHelperText = /*#__PURE__*/React.forwardRef(function FormHelperText(inProps, ref) {
|
|
821
|
-
const props = useThemeProps({
|
|
822
|
-
props: inProps,
|
|
823
|
-
name: 'MuiFormHelperText'
|
|
824
|
-
});
|
|
825
|
-
const {
|
|
826
|
-
children,
|
|
827
|
-
className,
|
|
828
|
-
component = 'p'
|
|
829
|
-
} = props,
|
|
830
|
-
other = _objectWithoutPropertiesLoose(props, _excluded$2);
|
|
831
|
-
const muiFormControl = useFormControl();
|
|
832
|
-
const fcs = formControlState({
|
|
833
|
-
props,
|
|
834
|
-
muiFormControl,
|
|
835
|
-
states: ['variant', 'size', 'disabled', 'error', 'filled', 'focused', 'required']
|
|
836
|
-
});
|
|
837
|
-
const ownerState = _extends({}, props, {
|
|
838
|
-
component,
|
|
839
|
-
contained: fcs.variant === 'filled' || fcs.variant === 'outlined',
|
|
840
|
-
variant: fcs.variant,
|
|
841
|
-
size: fcs.size,
|
|
842
|
-
disabled: fcs.disabled,
|
|
843
|
-
error: fcs.error,
|
|
844
|
-
filled: fcs.filled,
|
|
845
|
-
focused: fcs.focused,
|
|
846
|
-
required: fcs.required
|
|
847
|
-
});
|
|
848
|
-
const classes = useUtilityClasses$1(ownerState);
|
|
849
|
-
return /*#__PURE__*/jsxRuntimeExports.jsx(FormHelperTextRoot, _extends({
|
|
850
|
-
as: component,
|
|
851
|
-
ownerState: ownerState,
|
|
852
|
-
className: clsx(classes.root, className),
|
|
853
|
-
ref: ref
|
|
854
|
-
}, other, {
|
|
855
|
-
children: children === ' ' ? // notranslate needed while Google Translate will not fix zero-width space issue
|
|
856
|
-
_span || (_span = /*#__PURE__*/jsxRuntimeExports.jsx("span", {
|
|
857
|
-
className: "notranslate",
|
|
858
|
-
children: "\u200B"
|
|
859
|
-
})) : children
|
|
860
|
-
}));
|
|
861
|
-
});
|
|
862
|
-
process.env.NODE_ENV !== "production" ? FormHelperText.propTypes /* remove-proptypes */ = {
|
|
863
|
-
// ----------------------------- Warning --------------------------------
|
|
864
|
-
// | These PropTypes are generated from the TypeScript type definitions |
|
|
865
|
-
// | To update them edit the d.ts file and run "yarn proptypes" |
|
|
866
|
-
// ----------------------------------------------------------------------
|
|
867
|
-
/**
|
|
868
|
-
* The content of the component.
|
|
869
|
-
*
|
|
870
|
-
* If `' '` is provided, the component reserves one line height for displaying a future message.
|
|
871
|
-
*/
|
|
872
|
-
children: PropTypes.node,
|
|
873
|
-
/**
|
|
874
|
-
* Override or extend the styles applied to the component.
|
|
875
|
-
*/
|
|
876
|
-
classes: PropTypes.object,
|
|
877
|
-
/**
|
|
878
|
-
* @ignore
|
|
879
|
-
*/
|
|
880
|
-
className: PropTypes.string,
|
|
881
|
-
/**
|
|
882
|
-
* The component used for the root node.
|
|
883
|
-
* Either a string to use a HTML element or a component.
|
|
884
|
-
*/
|
|
885
|
-
component: PropTypes.elementType,
|
|
886
|
-
/**
|
|
887
|
-
* If `true`, the helper text should be displayed in a disabled state.
|
|
888
|
-
*/
|
|
889
|
-
disabled: PropTypes.bool,
|
|
890
|
-
/**
|
|
891
|
-
* If `true`, helper text should be displayed in an error state.
|
|
892
|
-
*/
|
|
893
|
-
error: PropTypes.bool,
|
|
894
|
-
/**
|
|
895
|
-
* If `true`, the helper text should use filled classes key.
|
|
896
|
-
*/
|
|
897
|
-
filled: PropTypes.bool,
|
|
898
|
-
/**
|
|
899
|
-
* If `true`, the helper text should use focused classes key.
|
|
900
|
-
*/
|
|
901
|
-
focused: PropTypes.bool,
|
|
902
|
-
/**
|
|
903
|
-
* If `dense`, will adjust vertical spacing. This is normally obtained via context from
|
|
904
|
-
* FormControl.
|
|
905
|
-
*/
|
|
906
|
-
margin: PropTypes.oneOf(['dense']),
|
|
907
|
-
/**
|
|
908
|
-
* If `true`, the helper text should use required classes key.
|
|
909
|
-
*/
|
|
910
|
-
required: PropTypes.bool,
|
|
911
|
-
/**
|
|
912
|
-
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
913
|
-
*/
|
|
914
|
-
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
915
|
-
/**
|
|
916
|
-
* The variant to use.
|
|
917
|
-
*/
|
|
918
|
-
variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['filled', 'outlined', 'standard']), PropTypes.string])
|
|
919
|
-
} : void 0;
|
|
920
|
-
var FormHelperText$1 = FormHelperText;
|
|
921
|
-
|
|
922
|
-
function getTextFieldUtilityClass(slot) {
|
|
923
|
-
return generateUtilityClass('MuiTextField', slot);
|
|
924
|
-
}
|
|
925
|
-
generateUtilityClasses('MuiTextField', ['root']);
|
|
926
|
-
|
|
927
|
-
const _excluded$1 = ["autoComplete", "autoFocus", "children", "className", "color", "defaultValue", "disabled", "error", "FormHelperTextProps", "fullWidth", "helperText", "id", "InputLabelProps", "inputProps", "InputProps", "inputRef", "label", "maxRows", "minRows", "multiline", "name", "onBlur", "onChange", "onClick", "onFocus", "placeholder", "required", "rows", "select", "SelectProps", "type", "value", "variant"];
|
|
928
|
-
const variantComponent = {
|
|
929
|
-
standard: Input,
|
|
930
|
-
filled: FilledInput,
|
|
931
|
-
outlined: OutlinedInput
|
|
932
|
-
};
|
|
933
|
-
const useUtilityClasses = ownerState => {
|
|
934
|
-
const {
|
|
935
|
-
classes
|
|
936
|
-
} = ownerState;
|
|
937
|
-
const slots = {
|
|
938
|
-
root: ['root']
|
|
939
|
-
};
|
|
940
|
-
return composeClasses(slots, getTextFieldUtilityClass, classes);
|
|
941
|
-
};
|
|
942
|
-
const TextFieldRoot = styled$1(FormControl$1, {
|
|
943
|
-
name: 'MuiTextField',
|
|
944
|
-
slot: 'Root',
|
|
945
|
-
overridesResolver: (props, styles) => styles.root
|
|
946
|
-
})({});
|
|
947
|
-
|
|
948
|
-
/**
|
|
949
|
-
* The `TextField` is a convenience wrapper for the most common cases (80%).
|
|
950
|
-
* It cannot be all things to all people, otherwise the API would grow out of control.
|
|
951
|
-
*
|
|
952
|
-
* ## Advanced Configuration
|
|
953
|
-
*
|
|
954
|
-
* It's important to understand that the text field is a simple abstraction
|
|
955
|
-
* on top of the following components:
|
|
956
|
-
*
|
|
957
|
-
* - [FormControl](/material-ui/api/form-control/)
|
|
958
|
-
* - [InputLabel](/material-ui/api/input-label/)
|
|
959
|
-
* - [FilledInput](/material-ui/api/filled-input/)
|
|
960
|
-
* - [OutlinedInput](/material-ui/api/outlined-input/)
|
|
961
|
-
* - [Input](/material-ui/api/input/)
|
|
962
|
-
* - [FormHelperText](/material-ui/api/form-helper-text/)
|
|
963
|
-
*
|
|
964
|
-
* If you wish to alter the props applied to the `input` element, you can do so as follows:
|
|
965
|
-
*
|
|
966
|
-
* ```jsx
|
|
967
|
-
* const inputProps = {
|
|
968
|
-
* step: 300,
|
|
969
|
-
* };
|
|
970
|
-
*
|
|
971
|
-
* return <TextField id="time" type="time" inputProps={inputProps} />;
|
|
972
|
-
* ```
|
|
973
|
-
*
|
|
974
|
-
* For advanced cases, please look at the source of TextField by clicking on the
|
|
975
|
-
* "Edit this page" button above. Consider either:
|
|
976
|
-
*
|
|
977
|
-
* - using the upper case props for passing values directly to the components
|
|
978
|
-
* - using the underlying components directly as shown in the demos
|
|
979
|
-
*/
|
|
980
|
-
const TextField = /*#__PURE__*/React.forwardRef(function TextField(inProps, ref) {
|
|
981
|
-
const props = useThemeProps({
|
|
982
|
-
props: inProps,
|
|
983
|
-
name: 'MuiTextField'
|
|
984
|
-
});
|
|
985
|
-
const {
|
|
986
|
-
autoComplete,
|
|
987
|
-
autoFocus = false,
|
|
988
|
-
children,
|
|
989
|
-
className,
|
|
990
|
-
color = 'primary',
|
|
991
|
-
defaultValue,
|
|
992
|
-
disabled = false,
|
|
993
|
-
error = false,
|
|
994
|
-
FormHelperTextProps,
|
|
995
|
-
fullWidth = false,
|
|
996
|
-
helperText,
|
|
997
|
-
id: idOverride,
|
|
998
|
-
InputLabelProps,
|
|
999
|
-
inputProps,
|
|
1000
|
-
InputProps,
|
|
1001
|
-
inputRef,
|
|
1002
|
-
label,
|
|
1003
|
-
maxRows,
|
|
1004
|
-
minRows,
|
|
1005
|
-
multiline = false,
|
|
1006
|
-
name,
|
|
1007
|
-
onBlur,
|
|
1008
|
-
onChange,
|
|
1009
|
-
onClick,
|
|
1010
|
-
onFocus,
|
|
1011
|
-
placeholder,
|
|
1012
|
-
required = false,
|
|
1013
|
-
rows,
|
|
1014
|
-
select = false,
|
|
1015
|
-
SelectProps,
|
|
1016
|
-
type,
|
|
1017
|
-
value,
|
|
1018
|
-
variant = 'outlined'
|
|
1019
|
-
} = props,
|
|
1020
|
-
other = _objectWithoutPropertiesLoose(props, _excluded$1);
|
|
1021
|
-
const ownerState = _extends({}, props, {
|
|
1022
|
-
autoFocus,
|
|
1023
|
-
color,
|
|
1024
|
-
disabled,
|
|
1025
|
-
error,
|
|
1026
|
-
fullWidth,
|
|
1027
|
-
multiline,
|
|
1028
|
-
required,
|
|
1029
|
-
select,
|
|
1030
|
-
variant
|
|
1031
|
-
});
|
|
1032
|
-
const classes = useUtilityClasses(ownerState);
|
|
1033
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
1034
|
-
if (select && !children) {
|
|
1035
|
-
console.error('MUI: `children` must be passed when using the `TextField` component with `select`.');
|
|
1036
|
-
}
|
|
1037
|
-
}
|
|
1038
|
-
const InputMore = {};
|
|
1039
|
-
if (variant === 'outlined') {
|
|
1040
|
-
if (InputLabelProps && typeof InputLabelProps.shrink !== 'undefined') {
|
|
1041
|
-
InputMore.notched = InputLabelProps.shrink;
|
|
1042
|
-
}
|
|
1043
|
-
InputMore.label = label;
|
|
1044
|
-
}
|
|
1045
|
-
if (select) {
|
|
1046
|
-
// unset defaults from textbox inputs
|
|
1047
|
-
if (!SelectProps || !SelectProps.native) {
|
|
1048
|
-
InputMore.id = undefined;
|
|
1049
|
-
}
|
|
1050
|
-
InputMore['aria-describedby'] = undefined;
|
|
1051
|
-
}
|
|
1052
|
-
const id = useId(idOverride);
|
|
1053
|
-
const helperTextId = helperText && id ? `${id}-helper-text` : undefined;
|
|
1054
|
-
const inputLabelId = label && id ? `${id}-label` : undefined;
|
|
1055
|
-
const InputComponent = variantComponent[variant];
|
|
1056
|
-
const InputElement = /*#__PURE__*/jsxRuntimeExports.jsx(InputComponent, _extends({
|
|
1057
|
-
"aria-describedby": helperTextId,
|
|
1058
|
-
autoComplete: autoComplete,
|
|
1059
|
-
autoFocus: autoFocus,
|
|
1060
|
-
defaultValue: defaultValue,
|
|
1061
|
-
fullWidth: fullWidth,
|
|
1062
|
-
multiline: multiline,
|
|
1063
|
-
name: name,
|
|
1064
|
-
rows: rows,
|
|
1065
|
-
maxRows: maxRows,
|
|
1066
|
-
minRows: minRows,
|
|
1067
|
-
type: type,
|
|
1068
|
-
value: value,
|
|
1069
|
-
id: id,
|
|
1070
|
-
inputRef: inputRef,
|
|
1071
|
-
onBlur: onBlur,
|
|
1072
|
-
onChange: onChange,
|
|
1073
|
-
onFocus: onFocus,
|
|
1074
|
-
onClick: onClick,
|
|
1075
|
-
placeholder: placeholder,
|
|
1076
|
-
inputProps: inputProps
|
|
1077
|
-
}, InputMore, InputProps));
|
|
1078
|
-
return /*#__PURE__*/jsxRuntimeExports.jsxs(TextFieldRoot, _extends({
|
|
1079
|
-
className: clsx(classes.root, className),
|
|
1080
|
-
disabled: disabled,
|
|
1081
|
-
error: error,
|
|
1082
|
-
fullWidth: fullWidth,
|
|
1083
|
-
ref: ref,
|
|
1084
|
-
required: required,
|
|
1085
|
-
color: color,
|
|
1086
|
-
variant: variant,
|
|
1087
|
-
ownerState: ownerState
|
|
1088
|
-
}, other, {
|
|
1089
|
-
children: [label != null && label !== '' && /*#__PURE__*/jsxRuntimeExports.jsx(InputLabel$1, _extends({
|
|
1090
|
-
htmlFor: id,
|
|
1091
|
-
id: inputLabelId
|
|
1092
|
-
}, InputLabelProps, {
|
|
1093
|
-
children: label
|
|
1094
|
-
})), select ? /*#__PURE__*/jsxRuntimeExports.jsx(Select, _extends({
|
|
1095
|
-
"aria-describedby": helperTextId,
|
|
1096
|
-
id: id,
|
|
1097
|
-
labelId: inputLabelId,
|
|
1098
|
-
value: value,
|
|
1099
|
-
input: InputElement
|
|
1100
|
-
}, SelectProps, {
|
|
1101
|
-
children: children
|
|
1102
|
-
})) : InputElement, helperText && /*#__PURE__*/jsxRuntimeExports.jsx(FormHelperText$1, _extends({
|
|
1103
|
-
id: helperTextId
|
|
1104
|
-
}, FormHelperTextProps, {
|
|
1105
|
-
children: helperText
|
|
1106
|
-
}))]
|
|
1107
|
-
}));
|
|
1108
|
-
});
|
|
1109
|
-
process.env.NODE_ENV !== "production" ? TextField.propTypes /* remove-proptypes */ = {
|
|
1110
|
-
// ----------------------------- Warning --------------------------------
|
|
1111
|
-
// | These PropTypes are generated from the TypeScript type definitions |
|
|
1112
|
-
// | To update them edit the d.ts file and run "yarn proptypes" |
|
|
1113
|
-
// ----------------------------------------------------------------------
|
|
1114
|
-
/**
|
|
1115
|
-
* This prop helps users to fill forms faster, especially on mobile devices.
|
|
1116
|
-
* The name can be confusing, as it's more like an autofill.
|
|
1117
|
-
* You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).
|
|
1118
|
-
*/
|
|
1119
|
-
autoComplete: PropTypes.string,
|
|
1120
|
-
/**
|
|
1121
|
-
* If `true`, the `input` element is focused during the first mount.
|
|
1122
|
-
* @default false
|
|
1123
|
-
*/
|
|
1124
|
-
autoFocus: PropTypes.bool,
|
|
1125
|
-
/**
|
|
1126
|
-
* @ignore
|
|
1127
|
-
*/
|
|
1128
|
-
children: PropTypes.node,
|
|
1129
|
-
/**
|
|
1130
|
-
* Override or extend the styles applied to the component.
|
|
1131
|
-
*/
|
|
1132
|
-
classes: PropTypes.object,
|
|
1133
|
-
/**
|
|
1134
|
-
* @ignore
|
|
1135
|
-
*/
|
|
1136
|
-
className: PropTypes.string,
|
|
1137
|
-
/**
|
|
1138
|
-
* The color of the component.
|
|
1139
|
-
* It supports both default and custom theme colors, which can be added as shown in the
|
|
1140
|
-
* [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).
|
|
1141
|
-
* @default 'primary'
|
|
1142
|
-
*/
|
|
1143
|
-
color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),
|
|
1144
|
-
/**
|
|
1145
|
-
* The default value. Use when the component is not controlled.
|
|
1146
|
-
*/
|
|
1147
|
-
defaultValue: PropTypes.any,
|
|
1148
|
-
/**
|
|
1149
|
-
* If `true`, the component is disabled.
|
|
1150
|
-
* @default false
|
|
1151
|
-
*/
|
|
1152
|
-
disabled: PropTypes.bool,
|
|
1153
|
-
/**
|
|
1154
|
-
* If `true`, the label is displayed in an error state.
|
|
1155
|
-
* @default false
|
|
1156
|
-
*/
|
|
1157
|
-
error: PropTypes.bool,
|
|
1158
|
-
/**
|
|
1159
|
-
* Props applied to the [`FormHelperText`](/material-ui/api/form-helper-text/) element.
|
|
1160
|
-
*/
|
|
1161
|
-
FormHelperTextProps: PropTypes.object,
|
|
1162
|
-
/**
|
|
1163
|
-
* If `true`, the input will take up the full width of its container.
|
|
1164
|
-
* @default false
|
|
1165
|
-
*/
|
|
1166
|
-
fullWidth: PropTypes.bool,
|
|
1167
|
-
/**
|
|
1168
|
-
* The helper text content.
|
|
1169
|
-
*/
|
|
1170
|
-
helperText: PropTypes.node,
|
|
1171
|
-
/**
|
|
1172
|
-
* The id of the `input` element.
|
|
1173
|
-
* Use this prop to make `label` and `helperText` accessible for screen readers.
|
|
1174
|
-
*/
|
|
1175
|
-
id: PropTypes.string,
|
|
1176
|
-
/**
|
|
1177
|
-
* Props applied to the [`InputLabel`](/material-ui/api/input-label/) element.
|
|
1178
|
-
* Pointer events like `onClick` are enabled if and only if `shrink` is `true`.
|
|
1179
|
-
*/
|
|
1180
|
-
InputLabelProps: PropTypes.object,
|
|
1181
|
-
/**
|
|
1182
|
-
* [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.
|
|
1183
|
-
*/
|
|
1184
|
-
inputProps: PropTypes.object,
|
|
1185
|
-
/**
|
|
1186
|
-
* Props applied to the Input element.
|
|
1187
|
-
* It will be a [`FilledInput`](/material-ui/api/filled-input/),
|
|
1188
|
-
* [`OutlinedInput`](/material-ui/api/outlined-input/) or [`Input`](/material-ui/api/input/)
|
|
1189
|
-
* component depending on the `variant` prop value.
|
|
1190
|
-
*/
|
|
1191
|
-
InputProps: PropTypes.object,
|
|
1192
|
-
/**
|
|
1193
|
-
* Pass a ref to the `input` element.
|
|
1194
|
-
*/
|
|
1195
|
-
inputRef: refType,
|
|
1196
|
-
/**
|
|
1197
|
-
* The label content.
|
|
1198
|
-
*/
|
|
1199
|
-
label: PropTypes.node,
|
|
1200
|
-
/**
|
|
1201
|
-
* If `dense` or `normal`, will adjust vertical spacing of this and contained components.
|
|
1202
|
-
* @default 'none'
|
|
1203
|
-
*/
|
|
1204
|
-
margin: PropTypes.oneOf(['dense', 'none', 'normal']),
|
|
1205
|
-
/**
|
|
1206
|
-
* Maximum number of rows to display when multiline option is set to true.
|
|
1207
|
-
*/
|
|
1208
|
-
maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
1209
|
-
/**
|
|
1210
|
-
* Minimum number of rows to display when multiline option is set to true.
|
|
1211
|
-
*/
|
|
1212
|
-
minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
1213
|
-
/**
|
|
1214
|
-
* If `true`, a `textarea` element is rendered instead of an input.
|
|
1215
|
-
* @default false
|
|
1216
|
-
*/
|
|
1217
|
-
multiline: PropTypes.bool,
|
|
1218
|
-
/**
|
|
1219
|
-
* Name attribute of the `input` element.
|
|
1220
|
-
*/
|
|
1221
|
-
name: PropTypes.string,
|
|
1222
|
-
/**
|
|
1223
|
-
* @ignore
|
|
1224
|
-
*/
|
|
1225
|
-
onBlur: PropTypes.func,
|
|
1226
|
-
/**
|
|
1227
|
-
* Callback fired when the value is changed.
|
|
1228
|
-
*
|
|
1229
|
-
* @param {object} event The event source of the callback.
|
|
1230
|
-
* You can pull out the new value by accessing `event.target.value` (string).
|
|
1231
|
-
*/
|
|
1232
|
-
onChange: PropTypes.func,
|
|
1233
|
-
/**
|
|
1234
|
-
* @ignore
|
|
1235
|
-
*/
|
|
1236
|
-
onClick: PropTypes.func,
|
|
1237
|
-
/**
|
|
1238
|
-
* @ignore
|
|
1239
|
-
*/
|
|
1240
|
-
onFocus: PropTypes.func,
|
|
1241
|
-
/**
|
|
1242
|
-
* The short hint displayed in the `input` before the user enters a value.
|
|
1243
|
-
*/
|
|
1244
|
-
placeholder: PropTypes.string,
|
|
1245
|
-
/**
|
|
1246
|
-
* If `true`, the label is displayed as required and the `input` element is required.
|
|
1247
|
-
* @default false
|
|
1248
|
-
*/
|
|
1249
|
-
required: PropTypes.bool,
|
|
1250
|
-
/**
|
|
1251
|
-
* Number of rows to display when multiline option is set to true.
|
|
1252
|
-
*/
|
|
1253
|
-
rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
1254
|
-
/**
|
|
1255
|
-
* Render a [`Select`](/material-ui/api/select/) element while passing the Input element to `Select` as `input` parameter.
|
|
1256
|
-
* If this option is set you must pass the options of the select as children.
|
|
1257
|
-
* @default false
|
|
1258
|
-
*/
|
|
1259
|
-
select: PropTypes.bool,
|
|
1260
|
-
/**
|
|
1261
|
-
* Props applied to the [`Select`](/material-ui/api/select/) element.
|
|
1262
|
-
*/
|
|
1263
|
-
SelectProps: PropTypes.object,
|
|
1264
|
-
/**
|
|
1265
|
-
* The size of the component.
|
|
1266
|
-
*/
|
|
1267
|
-
size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),
|
|
1268
|
-
/**
|
|
1269
|
-
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
1270
|
-
*/
|
|
1271
|
-
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
1272
|
-
/**
|
|
1273
|
-
* Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).
|
|
1274
|
-
*/
|
|
1275
|
-
type: PropTypes /* @typescript-to-proptypes-ignore */.string,
|
|
1276
|
-
/**
|
|
1277
|
-
* The value of the `input` element, required for a controlled component.
|
|
1278
|
-
*/
|
|
1279
|
-
value: PropTypes.any,
|
|
1280
|
-
/**
|
|
1281
|
-
* The variant to use.
|
|
1282
|
-
* @default 'outlined'
|
|
1283
|
-
*/
|
|
1284
|
-
variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])
|
|
1285
|
-
} : void 0;
|
|
1286
|
-
var TextField$1 = TextField;
|
|
1287
|
-
|
|
1288
|
-
const SUBMIT_FILTER_STROKE_TIME = 500;
|
|
1289
|
-
const InputNumberInterval = props => {
|
|
1290
|
-
var _item$value;
|
|
1291
|
-
const {
|
|
1292
|
-
item,
|
|
1293
|
-
applyValue,
|
|
1294
|
-
focusElementRef = null
|
|
1295
|
-
} = props;
|
|
1296
|
-
const filterTimeout = React.useRef();
|
|
1297
|
-
const [filterValueState, setFilterValueState] = React.useState((_item$value = item.value) !== null && _item$value !== void 0 ? _item$value : '');
|
|
1298
|
-
const [applying, setIsApplying] = React.useState(false);
|
|
1299
|
-
React.useEffect(() => {
|
|
1300
|
-
return () => {
|
|
1301
|
-
clearTimeout(filterTimeout.current);
|
|
1302
|
-
};
|
|
1303
|
-
}, []);
|
|
1304
|
-
React.useEffect(() => {
|
|
1305
|
-
var _item$value2;
|
|
1306
|
-
const itemValue = (_item$value2 = item.value) !== null && _item$value2 !== void 0 ? _item$value2 : [undefined, undefined];
|
|
1307
|
-
setFilterValueState(itemValue);
|
|
1308
|
-
}, [item.value]);
|
|
1309
|
-
const updateFilterValue = (lowerBound, upperBound) => {
|
|
1310
|
-
clearTimeout(filterTimeout.current);
|
|
1311
|
-
setFilterValueState([lowerBound, upperBound]);
|
|
1312
|
-
setIsApplying(true);
|
|
1313
|
-
filterTimeout.current = setTimeout(() => {
|
|
1314
|
-
setIsApplying(false);
|
|
1315
|
-
applyValue(_objectSpread2(_objectSpread2({}, item), {}, {
|
|
1316
|
-
value: [lowerBound, upperBound]
|
|
1317
|
-
}));
|
|
1318
|
-
}, SUBMIT_FILTER_STROKE_TIME);
|
|
1319
|
-
};
|
|
1320
|
-
const handleUpperFilterChange = event => {
|
|
1321
|
-
const newUpperBound = event.target.value;
|
|
1322
|
-
updateFilterValue(filterValueState[0], newUpperBound);
|
|
1323
|
-
};
|
|
1324
|
-
const handleLowerFilterChange = event => {
|
|
1325
|
-
const newLowerBound = event.target.value;
|
|
1326
|
-
updateFilterValue(newLowerBound, filterValueState[1]);
|
|
1327
|
-
};
|
|
1328
|
-
return /*#__PURE__*/React.createElement(Box$1, {
|
|
1329
|
-
sx: {
|
|
1330
|
-
display: 'inline-flex',
|
|
1331
|
-
flexDirection: 'row',
|
|
1332
|
-
alignItems: 'end',
|
|
1333
|
-
height: 48,
|
|
1334
|
-
pl: '20px'
|
|
1335
|
-
}
|
|
1336
|
-
}, /*#__PURE__*/React.createElement(TextField$1, {
|
|
1337
|
-
name: "lower-bound-input",
|
|
1338
|
-
placeholder: "From",
|
|
1339
|
-
label: "From",
|
|
1340
|
-
variant: "standard",
|
|
1341
|
-
value: Number(filterValueState[0]),
|
|
1342
|
-
onChange: handleLowerFilterChange,
|
|
1343
|
-
type: "number",
|
|
1344
|
-
inputRef: focusElementRef,
|
|
1345
|
-
sx: {
|
|
1346
|
-
mr: 2
|
|
1347
|
-
}
|
|
1348
|
-
}), /*#__PURE__*/React.createElement(TextField$1, {
|
|
1349
|
-
name: "upper-bound-input",
|
|
1350
|
-
placeholder: "To",
|
|
1351
|
-
label: "To",
|
|
1352
|
-
variant: "standard",
|
|
1353
|
-
value: Number(filterValueState[1]),
|
|
1354
|
-
onChange: handleUpperFilterChange,
|
|
1355
|
-
type: "number",
|
|
1356
|
-
InputProps: applying ? {
|
|
1357
|
-
endAdornment: /*#__PURE__*/React.createElement(Icon, {
|
|
1358
|
-
icon: mdiSync
|
|
1359
|
-
})
|
|
1360
|
-
} : {}
|
|
1361
|
-
}));
|
|
1362
|
-
};
|
|
1363
|
-
|
|
1364
|
-
const isBetweenOperator = {
|
|
1365
|
-
label: 'is between',
|
|
1366
|
-
value: 'isBetween',
|
|
1367
|
-
getApplyFilterFn: filterItem => {
|
|
1368
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1369
|
-
return null;
|
|
1370
|
-
}
|
|
1371
|
-
if (!Array.isArray(filterItem.value) || filterItem.value.length !== 2) {
|
|
1372
|
-
return null;
|
|
1373
|
-
}
|
|
1374
|
-
if (filterItem.value[0] == null || filterItem.value[1] == null) {
|
|
1375
|
-
return null;
|
|
1376
|
-
}
|
|
1377
|
-
if (typeof filterItem.value[0] !== 'number' || typeof filterItem.value[1] !== 'number') {
|
|
1378
|
-
return null;
|
|
1379
|
-
}
|
|
1380
|
-
return params => {
|
|
1381
|
-
return params.value !== null && params.value !== undefined && filterItem.value[0] <= params.value && params.value <= filterItem.value[1];
|
|
1382
|
-
};
|
|
1383
|
-
},
|
|
1384
|
-
InputComponent: InputNumberInterval
|
|
1385
|
-
};
|
|
1386
|
-
const IS_BETWEEN = isBetweenOperator;
|
|
1387
|
-
|
|
1388
|
-
const getGridNumericOperators = () => [...getGridNumericOperators$1(), IS_BETWEEN];
|
|
1389
|
-
|
|
1390
|
-
const doesNotContain = {
|
|
1391
|
-
label: 'does not contain',
|
|
1392
|
-
value: 'doesNotContain',
|
|
1393
|
-
getApplyFilterFn: filterItem => {
|
|
1394
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1395
|
-
return null;
|
|
1396
|
-
}
|
|
1397
|
-
return params => {
|
|
1398
|
-
if (filterItem.value.length === 0) {
|
|
1399
|
-
return true;
|
|
1400
|
-
}
|
|
1401
|
-
if (String(params.value).indexOf(filterItem.value) !== -1) {
|
|
1402
|
-
return false;
|
|
1403
|
-
}
|
|
1404
|
-
return true;
|
|
1405
|
-
};
|
|
1406
|
-
},
|
|
1407
|
-
InputComponent: GridFilterInputValue
|
|
1408
|
-
};
|
|
1409
|
-
const DOES_NOT_CONTAIN = doesNotContain;
|
|
1410
|
-
|
|
1411
|
-
const doesNotEqual = {
|
|
1412
|
-
label: 'does not equal',
|
|
1413
|
-
value: 'doesNotEqual',
|
|
1414
|
-
getApplyFilterFn: filterItem => {
|
|
1415
|
-
if (!filterItem.field || !filterItem.value || !filterItem.value) {
|
|
1416
|
-
return null;
|
|
1417
|
-
}
|
|
1418
|
-
return params => {
|
|
1419
|
-
if (filterItem.value.length === 0) {
|
|
1420
|
-
return true;
|
|
1421
|
-
}
|
|
1422
|
-
if (String(params.value) === filterItem.value) {
|
|
1423
|
-
return false;
|
|
1424
|
-
}
|
|
1425
|
-
return true;
|
|
1426
|
-
};
|
|
1427
|
-
},
|
|
1428
|
-
InputComponent: GridFilterInputValue
|
|
1429
|
-
};
|
|
1430
|
-
const DOES_NOT_EQUAL = doesNotEqual;
|
|
1431
|
-
|
|
1432
|
-
const doesNotHaveOperator = {
|
|
1433
|
-
label: "doesn't have",
|
|
1434
|
-
value: 'doesNotHave',
|
|
1435
|
-
getApplyFilterFn: filterItem => {
|
|
1436
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1437
|
-
return null;
|
|
1438
|
-
}
|
|
1439
|
-
return params => {
|
|
1440
|
-
const cellValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1441
|
-
return !cellValues.map(value => String(value)).includes(filterItem.value);
|
|
1442
|
-
};
|
|
1443
|
-
},
|
|
1444
|
-
InputComponent: GridFilterInputValue
|
|
1445
|
-
};
|
|
1446
|
-
const DOES_NOT_HAVE = doesNotHaveOperator;
|
|
1447
|
-
const DOES_NOT_HAVE_WITH_SELECT = _objectSpread2(_objectSpread2({}, DOES_NOT_HAVE), {}, {
|
|
1448
|
-
InputComponent: GridFilterInputSingleSelect
|
|
1449
|
-
});
|
|
1450
|
-
|
|
1451
|
-
const hasOperator = {
|
|
1452
|
-
label: 'has',
|
|
1453
|
-
value: 'has',
|
|
1454
|
-
getApplyFilterFn: filterItem => {
|
|
1455
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1456
|
-
return null;
|
|
1457
|
-
}
|
|
1458
|
-
return params => {
|
|
1459
|
-
const cellValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1460
|
-
return cellValues.map(value => String(value)).includes(filterItem.value);
|
|
1461
|
-
};
|
|
1462
|
-
},
|
|
1463
|
-
InputComponent: GridFilterInputValue
|
|
1464
|
-
};
|
|
1465
|
-
const HAS = hasOperator;
|
|
1466
|
-
const HAS_WITH_SELECT = _objectSpread2(_objectSpread2({}, HAS), {}, {
|
|
1467
|
-
InputComponent: GridFilterInputSingleSelect
|
|
1468
|
-
});
|
|
1469
|
-
|
|
1470
|
-
const hasOnlyOperator = {
|
|
1471
|
-
label: 'has only',
|
|
1472
|
-
value: 'hasOnly',
|
|
1473
|
-
getApplyFilterFn: filterItem => {
|
|
1474
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1475
|
-
return null;
|
|
1476
|
-
}
|
|
1477
|
-
return params => {
|
|
1478
|
-
const cellValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1479
|
-
return cellValues.length === 1 && String(cellValues[0]) === filterItem.value;
|
|
1480
|
-
};
|
|
1481
|
-
},
|
|
1482
|
-
InputComponent: GridFilterInputValue
|
|
1483
|
-
};
|
|
1484
|
-
const HAS_ONLY = hasOnlyOperator;
|
|
1485
|
-
const HAS_ONLY_WITH_SELECT = _objectSpread2(_objectSpread2({}, HAS_ONLY), {}, {
|
|
1486
|
-
InputComponent: GridFilterInputSingleSelect
|
|
1487
|
-
});
|
|
1488
|
-
|
|
1489
|
-
const isOperator = {
|
|
1490
|
-
label: 'is',
|
|
1491
|
-
value: 'is',
|
|
1492
|
-
getApplyFilterFn: filterItem => {
|
|
1493
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1494
|
-
return null;
|
|
1495
|
-
}
|
|
1496
|
-
return params => {
|
|
1497
|
-
if (Array.isArray(params.value)) {
|
|
1498
|
-
return false;
|
|
1499
|
-
}
|
|
1500
|
-
return String(params.value) === filterItem.value;
|
|
1501
|
-
};
|
|
1502
|
-
},
|
|
1503
|
-
InputComponent: GridFilterInputValue
|
|
1504
|
-
};
|
|
1505
|
-
const IS = isOperator;
|
|
1506
|
-
const IS_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS), {}, {
|
|
1507
|
-
InputComponent: GridFilterInputSingleSelect
|
|
1508
|
-
});
|
|
1509
|
-
|
|
1510
|
-
const isNotOperator = {
|
|
1511
|
-
label: 'is not',
|
|
1512
|
-
value: 'isNot',
|
|
1513
|
-
getApplyFilterFn: filterItem => {
|
|
1514
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1515
|
-
return null;
|
|
1516
|
-
}
|
|
1517
|
-
return params => {
|
|
1518
|
-
if (Array.isArray(params.value)) {
|
|
1519
|
-
return true;
|
|
1520
|
-
}
|
|
1521
|
-
return String(params.value) !== filterItem.value;
|
|
1522
|
-
};
|
|
1523
|
-
},
|
|
1524
|
-
InputComponent: GridFilterInputValue
|
|
1525
|
-
};
|
|
1526
|
-
const IS_NOT = isNotOperator;
|
|
1527
|
-
const IS_NOT_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS_NOT), {}, {
|
|
1528
|
-
InputComponent: GridFilterInputSingleSelect
|
|
1529
|
-
});
|
|
1530
|
-
|
|
1531
|
-
const containsAnyOfOperator = {
|
|
1532
|
-
label: 'contains any of',
|
|
1533
|
-
value: 'containsAnyOf',
|
|
1534
|
-
getApplyFilterFn: filterItem => {
|
|
1535
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1536
|
-
return null;
|
|
1537
|
-
}
|
|
1538
|
-
return params => {
|
|
1539
|
-
if (filterItem.value.length === 0) {
|
|
1540
|
-
return true;
|
|
1541
|
-
}
|
|
1542
|
-
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1543
|
-
let match = false;
|
|
1544
|
-
filterItem.value.forEach(filteredValue => {
|
|
1545
|
-
paramValues.forEach(paramValue => {
|
|
1546
|
-
if (String(paramValue).indexOf(filteredValue) !== -1) {
|
|
1547
|
-
match = true;
|
|
1548
|
-
}
|
|
1549
|
-
});
|
|
1550
|
-
});
|
|
1551
|
-
return match;
|
|
1552
|
-
};
|
|
1553
|
-
},
|
|
1554
|
-
InputComponent: GridFilterInputMultipleValue
|
|
1555
|
-
};
|
|
1556
|
-
const containsAnyOfCIOperator = {
|
|
1557
|
-
label: 'contains any of (case insensitive)',
|
|
1558
|
-
value: 'containsAnyOf',
|
|
1559
|
-
getApplyFilterFn: filterItem => {
|
|
1560
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1561
|
-
return null;
|
|
1562
|
-
}
|
|
1563
|
-
return params => {
|
|
1564
|
-
if (filterItem.value.length === 0) {
|
|
1565
|
-
return true;
|
|
1566
|
-
}
|
|
1567
|
-
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1568
|
-
const paramValuesLower = paramValues.map(item => String(item).toLowerCase());
|
|
1569
|
-
let match = false;
|
|
1570
|
-
filterItem.value.forEach(filteredValue => {
|
|
1571
|
-
if (paramValuesLower.indexOf(filteredValue.toLowerCase()) !== -1) {
|
|
1572
|
-
match = true;
|
|
1573
|
-
}
|
|
1574
|
-
});
|
|
1575
|
-
return match;
|
|
1576
|
-
};
|
|
1577
|
-
},
|
|
1578
|
-
InputComponent: GridFilterInputMultipleValue
|
|
1579
|
-
};
|
|
1580
|
-
const CONTAINS_ANY_OF = containsAnyOfOperator;
|
|
1581
|
-
const CONTAINS_ANY_OF_I = containsAnyOfCIOperator;
|
|
1582
|
-
|
|
1583
|
-
const endsWithAnyOfOperator = {
|
|
1584
|
-
label: 'ends with any of',
|
|
1585
|
-
value: 'endsWithAnyOf',
|
|
1586
|
-
getApplyFilterFn: filterItem => {
|
|
1587
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1588
|
-
return null;
|
|
1589
|
-
}
|
|
1590
|
-
return params => {
|
|
1591
|
-
if (filterItem.value.length === 0) {
|
|
1592
|
-
return true;
|
|
1593
|
-
}
|
|
1594
|
-
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1595
|
-
let match = false;
|
|
1596
|
-
filterItem.value.forEach(filteredValue => {
|
|
1597
|
-
paramValues.forEach(paramValue => {
|
|
1598
|
-
if (String(paramValue).endsWith(filteredValue)) {
|
|
1599
|
-
match = true;
|
|
1600
|
-
}
|
|
1601
|
-
});
|
|
1602
|
-
});
|
|
1603
|
-
return match;
|
|
1604
|
-
};
|
|
1605
|
-
},
|
|
1606
|
-
InputComponent: GridFilterInputMultipleValue
|
|
1607
|
-
};
|
|
1608
|
-
const ENDS_WITH_ANY_OF = endsWithAnyOfOperator;
|
|
1609
|
-
|
|
1610
|
-
const isAnyOfOperator = {
|
|
1611
|
-
label: 'is any of',
|
|
1612
|
-
value: 'isAnyOf',
|
|
1613
|
-
getApplyFilterFn: filterItem => {
|
|
1614
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1615
|
-
return null;
|
|
1616
|
-
}
|
|
1617
|
-
return params => {
|
|
1618
|
-
if (filterItem.value.length === 0) {
|
|
1619
|
-
return true;
|
|
1620
|
-
}
|
|
1621
|
-
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1622
|
-
for (const paramValue of paramValues) {
|
|
1623
|
-
if (filterItem.value.includes(String(paramValue))) {
|
|
1624
|
-
return true;
|
|
1625
|
-
}
|
|
1626
|
-
}
|
|
1627
|
-
return false;
|
|
1628
|
-
};
|
|
1629
|
-
},
|
|
1630
|
-
InputComponent: GridFilterInputMultipleValue
|
|
1631
|
-
};
|
|
1632
|
-
const IS_ANY_OF = isAnyOfOperator;
|
|
1633
|
-
const IS_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS_ANY_OF), {}, {
|
|
1634
|
-
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1635
|
-
});
|
|
1636
|
-
|
|
1637
|
-
const hasAnyOfOperator = {
|
|
1638
|
-
label: 'has any of',
|
|
1639
|
-
value: 'hasAnyOf',
|
|
1640
|
-
getApplyFilterFn: filterItem => {
|
|
1641
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1642
|
-
return null;
|
|
1643
|
-
}
|
|
1644
|
-
return params => {
|
|
1645
|
-
if (filterItem.value.length === 0) {
|
|
1646
|
-
return true;
|
|
1647
|
-
}
|
|
1648
|
-
const cellValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1649
|
-
const filterItemValues = Array.isArray(filterItem.value) ? filterItem.value : [filterItem.value];
|
|
1650
|
-
return filterItemValues.some(v => cellValues.map(value => String(value)).includes(v));
|
|
1651
|
-
};
|
|
1652
|
-
},
|
|
1653
|
-
InputComponent: GridFilterInputMultipleValue
|
|
1654
|
-
};
|
|
1655
|
-
const HAS_ANY_OF = hasAnyOfOperator;
|
|
1656
|
-
const HAS_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, HAS_ANY_OF), {}, {
|
|
1657
|
-
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1658
|
-
});
|
|
1659
|
-
|
|
1660
|
-
const isNotAnyOfOperator = {
|
|
1661
|
-
label: 'is not any of',
|
|
1662
|
-
value: 'isNotAnyOf',
|
|
1663
|
-
getApplyFilterFn: filterItem => {
|
|
1664
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1665
|
-
return null;
|
|
1666
|
-
}
|
|
1667
|
-
return params => {
|
|
1668
|
-
if (filterItem.value.length === 0) {
|
|
1669
|
-
return true;
|
|
1670
|
-
}
|
|
1671
|
-
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1672
|
-
for (const paramValue of paramValues) {
|
|
1673
|
-
if (filterItem.value.includes(String(paramValue))) {
|
|
1674
|
-
return false;
|
|
1675
|
-
}
|
|
1676
|
-
}
|
|
1677
|
-
return true;
|
|
1678
|
-
};
|
|
1679
|
-
},
|
|
1680
|
-
InputComponent: GridFilterInputMultipleValue
|
|
1681
|
-
};
|
|
1682
|
-
const IS_NOT_ANY_OF = isNotAnyOfOperator;
|
|
1683
|
-
const IS_NOT_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS_NOT_ANY_OF), {}, {
|
|
1684
|
-
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1685
|
-
});
|
|
1686
|
-
|
|
1687
|
-
const startsWithAnyOfOperator = {
|
|
1688
|
-
label: 'starts with any of',
|
|
1689
|
-
value: 'startsWithAnyOf',
|
|
1690
|
-
getApplyFilterFn: filterItem => {
|
|
1691
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1692
|
-
return null;
|
|
1693
|
-
}
|
|
1694
|
-
return params => {
|
|
1695
|
-
if (filterItem.value.length === 0) {
|
|
1696
|
-
return true;
|
|
1697
|
-
}
|
|
1698
|
-
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1699
|
-
let match = false;
|
|
1700
|
-
filterItem.value.forEach(filteredValue => {
|
|
1701
|
-
paramValues.forEach(paramValue => {
|
|
1702
|
-
if (String(paramValue).startsWith(filteredValue)) {
|
|
1703
|
-
match = true;
|
|
1704
|
-
}
|
|
1705
|
-
});
|
|
1706
|
-
});
|
|
1707
|
-
return match;
|
|
1708
|
-
};
|
|
1709
|
-
},
|
|
1710
|
-
InputComponent: GridFilterInputMultipleValue
|
|
1711
|
-
};
|
|
1712
|
-
const STARTS_WITH_ANY_OF = startsWithAnyOfOperator;
|
|
1713
|
-
|
|
1714
|
-
const doesNotHaveAnyOf = {
|
|
1715
|
-
label: "doesn't have any of",
|
|
1716
|
-
value: 'doesNotHaveAnyOf',
|
|
1717
|
-
getApplyFilterFn: filterItem => {
|
|
1718
|
-
if (!filterItem.field || !filterItem.value || !Array.isArray(filterItem.value) || filterItem.value.length === 0) {
|
|
1719
|
-
return null;
|
|
1720
|
-
}
|
|
1721
|
-
return params => {
|
|
1722
|
-
const cellValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1723
|
-
|
|
1724
|
-
// Return true only if none of the filter values are in the cell values
|
|
1725
|
-
return filterItem.value.every(filterVal => !cellValues.map(value => String(value)).includes(filterVal));
|
|
1726
|
-
};
|
|
1727
|
-
},
|
|
1728
|
-
InputComponent: GridFilterInputMultipleValue
|
|
1729
|
-
};
|
|
1730
|
-
const DOES_NOT_HAVE_ANY_OF = doesNotHaveAnyOf;
|
|
1731
|
-
const DOES_NOT_HAVE_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, DOES_NOT_HAVE_ANY_OF), {}, {
|
|
1732
|
-
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1733
|
-
});
|
|
1734
|
-
|
|
1735
|
-
const getGridStringArrayOperators = () => [CONTAINS_ANY_OF, ENDS_WITH_ANY_OF, IS_ANY_OF, IS_NOT_ANY_OF, STARTS_WITH_ANY_OF];
|
|
1736
|
-
const getGridStringArrayOperatorsWithSelect = () => [CONTAINS_ANY_OF, ENDS_WITH_ANY_OF, IS_ANY_OF_WITH_SELECT, IS_ANY_OF_WITH_SELECT, IS_NOT_WITH_SELECT, IS_WITH_SELECT, STARTS_WITH_ANY_OF];
|
|
1737
|
-
const getGridStringArrayOperatorsWithSelectOnStringArrayColumns = () => [HAS_WITH_SELECT, HAS_ANY_OF_WITH_SELECT, HAS_ONLY_WITH_SELECT, DOES_NOT_HAVE_WITH_SELECT, DOES_NOT_HAVE_ANY_OF_WITH_SELECT];
|
|
1738
|
-
|
|
1739
|
-
const getGridStringOperators = () => [...getGridStringOperators$1().filter(operator => !['isAnyOf'].includes(operator.value)), DOES_NOT_CONTAIN, DOES_NOT_EQUAL, ...getGridStringArrayOperators()];
|
|
1740
|
-
|
|
1741
|
-
// istanbul ignore file
|
|
1742
|
-
const operatorList = {
|
|
1743
|
-
// Default types
|
|
1744
|
-
string: getGridStringOperators$1(),
|
|
1745
|
-
number: getGridNumericOperators$1(),
|
|
1746
|
-
boolean: getGridBooleanOperators(),
|
|
1747
|
-
date: getGridDateOperators(),
|
|
1748
|
-
dateTime: getGridDateOperators(true),
|
|
1749
|
-
singleSelect: getGridSingleSelectOperators(),
|
|
1750
|
-
// Extended types
|
|
1751
|
-
rsString: getGridStringOperators(),
|
|
1752
|
-
rsNumber: getGridNumericOperators(),
|
|
1753
|
-
rsSingleSelect: [CONTAINS_ANY_OF, ENDS_WITH_ANY_OF, IS_ANY_OF_WITH_SELECT, IS_NOT_WITH_SELECT, IS_WITH_SELECT, STARTS_WITH_ANY_OF],
|
|
1754
|
-
rsSingleSelectWithShortOperatorList: [IS_WITH_SELECT, IS_NOT_WITH_SELECT, IS_ANY_OF_WITH_SELECT],
|
|
1755
|
-
rsMultipleSelect: [HAS_WITH_SELECT, HAS_ANY_OF_WITH_SELECT, HAS_ONLY_WITH_SELECT, DOES_NOT_HAVE_WITH_SELECT, DOES_NOT_HAVE_ANY_OF_WITH_SELECT],
|
|
1756
|
-
rsMultipleSelectWithShortOperatorList: [HAS_WITH_SELECT, DOES_NOT_HAVE_WITH_SELECT, HAS_ANY_OF_WITH_SELECT],
|
|
1757
|
-
// Custom types
|
|
1758
|
-
rsStringArray: getGridStringArrayOperators()
|
|
1759
|
-
};
|
|
1760
|
-
|
|
1761
13
|
const PAGINATION_MODEL_KEY = 'paginationModel';
|
|
1762
14
|
const FILTER_MODEL_KEY = 'filterModel';
|
|
1763
15
|
const SORT_MODEL_KEY = 'sortModel';
|
|
@@ -1896,39 +148,42 @@ const numberOperatorDecoder = {
|
|
|
1896
148
|
lt: '<',
|
|
1897
149
|
lte: '<='
|
|
1898
150
|
};
|
|
1899
|
-
const isOperatorValueValid = (
|
|
1900
|
-
const column = columns.find(column => column.field ===
|
|
151
|
+
const isOperatorValueValid = (columnField, operatorValue, columns) => {
|
|
152
|
+
const column = columns.find(column => column.field === columnField);
|
|
1901
153
|
if (!column) {
|
|
1902
154
|
return false;
|
|
1903
155
|
}
|
|
1904
156
|
const columnType = (column === null || column === void 0 ? void 0 : column.type) || 'string';
|
|
1905
|
-
const operators =
|
|
157
|
+
const operators = operatorList[columnType];
|
|
1906
158
|
if (!operators) {
|
|
1907
159
|
return false;
|
|
1908
160
|
}
|
|
1909
|
-
|
|
161
|
+
if ('filterOperators' in operators) {
|
|
162
|
+
return !!operators.filterOperators.find(op => columnType === 'number' && Object.keys(numberOperatorEncoder).includes(op.value) ? numberOperatorEncoder[op.value] === operatorValue : op['value'] === operatorValue);
|
|
163
|
+
}
|
|
164
|
+
return !!operators.find(op => ['number', 'rsNumber'].includes(columnType) && Object.keys(numberOperatorEncoder).includes(op.value) ? numberOperatorEncoder[op.value] === operatorValue : op['value'] === operatorValue);
|
|
1910
165
|
};
|
|
1911
166
|
const listOperators = ['containsAnyOf', 'doesNotContainAnyOf', 'endsWithAnyOf', 'doesNotEndWithAnyOf', 'hasAnyOf', 'doesNotHaveAnyOf', 'isAnyOf', 'isNotAnyOf', 'startsWithAnyOf', 'doesNotStartWithAnyOf'];
|
|
1912
167
|
|
|
1913
168
|
// Check if the value doesn't break
|
|
1914
|
-
const isValueValid = (value,
|
|
169
|
+
const isValueValid = (value, columnField, columns, operatorValue) => {
|
|
1915
170
|
var _column$type;
|
|
1916
171
|
// every field accepts undefined as value for default
|
|
1917
172
|
if (value === undefined || value === '') {
|
|
1918
173
|
return true;
|
|
1919
174
|
}
|
|
1920
175
|
|
|
1921
|
-
// xxxAnyOf accepts as value only lists, and we are
|
|
176
|
+
// xxxAnyOf accepts as value only lists, and we are declearing them in the
|
|
1922
177
|
// URL as `list=[...]`
|
|
1923
|
-
if (listOperators.includes(
|
|
178
|
+
if (listOperators.includes(operatorValue)) {
|
|
1924
179
|
return Array.isArray(value) || value === '';
|
|
1925
180
|
}
|
|
1926
181
|
|
|
1927
182
|
// We are accepting arrays only if they are of the 'xxxAnyOf' type
|
|
1928
|
-
if (Array.isArray(value) && !listOperators.includes(
|
|
183
|
+
if (Array.isArray(value) && !listOperators.includes(operatorValue)) {
|
|
1929
184
|
return false;
|
|
1930
185
|
}
|
|
1931
|
-
const column = columns.find(column => column.field ===
|
|
186
|
+
const column = columns.find(column => column.field === columnField);
|
|
1932
187
|
if (!column) {
|
|
1933
188
|
return false;
|
|
1934
189
|
}
|
|
@@ -1966,7 +221,7 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
1966
221
|
if (!searchString) {
|
|
1967
222
|
return 'invalid';
|
|
1968
223
|
}
|
|
1969
|
-
let
|
|
224
|
+
let linkOperator = GridLinkOperator.And;
|
|
1970
225
|
let quickFilterValues = [];
|
|
1971
226
|
const searchParams = new URLSearchParams();
|
|
1972
227
|
for (const [key, value] of new URLSearchParams(searchString)) {
|
|
@@ -1974,7 +229,7 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
1974
229
|
searchParams.set(key, value);
|
|
1975
230
|
}
|
|
1976
231
|
if (key === '_logicOperator') {
|
|
1977
|
-
|
|
232
|
+
linkOperator = value;
|
|
1978
233
|
}
|
|
1979
234
|
if (key === '_quickFilterValues') {
|
|
1980
235
|
try {
|
|
@@ -1993,7 +248,7 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
1993
248
|
if (isInvalid) {
|
|
1994
249
|
return;
|
|
1995
250
|
}
|
|
1996
|
-
const field = key.split('[')[0].slice(1);
|
|
251
|
+
const field = key.split('[')[0].slice(1); // Slice to remove the _ at the beginning
|
|
1997
252
|
if (!fields.includes(field)) {
|
|
1998
253
|
return;
|
|
1999
254
|
}
|
|
@@ -2010,6 +265,7 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
2010
265
|
return;
|
|
2011
266
|
}
|
|
2012
267
|
const operator = splitRight[0];
|
|
268
|
+
// if the operator is not part of the valid operators invalidate the URL
|
|
2013
269
|
if (!isOperatorValueValid(field, operator, columns) || Array.isArray(operator)) {
|
|
2014
270
|
isInvalid = true;
|
|
2015
271
|
return;
|
|
@@ -2021,37 +277,41 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
2021
277
|
return;
|
|
2022
278
|
}
|
|
2023
279
|
items.push({
|
|
2024
|
-
field,
|
|
2025
|
-
|
|
280
|
+
columnField: field,
|
|
281
|
+
operatorValue: ['number', 'rsNumber'].includes(columnType) && Object.keys(numberOperatorDecoder).includes(operator) ? numberOperatorDecoder[operator] : operator,
|
|
2026
282
|
id,
|
|
2027
283
|
value: listOperators.includes(operator) && decodedValue === '' ? [] : decodedValue,
|
|
2028
284
|
type
|
|
2029
285
|
});
|
|
2030
286
|
});
|
|
287
|
+
|
|
288
|
+
// If we found some condition that results in an invalid URL,
|
|
289
|
+
// return the empty filterModel (this will trigger the localStorage)
|
|
290
|
+
// and will pick up the last valid search
|
|
2031
291
|
if (isInvalid) {
|
|
2032
292
|
return 'invalid';
|
|
2033
293
|
}
|
|
2034
294
|
return {
|
|
2035
295
|
items,
|
|
2036
|
-
|
|
296
|
+
linkOperator,
|
|
2037
297
|
quickFilterValues
|
|
2038
298
|
};
|
|
2039
299
|
};
|
|
2040
300
|
const getSearchParamsFromFilterModel = filterModel => {
|
|
2041
301
|
var _filterModel$quickFil;
|
|
2042
302
|
const searchParams = new URLSearchParams();
|
|
2043
|
-
searchParams.set('_logicOperator', filterModel['
|
|
303
|
+
searchParams.set('_logicOperator', filterModel['linkOperator'] || '');
|
|
2044
304
|
filterModel['items'].forEach(item => {
|
|
2045
305
|
const {
|
|
2046
|
-
|
|
2047
|
-
|
|
306
|
+
columnField,
|
|
307
|
+
operatorValue,
|
|
2048
308
|
value,
|
|
2049
309
|
type
|
|
2050
310
|
} = item;
|
|
2051
|
-
if (Object.keys(numberOperatorEncoder).includes(
|
|
2052
|
-
searchParams.set(`_${
|
|
311
|
+
if (Object.keys(numberOperatorEncoder).includes(operatorValue)) {
|
|
312
|
+
searchParams.set(`_${columnField}[${numberOperatorEncoder[operatorValue]},${encodeValue(type)}]`, encodeValue(value));
|
|
2053
313
|
} else {
|
|
2054
|
-
searchParams.set(`_${
|
|
314
|
+
searchParams.set(`_${columnField}[${encodeValue(operatorValue)},${encodeValue(type)}]`, encodeValue(value));
|
|
2055
315
|
}
|
|
2056
316
|
});
|
|
2057
317
|
if ((_filterModel$quickFil = filterModel.quickFilterValues) !== null && _filterModel$quickFil !== void 0 && _filterModel$quickFil.length) {
|
|
@@ -2067,7 +327,7 @@ const getSearchParamsFromFilterModel = filterModel => {
|
|
|
2067
327
|
const getFilterModel = (search, columns, localStorageFilters, setLocalStorageFilters, initialState, isNewVersion) => {
|
|
2068
328
|
const defaultValue = initialState && initialState.filter && initialState.filter.filterModel ? initialState.filter.filterModel : {
|
|
2069
329
|
items: [],
|
|
2070
|
-
|
|
330
|
+
linkOperator: GridLinkOperator.And
|
|
2071
331
|
};
|
|
2072
332
|
if (isNewVersion) {
|
|
2073
333
|
return defaultValue;
|
|
@@ -2206,38 +466,13 @@ const getPaginationModel = (search, localStoragePagination, setLocalStoragePagin
|
|
|
2206
466
|
|
|
2207
467
|
/** COLUMN VISIBILITY */
|
|
2208
468
|
|
|
2209
|
-
const getColumnVisibilityFromString = (searchString, columns) => {
|
|
2210
|
-
if (!searchString) {
|
|
2211
|
-
return 'invalid';
|
|
2212
|
-
}
|
|
2213
|
-
const searchParams = new URLSearchParams(searchString);
|
|
2214
|
-
const value = searchParams.get('_columnVisibility');
|
|
2215
|
-
if (value === '' || value === null || value === '[]') {
|
|
2216
|
-
return 'invalid';
|
|
2217
|
-
}
|
|
2218
|
-
const parsedFields = value.slice(1, value.length - 1).split(',');
|
|
2219
|
-
const fields = columns.map(column => column.field);
|
|
2220
|
-
const visibility = {};
|
|
2221
|
-
for (const field of fields) {
|
|
2222
|
-
visibility[field] = false;
|
|
2223
|
-
}
|
|
2224
|
-
for (const parsedField of parsedFields) {
|
|
2225
|
-
if (fields.includes(parsedField)) {
|
|
2226
|
-
visibility[parsedField] = true;
|
|
2227
|
-
}
|
|
2228
|
-
}
|
|
2229
|
-
if (Object.values(visibility).filter(v => v === true).length === 0) {
|
|
2230
|
-
return 'invalid';
|
|
2231
|
-
}
|
|
2232
|
-
return visibility;
|
|
2233
|
-
};
|
|
2234
469
|
const getSearchParamsFromColumnVisibility = (columnVisibility, columns) => {
|
|
2235
470
|
const searchParams = new URLSearchParams();
|
|
2236
|
-
const
|
|
471
|
+
const columnFields = columns.map(column => column.field);
|
|
2237
472
|
|
|
2238
473
|
// if column visibility model is empty, show all columns
|
|
2239
474
|
if (Object.keys(columnVisibility).length == 0) {
|
|
2240
|
-
searchParams.set('_columnVisibility', `[${
|
|
475
|
+
searchParams.set('_columnVisibility', `[${columnFields.join(',')}]`);
|
|
2241
476
|
return searchParams;
|
|
2242
477
|
}
|
|
2243
478
|
const finalColumnVisibility = columns.filter(c => {
|
|
@@ -2248,10 +483,63 @@ const getSearchParamsFromColumnVisibility = (columnVisibility, columns) => {
|
|
|
2248
483
|
[colName]: true
|
|
2249
484
|
});
|
|
2250
485
|
}, columnVisibility);
|
|
2251
|
-
const visibleColumns =
|
|
486
|
+
const visibleColumns = Object.entries(finalColumnVisibility)
|
|
487
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
488
|
+
.filter(_ref => {
|
|
489
|
+
let [_, visible] = _ref;
|
|
490
|
+
return visible;
|
|
491
|
+
})
|
|
492
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
493
|
+
.map(_ref2 => {
|
|
494
|
+
let [column, _] = _ref2;
|
|
495
|
+
return encodeValue(column);
|
|
496
|
+
});
|
|
2252
497
|
searchParams.set('_columnVisibility', `[${visibleColumns.join(',')}]`);
|
|
2253
498
|
return searchParams;
|
|
2254
499
|
};
|
|
500
|
+
const getColumnVisibilityFromString = (notParsed, tableColumns) => {
|
|
501
|
+
if (!notParsed || notParsed.length === 1 && notParsed[0] === '?') {
|
|
502
|
+
return 'invalid';
|
|
503
|
+
}
|
|
504
|
+
// remove the initial ? if present
|
|
505
|
+
const parsed = notParsed[0] === '?' ? notParsed.slice(1) : notParsed;
|
|
506
|
+
const visibility = {};
|
|
507
|
+
let exist = false;
|
|
508
|
+
let visibleColumnsCount = 0;
|
|
509
|
+
for (const item of parsed.split('&')) {
|
|
510
|
+
// if it's not column visibility field, skip
|
|
511
|
+
const fieldURL = item.split('=')[0];
|
|
512
|
+
if (fieldURL !== '_columnVisibility') {
|
|
513
|
+
continue;
|
|
514
|
+
}
|
|
515
|
+
// e.g. item = _columnVisibility[abc,def]
|
|
516
|
+
const left = item.split(']')[0];
|
|
517
|
+
if (left.split('[').length < 2) {
|
|
518
|
+
continue;
|
|
519
|
+
}
|
|
520
|
+
const encodedValues = item.split('[')[1].split(']')[0];
|
|
521
|
+
if (typeof encodedValues !== 'string') {
|
|
522
|
+
continue;
|
|
523
|
+
}
|
|
524
|
+
exist = true;
|
|
525
|
+
const columnFields = tableColumns.map(column => column.field);
|
|
526
|
+
// TODO: Add validation that , is present
|
|
527
|
+
const columns = encodedValues.split(',').map(value => decodeValue(value));
|
|
528
|
+
|
|
529
|
+
// for each column, check if it's visible and add it to visibility model
|
|
530
|
+
for (const column of columnFields) {
|
|
531
|
+
const isColumnVisible = columns.includes(column);
|
|
532
|
+
visibility[column] = isColumnVisible;
|
|
533
|
+
if (isColumnVisible) {
|
|
534
|
+
visibleColumnsCount += 1;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
if (visibleColumnsCount === 0 && !exist) {
|
|
539
|
+
return 'invalid';
|
|
540
|
+
}
|
|
541
|
+
return visibility;
|
|
542
|
+
};
|
|
2255
543
|
|
|
2256
544
|
// Rules:
|
|
2257
545
|
// - if we have something in the URL, use that info
|
|
@@ -2312,8 +600,8 @@ const getPinnedColumnsFromString = (notParsed, tableColumns) => {
|
|
|
2312
600
|
if (typeof encodedValues !== 'string') {
|
|
2313
601
|
continue;
|
|
2314
602
|
}
|
|
2315
|
-
const
|
|
2316
|
-
const columns = encodedValues.split(',').map(value => decodeValue(value)).filter(val => typeof val === 'string' &&
|
|
603
|
+
const columnFields = [...tableColumns.map(column => column.field), '__check__'];
|
|
604
|
+
const columns = encodedValues.split(',').map(value => decodeValue(value)).filter(val => typeof val === 'string' && columnFields.includes(val));
|
|
2317
605
|
if (fieldURL === '_pinnedColumnsLeft') {
|
|
2318
606
|
pinnedColumns['left'] = columns;
|
|
2319
607
|
}
|
|
@@ -2321,9 +609,9 @@ const getPinnedColumnsFromString = (notParsed, tableColumns) => {
|
|
|
2321
609
|
pinnedColumns['right'] = columns;
|
|
2322
610
|
}
|
|
2323
611
|
}
|
|
2324
|
-
return pinnedColumns
|
|
2325
|
-
left: pinnedColumns
|
|
2326
|
-
right: pinnedColumns
|
|
612
|
+
return pinnedColumns['left'] || pinnedColumns['right'] ? {
|
|
613
|
+
left: pinnedColumns['left'] || [],
|
|
614
|
+
right: pinnedColumns['right'] || []
|
|
2327
615
|
} : 'invalid';
|
|
2328
616
|
};
|
|
2329
617
|
const getSearchParamsFromPinnedColumns = pinnedColumns => {
|
|
@@ -2373,7 +661,7 @@ const getSearchParamsFromTab = search => {
|
|
|
2373
661
|
}
|
|
2374
662
|
return searchParams;
|
|
2375
663
|
};
|
|
2376
|
-
const getFinalSearch =
|
|
664
|
+
const getFinalSearch = _ref3 => {
|
|
2377
665
|
let {
|
|
2378
666
|
search,
|
|
2379
667
|
localStorageVersion,
|
|
@@ -2383,7 +671,7 @@ const getFinalSearch = _ref => {
|
|
|
2383
671
|
columnsVisibilityModel,
|
|
2384
672
|
pinnedColumnsModel,
|
|
2385
673
|
columns
|
|
2386
|
-
} =
|
|
674
|
+
} = _ref3;
|
|
2387
675
|
const filterModelSearch = getSearchParamsFromFilterModel(filterModel);
|
|
2388
676
|
const sortModelSearch = getSearchParamsFromSorting(sortModel);
|
|
2389
677
|
const paginationModelSearch = getSearchParamsFromPagination(paginationModel);
|
|
@@ -2448,14 +736,14 @@ const getModelsParsedOrUpdateLocalStorage = (search, localStorageVersion, column
|
|
|
2448
736
|
pinnedColumnsModel
|
|
2449
737
|
};
|
|
2450
738
|
};
|
|
2451
|
-
const updateUrl = (
|
|
739
|
+
const updateUrl = (_ref4, search, localStorageVersion, historyReplace, columns) => {
|
|
2452
740
|
let {
|
|
2453
741
|
filterModel,
|
|
2454
742
|
sortModel,
|
|
2455
743
|
paginationModel,
|
|
2456
744
|
columnsModel: columnsVisibilityModel,
|
|
2457
745
|
pinnedColumnsModel
|
|
2458
|
-
} =
|
|
746
|
+
} = _ref4;
|
|
2459
747
|
const newSearch = getFinalSearch({
|
|
2460
748
|
search,
|
|
2461
749
|
localStorageVersion,
|
|
@@ -2476,17 +764,17 @@ const updateUrl = (_ref2, search, localStorageVersion, historyReplace, columns)
|
|
|
2476
764
|
// do not use it for equivalence (e.g. with value `3` and undefined we
|
|
2477
765
|
// will get 0).
|
|
2478
766
|
const compareFilters = (firstFilter, secondFilter) => {
|
|
2479
|
-
if (firstFilter.
|
|
767
|
+
if (firstFilter.columnField < secondFilter.columnField) {
|
|
2480
768
|
return -1;
|
|
2481
|
-
} else if (firstFilter.
|
|
769
|
+
} else if (firstFilter.columnField > secondFilter.columnField) {
|
|
2482
770
|
return 1;
|
|
2483
771
|
}
|
|
2484
|
-
if (firstFilter.
|
|
772
|
+
if (firstFilter.operatorValue === undefined || secondFilter.operatorValue === undefined) {
|
|
2485
773
|
return 0;
|
|
2486
774
|
}
|
|
2487
|
-
if (firstFilter.
|
|
775
|
+
if (firstFilter.operatorValue < secondFilter.operatorValue) {
|
|
2488
776
|
return -1;
|
|
2489
|
-
} else if (firstFilter.
|
|
777
|
+
} else if (firstFilter.operatorValue > secondFilter.operatorValue) {
|
|
2490
778
|
return 1;
|
|
2491
779
|
}
|
|
2492
780
|
if (firstFilter.value < secondFilter.value) {
|
|
@@ -2497,18 +785,18 @@ const compareFilters = (firstFilter, secondFilter) => {
|
|
|
2497
785
|
return 0;
|
|
2498
786
|
};
|
|
2499
787
|
const areFiltersEquivalent = (firstFilter, secondFilter) => {
|
|
2500
|
-
return firstFilter.
|
|
788
|
+
return firstFilter.columnField === secondFilter.columnField && firstFilter.operatorValue === secondFilter.operatorValue && firstFilter.value === secondFilter.value;
|
|
2501
789
|
};
|
|
2502
790
|
const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
|
|
2503
791
|
const {
|
|
2504
792
|
items,
|
|
2505
|
-
|
|
793
|
+
linkOperator
|
|
2506
794
|
} = filterModel;
|
|
2507
795
|
const {
|
|
2508
796
|
items: itemsToMatch,
|
|
2509
|
-
|
|
797
|
+
linkOperator: linkOperatorToMatch
|
|
2510
798
|
} = filterModelToMatch;
|
|
2511
|
-
if (
|
|
799
|
+
if (linkOperator !== linkOperatorToMatch) {
|
|
2512
800
|
return false;
|
|
2513
801
|
}
|
|
2514
802
|
if (items.length !== itemsToMatch.length) {
|
|
@@ -2521,7 +809,7 @@ const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
|
|
|
2521
809
|
const filterToCompare = itemsToMatch[i];
|
|
2522
810
|
|
|
2523
811
|
// compareFilters return 0 if and only if the filters have the same
|
|
2524
|
-
//
|
|
812
|
+
// columnField, operatorValue, and value
|
|
2525
813
|
if (!areFiltersEquivalent(filter, filterToCompare)) {
|
|
2526
814
|
return false;
|
|
2527
815
|
}
|
|
@@ -2530,6 +818,8 @@ const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
|
|
|
2530
818
|
};
|
|
2531
819
|
|
|
2532
820
|
// Get and Set data from LocalStorage WITHOUT useState
|
|
821
|
+
|
|
822
|
+
// triggering a state update and consecutive re-render
|
|
2533
823
|
const useFetchState = (defaultValue, key) => {
|
|
2534
824
|
let stickyValue = null;
|
|
2535
825
|
try {
|
|
@@ -2537,7 +827,16 @@ const useFetchState = (defaultValue, key) => {
|
|
|
2537
827
|
} catch (e) {
|
|
2538
828
|
console.error('StatefulDataGrid: error getting item from local storage: ', e);
|
|
2539
829
|
}
|
|
2540
|
-
|
|
830
|
+
let parsedValue = stickyValue !== null && stickyValue !== undefined && stickyValue !== 'undefined' ? JSON.parse(stickyValue) : defaultValue;
|
|
831
|
+
|
|
832
|
+
// TODO: temporary workaround to avoid clashes when someone had sorting on the now-removed screenshot field (renamed to num_annotations)
|
|
833
|
+
// Consider upgrading the Datagrid component library as the exception handling was added in this PR: https://github.com/mui-org/material-ui-x/pull/3224
|
|
834
|
+
if (parsedValue instanceof Array) {
|
|
835
|
+
const fields = (parsedValue || []).map(item => item.field);
|
|
836
|
+
if (fields.includes('screenshot') || fields.includes('diffs')) {
|
|
837
|
+
parsedValue = defaultValue;
|
|
838
|
+
}
|
|
839
|
+
}
|
|
2541
840
|
const updateValue = useCallback(value => {
|
|
2542
841
|
try {
|
|
2543
842
|
window.localStorage.setItem(key, JSON.stringify(value));
|
|
@@ -2548,8 +847,6 @@ const useFetchState = (defaultValue, key) => {
|
|
|
2548
847
|
return [parsedValue, updateValue];
|
|
2549
848
|
};
|
|
2550
849
|
|
|
2551
|
-
// import useLocalStorage from './useLocalStorage';
|
|
2552
|
-
|
|
2553
850
|
const useTableStates = (id, version) => {
|
|
2554
851
|
const [paginationModel, setPaginationModel] = useFetchState('', buildStorageKey({
|
|
2555
852
|
id,
|
|
@@ -2606,7 +903,8 @@ const useStatefulTable = props => {
|
|
|
2606
903
|
onColumnVisibilityModelChange: propsOnColumnVisibilityModelChange,
|
|
2607
904
|
onColumnWidthChange: propsOnColumnWidthChange,
|
|
2608
905
|
onFilterModelChange: propsOnFilterModelChange,
|
|
2609
|
-
|
|
906
|
+
onPageChange: propsOnPageChange,
|
|
907
|
+
onPageSizeChange: propsOnPageSizeChange,
|
|
2610
908
|
onPinnedColumnsChange: propsOnPinnedColumnsChange,
|
|
2611
909
|
onSortModelChange: propsOnSortModelChange,
|
|
2612
910
|
useRouter,
|
|
@@ -2636,7 +934,7 @@ const useStatefulTable = props => {
|
|
|
2636
934
|
setDimensionModel
|
|
2637
935
|
} = useTableStates(id, localStorageVersion);
|
|
2638
936
|
|
|
2639
|
-
// clearing up old version keys
|
|
937
|
+
// clearing up old version keys
|
|
2640
938
|
useEffect(() => clearPreviousVersionStorage(id, previousLocalStorageVersions), [id, previousLocalStorageVersions]);
|
|
2641
939
|
const onColumnDimensionChange = useCallback(_ref => {
|
|
2642
940
|
let {
|
|
@@ -2669,6 +967,7 @@ const useStatefulTable = props => {
|
|
|
2669
967
|
column.width = dimensionModel[column.field] || column.width || 100;
|
|
2670
968
|
return column;
|
|
2671
969
|
}), [propsColumns, dimensionModel]);
|
|
970
|
+
|
|
2672
971
|
/** Add resetPage method to apiRef. */
|
|
2673
972
|
apiRef.current.resetPage = () => {
|
|
2674
973
|
apiRef.current.setPage(0);
|
|
@@ -2679,7 +978,7 @@ const useStatefulTable = props => {
|
|
|
2679
978
|
onFilterModelChange: (model, details) => {
|
|
2680
979
|
const filterModel = _objectSpread2(_objectSpread2({}, model), {}, {
|
|
2681
980
|
items: model.items.map(item => {
|
|
2682
|
-
const column = apiRef.current.getColumn(item.
|
|
981
|
+
const column = apiRef.current.getColumn(item.columnField);
|
|
2683
982
|
item.type = column.type || 'string';
|
|
2684
983
|
return item;
|
|
2685
984
|
}),
|
|
@@ -2717,16 +1016,33 @@ const useStatefulTable = props => {
|
|
|
2717
1016
|
}, search, localStorageVersion, historyReplace, columns);
|
|
2718
1017
|
},
|
|
2719
1018
|
pinnedColumns: pinnedColumnsModel,
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
|
|
2725
|
-
propsOnPaginationModelChange === null || propsOnPaginationModelChange === void 0 ? void 0 : propsOnPaginationModelChange(paginationModel, details);
|
|
1019
|
+
page: paginationModelParsed.page,
|
|
1020
|
+
pageSize: paginationModelParsed.pageSize,
|
|
1021
|
+
onPageChange: (page, details) => {
|
|
1022
|
+
const direction = paginationModelParsed.page < page ? 'next' : 'back';
|
|
1023
|
+
propsOnPageChange === null || propsOnPageChange === void 0 ? void 0 : propsOnPageChange(page, details);
|
|
2726
1024
|
updateUrl({
|
|
2727
1025
|
filterModel: filterParsed,
|
|
2728
1026
|
sortModel: sortModelParsed,
|
|
2729
|
-
paginationModel:
|
|
1027
|
+
paginationModel: {
|
|
1028
|
+
page,
|
|
1029
|
+
pageSize: paginationModelParsed.pageSize,
|
|
1030
|
+
direction
|
|
1031
|
+
},
|
|
1032
|
+
columnsModel: apiRef.current.state.columns.columnVisibilityModel,
|
|
1033
|
+
pinnedColumnsModel: pinnedColumnsModel
|
|
1034
|
+
}, search, localStorageVersion, historyReplace, columns);
|
|
1035
|
+
},
|
|
1036
|
+
onPageSizeChange: (pageSize, details) => {
|
|
1037
|
+
propsOnPageSizeChange === null || propsOnPageSizeChange === void 0 ? void 0 : propsOnPageSizeChange(pageSize, details);
|
|
1038
|
+
updateUrl({
|
|
1039
|
+
filterModel: filterParsed,
|
|
1040
|
+
sortModel: sortModelParsed,
|
|
1041
|
+
paginationModel: {
|
|
1042
|
+
page: paginationModelParsed.page,
|
|
1043
|
+
pageSize,
|
|
1044
|
+
direction: paginationModelParsed.direction
|
|
1045
|
+
},
|
|
2730
1046
|
columnsModel: apiRef.current.state.columns.columnVisibilityModel,
|
|
2731
1047
|
pinnedColumnsModel: pinnedColumnsModel
|
|
2732
1048
|
}, search, localStorageVersion, historyReplace, columns);
|
|
@@ -2752,7 +1068,7 @@ const useStatefulTable = props => {
|
|
|
2752
1068
|
};
|
|
2753
1069
|
};
|
|
2754
1070
|
|
|
2755
|
-
const _excluded = ["apiRef", "autoHeight", "className", "columns", "
|
|
1071
|
+
const _excluded = ["apiRef", "autoHeight", "className", "columns", "columnTypes", "components", "componentsProps", "filterModel", "columnVisibilityModel", "pinnedColumns", "sortModel", "page", "pageSize", "height", "hideToolbar", "initialState", "isRowSelectable", "license", "localStorageVersion", "previousLocalStorageVersions", "onFilterModelChange", "selectionModel", "onColumnWidthChange", "onPageChange", "onPageSizeChange", "onSelectionModelChange", "onColumnVisibilityModelChange", "onPinnedColumnsChange", "onSortModelChange", "pagination", "paginationPlacement", "paginationProps", "rows", "rowsPerPageOptions", "sx", "theme", "useRouter", "paginationMode", "rowCount"];
|
|
2756
1072
|
const COMPONENT_NAME = 'DataGrid';
|
|
2757
1073
|
const CLASSNAME = 'redsift-datagrid';
|
|
2758
1074
|
const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
@@ -2762,13 +1078,15 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
2762
1078
|
autoHeight,
|
|
2763
1079
|
className,
|
|
2764
1080
|
columns,
|
|
2765
|
-
|
|
2766
|
-
|
|
1081
|
+
columnTypes: propsColumnTypes,
|
|
1082
|
+
components,
|
|
1083
|
+
componentsProps,
|
|
2767
1084
|
filterModel: propsFilterModel,
|
|
2768
1085
|
columnVisibilityModel: propsColumnVisibilityModel,
|
|
2769
1086
|
pinnedColumns: propsPinnedColumns,
|
|
2770
1087
|
sortModel: propsSortModel,
|
|
2771
|
-
|
|
1088
|
+
page: propsPage,
|
|
1089
|
+
pageSize: propsPageSize,
|
|
2772
1090
|
height: propsHeight,
|
|
2773
1091
|
hideToolbar,
|
|
2774
1092
|
initialState,
|
|
@@ -2777,10 +1095,11 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
2777
1095
|
localStorageVersion,
|
|
2778
1096
|
previousLocalStorageVersions,
|
|
2779
1097
|
onFilterModelChange: propsOnFilterModelChange,
|
|
2780
|
-
|
|
1098
|
+
selectionModel: propsSelectionModel,
|
|
2781
1099
|
onColumnWidthChange: propsOnColumnWidthChange,
|
|
2782
|
-
|
|
2783
|
-
|
|
1100
|
+
onPageChange: propsOnPageChange,
|
|
1101
|
+
onPageSizeChange: propsOnPageSizeChange,
|
|
1102
|
+
onSelectionModelChange: propsOnSelectionModelChange,
|
|
2784
1103
|
onColumnVisibilityModelChange: propsOnColumnVisibilityModelChange,
|
|
2785
1104
|
onPinnedColumnsChange: propsOnPinnedColumnsChange,
|
|
2786
1105
|
onSortModelChange: propsOnSortModelChange,
|
|
@@ -2788,7 +1107,7 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
2788
1107
|
paginationPlacement = 'both',
|
|
2789
1108
|
paginationProps,
|
|
2790
1109
|
rows,
|
|
2791
|
-
|
|
1110
|
+
rowsPerPageOptions,
|
|
2792
1111
|
sx,
|
|
2793
1112
|
theme: propsTheme,
|
|
2794
1113
|
useRouter,
|
|
@@ -2796,41 +1115,46 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
2796
1115
|
rowCount
|
|
2797
1116
|
} = props,
|
|
2798
1117
|
forwardedProps = _objectWithoutProperties(props, _excluded);
|
|
2799
|
-
const theme = useTheme
|
|
1118
|
+
const theme = useTheme(propsTheme);
|
|
2800
1119
|
const _apiRef = useGridApiRef();
|
|
2801
1120
|
const apiRef = propsApiRef !== null && propsApiRef !== void 0 ? propsApiRef : _apiRef;
|
|
2802
|
-
const RenderedToolbar =
|
|
1121
|
+
const RenderedToolbar = components !== null && components !== void 0 && components.Toolbar ? components.Toolbar : Toolbar;
|
|
2803
1122
|
LicenseInfo.setLicenseKey(license);
|
|
2804
1123
|
const height = propsHeight !== null && propsHeight !== void 0 ? propsHeight : autoHeight ? undefined : '500px';
|
|
2805
1124
|
const {
|
|
2806
1125
|
onColumnVisibilityModelChange: controlledOnColumnVisibilityModelChange,
|
|
2807
1126
|
onFilterModelChange: controlledOnFilterModelChange,
|
|
2808
|
-
|
|
1127
|
+
onPageChange: controlledOnPageChange,
|
|
1128
|
+
onPageSizeChange: controlledOnPageSizeChange,
|
|
2809
1129
|
onPinnedColumnsChange: controlledOnPinnedColumnsChange,
|
|
2810
1130
|
onSortModelChange: controlledOnSortModelChange
|
|
2811
1131
|
} = useControlledDatagridState({
|
|
2812
1132
|
initialState,
|
|
2813
|
-
|
|
1133
|
+
rowsPerPageOptions,
|
|
2814
1134
|
propsColumnVisibilityModel,
|
|
2815
1135
|
propsFilterModel,
|
|
2816
1136
|
propsOnColumnVisibilityModelChange,
|
|
2817
1137
|
propsOnFilterModelChange,
|
|
2818
1138
|
propsOnPinnedColumnsChange,
|
|
2819
1139
|
propsOnSortModelChange,
|
|
2820
|
-
|
|
1140
|
+
propsPage,
|
|
1141
|
+
propsPageSize,
|
|
2821
1142
|
propsPinnedColumns,
|
|
2822
1143
|
propsSortModel,
|
|
2823
|
-
|
|
1144
|
+
propsOnPageChange,
|
|
1145
|
+
propsOnPageSizeChange
|
|
2824
1146
|
});
|
|
2825
1147
|
const {
|
|
2826
1148
|
columnVisibilityModel,
|
|
2827
1149
|
filterModel,
|
|
2828
1150
|
onColumnVisibilityModelChange,
|
|
2829
1151
|
onFilterModelChange,
|
|
2830
|
-
|
|
1152
|
+
onPageChange,
|
|
1153
|
+
onPageSizeChange,
|
|
2831
1154
|
onPinnedColumnsChange,
|
|
2832
1155
|
onSortModelChange,
|
|
2833
|
-
|
|
1156
|
+
page,
|
|
1157
|
+
pageSize,
|
|
2834
1158
|
pinnedColumns,
|
|
2835
1159
|
sortModel,
|
|
2836
1160
|
onColumnWidthChange
|
|
@@ -2841,39 +1165,40 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
2841
1165
|
onColumnVisibilityModelChange: controlledOnColumnVisibilityModelChange,
|
|
2842
1166
|
onColumnWidthChange: propsOnColumnWidthChange,
|
|
2843
1167
|
onFilterModelChange: controlledOnFilterModelChange,
|
|
2844
|
-
|
|
1168
|
+
onPageChange: controlledOnPageChange,
|
|
1169
|
+
onPageSizeChange: controlledOnPageSizeChange,
|
|
2845
1170
|
onPinnedColumnsChange: controlledOnPinnedColumnsChange,
|
|
2846
1171
|
onSortModelChange: controlledOnSortModelChange,
|
|
2847
1172
|
useRouter: useRouter,
|
|
2848
1173
|
localStorageVersion,
|
|
2849
1174
|
previousLocalStorageVersions
|
|
2850
1175
|
});
|
|
2851
|
-
const [
|
|
1176
|
+
const [selectionModel, setSelectionModel] = useState(propsSelectionModel !== null && propsSelectionModel !== void 0 ? propsSelectionModel : []);
|
|
2852
1177
|
useEffect(() => {
|
|
2853
|
-
|
|
2854
|
-
}, [
|
|
2855
|
-
const
|
|
2856
|
-
if (
|
|
2857
|
-
|
|
1178
|
+
setSelectionModel(propsSelectionModel !== null && propsSelectionModel !== void 0 ? propsSelectionModel : []);
|
|
1179
|
+
}, [propsSelectionModel]);
|
|
1180
|
+
const onSelectionModelChange = (selectionModel, details) => {
|
|
1181
|
+
if (propsOnSelectionModelChange) {
|
|
1182
|
+
propsOnSelectionModelChange(selectionModel, details);
|
|
2858
1183
|
} else {
|
|
2859
|
-
|
|
1184
|
+
setSelectionModel(selectionModel);
|
|
2860
1185
|
}
|
|
2861
1186
|
};
|
|
2862
1187
|
const selectionStatus = useRef({
|
|
2863
1188
|
type: 'none',
|
|
2864
1189
|
numberOfSelectedRows: 0,
|
|
2865
1190
|
numberOfSelectedRowsInPage: 0,
|
|
2866
|
-
page
|
|
2867
|
-
pageSize:
|
|
1191
|
+
page,
|
|
1192
|
+
pageSize: pageSize
|
|
2868
1193
|
});
|
|
2869
1194
|
|
|
2870
1195
|
// in server-side pagination we want to update the selection status
|
|
2871
1196
|
// every time we navigate between pages, resize our page or select something
|
|
2872
1197
|
useEffect(() => {
|
|
2873
1198
|
if (paginationMode == 'server') {
|
|
2874
|
-
onServerSideSelectionStatusChange(Array.isArray(
|
|
1199
|
+
onServerSideSelectionStatusChange(Array.isArray(selectionModel) ? selectionModel : [selectionModel], apiRef, selectionStatus, isRowSelectable, page, pageSize);
|
|
2875
1200
|
}
|
|
2876
|
-
}, [
|
|
1201
|
+
}, [selectionModel, page, pageSize]);
|
|
2877
1202
|
if (!Array.isArray(rows)) {
|
|
2878
1203
|
return null;
|
|
2879
1204
|
}
|
|
@@ -2899,20 +1224,22 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
2899
1224
|
ref: datagridRef,
|
|
2900
1225
|
className: classNames(StatefulDataGrid.className, className),
|
|
2901
1226
|
$height: height
|
|
2902
|
-
}, /*#__PURE__*/React__default.createElement(DataGridPro, _extends
|
|
1227
|
+
}, /*#__PURE__*/React__default.createElement(DataGridPro, _extends({}, forwardedProps, {
|
|
2903
1228
|
apiRef: apiRef,
|
|
2904
1229
|
columns: columns,
|
|
2905
1230
|
columnVisibilityModel: columnVisibilityModel,
|
|
2906
1231
|
filterModel: filterModel,
|
|
2907
1232
|
onColumnVisibilityModelChange: onColumnVisibilityModelChange,
|
|
2908
1233
|
onFilterModelChange: onFilterModelChange,
|
|
2909
|
-
|
|
1234
|
+
onPageChange: onPageChange,
|
|
1235
|
+
onPageSizeChange: onPageSizeChange,
|
|
2910
1236
|
onPinnedColumnsChange: onPinnedColumnsChange,
|
|
2911
1237
|
onSortModelChange: onSortModelChange,
|
|
2912
|
-
|
|
1238
|
+
page: page,
|
|
1239
|
+
pageSize: pageSize,
|
|
2913
1240
|
pinnedColumns: pinnedColumns,
|
|
2914
1241
|
sortModel: sortModel,
|
|
2915
|
-
|
|
1242
|
+
rowsPerPageOptions: rowsPerPageOptions,
|
|
2916
1243
|
onColumnWidthChange: onColumnWidthChange,
|
|
2917
1244
|
initialState: initialState,
|
|
2918
1245
|
isRowSelectable: isRowSelectable,
|
|
@@ -2923,74 +1250,79 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
2923
1250
|
rowCount: rowCount,
|
|
2924
1251
|
autoHeight: autoHeight,
|
|
2925
1252
|
checkboxSelectionVisibleOnly: Boolean(pagination),
|
|
2926
|
-
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
1253
|
+
columnTypes: _objectSpread2(_objectSpread2({}, customColumnTypes), propsColumnTypes),
|
|
1254
|
+
components: _objectSpread2(_objectSpread2({
|
|
1255
|
+
BaseButton,
|
|
1256
|
+
BaseCheckbox,
|
|
1257
|
+
// BaseTextField,
|
|
1258
|
+
BasePopper,
|
|
1259
|
+
ColumnFilteredIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2932
1260
|
displayName: "ColumnFilteredIcon"
|
|
2933
1261
|
})),
|
|
2934
|
-
|
|
1262
|
+
ColumnSelectorIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2935
1263
|
displayName: "ColumnSelectorIcon"
|
|
2936
1264
|
})),
|
|
2937
|
-
|
|
1265
|
+
ColumnSortedAscendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2938
1266
|
displayName: "ColumnSortedAscendingIcon"
|
|
2939
1267
|
})),
|
|
2940
|
-
|
|
1268
|
+
ColumnSortedDescendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2941
1269
|
displayName: "ColumnSortedDescendingIcon"
|
|
2942
1270
|
})),
|
|
2943
|
-
|
|
1271
|
+
DensityCompactIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2944
1272
|
displayName: "DensityCompactIcon"
|
|
2945
1273
|
})),
|
|
2946
|
-
|
|
1274
|
+
DensityStandardIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2947
1275
|
displayName: "DensityStandardIcon"
|
|
2948
1276
|
})),
|
|
2949
|
-
|
|
1277
|
+
DensityComfortableIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2950
1278
|
displayName: "DensityComfortableIcon"
|
|
2951
1279
|
})),
|
|
2952
|
-
|
|
1280
|
+
DetailPanelCollapseIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2953
1281
|
displayName: "DetailPanelCollapseIcon"
|
|
2954
1282
|
})),
|
|
2955
|
-
|
|
1283
|
+
DetailPanelExpandIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2956
1284
|
displayName: "DetailPanelExpandIcon"
|
|
2957
1285
|
})),
|
|
2958
|
-
|
|
1286
|
+
ExportIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2959
1287
|
displayName: "ExportIcon"
|
|
2960
1288
|
})),
|
|
2961
|
-
|
|
1289
|
+
OpenFilterButtonIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({
|
|
2962
1290
|
displayName: "OpenFilterButtonIcon"
|
|
2963
1291
|
}, props))
|
|
2964
|
-
},
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
return pagination ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, _extends
|
|
1292
|
+
}, components), {}, {
|
|
1293
|
+
Toolbar: ToolbarWrapper,
|
|
1294
|
+
Pagination: props => {
|
|
1295
|
+
return pagination ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, _extends({}, props, {
|
|
2968
1296
|
displaySelection: false,
|
|
2969
1297
|
displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
|
|
2970
1298
|
displayPagination: ['bottom', 'both'].includes(paginationPlacement),
|
|
2971
1299
|
selectionStatus: selectionStatus.current,
|
|
2972
|
-
|
|
2973
|
-
|
|
2974
|
-
|
|
1300
|
+
page: page,
|
|
1301
|
+
pageSize: pageSize,
|
|
1302
|
+
onPageChange: onPageChange,
|
|
1303
|
+
onPageSizeChange: onPageSizeChange,
|
|
1304
|
+
rowsPerPageOptions: rowsPerPageOptions,
|
|
2975
1305
|
paginationProps: paginationProps,
|
|
2976
1306
|
paginationMode: paginationMode,
|
|
2977
1307
|
rowCount: rowCount
|
|
2978
|
-
})) : /*#__PURE__*/React__default.createElement(ControlledPagination, _extends
|
|
1308
|
+
})) : /*#__PURE__*/React__default.createElement(ControlledPagination, _extends({}, props, {
|
|
2979
1309
|
displaySelection: false,
|
|
2980
1310
|
displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
|
|
2981
1311
|
displayPagination: ['bottom', 'both'].includes(paginationPlacement),
|
|
2982
1312
|
selectionStatus: selectionStatus.current,
|
|
2983
1313
|
apiRef: apiRef,
|
|
2984
1314
|
isRowSelectable: isRowSelectable,
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
|
|
1315
|
+
page: page,
|
|
1316
|
+
pageSize: pageSize,
|
|
1317
|
+
onPageChange: onPageChange,
|
|
1318
|
+
onPageSizeChange: onPageSizeChange,
|
|
1319
|
+
rowsPerPageOptions: rowsPerPageOptions,
|
|
2988
1320
|
paginationProps: paginationProps,
|
|
2989
1321
|
paginationMode: paginationMode
|
|
2990
1322
|
})) : null;
|
|
2991
1323
|
}
|
|
2992
1324
|
}),
|
|
2993
|
-
|
|
1325
|
+
componentsProps: _objectSpread2(_objectSpread2({}, componentsProps), {}, {
|
|
2994
1326
|
toolbar: _objectSpread2({
|
|
2995
1327
|
hideToolbar,
|
|
2996
1328
|
RenderedToolbar,
|
|
@@ -3001,16 +1333,18 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
3001
1333
|
selectionStatus,
|
|
3002
1334
|
apiRef,
|
|
3003
1335
|
isRowSelectable,
|
|
3004
|
-
|
|
3005
|
-
|
|
3006
|
-
|
|
1336
|
+
page,
|
|
1337
|
+
pageSize,
|
|
1338
|
+
onPageChange,
|
|
1339
|
+
onPageSizeChange,
|
|
1340
|
+
rowsPerPageOptions,
|
|
3007
1341
|
paginationProps,
|
|
3008
1342
|
paginationMode,
|
|
3009
1343
|
rowCount
|
|
3010
|
-
},
|
|
1344
|
+
}, componentsProps === null || componentsProps === void 0 ? void 0 : componentsProps.toolbar)
|
|
3011
1345
|
}),
|
|
3012
|
-
|
|
3013
|
-
|
|
1346
|
+
selectionModel: selectionModel,
|
|
1347
|
+
onSelectionModelChange: (newSelectionModel, details) => {
|
|
3014
1348
|
if (pagination && paginationMode != 'server') {
|
|
3015
1349
|
const selectableRowsInPage = isRowSelectable ? gridPaginatedVisibleSortedGridRowEntriesSelector(apiRef).filter(_ref => {
|
|
3016
1350
|
let {
|
|
@@ -3068,7 +1402,7 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
3068
1402
|
};
|
|
3069
1403
|
}
|
|
3070
1404
|
}
|
|
3071
|
-
|
|
1405
|
+
onSelectionModelChange === null || onSelectionModelChange === void 0 ? void 0 : onSelectionModelChange(newSelectionModel, details);
|
|
3072
1406
|
},
|
|
3073
1407
|
sx: _objectSpread2(_objectSpread2({}, sx), {}, {
|
|
3074
1408
|
'.MuiDataGrid-columnHeaders': {
|
|
@@ -3084,5 +1418,5 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
3084
1418
|
StatefulDataGrid.className = CLASSNAME;
|
|
3085
1419
|
StatefulDataGrid.displayName = COMPONENT_NAME;
|
|
3086
1420
|
|
|
3087
|
-
export {
|
|
1421
|
+
export { CATEGORIES as C, DIMENSION_MODEL_KEY as D, FILTER_MODEL_KEY as F, PAGINATION_MODEL_KEY as P, SORT_MODEL_KEY as S, VISIBILITY_MODEL_KEY as V, PINNED_COLUMNS as a, FILTER_SEARCH_KEY as b, buildStorageKey as c, clearPreviousVersionStorage as d, decodeValue as e, encodeValue as f, numberOperatorDecoder as g, getFilterModelFromString as h, getSearchParamsFromFilterModel as i, getSortingFromString as j, getSearchParamsFromSorting as k, getPaginationFromString as l, getSearchParamsFromPagination as m, numberOperatorEncoder as n, getSearchParamsFromColumnVisibility as o, getColumnVisibilityFromString as p, getPinnedColumnsFromString as q, getSearchParamsFromPinnedColumns as r, getSearchParamsFromTab as s, getFinalSearch as t, urlSearchParamsToString as u, getModelsParsedOrUpdateLocalStorage as v, updateUrl as w, areFilterModelsEquivalent as x, StatefulDataGrid as y };
|
|
3088
1422
|
//# sourceMappingURL=StatefulDataGrid2.js.map
|