@redsift/table 11.8.1 → 11.8.2-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 +243 -1936
- 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 +54 -54
- package/index.js +3 -48
- package/index.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,1791 +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 isAnyOfIOperator = {
|
|
1638
|
-
label: 'is any of (case-insensitive)',
|
|
1639
|
-
value: 'isAnyOfI',
|
|
1640
|
-
getApplyFilterFn: filterItem => {
|
|
1641
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1642
|
-
return null;
|
|
1643
|
-
}
|
|
1644
|
-
const lowerCaseFilterValues = filterItem.value.map(v => String(v).toLowerCase());
|
|
1645
|
-
return params => {
|
|
1646
|
-
if (filterItem.value.length === 0) {
|
|
1647
|
-
return true;
|
|
1648
|
-
}
|
|
1649
|
-
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1650
|
-
for (const paramValue of paramValues) {
|
|
1651
|
-
if (lowerCaseFilterValues.includes(String(paramValue).toLowerCase())) {
|
|
1652
|
-
return true;
|
|
1653
|
-
}
|
|
1654
|
-
}
|
|
1655
|
-
return false;
|
|
1656
|
-
};
|
|
1657
|
-
},
|
|
1658
|
-
InputComponent: GridFilterInputMultipleValue
|
|
1659
|
-
};
|
|
1660
|
-
const IS_ANY_OF_I = isAnyOfIOperator;
|
|
1661
|
-
const IS_ANY_OF_I_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS_ANY_OF_I), {}, {
|
|
1662
|
-
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1663
|
-
});
|
|
1664
|
-
|
|
1665
|
-
const hasAnyOfOperator = {
|
|
1666
|
-
label: 'has any of',
|
|
1667
|
-
value: 'hasAnyOf',
|
|
1668
|
-
getApplyFilterFn: filterItem => {
|
|
1669
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1670
|
-
return null;
|
|
1671
|
-
}
|
|
1672
|
-
return params => {
|
|
1673
|
-
if (filterItem.value.length === 0) {
|
|
1674
|
-
return true;
|
|
1675
|
-
}
|
|
1676
|
-
const cellValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1677
|
-
const filterItemValues = Array.isArray(filterItem.value) ? filterItem.value : [filterItem.value];
|
|
1678
|
-
return filterItemValues.some(v => cellValues.map(value => String(value)).includes(v));
|
|
1679
|
-
};
|
|
1680
|
-
},
|
|
1681
|
-
InputComponent: GridFilterInputMultipleValue
|
|
1682
|
-
};
|
|
1683
|
-
const HAS_ANY_OF = hasAnyOfOperator;
|
|
1684
|
-
const HAS_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, HAS_ANY_OF), {}, {
|
|
1685
|
-
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1686
|
-
});
|
|
1687
|
-
|
|
1688
|
-
const isNotAnyOfOperator = {
|
|
1689
|
-
label: 'is not any of',
|
|
1690
|
-
value: 'isNotAnyOf',
|
|
1691
|
-
getApplyFilterFn: filterItem => {
|
|
1692
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1693
|
-
return null;
|
|
1694
|
-
}
|
|
1695
|
-
return params => {
|
|
1696
|
-
if (filterItem.value.length === 0) {
|
|
1697
|
-
return true;
|
|
1698
|
-
}
|
|
1699
|
-
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1700
|
-
for (const paramValue of paramValues) {
|
|
1701
|
-
if (filterItem.value.includes(String(paramValue))) {
|
|
1702
|
-
return false;
|
|
1703
|
-
}
|
|
1704
|
-
}
|
|
1705
|
-
return true;
|
|
1706
|
-
};
|
|
1707
|
-
},
|
|
1708
|
-
InputComponent: GridFilterInputMultipleValue
|
|
1709
|
-
};
|
|
1710
|
-
const IS_NOT_ANY_OF = isNotAnyOfOperator;
|
|
1711
|
-
const IS_NOT_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS_NOT_ANY_OF), {}, {
|
|
1712
|
-
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1713
|
-
});
|
|
1714
|
-
|
|
1715
|
-
const startsWithAnyOfOperator = {
|
|
1716
|
-
label: 'starts with any of',
|
|
1717
|
-
value: 'startsWithAnyOf',
|
|
1718
|
-
getApplyFilterFn: filterItem => {
|
|
1719
|
-
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1720
|
-
return null;
|
|
1721
|
-
}
|
|
1722
|
-
return params => {
|
|
1723
|
-
if (filterItem.value.length === 0) {
|
|
1724
|
-
return true;
|
|
1725
|
-
}
|
|
1726
|
-
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1727
|
-
let match = false;
|
|
1728
|
-
filterItem.value.forEach(filteredValue => {
|
|
1729
|
-
paramValues.forEach(paramValue => {
|
|
1730
|
-
if (String(paramValue).startsWith(filteredValue)) {
|
|
1731
|
-
match = true;
|
|
1732
|
-
}
|
|
1733
|
-
});
|
|
1734
|
-
});
|
|
1735
|
-
return match;
|
|
1736
|
-
};
|
|
1737
|
-
},
|
|
1738
|
-
InputComponent: GridFilterInputMultipleValue
|
|
1739
|
-
};
|
|
1740
|
-
const STARTS_WITH_ANY_OF = startsWithAnyOfOperator;
|
|
1741
|
-
|
|
1742
|
-
const doesNotHaveAnyOf = {
|
|
1743
|
-
label: "doesn't have any of",
|
|
1744
|
-
value: 'doesNotHaveAnyOf',
|
|
1745
|
-
getApplyFilterFn: filterItem => {
|
|
1746
|
-
if (!filterItem.field || !filterItem.value || !Array.isArray(filterItem.value) || filterItem.value.length === 0) {
|
|
1747
|
-
return null;
|
|
1748
|
-
}
|
|
1749
|
-
return params => {
|
|
1750
|
-
const cellValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1751
|
-
|
|
1752
|
-
// Return true only if none of the filter values are in the cell values
|
|
1753
|
-
return filterItem.value.every(filterVal => !cellValues.map(value => String(value)).includes(filterVal));
|
|
1754
|
-
};
|
|
1755
|
-
},
|
|
1756
|
-
InputComponent: GridFilterInputMultipleValue
|
|
1757
|
-
};
|
|
1758
|
-
const DOES_NOT_HAVE_ANY_OF = doesNotHaveAnyOf;
|
|
1759
|
-
const DOES_NOT_HAVE_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, DOES_NOT_HAVE_ANY_OF), {}, {
|
|
1760
|
-
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1761
|
-
});
|
|
1762
|
-
|
|
1763
|
-
const getGridStringArrayOperators = () => [CONTAINS_ANY_OF, ENDS_WITH_ANY_OF, IS_ANY_OF, IS_ANY_OF_I, IS_NOT_ANY_OF, STARTS_WITH_ANY_OF];
|
|
1764
|
-
const getGridStringArrayOperatorsWithSelect = () => [CONTAINS_ANY_OF, ENDS_WITH_ANY_OF, IS_ANY_OF_WITH_SELECT, IS_ANY_OF_I_WITH_SELECT, IS_NOT_WITH_SELECT, IS_WITH_SELECT, STARTS_WITH_ANY_OF];
|
|
1765
|
-
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];
|
|
1766
|
-
|
|
1767
|
-
const getGridStringOperators = () => [...getGridStringOperators$1().filter(operator => !['isAnyOf'].includes(operator.value)), DOES_NOT_CONTAIN, DOES_NOT_EQUAL, ...getGridStringArrayOperators()];
|
|
1768
|
-
|
|
1769
|
-
// istanbul ignore file
|
|
1770
|
-
const operatorList = {
|
|
1771
|
-
// Default types
|
|
1772
|
-
string: getGridStringOperators$1(),
|
|
1773
|
-
number: getGridNumericOperators$1(),
|
|
1774
|
-
boolean: getGridBooleanOperators(),
|
|
1775
|
-
date: getGridDateOperators(),
|
|
1776
|
-
dateTime: getGridDateOperators(true),
|
|
1777
|
-
singleSelect: getGridSingleSelectOperators(),
|
|
1778
|
-
// Extended types
|
|
1779
|
-
rsString: getGridStringOperators(),
|
|
1780
|
-
rsNumber: getGridNumericOperators(),
|
|
1781
|
-
rsSingleSelect: [CONTAINS_ANY_OF, ENDS_WITH_ANY_OF, IS_ANY_OF_WITH_SELECT, IS_NOT_WITH_SELECT, IS_WITH_SELECT, STARTS_WITH_ANY_OF],
|
|
1782
|
-
rsSingleSelectWithShortOperatorList: [IS_WITH_SELECT, IS_NOT_WITH_SELECT, IS_ANY_OF_WITH_SELECT],
|
|
1783
|
-
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],
|
|
1784
|
-
rsMultipleSelectWithShortOperatorList: [HAS_WITH_SELECT, DOES_NOT_HAVE_WITH_SELECT, HAS_ANY_OF_WITH_SELECT],
|
|
1785
|
-
// Custom types
|
|
1786
|
-
rsStringArray: getGridStringArrayOperators()
|
|
1787
|
-
};
|
|
1788
|
-
|
|
1789
13
|
const PAGINATION_MODEL_KEY = 'paginationModel';
|
|
1790
14
|
const FILTER_MODEL_KEY = 'filterModel';
|
|
1791
15
|
const SORT_MODEL_KEY = 'sortModel';
|
|
@@ -1924,39 +148,42 @@ const numberOperatorDecoder = {
|
|
|
1924
148
|
lt: '<',
|
|
1925
149
|
lte: '<='
|
|
1926
150
|
};
|
|
1927
|
-
const isOperatorValueValid = (
|
|
1928
|
-
const column = columns.find(column => column.field ===
|
|
151
|
+
const isOperatorValueValid = (columnField, operatorValue, columns) => {
|
|
152
|
+
const column = columns.find(column => column.field === columnField);
|
|
1929
153
|
if (!column) {
|
|
1930
154
|
return false;
|
|
1931
155
|
}
|
|
1932
156
|
const columnType = (column === null || column === void 0 ? void 0 : column.type) || 'string';
|
|
1933
|
-
const operators =
|
|
157
|
+
const operators = operatorList[columnType];
|
|
1934
158
|
if (!operators) {
|
|
1935
159
|
return false;
|
|
1936
160
|
}
|
|
1937
|
-
|
|
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);
|
|
1938
165
|
};
|
|
1939
166
|
const listOperators = ['containsAnyOf', 'doesNotContainAnyOf', 'endsWithAnyOf', 'doesNotEndWithAnyOf', 'hasAnyOf', 'doesNotHaveAnyOf', 'isAnyOf', 'isNotAnyOf', 'startsWithAnyOf', 'doesNotStartWithAnyOf'];
|
|
1940
167
|
|
|
1941
168
|
// Check if the value doesn't break
|
|
1942
|
-
const isValueValid = (value,
|
|
169
|
+
const isValueValid = (value, columnField, columns, operatorValue) => {
|
|
1943
170
|
var _column$type;
|
|
1944
171
|
// every field accepts undefined as value for default
|
|
1945
172
|
if (value === undefined || value === '') {
|
|
1946
173
|
return true;
|
|
1947
174
|
}
|
|
1948
175
|
|
|
1949
|
-
// xxxAnyOf accepts as value only lists, and we are
|
|
176
|
+
// xxxAnyOf accepts as value only lists, and we are declearing them in the
|
|
1950
177
|
// URL as `list=[...]`
|
|
1951
|
-
if (listOperators.includes(
|
|
178
|
+
if (listOperators.includes(operatorValue)) {
|
|
1952
179
|
return Array.isArray(value) || value === '';
|
|
1953
180
|
}
|
|
1954
181
|
|
|
1955
182
|
// We are accepting arrays only if they are of the 'xxxAnyOf' type
|
|
1956
|
-
if (Array.isArray(value) && !listOperators.includes(
|
|
183
|
+
if (Array.isArray(value) && !listOperators.includes(operatorValue)) {
|
|
1957
184
|
return false;
|
|
1958
185
|
}
|
|
1959
|
-
const column = columns.find(column => column.field ===
|
|
186
|
+
const column = columns.find(column => column.field === columnField);
|
|
1960
187
|
if (!column) {
|
|
1961
188
|
return false;
|
|
1962
189
|
}
|
|
@@ -1994,7 +221,7 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
1994
221
|
if (!searchString) {
|
|
1995
222
|
return 'invalid';
|
|
1996
223
|
}
|
|
1997
|
-
let
|
|
224
|
+
let linkOperator = GridLinkOperator.And;
|
|
1998
225
|
let quickFilterValues = [];
|
|
1999
226
|
const searchParams = new URLSearchParams();
|
|
2000
227
|
for (const [key, value] of new URLSearchParams(searchString)) {
|
|
@@ -2002,7 +229,7 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
2002
229
|
searchParams.set(key, value);
|
|
2003
230
|
}
|
|
2004
231
|
if (key === '_logicOperator') {
|
|
2005
|
-
|
|
232
|
+
linkOperator = value;
|
|
2006
233
|
}
|
|
2007
234
|
if (key === '_quickFilterValues') {
|
|
2008
235
|
try {
|
|
@@ -2021,7 +248,7 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
2021
248
|
if (isInvalid) {
|
|
2022
249
|
return;
|
|
2023
250
|
}
|
|
2024
|
-
const field = key.split('[')[0].slice(1);
|
|
251
|
+
const field = key.split('[')[0].slice(1); // Slice to remove the _ at the beginning
|
|
2025
252
|
if (!fields.includes(field)) {
|
|
2026
253
|
return;
|
|
2027
254
|
}
|
|
@@ -2038,6 +265,7 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
2038
265
|
return;
|
|
2039
266
|
}
|
|
2040
267
|
const operator = splitRight[0];
|
|
268
|
+
// if the operator is not part of the valid operators invalidate the URL
|
|
2041
269
|
if (!isOperatorValueValid(field, operator, columns) || Array.isArray(operator)) {
|
|
2042
270
|
isInvalid = true;
|
|
2043
271
|
return;
|
|
@@ -2049,37 +277,41 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
2049
277
|
return;
|
|
2050
278
|
}
|
|
2051
279
|
items.push({
|
|
2052
|
-
field,
|
|
2053
|
-
|
|
280
|
+
columnField: field,
|
|
281
|
+
operatorValue: ['number', 'rsNumber'].includes(columnType) && Object.keys(numberOperatorDecoder).includes(operator) ? numberOperatorDecoder[operator] : operator,
|
|
2054
282
|
id,
|
|
2055
283
|
value: listOperators.includes(operator) && decodedValue === '' ? [] : decodedValue,
|
|
2056
284
|
type
|
|
2057
285
|
});
|
|
2058
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
|
|
2059
291
|
if (isInvalid) {
|
|
2060
292
|
return 'invalid';
|
|
2061
293
|
}
|
|
2062
294
|
return {
|
|
2063
295
|
items,
|
|
2064
|
-
|
|
296
|
+
linkOperator,
|
|
2065
297
|
quickFilterValues
|
|
2066
298
|
};
|
|
2067
299
|
};
|
|
2068
300
|
const getSearchParamsFromFilterModel = filterModel => {
|
|
2069
301
|
var _filterModel$quickFil;
|
|
2070
302
|
const searchParams = new URLSearchParams();
|
|
2071
|
-
searchParams.set('_logicOperator', filterModel['
|
|
303
|
+
searchParams.set('_logicOperator', filterModel['linkOperator'] || '');
|
|
2072
304
|
filterModel['items'].forEach(item => {
|
|
2073
305
|
const {
|
|
2074
|
-
|
|
2075
|
-
|
|
306
|
+
columnField,
|
|
307
|
+
operatorValue,
|
|
2076
308
|
value,
|
|
2077
309
|
type
|
|
2078
310
|
} = item;
|
|
2079
|
-
if (Object.keys(numberOperatorEncoder).includes(
|
|
2080
|
-
searchParams.set(`_${
|
|
311
|
+
if (Object.keys(numberOperatorEncoder).includes(operatorValue)) {
|
|
312
|
+
searchParams.set(`_${columnField}[${numberOperatorEncoder[operatorValue]},${encodeValue(type)}]`, encodeValue(value));
|
|
2081
313
|
} else {
|
|
2082
|
-
searchParams.set(`_${
|
|
314
|
+
searchParams.set(`_${columnField}[${encodeValue(operatorValue)},${encodeValue(type)}]`, encodeValue(value));
|
|
2083
315
|
}
|
|
2084
316
|
});
|
|
2085
317
|
if ((_filterModel$quickFil = filterModel.quickFilterValues) !== null && _filterModel$quickFil !== void 0 && _filterModel$quickFil.length) {
|
|
@@ -2095,7 +327,7 @@ const getSearchParamsFromFilterModel = filterModel => {
|
|
|
2095
327
|
const getFilterModel = (search, columns, localStorageFilters, setLocalStorageFilters, initialState, isNewVersion) => {
|
|
2096
328
|
const defaultValue = initialState && initialState.filter && initialState.filter.filterModel ? initialState.filter.filterModel : {
|
|
2097
329
|
items: [],
|
|
2098
|
-
|
|
330
|
+
linkOperator: GridLinkOperator.And
|
|
2099
331
|
};
|
|
2100
332
|
if (isNewVersion) {
|
|
2101
333
|
return defaultValue;
|
|
@@ -2234,38 +466,13 @@ const getPaginationModel = (search, localStoragePagination, setLocalStoragePagin
|
|
|
2234
466
|
|
|
2235
467
|
/** COLUMN VISIBILITY */
|
|
2236
468
|
|
|
2237
|
-
const getColumnVisibilityFromString = (searchString, columns) => {
|
|
2238
|
-
if (!searchString) {
|
|
2239
|
-
return 'invalid';
|
|
2240
|
-
}
|
|
2241
|
-
const searchParams = new URLSearchParams(searchString);
|
|
2242
|
-
const value = searchParams.get('_columnVisibility');
|
|
2243
|
-
if (value === '' || value === null || value === '[]') {
|
|
2244
|
-
return 'invalid';
|
|
2245
|
-
}
|
|
2246
|
-
const parsedFields = value.slice(1, value.length - 1).split(',');
|
|
2247
|
-
const fields = columns.map(column => column.field);
|
|
2248
|
-
const visibility = {};
|
|
2249
|
-
for (const field of fields) {
|
|
2250
|
-
visibility[field] = false;
|
|
2251
|
-
}
|
|
2252
|
-
for (const parsedField of parsedFields) {
|
|
2253
|
-
if (fields.includes(parsedField)) {
|
|
2254
|
-
visibility[parsedField] = true;
|
|
2255
|
-
}
|
|
2256
|
-
}
|
|
2257
|
-
if (Object.values(visibility).filter(v => v === true).length === 0) {
|
|
2258
|
-
return 'invalid';
|
|
2259
|
-
}
|
|
2260
|
-
return visibility;
|
|
2261
|
-
};
|
|
2262
469
|
const getSearchParamsFromColumnVisibility = (columnVisibility, columns) => {
|
|
2263
470
|
const searchParams = new URLSearchParams();
|
|
2264
|
-
const
|
|
471
|
+
const columnFields = columns.map(column => column.field);
|
|
2265
472
|
|
|
2266
473
|
// if column visibility model is empty, show all columns
|
|
2267
474
|
if (Object.keys(columnVisibility).length == 0) {
|
|
2268
|
-
searchParams.set('_columnVisibility', `[${
|
|
475
|
+
searchParams.set('_columnVisibility', `[${columnFields.join(',')}]`);
|
|
2269
476
|
return searchParams;
|
|
2270
477
|
}
|
|
2271
478
|
const finalColumnVisibility = columns.filter(c => {
|
|
@@ -2276,10 +483,63 @@ const getSearchParamsFromColumnVisibility = (columnVisibility, columns) => {
|
|
|
2276
483
|
[colName]: true
|
|
2277
484
|
});
|
|
2278
485
|
}, columnVisibility);
|
|
2279
|
-
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
|
+
});
|
|
2280
497
|
searchParams.set('_columnVisibility', `[${visibleColumns.join(',')}]`);
|
|
2281
498
|
return searchParams;
|
|
2282
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
|
+
};
|
|
2283
543
|
|
|
2284
544
|
// Rules:
|
|
2285
545
|
// - if we have something in the URL, use that info
|
|
@@ -2340,8 +600,8 @@ const getPinnedColumnsFromString = (notParsed, tableColumns) => {
|
|
|
2340
600
|
if (typeof encodedValues !== 'string') {
|
|
2341
601
|
continue;
|
|
2342
602
|
}
|
|
2343
|
-
const
|
|
2344
|
-
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));
|
|
2345
605
|
if (fieldURL === '_pinnedColumnsLeft') {
|
|
2346
606
|
pinnedColumns['left'] = columns;
|
|
2347
607
|
}
|
|
@@ -2349,9 +609,9 @@ const getPinnedColumnsFromString = (notParsed, tableColumns) => {
|
|
|
2349
609
|
pinnedColumns['right'] = columns;
|
|
2350
610
|
}
|
|
2351
611
|
}
|
|
2352
|
-
return pinnedColumns
|
|
2353
|
-
left: pinnedColumns
|
|
2354
|
-
right: pinnedColumns
|
|
612
|
+
return pinnedColumns['left'] || pinnedColumns['right'] ? {
|
|
613
|
+
left: pinnedColumns['left'] || [],
|
|
614
|
+
right: pinnedColumns['right'] || []
|
|
2355
615
|
} : 'invalid';
|
|
2356
616
|
};
|
|
2357
617
|
const getSearchParamsFromPinnedColumns = pinnedColumns => {
|
|
@@ -2401,7 +661,7 @@ const getSearchParamsFromTab = search => {
|
|
|
2401
661
|
}
|
|
2402
662
|
return searchParams;
|
|
2403
663
|
};
|
|
2404
|
-
const getFinalSearch =
|
|
664
|
+
const getFinalSearch = _ref3 => {
|
|
2405
665
|
let {
|
|
2406
666
|
search,
|
|
2407
667
|
localStorageVersion,
|
|
@@ -2411,7 +671,7 @@ const getFinalSearch = _ref => {
|
|
|
2411
671
|
columnsVisibilityModel,
|
|
2412
672
|
pinnedColumnsModel,
|
|
2413
673
|
columns
|
|
2414
|
-
} =
|
|
674
|
+
} = _ref3;
|
|
2415
675
|
const filterModelSearch = getSearchParamsFromFilterModel(filterModel);
|
|
2416
676
|
const sortModelSearch = getSearchParamsFromSorting(sortModel);
|
|
2417
677
|
const paginationModelSearch = getSearchParamsFromPagination(paginationModel);
|
|
@@ -2476,14 +736,14 @@ const getModelsParsedOrUpdateLocalStorage = (search, localStorageVersion, column
|
|
|
2476
736
|
pinnedColumnsModel
|
|
2477
737
|
};
|
|
2478
738
|
};
|
|
2479
|
-
const updateUrl = (
|
|
739
|
+
const updateUrl = (_ref4, search, localStorageVersion, historyReplace, columns) => {
|
|
2480
740
|
let {
|
|
2481
741
|
filterModel,
|
|
2482
742
|
sortModel,
|
|
2483
743
|
paginationModel,
|
|
2484
744
|
columnsModel: columnsVisibilityModel,
|
|
2485
745
|
pinnedColumnsModel
|
|
2486
|
-
} =
|
|
746
|
+
} = _ref4;
|
|
2487
747
|
const newSearch = getFinalSearch({
|
|
2488
748
|
search,
|
|
2489
749
|
localStorageVersion,
|
|
@@ -2504,17 +764,17 @@ const updateUrl = (_ref2, search, localStorageVersion, historyReplace, columns)
|
|
|
2504
764
|
// do not use it for equivalence (e.g. with value `3` and undefined we
|
|
2505
765
|
// will get 0).
|
|
2506
766
|
const compareFilters = (firstFilter, secondFilter) => {
|
|
2507
|
-
if (firstFilter.
|
|
767
|
+
if (firstFilter.columnField < secondFilter.columnField) {
|
|
2508
768
|
return -1;
|
|
2509
|
-
} else if (firstFilter.
|
|
769
|
+
} else if (firstFilter.columnField > secondFilter.columnField) {
|
|
2510
770
|
return 1;
|
|
2511
771
|
}
|
|
2512
|
-
if (firstFilter.
|
|
772
|
+
if (firstFilter.operatorValue === undefined || secondFilter.operatorValue === undefined) {
|
|
2513
773
|
return 0;
|
|
2514
774
|
}
|
|
2515
|
-
if (firstFilter.
|
|
775
|
+
if (firstFilter.operatorValue < secondFilter.operatorValue) {
|
|
2516
776
|
return -1;
|
|
2517
|
-
} else if (firstFilter.
|
|
777
|
+
} else if (firstFilter.operatorValue > secondFilter.operatorValue) {
|
|
2518
778
|
return 1;
|
|
2519
779
|
}
|
|
2520
780
|
if (firstFilter.value < secondFilter.value) {
|
|
@@ -2525,18 +785,18 @@ const compareFilters = (firstFilter, secondFilter) => {
|
|
|
2525
785
|
return 0;
|
|
2526
786
|
};
|
|
2527
787
|
const areFiltersEquivalent = (firstFilter, secondFilter) => {
|
|
2528
|
-
return firstFilter.
|
|
788
|
+
return firstFilter.columnField === secondFilter.columnField && firstFilter.operatorValue === secondFilter.operatorValue && firstFilter.value === secondFilter.value;
|
|
2529
789
|
};
|
|
2530
790
|
const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
|
|
2531
791
|
const {
|
|
2532
792
|
items,
|
|
2533
|
-
|
|
793
|
+
linkOperator
|
|
2534
794
|
} = filterModel;
|
|
2535
795
|
const {
|
|
2536
796
|
items: itemsToMatch,
|
|
2537
|
-
|
|
797
|
+
linkOperator: linkOperatorToMatch
|
|
2538
798
|
} = filterModelToMatch;
|
|
2539
|
-
if (
|
|
799
|
+
if (linkOperator !== linkOperatorToMatch) {
|
|
2540
800
|
return false;
|
|
2541
801
|
}
|
|
2542
802
|
if (items.length !== itemsToMatch.length) {
|
|
@@ -2549,7 +809,7 @@ const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
|
|
|
2549
809
|
const filterToCompare = itemsToMatch[i];
|
|
2550
810
|
|
|
2551
811
|
// compareFilters return 0 if and only if the filters have the same
|
|
2552
|
-
//
|
|
812
|
+
// columnField, operatorValue, and value
|
|
2553
813
|
if (!areFiltersEquivalent(filter, filterToCompare)) {
|
|
2554
814
|
return false;
|
|
2555
815
|
}
|
|
@@ -2558,6 +818,8 @@ const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
|
|
|
2558
818
|
};
|
|
2559
819
|
|
|
2560
820
|
// Get and Set data from LocalStorage WITHOUT useState
|
|
821
|
+
|
|
822
|
+
// triggering a state update and consecutive re-render
|
|
2561
823
|
const useFetchState = (defaultValue, key) => {
|
|
2562
824
|
let stickyValue = null;
|
|
2563
825
|
try {
|
|
@@ -2565,7 +827,16 @@ const useFetchState = (defaultValue, key) => {
|
|
|
2565
827
|
} catch (e) {
|
|
2566
828
|
console.error('StatefulDataGrid: error getting item from local storage: ', e);
|
|
2567
829
|
}
|
|
2568
|
-
|
|
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
|
+
}
|
|
2569
840
|
const updateValue = useCallback(value => {
|
|
2570
841
|
try {
|
|
2571
842
|
window.localStorage.setItem(key, JSON.stringify(value));
|
|
@@ -2576,8 +847,6 @@ const useFetchState = (defaultValue, key) => {
|
|
|
2576
847
|
return [parsedValue, updateValue];
|
|
2577
848
|
};
|
|
2578
849
|
|
|
2579
|
-
// import useLocalStorage from './useLocalStorage';
|
|
2580
|
-
|
|
2581
850
|
const useTableStates = (id, version) => {
|
|
2582
851
|
const [paginationModel, setPaginationModel] = useFetchState('', buildStorageKey({
|
|
2583
852
|
id,
|
|
@@ -2634,7 +903,8 @@ const useStatefulTable = props => {
|
|
|
2634
903
|
onColumnVisibilityModelChange: propsOnColumnVisibilityModelChange,
|
|
2635
904
|
onColumnWidthChange: propsOnColumnWidthChange,
|
|
2636
905
|
onFilterModelChange: propsOnFilterModelChange,
|
|
2637
|
-
|
|
906
|
+
onPageChange: propsOnPageChange,
|
|
907
|
+
onPageSizeChange: propsOnPageSizeChange,
|
|
2638
908
|
onPinnedColumnsChange: propsOnPinnedColumnsChange,
|
|
2639
909
|
onSortModelChange: propsOnSortModelChange,
|
|
2640
910
|
useRouter,
|
|
@@ -2664,7 +934,7 @@ const useStatefulTable = props => {
|
|
|
2664
934
|
setDimensionModel
|
|
2665
935
|
} = useTableStates(id, localStorageVersion);
|
|
2666
936
|
|
|
2667
|
-
// clearing up old version keys
|
|
937
|
+
// clearing up old version keys
|
|
2668
938
|
useEffect(() => clearPreviousVersionStorage(id, previousLocalStorageVersions), [id, previousLocalStorageVersions]);
|
|
2669
939
|
const onColumnDimensionChange = useCallback(_ref => {
|
|
2670
940
|
let {
|
|
@@ -2697,17 +967,19 @@ const useStatefulTable = props => {
|
|
|
2697
967
|
column.width = dimensionModel[column.field] || column.width || 100;
|
|
2698
968
|
return column;
|
|
2699
969
|
}), [propsColumns, dimensionModel]);
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
apiRef.current.
|
|
2703
|
-
|
|
970
|
+
if (apiRef.current) {
|
|
971
|
+
/** Add resetPage method to apiRef. */
|
|
972
|
+
apiRef.current.resetPage = () => {
|
|
973
|
+
apiRef.current.setPage(0);
|
|
974
|
+
};
|
|
975
|
+
}
|
|
2704
976
|
return {
|
|
2705
977
|
apiRef,
|
|
2706
978
|
columns,
|
|
2707
979
|
onFilterModelChange: (model, details) => {
|
|
2708
980
|
const filterModel = _objectSpread2(_objectSpread2({}, model), {}, {
|
|
2709
981
|
items: model.items.map(item => {
|
|
2710
|
-
const column = apiRef.current.getColumn(item.
|
|
982
|
+
const column = apiRef.current.getColumn(item.columnField);
|
|
2711
983
|
item.type = column.type || 'string';
|
|
2712
984
|
return item;
|
|
2713
985
|
}),
|
|
@@ -2745,16 +1017,33 @@ const useStatefulTable = props => {
|
|
|
2745
1017
|
}, search, localStorageVersion, historyReplace, columns);
|
|
2746
1018
|
},
|
|
2747
1019
|
pinnedColumns: pinnedColumnsModel,
|
|
2748
|
-
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
propsOnPaginationModelChange === null || propsOnPaginationModelChange === void 0 ? void 0 : propsOnPaginationModelChange(paginationModel, details);
|
|
1020
|
+
page: paginationModelParsed.page,
|
|
1021
|
+
pageSize: paginationModelParsed.pageSize,
|
|
1022
|
+
onPageChange: (page, details) => {
|
|
1023
|
+
const direction = paginationModelParsed.page < page ? 'next' : 'back';
|
|
1024
|
+
propsOnPageChange === null || propsOnPageChange === void 0 ? void 0 : propsOnPageChange(page, details);
|
|
2754
1025
|
updateUrl({
|
|
2755
1026
|
filterModel: filterParsed,
|
|
2756
1027
|
sortModel: sortModelParsed,
|
|
2757
|
-
paginationModel:
|
|
1028
|
+
paginationModel: {
|
|
1029
|
+
page,
|
|
1030
|
+
pageSize: paginationModelParsed.pageSize,
|
|
1031
|
+
direction
|
|
1032
|
+
},
|
|
1033
|
+
columnsModel: apiRef.current.state.columns.columnVisibilityModel,
|
|
1034
|
+
pinnedColumnsModel: pinnedColumnsModel
|
|
1035
|
+
}, search, localStorageVersion, historyReplace, columns);
|
|
1036
|
+
},
|
|
1037
|
+
onPageSizeChange: (pageSize, details) => {
|
|
1038
|
+
propsOnPageSizeChange === null || propsOnPageSizeChange === void 0 ? void 0 : propsOnPageSizeChange(pageSize, details);
|
|
1039
|
+
updateUrl({
|
|
1040
|
+
filterModel: filterParsed,
|
|
1041
|
+
sortModel: sortModelParsed,
|
|
1042
|
+
paginationModel: {
|
|
1043
|
+
page: paginationModelParsed.page,
|
|
1044
|
+
pageSize,
|
|
1045
|
+
direction: paginationModelParsed.direction
|
|
1046
|
+
},
|
|
2758
1047
|
columnsModel: apiRef.current.state.columns.columnVisibilityModel,
|
|
2759
1048
|
pinnedColumnsModel: pinnedColumnsModel
|
|
2760
1049
|
}, search, localStorageVersion, historyReplace, columns);
|
|
@@ -2780,7 +1069,7 @@ const useStatefulTable = props => {
|
|
|
2780
1069
|
};
|
|
2781
1070
|
};
|
|
2782
1071
|
|
|
2783
|
-
const _excluded = ["apiRef", "autoHeight", "className", "columns", "
|
|
1072
|
+
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"];
|
|
2784
1073
|
const COMPONENT_NAME = 'DataGrid';
|
|
2785
1074
|
const CLASSNAME = 'redsift-datagrid';
|
|
2786
1075
|
const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
@@ -2790,13 +1079,15 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
2790
1079
|
autoHeight,
|
|
2791
1080
|
className,
|
|
2792
1081
|
columns,
|
|
2793
|
-
|
|
2794
|
-
|
|
1082
|
+
columnTypes: propsColumnTypes,
|
|
1083
|
+
components,
|
|
1084
|
+
componentsProps,
|
|
2795
1085
|
filterModel: propsFilterModel,
|
|
2796
1086
|
columnVisibilityModel: propsColumnVisibilityModel,
|
|
2797
1087
|
pinnedColumns: propsPinnedColumns,
|
|
2798
1088
|
sortModel: propsSortModel,
|
|
2799
|
-
|
|
1089
|
+
page: propsPage,
|
|
1090
|
+
pageSize: propsPageSize,
|
|
2800
1091
|
height: propsHeight,
|
|
2801
1092
|
hideToolbar,
|
|
2802
1093
|
initialState,
|
|
@@ -2805,10 +1096,11 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
2805
1096
|
localStorageVersion,
|
|
2806
1097
|
previousLocalStorageVersions,
|
|
2807
1098
|
onFilterModelChange: propsOnFilterModelChange,
|
|
2808
|
-
|
|
1099
|
+
selectionModel: propsSelectionModel,
|
|
2809
1100
|
onColumnWidthChange: propsOnColumnWidthChange,
|
|
2810
|
-
|
|
2811
|
-
|
|
1101
|
+
onPageChange: propsOnPageChange,
|
|
1102
|
+
onPageSizeChange: propsOnPageSizeChange,
|
|
1103
|
+
onSelectionModelChange: propsOnSelectionModelChange,
|
|
2812
1104
|
onColumnVisibilityModelChange: propsOnColumnVisibilityModelChange,
|
|
2813
1105
|
onPinnedColumnsChange: propsOnPinnedColumnsChange,
|
|
2814
1106
|
onSortModelChange: propsOnSortModelChange,
|
|
@@ -2816,7 +1108,7 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
2816
1108
|
paginationPlacement = 'both',
|
|
2817
1109
|
paginationProps,
|
|
2818
1110
|
rows,
|
|
2819
|
-
|
|
1111
|
+
rowsPerPageOptions,
|
|
2820
1112
|
sx,
|
|
2821
1113
|
theme: propsTheme,
|
|
2822
1114
|
useRouter,
|
|
@@ -2824,41 +1116,46 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
2824
1116
|
rowCount
|
|
2825
1117
|
} = props,
|
|
2826
1118
|
forwardedProps = _objectWithoutProperties(props, _excluded);
|
|
2827
|
-
const theme = useTheme
|
|
1119
|
+
const theme = useTheme(propsTheme);
|
|
2828
1120
|
const _apiRef = useGridApiRef();
|
|
2829
1121
|
const apiRef = propsApiRef !== null && propsApiRef !== void 0 ? propsApiRef : _apiRef;
|
|
2830
|
-
const RenderedToolbar =
|
|
1122
|
+
const RenderedToolbar = components !== null && components !== void 0 && components.Toolbar ? components.Toolbar : Toolbar;
|
|
2831
1123
|
LicenseInfo.setLicenseKey(license);
|
|
2832
1124
|
const height = propsHeight !== null && propsHeight !== void 0 ? propsHeight : autoHeight ? undefined : '500px';
|
|
2833
1125
|
const {
|
|
2834
1126
|
onColumnVisibilityModelChange: controlledOnColumnVisibilityModelChange,
|
|
2835
1127
|
onFilterModelChange: controlledOnFilterModelChange,
|
|
2836
|
-
|
|
1128
|
+
onPageChange: controlledOnPageChange,
|
|
1129
|
+
onPageSizeChange: controlledOnPageSizeChange,
|
|
2837
1130
|
onPinnedColumnsChange: controlledOnPinnedColumnsChange,
|
|
2838
1131
|
onSortModelChange: controlledOnSortModelChange
|
|
2839
1132
|
} = useControlledDatagridState({
|
|
2840
1133
|
initialState,
|
|
2841
|
-
|
|
1134
|
+
rowsPerPageOptions,
|
|
2842
1135
|
propsColumnVisibilityModel,
|
|
2843
1136
|
propsFilterModel,
|
|
2844
1137
|
propsOnColumnVisibilityModelChange,
|
|
2845
1138
|
propsOnFilterModelChange,
|
|
2846
1139
|
propsOnPinnedColumnsChange,
|
|
2847
1140
|
propsOnSortModelChange,
|
|
2848
|
-
|
|
1141
|
+
propsPage,
|
|
1142
|
+
propsPageSize,
|
|
2849
1143
|
propsPinnedColumns,
|
|
2850
1144
|
propsSortModel,
|
|
2851
|
-
|
|
1145
|
+
propsOnPageChange,
|
|
1146
|
+
propsOnPageSizeChange
|
|
2852
1147
|
});
|
|
2853
1148
|
const {
|
|
2854
1149
|
columnVisibilityModel,
|
|
2855
1150
|
filterModel,
|
|
2856
1151
|
onColumnVisibilityModelChange,
|
|
2857
1152
|
onFilterModelChange,
|
|
2858
|
-
|
|
1153
|
+
onPageChange,
|
|
1154
|
+
onPageSizeChange,
|
|
2859
1155
|
onPinnedColumnsChange,
|
|
2860
1156
|
onSortModelChange,
|
|
2861
|
-
|
|
1157
|
+
page,
|
|
1158
|
+
pageSize,
|
|
2862
1159
|
pinnedColumns,
|
|
2863
1160
|
sortModel,
|
|
2864
1161
|
onColumnWidthChange
|
|
@@ -2869,39 +1166,40 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
2869
1166
|
onColumnVisibilityModelChange: controlledOnColumnVisibilityModelChange,
|
|
2870
1167
|
onColumnWidthChange: propsOnColumnWidthChange,
|
|
2871
1168
|
onFilterModelChange: controlledOnFilterModelChange,
|
|
2872
|
-
|
|
1169
|
+
onPageChange: controlledOnPageChange,
|
|
1170
|
+
onPageSizeChange: controlledOnPageSizeChange,
|
|
2873
1171
|
onPinnedColumnsChange: controlledOnPinnedColumnsChange,
|
|
2874
1172
|
onSortModelChange: controlledOnSortModelChange,
|
|
2875
1173
|
useRouter: useRouter,
|
|
2876
1174
|
localStorageVersion,
|
|
2877
1175
|
previousLocalStorageVersions
|
|
2878
1176
|
});
|
|
2879
|
-
const [
|
|
1177
|
+
const [selectionModel, setSelectionModel] = useState(propsSelectionModel !== null && propsSelectionModel !== void 0 ? propsSelectionModel : []);
|
|
2880
1178
|
useEffect(() => {
|
|
2881
|
-
|
|
2882
|
-
}, [
|
|
2883
|
-
const
|
|
2884
|
-
if (
|
|
2885
|
-
|
|
1179
|
+
setSelectionModel(propsSelectionModel !== null && propsSelectionModel !== void 0 ? propsSelectionModel : []);
|
|
1180
|
+
}, [propsSelectionModel]);
|
|
1181
|
+
const onSelectionModelChange = (selectionModel, details) => {
|
|
1182
|
+
if (propsOnSelectionModelChange) {
|
|
1183
|
+
propsOnSelectionModelChange(selectionModel, details);
|
|
2886
1184
|
} else {
|
|
2887
|
-
|
|
1185
|
+
setSelectionModel(selectionModel);
|
|
2888
1186
|
}
|
|
2889
1187
|
};
|
|
2890
1188
|
const selectionStatus = useRef({
|
|
2891
1189
|
type: 'none',
|
|
2892
1190
|
numberOfSelectedRows: 0,
|
|
2893
1191
|
numberOfSelectedRowsInPage: 0,
|
|
2894
|
-
page
|
|
2895
|
-
pageSize:
|
|
1192
|
+
page,
|
|
1193
|
+
pageSize: pageSize
|
|
2896
1194
|
});
|
|
2897
1195
|
|
|
2898
1196
|
// in server-side pagination we want to update the selection status
|
|
2899
1197
|
// every time we navigate between pages, resize our page or select something
|
|
2900
1198
|
useEffect(() => {
|
|
2901
1199
|
if (paginationMode == 'server') {
|
|
2902
|
-
onServerSideSelectionStatusChange(Array.isArray(
|
|
1200
|
+
onServerSideSelectionStatusChange(Array.isArray(selectionModel) ? selectionModel : [selectionModel], apiRef, selectionStatus, isRowSelectable, page, pageSize);
|
|
2903
1201
|
}
|
|
2904
|
-
}, [
|
|
1202
|
+
}, [selectionModel, page, pageSize]);
|
|
2905
1203
|
if (!Array.isArray(rows)) {
|
|
2906
1204
|
return null;
|
|
2907
1205
|
}
|
|
@@ -2927,20 +1225,22 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
2927
1225
|
ref: datagridRef,
|
|
2928
1226
|
className: classNames(StatefulDataGrid.className, className),
|
|
2929
1227
|
$height: height
|
|
2930
|
-
}, /*#__PURE__*/React__default.createElement(DataGridPro, _extends
|
|
1228
|
+
}, /*#__PURE__*/React__default.createElement(DataGridPro, _extends({}, forwardedProps, {
|
|
2931
1229
|
apiRef: apiRef,
|
|
2932
1230
|
columns: columns,
|
|
2933
1231
|
columnVisibilityModel: columnVisibilityModel,
|
|
2934
1232
|
filterModel: filterModel,
|
|
2935
1233
|
onColumnVisibilityModelChange: onColumnVisibilityModelChange,
|
|
2936
1234
|
onFilterModelChange: onFilterModelChange,
|
|
2937
|
-
|
|
1235
|
+
onPageChange: onPageChange,
|
|
1236
|
+
onPageSizeChange: onPageSizeChange,
|
|
2938
1237
|
onPinnedColumnsChange: onPinnedColumnsChange,
|
|
2939
1238
|
onSortModelChange: onSortModelChange,
|
|
2940
|
-
|
|
1239
|
+
page: page,
|
|
1240
|
+
pageSize: pageSize,
|
|
2941
1241
|
pinnedColumns: pinnedColumns,
|
|
2942
1242
|
sortModel: sortModel,
|
|
2943
|
-
|
|
1243
|
+
rowsPerPageOptions: rowsPerPageOptions,
|
|
2944
1244
|
onColumnWidthChange: onColumnWidthChange,
|
|
2945
1245
|
initialState: initialState,
|
|
2946
1246
|
isRowSelectable: isRowSelectable,
|
|
@@ -2951,74 +1251,79 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
2951
1251
|
rowCount: rowCount,
|
|
2952
1252
|
autoHeight: autoHeight,
|
|
2953
1253
|
checkboxSelectionVisibleOnly: Boolean(pagination),
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
|
|
1254
|
+
columnTypes: _objectSpread2(_objectSpread2({}, customColumnTypes), propsColumnTypes),
|
|
1255
|
+
components: _objectSpread2(_objectSpread2({
|
|
1256
|
+
BaseButton,
|
|
1257
|
+
BaseCheckbox,
|
|
1258
|
+
// BaseTextField,
|
|
1259
|
+
BasePopper,
|
|
1260
|
+
ColumnFilteredIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2960
1261
|
displayName: "ColumnFilteredIcon"
|
|
2961
1262
|
})),
|
|
2962
|
-
|
|
1263
|
+
ColumnSelectorIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2963
1264
|
displayName: "ColumnSelectorIcon"
|
|
2964
1265
|
})),
|
|
2965
|
-
|
|
1266
|
+
ColumnSortedAscendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2966
1267
|
displayName: "ColumnSortedAscendingIcon"
|
|
2967
1268
|
})),
|
|
2968
|
-
|
|
1269
|
+
ColumnSortedDescendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2969
1270
|
displayName: "ColumnSortedDescendingIcon"
|
|
2970
1271
|
})),
|
|
2971
|
-
|
|
1272
|
+
DensityCompactIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2972
1273
|
displayName: "DensityCompactIcon"
|
|
2973
1274
|
})),
|
|
2974
|
-
|
|
1275
|
+
DensityStandardIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2975
1276
|
displayName: "DensityStandardIcon"
|
|
2976
1277
|
})),
|
|
2977
|
-
|
|
1278
|
+
DensityComfortableIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2978
1279
|
displayName: "DensityComfortableIcon"
|
|
2979
1280
|
})),
|
|
2980
|
-
|
|
1281
|
+
DetailPanelCollapseIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2981
1282
|
displayName: "DetailPanelCollapseIcon"
|
|
2982
1283
|
})),
|
|
2983
|
-
|
|
1284
|
+
DetailPanelExpandIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2984
1285
|
displayName: "DetailPanelExpandIcon"
|
|
2985
1286
|
})),
|
|
2986
|
-
|
|
1287
|
+
ExportIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2987
1288
|
displayName: "ExportIcon"
|
|
2988
1289
|
})),
|
|
2989
|
-
|
|
1290
|
+
OpenFilterButtonIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({
|
|
2990
1291
|
displayName: "OpenFilterButtonIcon"
|
|
2991
1292
|
}, props))
|
|
2992
|
-
},
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
|
-
return pagination ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, _extends
|
|
1293
|
+
}, components), {}, {
|
|
1294
|
+
Toolbar: ToolbarWrapper,
|
|
1295
|
+
Pagination: props => {
|
|
1296
|
+
return pagination ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, _extends({}, props, {
|
|
2996
1297
|
displaySelection: false,
|
|
2997
1298
|
displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
|
|
2998
1299
|
displayPagination: ['bottom', 'both'].includes(paginationPlacement),
|
|
2999
1300
|
selectionStatus: selectionStatus.current,
|
|
3000
|
-
|
|
3001
|
-
|
|
3002
|
-
|
|
1301
|
+
page: page,
|
|
1302
|
+
pageSize: pageSize,
|
|
1303
|
+
onPageChange: onPageChange,
|
|
1304
|
+
onPageSizeChange: onPageSizeChange,
|
|
1305
|
+
rowsPerPageOptions: rowsPerPageOptions,
|
|
3003
1306
|
paginationProps: paginationProps,
|
|
3004
1307
|
paginationMode: paginationMode,
|
|
3005
1308
|
rowCount: rowCount
|
|
3006
|
-
})) : /*#__PURE__*/React__default.createElement(ControlledPagination, _extends
|
|
1309
|
+
})) : /*#__PURE__*/React__default.createElement(ControlledPagination, _extends({}, props, {
|
|
3007
1310
|
displaySelection: false,
|
|
3008
1311
|
displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
|
|
3009
1312
|
displayPagination: ['bottom', 'both'].includes(paginationPlacement),
|
|
3010
1313
|
selectionStatus: selectionStatus.current,
|
|
3011
1314
|
apiRef: apiRef,
|
|
3012
1315
|
isRowSelectable: isRowSelectable,
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
1316
|
+
page: page,
|
|
1317
|
+
pageSize: pageSize,
|
|
1318
|
+
onPageChange: onPageChange,
|
|
1319
|
+
onPageSizeChange: onPageSizeChange,
|
|
1320
|
+
rowsPerPageOptions: rowsPerPageOptions,
|
|
3016
1321
|
paginationProps: paginationProps,
|
|
3017
1322
|
paginationMode: paginationMode
|
|
3018
1323
|
})) : null;
|
|
3019
1324
|
}
|
|
3020
1325
|
}),
|
|
3021
|
-
|
|
1326
|
+
componentsProps: _objectSpread2(_objectSpread2({}, componentsProps), {}, {
|
|
3022
1327
|
toolbar: _objectSpread2({
|
|
3023
1328
|
hideToolbar,
|
|
3024
1329
|
RenderedToolbar,
|
|
@@ -3029,16 +1334,18 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
3029
1334
|
selectionStatus,
|
|
3030
1335
|
apiRef,
|
|
3031
1336
|
isRowSelectable,
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
1337
|
+
page,
|
|
1338
|
+
pageSize,
|
|
1339
|
+
onPageChange,
|
|
1340
|
+
onPageSizeChange,
|
|
1341
|
+
rowsPerPageOptions,
|
|
3035
1342
|
paginationProps,
|
|
3036
1343
|
paginationMode,
|
|
3037
1344
|
rowCount
|
|
3038
|
-
},
|
|
1345
|
+
}, componentsProps === null || componentsProps === void 0 ? void 0 : componentsProps.toolbar)
|
|
3039
1346
|
}),
|
|
3040
|
-
|
|
3041
|
-
|
|
1347
|
+
selectionModel: selectionModel,
|
|
1348
|
+
onSelectionModelChange: (newSelectionModel, details) => {
|
|
3042
1349
|
if (pagination && paginationMode != 'server') {
|
|
3043
1350
|
const selectableRowsInPage = isRowSelectable ? gridPaginatedVisibleSortedGridRowEntriesSelector(apiRef).filter(_ref => {
|
|
3044
1351
|
let {
|
|
@@ -3096,7 +1403,7 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
3096
1403
|
};
|
|
3097
1404
|
}
|
|
3098
1405
|
}
|
|
3099
|
-
|
|
1406
|
+
onSelectionModelChange === null || onSelectionModelChange === void 0 ? void 0 : onSelectionModelChange(newSelectionModel, details);
|
|
3100
1407
|
},
|
|
3101
1408
|
sx: _objectSpread2(_objectSpread2({}, sx), {}, {
|
|
3102
1409
|
'.MuiDataGrid-columnHeaders': {
|
|
@@ -3112,5 +1419,5 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
3112
1419
|
StatefulDataGrid.className = CLASSNAME;
|
|
3113
1420
|
StatefulDataGrid.displayName = COMPONENT_NAME;
|
|
3114
1421
|
|
|
3115
|
-
export {
|
|
1422
|
+
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 };
|
|
3116
1423
|
//# sourceMappingURL=StatefulDataGrid2.js.map
|