@redsift/table 11.11.0-muiv5 → 11.11.0-muiv6
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 +53 -33
- package/_internal/ControlledPagination.js.map +1 -1
- package/_internal/DataGrid2.js +64 -80
- 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 +1933 -238
- 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 +11 -17
- package/_internal/ToolbarWrapper2.js.map +1 -1
- package/_internal/_rollupPluginBabelHelpers.js +1 -1
- package/_internal/useControlledDatagridState.js +24 -1859
- package/_internal/useControlledDatagridState.js.map +1 -1
- package/index.d.ts +54 -54
- package/index.js +48 -3
- package/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,15 +1,1791 @@
|
|
|
1
|
-
import { _ as _objectSpread2,
|
|
1
|
+
import { _ as _objectSpread2, a as _objectWithoutProperties, b as _extends$1 } from './_rollupPluginBabelHelpers.js';
|
|
2
|
+
import * as React from 'react';
|
|
2
3
|
import React__default, { useCallback, useEffect, useMemo, forwardRef, useRef, useState } from 'react';
|
|
3
4
|
import classNames from 'classnames';
|
|
4
|
-
import { useTheme, ThemeProvider, RedsiftColorBlueN, RedsiftColorNeutralXDarkGrey, RedsiftColorNeutralWhite } from '@redsift/design-system';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { Icon, useTheme as useTheme$1, ThemeProvider, RedsiftColorBlueN, RedsiftColorNeutralXDarkGrey, RedsiftColorNeutralWhite } from '@redsift/design-system';
|
|
6
|
+
import { getGridNumericOperators as getGridNumericOperators$1, GridFilterInputValue, GridFilterInputSingleSelect, GridFilterInputMultipleValue, GridFilterInputMultipleSingleSelect, getGridStringOperators as getGridStringOperators$1, getGridBooleanOperators, getGridDateOperators, getGridSingleSelectOperators, GridLogicOperator, useGridApiRef, DataGridPro, gridPaginatedVisibleSortedGridRowEntriesSelector, gridPaginatedVisibleSortedGridRowIdsSelector, gridFilteredSortedRowEntriesSelector, gridFilteredSortedRowIdsSelector } from '@mui/x-data-grid-pro';
|
|
7
|
+
import { L as LicenseInfo, u as useControlledDatagridState, T as ThemeProvider$1, S as StyledDataGrid } from './useControlledDatagridState.js';
|
|
8
|
+
import { mdiSync } from '@redsift/icons';
|
|
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';
|
|
8
12
|
import { T as Toolbar } from './Toolbar2.js';
|
|
9
|
-
import { o as onServerSideSelectionStatusChange, S as ServerSideControlledPagination, C as ControlledPagination } from './ControlledPagination.js';
|
|
10
13
|
import { B as BaseButton, a as BaseCheckbox, c as BasePopper, b as BaseIcon } from './BasePopper.js';
|
|
11
14
|
import { T as ToolbarWrapper } from './ToolbarWrapper2.js';
|
|
12
15
|
|
|
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 doesNotHaveAnyOf = {
|
|
1584
|
+
label: "doesn't have any of",
|
|
1585
|
+
value: 'doesNotHaveAnyOf',
|
|
1586
|
+
getApplyFilterFn: filterItem => {
|
|
1587
|
+
if (!filterItem.field || !filterItem.value || !Array.isArray(filterItem.value) || filterItem.value.length === 0) {
|
|
1588
|
+
return null;
|
|
1589
|
+
}
|
|
1590
|
+
return params => {
|
|
1591
|
+
const cellValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1592
|
+
|
|
1593
|
+
// Return true only if none of the filter values are in the cell values
|
|
1594
|
+
return filterItem.value.every(filterVal => !cellValues.map(value => String(value)).includes(filterVal));
|
|
1595
|
+
};
|
|
1596
|
+
},
|
|
1597
|
+
InputComponent: GridFilterInputMultipleValue
|
|
1598
|
+
};
|
|
1599
|
+
const DOES_NOT_HAVE_ANY_OF = doesNotHaveAnyOf;
|
|
1600
|
+
const DOES_NOT_HAVE_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, DOES_NOT_HAVE_ANY_OF), {}, {
|
|
1601
|
+
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1602
|
+
});
|
|
1603
|
+
|
|
1604
|
+
const endsWithAnyOfOperator = {
|
|
1605
|
+
label: 'ends with any of',
|
|
1606
|
+
value: 'endsWithAnyOf',
|
|
1607
|
+
getApplyFilterFn: filterItem => {
|
|
1608
|
+
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1609
|
+
return null;
|
|
1610
|
+
}
|
|
1611
|
+
return params => {
|
|
1612
|
+
if (filterItem.value.length === 0) {
|
|
1613
|
+
return true;
|
|
1614
|
+
}
|
|
1615
|
+
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1616
|
+
let match = false;
|
|
1617
|
+
filterItem.value.forEach(filteredValue => {
|
|
1618
|
+
paramValues.forEach(paramValue => {
|
|
1619
|
+
if (String(paramValue).endsWith(filteredValue)) {
|
|
1620
|
+
match = true;
|
|
1621
|
+
}
|
|
1622
|
+
});
|
|
1623
|
+
});
|
|
1624
|
+
return match;
|
|
1625
|
+
};
|
|
1626
|
+
},
|
|
1627
|
+
InputComponent: GridFilterInputMultipleValue
|
|
1628
|
+
};
|
|
1629
|
+
const ENDS_WITH_ANY_OF = endsWithAnyOfOperator;
|
|
1630
|
+
|
|
1631
|
+
const isAnyOfOperator = {
|
|
1632
|
+
label: 'is any of',
|
|
1633
|
+
value: 'isAnyOf',
|
|
1634
|
+
getApplyFilterFn: filterItem => {
|
|
1635
|
+
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1636
|
+
return null;
|
|
1637
|
+
}
|
|
1638
|
+
return params => {
|
|
1639
|
+
if (filterItem.value.length === 0) {
|
|
1640
|
+
return true;
|
|
1641
|
+
}
|
|
1642
|
+
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1643
|
+
for (const paramValue of paramValues) {
|
|
1644
|
+
if (filterItem.value.includes(String(paramValue))) {
|
|
1645
|
+
return true;
|
|
1646
|
+
}
|
|
1647
|
+
}
|
|
1648
|
+
return false;
|
|
1649
|
+
};
|
|
1650
|
+
},
|
|
1651
|
+
InputComponent: GridFilterInputMultipleValue
|
|
1652
|
+
};
|
|
1653
|
+
const IS_ANY_OF = isAnyOfOperator;
|
|
1654
|
+
const IS_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS_ANY_OF), {}, {
|
|
1655
|
+
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1656
|
+
});
|
|
1657
|
+
|
|
1658
|
+
const isAnyOfIOperator = {
|
|
1659
|
+
label: 'is any of (case-insensitive)',
|
|
1660
|
+
value: 'isAnyOfI',
|
|
1661
|
+
getApplyFilterFn: filterItem => {
|
|
1662
|
+
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1663
|
+
return null;
|
|
1664
|
+
}
|
|
1665
|
+
const lowerCaseFilterValues = filterItem.value.map(v => String(v).toLowerCase());
|
|
1666
|
+
return params => {
|
|
1667
|
+
if (filterItem.value.length === 0) {
|
|
1668
|
+
return true;
|
|
1669
|
+
}
|
|
1670
|
+
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1671
|
+
for (const paramValue of paramValues) {
|
|
1672
|
+
if (lowerCaseFilterValues.includes(String(paramValue).toLowerCase())) {
|
|
1673
|
+
return true;
|
|
1674
|
+
}
|
|
1675
|
+
}
|
|
1676
|
+
return false;
|
|
1677
|
+
};
|
|
1678
|
+
},
|
|
1679
|
+
InputComponent: GridFilterInputMultipleValue
|
|
1680
|
+
};
|
|
1681
|
+
const IS_ANY_OF_I = isAnyOfIOperator;
|
|
1682
|
+
const IS_ANY_OF_I_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS_ANY_OF_I), {}, {
|
|
1683
|
+
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1684
|
+
});
|
|
1685
|
+
|
|
1686
|
+
const hasAnyOfOperator = {
|
|
1687
|
+
label: 'has any of',
|
|
1688
|
+
value: 'hasAnyOf',
|
|
1689
|
+
getApplyFilterFn: filterItem => {
|
|
1690
|
+
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1691
|
+
return null;
|
|
1692
|
+
}
|
|
1693
|
+
return params => {
|
|
1694
|
+
if (filterItem.value.length === 0) {
|
|
1695
|
+
return true;
|
|
1696
|
+
}
|
|
1697
|
+
const cellValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1698
|
+
const filterItemValues = Array.isArray(filterItem.value) ? filterItem.value : [filterItem.value];
|
|
1699
|
+
return filterItemValues.some(v => cellValues.map(value => String(value)).includes(v));
|
|
1700
|
+
};
|
|
1701
|
+
},
|
|
1702
|
+
InputComponent: GridFilterInputMultipleValue
|
|
1703
|
+
};
|
|
1704
|
+
const HAS_ANY_OF = hasAnyOfOperator;
|
|
1705
|
+
const HAS_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, HAS_ANY_OF), {}, {
|
|
1706
|
+
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1707
|
+
});
|
|
1708
|
+
|
|
1709
|
+
const isNotAnyOfOperator = {
|
|
1710
|
+
label: 'is not any of',
|
|
1711
|
+
value: 'isNotAnyOf',
|
|
1712
|
+
getApplyFilterFn: filterItem => {
|
|
1713
|
+
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1714
|
+
return null;
|
|
1715
|
+
}
|
|
1716
|
+
return params => {
|
|
1717
|
+
if (filterItem.value.length === 0) {
|
|
1718
|
+
return true;
|
|
1719
|
+
}
|
|
1720
|
+
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1721
|
+
for (const paramValue of paramValues) {
|
|
1722
|
+
if (filterItem.value.includes(String(paramValue))) {
|
|
1723
|
+
return false;
|
|
1724
|
+
}
|
|
1725
|
+
}
|
|
1726
|
+
return true;
|
|
1727
|
+
};
|
|
1728
|
+
},
|
|
1729
|
+
InputComponent: GridFilterInputMultipleValue
|
|
1730
|
+
};
|
|
1731
|
+
const IS_NOT_ANY_OF = isNotAnyOfOperator;
|
|
1732
|
+
const IS_NOT_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS_NOT_ANY_OF), {}, {
|
|
1733
|
+
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1734
|
+
});
|
|
1735
|
+
|
|
1736
|
+
const startsWithAnyOfOperator = {
|
|
1737
|
+
label: 'starts with any of',
|
|
1738
|
+
value: 'startsWithAnyOf',
|
|
1739
|
+
getApplyFilterFn: filterItem => {
|
|
1740
|
+
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1741
|
+
return null;
|
|
1742
|
+
}
|
|
1743
|
+
return params => {
|
|
1744
|
+
if (filterItem.value.length === 0) {
|
|
1745
|
+
return true;
|
|
1746
|
+
}
|
|
1747
|
+
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1748
|
+
let match = false;
|
|
1749
|
+
filterItem.value.forEach(filteredValue => {
|
|
1750
|
+
paramValues.forEach(paramValue => {
|
|
1751
|
+
if (String(paramValue).startsWith(filteredValue)) {
|
|
1752
|
+
match = true;
|
|
1753
|
+
}
|
|
1754
|
+
});
|
|
1755
|
+
});
|
|
1756
|
+
return match;
|
|
1757
|
+
};
|
|
1758
|
+
},
|
|
1759
|
+
InputComponent: GridFilterInputMultipleValue
|
|
1760
|
+
};
|
|
1761
|
+
const STARTS_WITH_ANY_OF = startsWithAnyOfOperator;
|
|
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
|
+
|
|
13
1789
|
const PAGINATION_MODEL_KEY = 'paginationModel';
|
|
14
1790
|
const FILTER_MODEL_KEY = 'filterModel';
|
|
15
1791
|
const SORT_MODEL_KEY = 'sortModel';
|
|
@@ -128,6 +1904,7 @@ const decodeDisplayArrayValue = value => {
|
|
|
128
1904
|
if (value === '') {
|
|
129
1905
|
return [];
|
|
130
1906
|
}
|
|
1907
|
+
|
|
131
1908
|
// Split by unencoded commas only (not %2C)
|
|
132
1909
|
// First, temporarily replace encoded commas, then split, then restore
|
|
133
1910
|
const TEMP_COMMA_PLACEHOLDER = '\x00COMMA\x00';
|
|
@@ -432,42 +2209,39 @@ const numberOperatorDecoder = {
|
|
|
432
2209
|
lt: '<',
|
|
433
2210
|
lte: '<='
|
|
434
2211
|
};
|
|
435
|
-
const isOperatorValueValid = (
|
|
436
|
-
const column = columns.find(column => column.field ===
|
|
2212
|
+
const isOperatorValueValid = (field, operator, columns) => {
|
|
2213
|
+
const column = columns.find(column => column.field === field);
|
|
437
2214
|
if (!column) {
|
|
438
2215
|
return false;
|
|
439
2216
|
}
|
|
440
2217
|
const columnType = (column === null || column === void 0 ? void 0 : column.type) || 'string';
|
|
441
|
-
const operators = operatorList[columnType];
|
|
2218
|
+
const operators = column.filterOperators || operatorList[columnType];
|
|
442
2219
|
if (!operators) {
|
|
443
2220
|
return false;
|
|
444
2221
|
}
|
|
445
|
-
|
|
446
|
-
return !!operators.filterOperators.find(op => columnType === 'number' && Object.keys(numberOperatorEncoder).includes(op.value) ? numberOperatorEncoder[op.value] === operatorValue : op['value'] === operatorValue);
|
|
447
|
-
}
|
|
448
|
-
return !!operators.find(op => ['number', 'rsNumber'].includes(columnType) && Object.keys(numberOperatorEncoder).includes(op.value) ? numberOperatorEncoder[op.value] === operatorValue : op['value'] === operatorValue);
|
|
2222
|
+
return !!operators.find(op => columnType === 'number' && Object.keys(numberOperatorEncoder).includes(op.value) ? numberOperatorEncoder[op.value] === operator : op.value === operator);
|
|
449
2223
|
};
|
|
450
2224
|
const listOperators = ['containsAnyOf', 'doesNotContainAnyOf', 'endsWithAnyOf', 'doesNotEndWithAnyOf', 'hasAnyOf', 'doesNotHaveAnyOf', 'isAnyOf', 'isNotAnyOf', 'startsWithAnyOf', 'doesNotStartWithAnyOf'];
|
|
451
2225
|
|
|
452
2226
|
// Check if the value doesn't break
|
|
453
|
-
const isValueValid = (value,
|
|
2227
|
+
const isValueValid = (value, field, columns, operator) => {
|
|
454
2228
|
var _column$type;
|
|
455
2229
|
// every field accepts undefined as value for default
|
|
456
2230
|
if (value === undefined || value === '') {
|
|
457
2231
|
return true;
|
|
458
2232
|
}
|
|
459
2233
|
|
|
460
|
-
// xxxAnyOf accepts as value only lists, and we are
|
|
2234
|
+
// xxxAnyOf accepts as value only lists, and we are declaring them in the
|
|
461
2235
|
// URL as `list=[...]`
|
|
462
|
-
if (listOperators.includes(
|
|
2236
|
+
if (listOperators.includes(operator)) {
|
|
463
2237
|
return Array.isArray(value) || value === '';
|
|
464
2238
|
}
|
|
465
2239
|
|
|
466
2240
|
// We are accepting arrays only if they are of the 'xxxAnyOf' type
|
|
467
|
-
if (Array.isArray(value) && !listOperators.includes(
|
|
2241
|
+
if (Array.isArray(value) && !listOperators.includes(operator)) {
|
|
468
2242
|
return false;
|
|
469
2243
|
}
|
|
470
|
-
const column = columns.find(column => column.field ===
|
|
2244
|
+
const column = columns.find(column => column.field === field);
|
|
471
2245
|
if (!column) {
|
|
472
2246
|
return false;
|
|
473
2247
|
}
|
|
@@ -505,7 +2279,7 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
505
2279
|
if (!searchString) {
|
|
506
2280
|
return 'invalid';
|
|
507
2281
|
}
|
|
508
|
-
let
|
|
2282
|
+
let logicOperator = GridLogicOperator.And;
|
|
509
2283
|
let quickFilterValues = [];
|
|
510
2284
|
const searchParams = new URLSearchParams();
|
|
511
2285
|
for (const [key, value] of new URLSearchParams(searchString)) {
|
|
@@ -513,7 +2287,7 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
513
2287
|
searchParams.set(key, value);
|
|
514
2288
|
}
|
|
515
2289
|
if (key === '_logicOperator') {
|
|
516
|
-
|
|
2290
|
+
logicOperator = value === GridLogicOperator.And || value === GridLogicOperator.Or ? value : GridLogicOperator.And;
|
|
517
2291
|
}
|
|
518
2292
|
if (key === '_quickFilterValues') {
|
|
519
2293
|
try {
|
|
@@ -532,7 +2306,7 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
532
2306
|
if (isInvalid) {
|
|
533
2307
|
return;
|
|
534
2308
|
}
|
|
535
|
-
const field = key.split('[')[0].slice(1);
|
|
2309
|
+
const field = key.split('[')[0].slice(1);
|
|
536
2310
|
if (!fields.includes(field)) {
|
|
537
2311
|
return;
|
|
538
2312
|
}
|
|
@@ -549,7 +2323,6 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
549
2323
|
return;
|
|
550
2324
|
}
|
|
551
2325
|
const operator = splitRight[0];
|
|
552
|
-
// if the operator is not part of the valid operators invalidate the URL
|
|
553
2326
|
if (!isOperatorValueValid(field, operator, columns) || Array.isArray(operator)) {
|
|
554
2327
|
isInvalid = true;
|
|
555
2328
|
return;
|
|
@@ -561,41 +2334,37 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
561
2334
|
return;
|
|
562
2335
|
}
|
|
563
2336
|
items.push({
|
|
564
|
-
|
|
565
|
-
|
|
2337
|
+
field,
|
|
2338
|
+
operator: columnType === 'number' && Object.keys(numberOperatorDecoder).includes(operator) ? numberOperatorDecoder[operator] : operator,
|
|
566
2339
|
id,
|
|
567
2340
|
value: listOperators.includes(operator) && decodedValue === '' ? [] : decodedValue,
|
|
568
2341
|
type
|
|
569
2342
|
});
|
|
570
2343
|
});
|
|
571
|
-
|
|
572
|
-
// If we found some condition that results in an invalid URL,
|
|
573
|
-
// return the empty filterModel (this will trigger the localStorage)
|
|
574
|
-
// and will pick up the last valid search
|
|
575
2344
|
if (isInvalid) {
|
|
576
2345
|
return 'invalid';
|
|
577
2346
|
}
|
|
578
2347
|
return {
|
|
579
2348
|
items,
|
|
580
|
-
|
|
2349
|
+
logicOperator,
|
|
581
2350
|
quickFilterValues
|
|
582
2351
|
};
|
|
583
2352
|
};
|
|
584
2353
|
const getSearchParamsFromFilterModel = filterModel => {
|
|
585
2354
|
var _filterModel$quickFil;
|
|
586
2355
|
const searchParams = new URLSearchParams();
|
|
587
|
-
searchParams.set('_logicOperator', filterModel['
|
|
2356
|
+
searchParams.set('_logicOperator', filterModel['logicOperator'] || '');
|
|
588
2357
|
filterModel['items'].forEach(item => {
|
|
589
2358
|
const {
|
|
590
|
-
|
|
591
|
-
|
|
2359
|
+
field,
|
|
2360
|
+
operator,
|
|
592
2361
|
value,
|
|
593
2362
|
type
|
|
594
2363
|
} = item;
|
|
595
|
-
if (Object.keys(numberOperatorEncoder).includes(
|
|
596
|
-
searchParams.set(`_${
|
|
2364
|
+
if (Object.keys(numberOperatorEncoder).includes(operator)) {
|
|
2365
|
+
searchParams.set(`_${field}[${numberOperatorEncoder[operator]},${encodeValue(type)}]`, encodeValue(value));
|
|
597
2366
|
} else {
|
|
598
|
-
searchParams.set(`_${
|
|
2367
|
+
searchParams.set(`_${field}[${encodeValue(operator)},${encodeValue(type)}]`, encodeValue(value));
|
|
599
2368
|
}
|
|
600
2369
|
});
|
|
601
2370
|
if ((_filterModel$quickFil = filterModel.quickFilterValues) !== null && _filterModel$quickFil !== void 0 && _filterModel$quickFil.length) {
|
|
@@ -611,7 +2380,7 @@ const getSearchParamsFromFilterModel = filterModel => {
|
|
|
611
2380
|
const getFilterModel = (search, columns, localStorageFilters, setLocalStorageFilters, initialState, isNewVersion) => {
|
|
612
2381
|
const defaultValue = initialState && initialState.filter && initialState.filter.filterModel ? initialState.filter.filterModel : {
|
|
613
2382
|
items: [],
|
|
614
|
-
|
|
2383
|
+
logicOperator: GridLogicOperator.And
|
|
615
2384
|
};
|
|
616
2385
|
if (isNewVersion) {
|
|
617
2386
|
return defaultValue;
|
|
@@ -750,13 +2519,38 @@ const getPaginationModel = (search, localStoragePagination, setLocalStoragePagin
|
|
|
750
2519
|
|
|
751
2520
|
/** COLUMN VISIBILITY */
|
|
752
2521
|
|
|
2522
|
+
const getColumnVisibilityFromString = (searchString, columns) => {
|
|
2523
|
+
if (!searchString) {
|
|
2524
|
+
return 'invalid';
|
|
2525
|
+
}
|
|
2526
|
+
const searchParams = new URLSearchParams(searchString);
|
|
2527
|
+
const value = searchParams.get('_columnVisibility');
|
|
2528
|
+
if (value === '' || value === null || value === '[]') {
|
|
2529
|
+
return 'invalid';
|
|
2530
|
+
}
|
|
2531
|
+
const parsedFields = value.slice(1, value.length - 1).split(',');
|
|
2532
|
+
const fields = columns.map(column => column.field);
|
|
2533
|
+
const visibility = {};
|
|
2534
|
+
for (const field of fields) {
|
|
2535
|
+
visibility[field] = false;
|
|
2536
|
+
}
|
|
2537
|
+
for (const parsedField of parsedFields) {
|
|
2538
|
+
if (fields.includes(parsedField)) {
|
|
2539
|
+
visibility[parsedField] = true;
|
|
2540
|
+
}
|
|
2541
|
+
}
|
|
2542
|
+
if (Object.values(visibility).filter(v => v === true).length === 0) {
|
|
2543
|
+
return 'invalid';
|
|
2544
|
+
}
|
|
2545
|
+
return visibility;
|
|
2546
|
+
};
|
|
753
2547
|
const getSearchParamsFromColumnVisibility = (columnVisibility, columns) => {
|
|
754
2548
|
const searchParams = new URLSearchParams();
|
|
755
|
-
const
|
|
2549
|
+
const fields = columns.map(column => column.field);
|
|
756
2550
|
|
|
757
2551
|
// if column visibility model is empty, show all columns
|
|
758
2552
|
if (Object.keys(columnVisibility).length == 0) {
|
|
759
|
-
searchParams.set('_columnVisibility', `[${
|
|
2553
|
+
searchParams.set('_columnVisibility', `[${fields.join(',')}]`);
|
|
760
2554
|
return searchParams;
|
|
761
2555
|
}
|
|
762
2556
|
const finalColumnVisibility = columns.filter(c => {
|
|
@@ -767,63 +2561,10 @@ const getSearchParamsFromColumnVisibility = (columnVisibility, columns) => {
|
|
|
767
2561
|
[colName]: true
|
|
768
2562
|
});
|
|
769
2563
|
}, columnVisibility);
|
|
770
|
-
const visibleColumns =
|
|
771
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
772
|
-
.filter(_ref => {
|
|
773
|
-
let [_, visible] = _ref;
|
|
774
|
-
return visible;
|
|
775
|
-
})
|
|
776
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
777
|
-
.map(_ref2 => {
|
|
778
|
-
let [column, _] = _ref2;
|
|
779
|
-
return encodeValue(column);
|
|
780
|
-
});
|
|
2564
|
+
const visibleColumns = fields.filter(column => finalColumnVisibility[column] !== false);
|
|
781
2565
|
searchParams.set('_columnVisibility', `[${visibleColumns.join(',')}]`);
|
|
782
2566
|
return searchParams;
|
|
783
2567
|
};
|
|
784
|
-
const getColumnVisibilityFromString = (notParsed, tableColumns) => {
|
|
785
|
-
if (!notParsed || notParsed.length === 1 && notParsed[0] === '?') {
|
|
786
|
-
return 'invalid';
|
|
787
|
-
}
|
|
788
|
-
// remove the initial ? if present
|
|
789
|
-
const parsed = notParsed[0] === '?' ? notParsed.slice(1) : notParsed;
|
|
790
|
-
const visibility = {};
|
|
791
|
-
let exist = false;
|
|
792
|
-
let visibleColumnsCount = 0;
|
|
793
|
-
for (const item of parsed.split('&')) {
|
|
794
|
-
// if it's not column visibility field, skip
|
|
795
|
-
const fieldURL = item.split('=')[0];
|
|
796
|
-
if (fieldURL !== '_columnVisibility') {
|
|
797
|
-
continue;
|
|
798
|
-
}
|
|
799
|
-
// e.g. item = _columnVisibility[abc,def]
|
|
800
|
-
const left = item.split(']')[0];
|
|
801
|
-
if (left.split('[').length < 2) {
|
|
802
|
-
continue;
|
|
803
|
-
}
|
|
804
|
-
const encodedValues = item.split('[')[1].split(']')[0];
|
|
805
|
-
if (typeof encodedValues !== 'string') {
|
|
806
|
-
continue;
|
|
807
|
-
}
|
|
808
|
-
exist = true;
|
|
809
|
-
const columnFields = tableColumns.map(column => column.field);
|
|
810
|
-
// TODO: Add validation that , is present
|
|
811
|
-
const columns = encodedValues.split(',').map(value => decodeValue(value));
|
|
812
|
-
|
|
813
|
-
// for each column, check if it's visible and add it to visibility model
|
|
814
|
-
for (const column of columnFields) {
|
|
815
|
-
const isColumnVisible = columns.includes(column);
|
|
816
|
-
visibility[column] = isColumnVisible;
|
|
817
|
-
if (isColumnVisible) {
|
|
818
|
-
visibleColumnsCount += 1;
|
|
819
|
-
}
|
|
820
|
-
}
|
|
821
|
-
}
|
|
822
|
-
if (visibleColumnsCount === 0 && !exist) {
|
|
823
|
-
return 'invalid';
|
|
824
|
-
}
|
|
825
|
-
return visibility;
|
|
826
|
-
};
|
|
827
2568
|
|
|
828
2569
|
// Rules:
|
|
829
2570
|
// - if we have something in the URL, use that info
|
|
@@ -884,8 +2625,8 @@ const getPinnedColumnsFromString = (notParsed, tableColumns) => {
|
|
|
884
2625
|
if (typeof encodedValues !== 'string') {
|
|
885
2626
|
continue;
|
|
886
2627
|
}
|
|
887
|
-
const
|
|
888
|
-
const columns = encodedValues.split(',').map(value => decodeValue(value)).filter(val => typeof val === 'string' &&
|
|
2628
|
+
const fields = [...tableColumns.map(column => column.field), '__check__'];
|
|
2629
|
+
const columns = encodedValues.split(',').map(value => decodeValue(value)).filter(val => typeof val === 'string' && fields.includes(val));
|
|
889
2630
|
if (fieldURL === '_pinnedColumnsLeft') {
|
|
890
2631
|
pinnedColumns['left'] = columns;
|
|
891
2632
|
}
|
|
@@ -893,9 +2634,9 @@ const getPinnedColumnsFromString = (notParsed, tableColumns) => {
|
|
|
893
2634
|
pinnedColumns['right'] = columns;
|
|
894
2635
|
}
|
|
895
2636
|
}
|
|
896
|
-
return pinnedColumns
|
|
897
|
-
left: pinnedColumns
|
|
898
|
-
right: pinnedColumns
|
|
2637
|
+
return pinnedColumns.left && pinnedColumns.left.length > 0 || pinnedColumns.right && pinnedColumns.right.length > 0 ? {
|
|
2638
|
+
left: pinnedColumns.left || [],
|
|
2639
|
+
right: pinnedColumns.right || []
|
|
899
2640
|
} : 'invalid';
|
|
900
2641
|
};
|
|
901
2642
|
const getSearchParamsFromPinnedColumns = pinnedColumns => {
|
|
@@ -945,7 +2686,7 @@ const getSearchParamsFromTab = search => {
|
|
|
945
2686
|
}
|
|
946
2687
|
return searchParams;
|
|
947
2688
|
};
|
|
948
|
-
const getFinalSearch =
|
|
2689
|
+
const getFinalSearch = _ref => {
|
|
949
2690
|
let {
|
|
950
2691
|
search,
|
|
951
2692
|
localStorageVersion,
|
|
@@ -955,7 +2696,7 @@ const getFinalSearch = _ref3 => {
|
|
|
955
2696
|
columnsVisibilityModel,
|
|
956
2697
|
pinnedColumnsModel,
|
|
957
2698
|
columns
|
|
958
|
-
} =
|
|
2699
|
+
} = _ref;
|
|
959
2700
|
const filterModelSearch = getSearchParamsFromFilterModel(filterModel);
|
|
960
2701
|
const sortModelSearch = getSearchParamsFromSorting(sortModel);
|
|
961
2702
|
const paginationModelSearch = getSearchParamsFromPagination(paginationModel);
|
|
@@ -1028,14 +2769,14 @@ const getModelsParsedOrUpdateLocalStorage = (search, localStorageVersion, column
|
|
|
1028
2769
|
pinnedColumnsModel
|
|
1029
2770
|
};
|
|
1030
2771
|
};
|
|
1031
|
-
const updateUrl = (
|
|
2772
|
+
const updateUrl = (_ref2, search, localStorageVersion, historyReplace, columns) => {
|
|
1032
2773
|
let {
|
|
1033
2774
|
filterModel,
|
|
1034
2775
|
sortModel,
|
|
1035
2776
|
paginationModel,
|
|
1036
2777
|
columnsModel: columnsVisibilityModel,
|
|
1037
2778
|
pinnedColumnsModel
|
|
1038
|
-
} =
|
|
2779
|
+
} = _ref2;
|
|
1039
2780
|
// Convert from display format to internal format if needed
|
|
1040
2781
|
const decodedSearch = getDecodedSearchFromUrl(search, columns);
|
|
1041
2782
|
const newSearch = getFinalSearch({
|
|
@@ -1064,17 +2805,17 @@ const updateUrl = (_ref4, search, localStorageVersion, historyReplace, columns)
|
|
|
1064
2805
|
// do not use it for equivalence (e.g. with value `3` and undefined we
|
|
1065
2806
|
// will get 0).
|
|
1066
2807
|
const compareFilters = (firstFilter, secondFilter) => {
|
|
1067
|
-
if (firstFilter.
|
|
2808
|
+
if (firstFilter.field < secondFilter.field) {
|
|
1068
2809
|
return -1;
|
|
1069
|
-
} else if (firstFilter.
|
|
2810
|
+
} else if (firstFilter.field > secondFilter.field) {
|
|
1070
2811
|
return 1;
|
|
1071
2812
|
}
|
|
1072
|
-
if (firstFilter.
|
|
2813
|
+
if (firstFilter.operator === undefined || secondFilter.operator === undefined) {
|
|
1073
2814
|
return 0;
|
|
1074
2815
|
}
|
|
1075
|
-
if (firstFilter.
|
|
2816
|
+
if (firstFilter.operator < secondFilter.operator) {
|
|
1076
2817
|
return -1;
|
|
1077
|
-
} else if (firstFilter.
|
|
2818
|
+
} else if (firstFilter.operator > secondFilter.operator) {
|
|
1078
2819
|
return 1;
|
|
1079
2820
|
}
|
|
1080
2821
|
if (firstFilter.value < secondFilter.value) {
|
|
@@ -1085,18 +2826,18 @@ const compareFilters = (firstFilter, secondFilter) => {
|
|
|
1085
2826
|
return 0;
|
|
1086
2827
|
};
|
|
1087
2828
|
const areFiltersEquivalent = (firstFilter, secondFilter) => {
|
|
1088
|
-
return firstFilter.
|
|
2829
|
+
return firstFilter.field === secondFilter.field && firstFilter.operator === secondFilter.operator && firstFilter.value === secondFilter.value;
|
|
1089
2830
|
};
|
|
1090
2831
|
const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
|
|
1091
2832
|
const {
|
|
1092
2833
|
items,
|
|
1093
|
-
|
|
2834
|
+
logicOperator
|
|
1094
2835
|
} = filterModel;
|
|
1095
2836
|
const {
|
|
1096
2837
|
items: itemsToMatch,
|
|
1097
|
-
|
|
2838
|
+
logicOperator: logicOperatorToMatch
|
|
1098
2839
|
} = filterModelToMatch;
|
|
1099
|
-
if (
|
|
2840
|
+
if (logicOperator !== logicOperatorToMatch) {
|
|
1100
2841
|
return false;
|
|
1101
2842
|
}
|
|
1102
2843
|
if (items.length !== itemsToMatch.length) {
|
|
@@ -1109,7 +2850,7 @@ const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
|
|
|
1109
2850
|
const filterToCompare = itemsToMatch[i];
|
|
1110
2851
|
|
|
1111
2852
|
// compareFilters return 0 if and only if the filters have the same
|
|
1112
|
-
//
|
|
2853
|
+
// field, operator, and value
|
|
1113
2854
|
if (!areFiltersEquivalent(filter, filterToCompare)) {
|
|
1114
2855
|
return false;
|
|
1115
2856
|
}
|
|
@@ -1118,8 +2859,6 @@ const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
|
|
|
1118
2859
|
};
|
|
1119
2860
|
|
|
1120
2861
|
// Get and Set data from LocalStorage WITHOUT useState
|
|
1121
|
-
|
|
1122
|
-
// triggering a state update and consecutive re-render
|
|
1123
2862
|
const useFetchState = (defaultValue, key) => {
|
|
1124
2863
|
let stickyValue = null;
|
|
1125
2864
|
try {
|
|
@@ -1127,16 +2866,7 @@ const useFetchState = (defaultValue, key) => {
|
|
|
1127
2866
|
} catch (e) {
|
|
1128
2867
|
console.error('StatefulDataGrid: error getting item from local storage: ', e);
|
|
1129
2868
|
}
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
// TODO: temporary workaround to avoid clashes when someone had sorting on the now-removed screenshot field (renamed to num_annotations)
|
|
1133
|
-
// 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
|
|
1134
|
-
if (parsedValue instanceof Array) {
|
|
1135
|
-
const fields = (parsedValue || []).map(item => item.field);
|
|
1136
|
-
if (fields.includes('screenshot') || fields.includes('diffs')) {
|
|
1137
|
-
parsedValue = defaultValue;
|
|
1138
|
-
}
|
|
1139
|
-
}
|
|
2869
|
+
const parsedValue = stickyValue !== null && stickyValue !== undefined && stickyValue !== 'undefined' ? JSON.parse(stickyValue) : defaultValue;
|
|
1140
2870
|
const updateValue = useCallback(value => {
|
|
1141
2871
|
try {
|
|
1142
2872
|
window.localStorage.setItem(key, JSON.stringify(value));
|
|
@@ -1147,6 +2877,8 @@ const useFetchState = (defaultValue, key) => {
|
|
|
1147
2877
|
return [parsedValue, updateValue];
|
|
1148
2878
|
};
|
|
1149
2879
|
|
|
2880
|
+
// import useLocalStorage from './useLocalStorage';
|
|
2881
|
+
|
|
1150
2882
|
const useTableStates = (id, version) => {
|
|
1151
2883
|
const [paginationModel, setPaginationModel] = useFetchState('', buildStorageKey({
|
|
1152
2884
|
id,
|
|
@@ -1203,8 +2935,7 @@ const useStatefulTable = props => {
|
|
|
1203
2935
|
onColumnVisibilityModelChange: propsOnColumnVisibilityModelChange,
|
|
1204
2936
|
onColumnWidthChange: propsOnColumnWidthChange,
|
|
1205
2937
|
onFilterModelChange: propsOnFilterModelChange,
|
|
1206
|
-
|
|
1207
|
-
onPageSizeChange: propsOnPageSizeChange,
|
|
2938
|
+
onPaginationModelChange: propsOnPaginationModelChange,
|
|
1208
2939
|
onPinnedColumnsChange: propsOnPinnedColumnsChange,
|
|
1209
2940
|
onSortModelChange: propsOnSortModelChange,
|
|
1210
2941
|
useRouter,
|
|
@@ -1234,7 +2965,7 @@ const useStatefulTable = props => {
|
|
|
1234
2965
|
setDimensionModel
|
|
1235
2966
|
} = useTableStates(id, localStorageVersion);
|
|
1236
2967
|
|
|
1237
|
-
// clearing up old version keys
|
|
2968
|
+
// clearing up old version keys, triggering only on first render
|
|
1238
2969
|
useEffect(() => clearPreviousVersionStorage(id, previousLocalStorageVersions), [id, previousLocalStorageVersions]);
|
|
1239
2970
|
const onColumnDimensionChange = useCallback(_ref => {
|
|
1240
2971
|
let {
|
|
@@ -1279,7 +3010,7 @@ const useStatefulTable = props => {
|
|
|
1279
3010
|
onFilterModelChange: (model, details) => {
|
|
1280
3011
|
const filterModel = _objectSpread2(_objectSpread2({}, model), {}, {
|
|
1281
3012
|
items: model.items.map(item => {
|
|
1282
|
-
const column = apiRef.current.getColumn(item.
|
|
3013
|
+
const column = apiRef.current.getColumn(item.field);
|
|
1283
3014
|
item.type = column.type || 'string';
|
|
1284
3015
|
return item;
|
|
1285
3016
|
}),
|
|
@@ -1317,34 +3048,16 @@ const useStatefulTable = props => {
|
|
|
1317
3048
|
}, search, localStorageVersion, historyReplace, columns);
|
|
1318
3049
|
},
|
|
1319
3050
|
pinnedColumns: pinnedColumnsModel,
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
updateUrl({
|
|
1327
|
-
filterModel: filterParsed,
|
|
1328
|
-
sortModel: sortModelParsed,
|
|
1329
|
-
paginationModel: {
|
|
1330
|
-
page,
|
|
1331
|
-
pageSize: paginationModelParsed.pageSize,
|
|
1332
|
-
direction
|
|
1333
|
-
},
|
|
1334
|
-
columnsModel: apiRef.current.state.columns.columnVisibilityModel,
|
|
1335
|
-
pinnedColumnsModel: pinnedColumnsModel
|
|
1336
|
-
}, search, localStorageVersion, historyReplace, columns);
|
|
1337
|
-
},
|
|
1338
|
-
onPageSizeChange: (pageSize, details) => {
|
|
1339
|
-
propsOnPageSizeChange === null || propsOnPageSizeChange === void 0 ? void 0 : propsOnPageSizeChange(pageSize, details);
|
|
3051
|
+
paginationModel: paginationModelParsed,
|
|
3052
|
+
onPaginationModelChange: (model, details) => {
|
|
3053
|
+
const paginationModel = _objectSpread2(_objectSpread2({}, model), {}, {
|
|
3054
|
+
direction: paginationModelParsed.page < model.page ? 'next' : 'back'
|
|
3055
|
+
});
|
|
3056
|
+
propsOnPaginationModelChange === null || propsOnPaginationModelChange === void 0 ? void 0 : propsOnPaginationModelChange(paginationModel, details);
|
|
1340
3057
|
updateUrl({
|
|
1341
3058
|
filterModel: filterParsed,
|
|
1342
3059
|
sortModel: sortModelParsed,
|
|
1343
|
-
paginationModel:
|
|
1344
|
-
page: paginationModelParsed.page,
|
|
1345
|
-
pageSize,
|
|
1346
|
-
direction: paginationModelParsed.direction
|
|
1347
|
-
},
|
|
3060
|
+
paginationModel: paginationModel,
|
|
1348
3061
|
columnsModel: apiRef.current.state.columns.columnVisibilityModel,
|
|
1349
3062
|
pinnedColumnsModel: pinnedColumnsModel
|
|
1350
3063
|
}, search, localStorageVersion, historyReplace, columns);
|
|
@@ -1370,7 +3083,7 @@ const useStatefulTable = props => {
|
|
|
1370
3083
|
};
|
|
1371
3084
|
};
|
|
1372
3085
|
|
|
1373
|
-
const _excluded = ["apiRef", "autoHeight", "className", "columns", "
|
|
3086
|
+
const _excluded = ["apiRef", "autoHeight", "className", "columns", "slots", "slotProps", "filterModel", "columnVisibilityModel", "pinnedColumns", "sortModel", "paginationModel", "height", "hideToolbar", "initialState", "isRowSelectable", "license", "localStorageVersion", "previousLocalStorageVersions", "onFilterModelChange", "rowSelectionModel", "onColumnWidthChange", "onPaginationModelChange", "onRowSelectionModelChange", "onColumnVisibilityModelChange", "onPinnedColumnsChange", "onSortModelChange", "pagination", "paginationPlacement", "paginationProps", "rows", "pageSizeOptions", "sx", "theme", "useRouter", "paginationMode", "rowCount"];
|
|
1374
3087
|
const COMPONENT_NAME = 'DataGrid';
|
|
1375
3088
|
const CLASSNAME = 'redsift-datagrid';
|
|
1376
3089
|
const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
@@ -1380,15 +3093,13 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1380
3093
|
autoHeight,
|
|
1381
3094
|
className,
|
|
1382
3095
|
columns,
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
componentsProps,
|
|
3096
|
+
slots,
|
|
3097
|
+
slotProps,
|
|
1386
3098
|
filterModel: propsFilterModel,
|
|
1387
3099
|
columnVisibilityModel: propsColumnVisibilityModel,
|
|
1388
3100
|
pinnedColumns: propsPinnedColumns,
|
|
1389
3101
|
sortModel: propsSortModel,
|
|
1390
|
-
|
|
1391
|
-
pageSize: propsPageSize,
|
|
3102
|
+
paginationModel: propsPaginationModel,
|
|
1392
3103
|
height: propsHeight,
|
|
1393
3104
|
hideToolbar,
|
|
1394
3105
|
initialState,
|
|
@@ -1397,11 +3108,10 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1397
3108
|
localStorageVersion,
|
|
1398
3109
|
previousLocalStorageVersions,
|
|
1399
3110
|
onFilterModelChange: propsOnFilterModelChange,
|
|
1400
|
-
|
|
3111
|
+
rowSelectionModel: propsRowSelectionModel,
|
|
1401
3112
|
onColumnWidthChange: propsOnColumnWidthChange,
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
onSelectionModelChange: propsOnSelectionModelChange,
|
|
3113
|
+
onPaginationModelChange: propsOnPaginationModelChange,
|
|
3114
|
+
onRowSelectionModelChange: propsOnRowSelectionModelChange,
|
|
1405
3115
|
onColumnVisibilityModelChange: propsOnColumnVisibilityModelChange,
|
|
1406
3116
|
onPinnedColumnsChange: propsOnPinnedColumnsChange,
|
|
1407
3117
|
onSortModelChange: propsOnSortModelChange,
|
|
@@ -1409,7 +3119,7 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1409
3119
|
paginationPlacement = 'both',
|
|
1410
3120
|
paginationProps,
|
|
1411
3121
|
rows,
|
|
1412
|
-
|
|
3122
|
+
pageSizeOptions,
|
|
1413
3123
|
sx,
|
|
1414
3124
|
theme: propsTheme,
|
|
1415
3125
|
useRouter,
|
|
@@ -1417,46 +3127,41 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1417
3127
|
rowCount
|
|
1418
3128
|
} = props,
|
|
1419
3129
|
forwardedProps = _objectWithoutProperties(props, _excluded);
|
|
1420
|
-
const theme = useTheme(propsTheme);
|
|
3130
|
+
const theme = useTheme$1(propsTheme);
|
|
1421
3131
|
const _apiRef = useGridApiRef();
|
|
1422
3132
|
const apiRef = propsApiRef !== null && propsApiRef !== void 0 ? propsApiRef : _apiRef;
|
|
1423
|
-
const RenderedToolbar =
|
|
3133
|
+
const RenderedToolbar = slots !== null && slots !== void 0 && slots.toolbar ? slots.toolbar : Toolbar;
|
|
1424
3134
|
LicenseInfo.setLicenseKey(license);
|
|
1425
3135
|
const height = propsHeight !== null && propsHeight !== void 0 ? propsHeight : autoHeight ? undefined : '500px';
|
|
1426
3136
|
const {
|
|
1427
3137
|
onColumnVisibilityModelChange: controlledOnColumnVisibilityModelChange,
|
|
1428
3138
|
onFilterModelChange: controlledOnFilterModelChange,
|
|
1429
|
-
|
|
1430
|
-
onPageSizeChange: controlledOnPageSizeChange,
|
|
3139
|
+
onPaginationModelChange: controlledOnPaginationModelChange,
|
|
1431
3140
|
onPinnedColumnsChange: controlledOnPinnedColumnsChange,
|
|
1432
3141
|
onSortModelChange: controlledOnSortModelChange
|
|
1433
3142
|
} = useControlledDatagridState({
|
|
1434
3143
|
initialState,
|
|
1435
|
-
|
|
3144
|
+
pageSizeOptions,
|
|
1436
3145
|
propsColumnVisibilityModel,
|
|
1437
3146
|
propsFilterModel,
|
|
1438
3147
|
propsOnColumnVisibilityModelChange,
|
|
1439
3148
|
propsOnFilterModelChange,
|
|
1440
3149
|
propsOnPinnedColumnsChange,
|
|
1441
3150
|
propsOnSortModelChange,
|
|
1442
|
-
|
|
1443
|
-
propsPageSize,
|
|
3151
|
+
propsPaginationModel,
|
|
1444
3152
|
propsPinnedColumns,
|
|
1445
3153
|
propsSortModel,
|
|
1446
|
-
|
|
1447
|
-
propsOnPageSizeChange
|
|
3154
|
+
propsOnPaginationModelChange
|
|
1448
3155
|
});
|
|
1449
3156
|
const {
|
|
1450
3157
|
columnVisibilityModel,
|
|
1451
3158
|
filterModel,
|
|
1452
3159
|
onColumnVisibilityModelChange,
|
|
1453
3160
|
onFilterModelChange,
|
|
1454
|
-
|
|
1455
|
-
onPageSizeChange,
|
|
3161
|
+
onPaginationModelChange,
|
|
1456
3162
|
onPinnedColumnsChange,
|
|
1457
3163
|
onSortModelChange,
|
|
1458
|
-
|
|
1459
|
-
pageSize,
|
|
3164
|
+
paginationModel,
|
|
1460
3165
|
pinnedColumns,
|
|
1461
3166
|
sortModel,
|
|
1462
3167
|
onColumnWidthChange
|
|
@@ -1467,40 +3172,39 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1467
3172
|
onColumnVisibilityModelChange: controlledOnColumnVisibilityModelChange,
|
|
1468
3173
|
onColumnWidthChange: propsOnColumnWidthChange,
|
|
1469
3174
|
onFilterModelChange: controlledOnFilterModelChange,
|
|
1470
|
-
|
|
1471
|
-
onPageSizeChange: controlledOnPageSizeChange,
|
|
3175
|
+
onPaginationModelChange: controlledOnPaginationModelChange,
|
|
1472
3176
|
onPinnedColumnsChange: controlledOnPinnedColumnsChange,
|
|
1473
3177
|
onSortModelChange: controlledOnSortModelChange,
|
|
1474
3178
|
useRouter: useRouter,
|
|
1475
3179
|
localStorageVersion,
|
|
1476
3180
|
previousLocalStorageVersions
|
|
1477
3181
|
});
|
|
1478
|
-
const [
|
|
3182
|
+
const [rowSelectionModel, setRowSelectionModel] = useState(propsRowSelectionModel !== null && propsRowSelectionModel !== void 0 ? propsRowSelectionModel : []);
|
|
1479
3183
|
useEffect(() => {
|
|
1480
|
-
|
|
1481
|
-
}, [
|
|
1482
|
-
const
|
|
1483
|
-
if (
|
|
1484
|
-
|
|
3184
|
+
setRowSelectionModel(propsRowSelectionModel !== null && propsRowSelectionModel !== void 0 ? propsRowSelectionModel : []);
|
|
3185
|
+
}, [propsRowSelectionModel]);
|
|
3186
|
+
const onRowSelectionModelChange = (selectionModel, details) => {
|
|
3187
|
+
if (propsOnRowSelectionModelChange) {
|
|
3188
|
+
propsOnRowSelectionModelChange(selectionModel, details);
|
|
1485
3189
|
} else {
|
|
1486
|
-
|
|
3190
|
+
setRowSelectionModel(selectionModel);
|
|
1487
3191
|
}
|
|
1488
3192
|
};
|
|
1489
3193
|
const selectionStatus = useRef({
|
|
1490
3194
|
type: 'none',
|
|
1491
3195
|
numberOfSelectedRows: 0,
|
|
1492
3196
|
numberOfSelectedRowsInPage: 0,
|
|
1493
|
-
page,
|
|
1494
|
-
pageSize: pageSize
|
|
3197
|
+
page: paginationModel.page,
|
|
3198
|
+
pageSize: paginationModel.pageSize
|
|
1495
3199
|
});
|
|
1496
3200
|
|
|
1497
3201
|
// in server-side pagination we want to update the selection status
|
|
1498
3202
|
// every time we navigate between pages, resize our page or select something
|
|
1499
3203
|
useEffect(() => {
|
|
1500
3204
|
if (paginationMode == 'server') {
|
|
1501
|
-
onServerSideSelectionStatusChange(Array.isArray(
|
|
3205
|
+
onServerSideSelectionStatusChange(Array.isArray(rowSelectionModel) ? rowSelectionModel : [rowSelectionModel], apiRef, selectionStatus, isRowSelectable, paginationModel.page, paginationModel.pageSize);
|
|
1502
3206
|
}
|
|
1503
|
-
}, [
|
|
3207
|
+
}, [rowSelectionModel, paginationModel.page, paginationModel.pageSize]);
|
|
1504
3208
|
if (!Array.isArray(rows)) {
|
|
1505
3209
|
return null;
|
|
1506
3210
|
}
|
|
@@ -1526,22 +3230,20 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1526
3230
|
ref: datagridRef,
|
|
1527
3231
|
className: classNames(StatefulDataGrid.className, className),
|
|
1528
3232
|
$height: height
|
|
1529
|
-
}, /*#__PURE__*/React__default.createElement(DataGridPro, _extends({}, forwardedProps, {
|
|
3233
|
+
}, /*#__PURE__*/React__default.createElement(DataGridPro, _extends$1({}, forwardedProps, {
|
|
1530
3234
|
apiRef: apiRef,
|
|
1531
3235
|
columns: columns,
|
|
1532
3236
|
columnVisibilityModel: columnVisibilityModel,
|
|
1533
3237
|
filterModel: filterModel,
|
|
1534
3238
|
onColumnVisibilityModelChange: onColumnVisibilityModelChange,
|
|
1535
3239
|
onFilterModelChange: onFilterModelChange,
|
|
1536
|
-
|
|
1537
|
-
onPageSizeChange: onPageSizeChange,
|
|
3240
|
+
onPaginationModelChange: onPaginationModelChange,
|
|
1538
3241
|
onPinnedColumnsChange: onPinnedColumnsChange,
|
|
1539
3242
|
onSortModelChange: onSortModelChange,
|
|
1540
|
-
|
|
1541
|
-
pageSize: pageSize,
|
|
3243
|
+
paginationModel: paginationModel,
|
|
1542
3244
|
pinnedColumns: pinnedColumns,
|
|
1543
3245
|
sortModel: sortModel,
|
|
1544
|
-
|
|
3246
|
+
pageSizeOptions: pageSizeOptions,
|
|
1545
3247
|
onColumnWidthChange: onColumnWidthChange,
|
|
1546
3248
|
initialState: initialState,
|
|
1547
3249
|
isRowSelectable: isRowSelectable,
|
|
@@ -1552,79 +3254,74 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1552
3254
|
rowCount: rowCount,
|
|
1553
3255
|
autoHeight: autoHeight,
|
|
1554
3256
|
checkboxSelectionVisibleOnly: Boolean(pagination),
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
ColumnFilteredIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
3257
|
+
slots: _objectSpread2(_objectSpread2({
|
|
3258
|
+
baseButton: BaseButton,
|
|
3259
|
+
baseCheckbox: BaseCheckbox,
|
|
3260
|
+
// baseTextField,
|
|
3261
|
+
basePopper: BasePopper,
|
|
3262
|
+
columnFilteredIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1562
3263
|
displayName: "ColumnFilteredIcon"
|
|
1563
3264
|
})),
|
|
1564
|
-
|
|
3265
|
+
columnSelectorIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1565
3266
|
displayName: "ColumnSelectorIcon"
|
|
1566
3267
|
})),
|
|
1567
|
-
|
|
3268
|
+
columnSortedAscendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1568
3269
|
displayName: "ColumnSortedAscendingIcon"
|
|
1569
3270
|
})),
|
|
1570
|
-
|
|
3271
|
+
columnSortedDescendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1571
3272
|
displayName: "ColumnSortedDescendingIcon"
|
|
1572
3273
|
})),
|
|
1573
|
-
|
|
3274
|
+
densityCompactIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1574
3275
|
displayName: "DensityCompactIcon"
|
|
1575
3276
|
})),
|
|
1576
|
-
|
|
3277
|
+
densityStandardIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1577
3278
|
displayName: "DensityStandardIcon"
|
|
1578
3279
|
})),
|
|
1579
|
-
|
|
3280
|
+
densityComfortableIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1580
3281
|
displayName: "DensityComfortableIcon"
|
|
1581
3282
|
})),
|
|
1582
|
-
|
|
3283
|
+
detailPanelCollapseIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1583
3284
|
displayName: "DetailPanelCollapseIcon"
|
|
1584
3285
|
})),
|
|
1585
|
-
|
|
3286
|
+
detailPanelExpandIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1586
3287
|
displayName: "DetailPanelExpandIcon"
|
|
1587
3288
|
})),
|
|
1588
|
-
|
|
3289
|
+
exportIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1589
3290
|
displayName: "ExportIcon"
|
|
1590
3291
|
})),
|
|
1591
|
-
|
|
3292
|
+
openFilterButtonIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({
|
|
1592
3293
|
displayName: "OpenFilterButtonIcon"
|
|
1593
3294
|
}, props))
|
|
1594
|
-
},
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
return pagination ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, _extends({}, props, {
|
|
3295
|
+
}, slots), {}, {
|
|
3296
|
+
toolbar: ToolbarWrapper,
|
|
3297
|
+
pagination: props => {
|
|
3298
|
+
return pagination ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, _extends$1({}, props, {
|
|
1598
3299
|
displaySelection: false,
|
|
1599
3300
|
displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
|
|
1600
3301
|
displayPagination: ['bottom', 'both'].includes(paginationPlacement),
|
|
1601
3302
|
selectionStatus: selectionStatus.current,
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
onPageSizeChange: onPageSizeChange,
|
|
1606
|
-
rowsPerPageOptions: rowsPerPageOptions,
|
|
3303
|
+
paginationModel: paginationModel,
|
|
3304
|
+
onPaginationModelChange: onPaginationModelChange,
|
|
3305
|
+
pageSizeOptions: pageSizeOptions,
|
|
1607
3306
|
paginationProps: paginationProps,
|
|
1608
3307
|
paginationMode: paginationMode,
|
|
1609
3308
|
rowCount: rowCount
|
|
1610
|
-
})) : /*#__PURE__*/React__default.createElement(ControlledPagination, _extends({}, props, {
|
|
3309
|
+
})) : /*#__PURE__*/React__default.createElement(ControlledPagination, _extends$1({}, props, {
|
|
1611
3310
|
displaySelection: false,
|
|
1612
3311
|
displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
|
|
1613
3312
|
displayPagination: ['bottom', 'both'].includes(paginationPlacement),
|
|
1614
3313
|
selectionStatus: selectionStatus.current,
|
|
1615
3314
|
apiRef: apiRef,
|
|
1616
3315
|
isRowSelectable: isRowSelectable,
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
onPageSizeChange: onPageSizeChange,
|
|
1621
|
-
rowsPerPageOptions: rowsPerPageOptions,
|
|
3316
|
+
paginationModel: paginationModel,
|
|
3317
|
+
onPaginationModelChange: onPaginationModelChange,
|
|
3318
|
+
pageSizeOptions: pageSizeOptions,
|
|
1622
3319
|
paginationProps: paginationProps,
|
|
1623
3320
|
paginationMode: paginationMode
|
|
1624
3321
|
})) : null;
|
|
1625
3322
|
}
|
|
1626
3323
|
}),
|
|
1627
|
-
|
|
3324
|
+
slotProps: _objectSpread2(_objectSpread2({}, slotProps), {}, {
|
|
1628
3325
|
toolbar: _objectSpread2({
|
|
1629
3326
|
hideToolbar,
|
|
1630
3327
|
RenderedToolbar,
|
|
@@ -1635,18 +3332,16 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1635
3332
|
selectionStatus,
|
|
1636
3333
|
apiRef,
|
|
1637
3334
|
isRowSelectable,
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
onPageSizeChange,
|
|
1642
|
-
rowsPerPageOptions,
|
|
3335
|
+
paginationModel,
|
|
3336
|
+
onPaginationModelChange,
|
|
3337
|
+
pageSizeOptions,
|
|
1643
3338
|
paginationProps,
|
|
1644
3339
|
paginationMode,
|
|
1645
3340
|
rowCount
|
|
1646
|
-
},
|
|
3341
|
+
}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.toolbar)
|
|
1647
3342
|
}),
|
|
1648
|
-
|
|
1649
|
-
|
|
3343
|
+
rowSelectionModel: rowSelectionModel,
|
|
3344
|
+
onRowSelectionModelChange: (newSelectionModel, details) => {
|
|
1650
3345
|
if (pagination && paginationMode != 'server') {
|
|
1651
3346
|
const selectableRowsInPage = isRowSelectable ? gridPaginatedVisibleSortedGridRowEntriesSelector(apiRef).filter(_ref => {
|
|
1652
3347
|
let {
|
|
@@ -1704,7 +3399,7 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1704
3399
|
};
|
|
1705
3400
|
}
|
|
1706
3401
|
}
|
|
1707
|
-
|
|
3402
|
+
onRowSelectionModelChange === null || onRowSelectionModelChange === void 0 ? void 0 : onRowSelectionModelChange(newSelectionModel, details);
|
|
1708
3403
|
},
|
|
1709
3404
|
sx: _objectSpread2(_objectSpread2({}, sx), {}, {
|
|
1710
3405
|
'.MuiDataGrid-columnHeaders': {
|
|
@@ -1720,5 +3415,5 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1720
3415
|
StatefulDataGrid.className = CLASSNAME;
|
|
1721
3416
|
StatefulDataGrid.displayName = COMPONENT_NAME;
|
|
1722
3417
|
|
|
1723
|
-
export {
|
|
3418
|
+
export { isOperatorValueValid as $, getGridStringArrayOperatorsWithSelectOnStringArrayColumns as A, SORT_MODEL_KEY as B, CONTAINS_ANY_OF as C, DOES_NOT_CONTAIN as D, ENDS_WITH_ANY_OF as E, FILTER_MODEL_KEY as F, PINNED_COLUMNS as G, HAS as H, IS_BETWEEN as I, DIMENSION_MODEL_KEY as J, FILTER_SEARCH_KEY as K, CATEGORIES as L, buildStorageKey as M, clearPreviousVersionStorage as N, convertToDisplayFormat as O, PAGINATION_MODEL_KEY as P, convertFromDisplayFormat as Q, getDecodedSearchFromUrl as R, STARTS_WITH_ANY_OF as S, buildQueryParamsString as T, areSearchStringsEqual as U, VISIBILITY_MODEL_KEY as V, decodeValue as W, encodeValue as X, urlSearchParamsToString as Y, numberOperatorEncoder as Z, numberOperatorDecoder as _, DOES_NOT_EQUAL as a, isValueValid as a0, getFilterModelFromString as a1, getSearchParamsFromFilterModel as a2, getSortingFromString as a3, getSearchParamsFromSorting as a4, getPaginationFromString as a5, getSearchParamsFromPagination as a6, getColumnVisibilityFromString as a7, getSearchParamsFromColumnVisibility as a8, getPinnedColumnsFromString as a9, getSearchParamsFromPinnedColumns as aa, getSearchParamsFromTab as ab, getFinalSearch as ac, getModelsParsedOrUpdateLocalStorage as ad, updateUrl as ae, areFilterModelsEquivalent as af, StatefulDataGrid as ag, DOES_NOT_HAVE as b, DOES_NOT_HAVE_WITH_SELECT as c, HAS_WITH_SELECT as d, HAS_ONLY as e, HAS_ONLY_WITH_SELECT as f, getGridNumericOperators as g, IS as h, IS_WITH_SELECT as i, IS_NOT as j, IS_NOT_WITH_SELECT as k, getGridStringOperators as l, CONTAINS_ANY_OF_I as m, DOES_NOT_HAVE_ANY_OF as n, operatorList as o, DOES_NOT_HAVE_ANY_OF_WITH_SELECT as p, IS_ANY_OF as q, IS_ANY_OF_WITH_SELECT as r, IS_ANY_OF_I as s, IS_ANY_OF_I_WITH_SELECT as t, HAS_ANY_OF as u, HAS_ANY_OF_WITH_SELECT as v, IS_NOT_ANY_OF as w, IS_NOT_ANY_OF_WITH_SELECT as x, getGridStringArrayOperators as y, getGridStringArrayOperatorsWithSelect as z };
|
|
1724
3419
|
//# sourceMappingURL=StatefulDataGrid2.js.map
|