@redsift/table 11.6.0-muiv5-alpha.14 → 11.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_internal/BasePopper.js +2 -2
- package/_internal/ControlledPagination.js +32 -24
- 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 +1904 -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 -1831
- package/_internal/useControlledDatagridState.js.map +1 -1
- package/index.d.ts +82 -79
- package/index.js +48 -3
- package/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,15 +1,1763 @@
|
|
|
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 endsWithAnyOfOperator = {
|
|
1584
|
+
label: 'ends with any of',
|
|
1585
|
+
value: 'endsWithAnyOf',
|
|
1586
|
+
getApplyFilterFn: filterItem => {
|
|
1587
|
+
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1588
|
+
return null;
|
|
1589
|
+
}
|
|
1590
|
+
return params => {
|
|
1591
|
+
if (filterItem.value.length === 0) {
|
|
1592
|
+
return true;
|
|
1593
|
+
}
|
|
1594
|
+
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1595
|
+
let match = false;
|
|
1596
|
+
filterItem.value.forEach(filteredValue => {
|
|
1597
|
+
paramValues.forEach(paramValue => {
|
|
1598
|
+
if (String(paramValue).endsWith(filteredValue)) {
|
|
1599
|
+
match = true;
|
|
1600
|
+
}
|
|
1601
|
+
});
|
|
1602
|
+
});
|
|
1603
|
+
return match;
|
|
1604
|
+
};
|
|
1605
|
+
},
|
|
1606
|
+
InputComponent: GridFilterInputMultipleValue
|
|
1607
|
+
};
|
|
1608
|
+
const ENDS_WITH_ANY_OF = endsWithAnyOfOperator;
|
|
1609
|
+
|
|
1610
|
+
const isAnyOfOperator = {
|
|
1611
|
+
label: 'is any of',
|
|
1612
|
+
value: 'isAnyOf',
|
|
1613
|
+
getApplyFilterFn: filterItem => {
|
|
1614
|
+
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1615
|
+
return null;
|
|
1616
|
+
}
|
|
1617
|
+
return params => {
|
|
1618
|
+
if (filterItem.value.length === 0) {
|
|
1619
|
+
return true;
|
|
1620
|
+
}
|
|
1621
|
+
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1622
|
+
for (const paramValue of paramValues) {
|
|
1623
|
+
if (filterItem.value.includes(String(paramValue))) {
|
|
1624
|
+
return true;
|
|
1625
|
+
}
|
|
1626
|
+
}
|
|
1627
|
+
return false;
|
|
1628
|
+
};
|
|
1629
|
+
},
|
|
1630
|
+
InputComponent: GridFilterInputMultipleValue
|
|
1631
|
+
};
|
|
1632
|
+
const IS_ANY_OF = isAnyOfOperator;
|
|
1633
|
+
const IS_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS_ANY_OF), {}, {
|
|
1634
|
+
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1635
|
+
});
|
|
1636
|
+
|
|
1637
|
+
const hasAnyOfOperator = {
|
|
1638
|
+
label: 'has any of',
|
|
1639
|
+
value: 'hasAnyOf',
|
|
1640
|
+
getApplyFilterFn: filterItem => {
|
|
1641
|
+
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1642
|
+
return null;
|
|
1643
|
+
}
|
|
1644
|
+
return params => {
|
|
1645
|
+
if (filterItem.value.length === 0) {
|
|
1646
|
+
return true;
|
|
1647
|
+
}
|
|
1648
|
+
const cellValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1649
|
+
const filterItemValues = Array.isArray(filterItem.value) ? filterItem.value : [filterItem.value];
|
|
1650
|
+
return filterItemValues.some(v => cellValues.map(value => String(value)).includes(v));
|
|
1651
|
+
};
|
|
1652
|
+
},
|
|
1653
|
+
InputComponent: GridFilterInputMultipleValue
|
|
1654
|
+
};
|
|
1655
|
+
const HAS_ANY_OF = hasAnyOfOperator;
|
|
1656
|
+
const HAS_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, HAS_ANY_OF), {}, {
|
|
1657
|
+
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1658
|
+
});
|
|
1659
|
+
|
|
1660
|
+
const isNotAnyOfOperator = {
|
|
1661
|
+
label: 'is not any of',
|
|
1662
|
+
value: 'isNotAnyOf',
|
|
1663
|
+
getApplyFilterFn: filterItem => {
|
|
1664
|
+
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1665
|
+
return null;
|
|
1666
|
+
}
|
|
1667
|
+
return params => {
|
|
1668
|
+
if (filterItem.value.length === 0) {
|
|
1669
|
+
return true;
|
|
1670
|
+
}
|
|
1671
|
+
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1672
|
+
for (const paramValue of paramValues) {
|
|
1673
|
+
if (filterItem.value.includes(String(paramValue))) {
|
|
1674
|
+
return false;
|
|
1675
|
+
}
|
|
1676
|
+
}
|
|
1677
|
+
return true;
|
|
1678
|
+
};
|
|
1679
|
+
},
|
|
1680
|
+
InputComponent: GridFilterInputMultipleValue
|
|
1681
|
+
};
|
|
1682
|
+
const IS_NOT_ANY_OF = isNotAnyOfOperator;
|
|
1683
|
+
const IS_NOT_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, IS_NOT_ANY_OF), {}, {
|
|
1684
|
+
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1685
|
+
});
|
|
1686
|
+
|
|
1687
|
+
const startsWithAnyOfOperator = {
|
|
1688
|
+
label: 'starts with any of',
|
|
1689
|
+
value: 'startsWithAnyOf',
|
|
1690
|
+
getApplyFilterFn: filterItem => {
|
|
1691
|
+
if (!filterItem.field || !filterItem.value || !filterItem.operator) {
|
|
1692
|
+
return null;
|
|
1693
|
+
}
|
|
1694
|
+
return params => {
|
|
1695
|
+
if (filterItem.value.length === 0) {
|
|
1696
|
+
return true;
|
|
1697
|
+
}
|
|
1698
|
+
const paramValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1699
|
+
let match = false;
|
|
1700
|
+
filterItem.value.forEach(filteredValue => {
|
|
1701
|
+
paramValues.forEach(paramValue => {
|
|
1702
|
+
if (String(paramValue).startsWith(filteredValue)) {
|
|
1703
|
+
match = true;
|
|
1704
|
+
}
|
|
1705
|
+
});
|
|
1706
|
+
});
|
|
1707
|
+
return match;
|
|
1708
|
+
};
|
|
1709
|
+
},
|
|
1710
|
+
InputComponent: GridFilterInputMultipleValue
|
|
1711
|
+
};
|
|
1712
|
+
const STARTS_WITH_ANY_OF = startsWithAnyOfOperator;
|
|
1713
|
+
|
|
1714
|
+
const doesNotHaveAnyOf = {
|
|
1715
|
+
label: "doesn't have any of",
|
|
1716
|
+
value: 'doesNotHaveAnyOf',
|
|
1717
|
+
getApplyFilterFn: filterItem => {
|
|
1718
|
+
if (!filterItem.field || !filterItem.value || !Array.isArray(filterItem.value) || filterItem.value.length === 0) {
|
|
1719
|
+
return null;
|
|
1720
|
+
}
|
|
1721
|
+
return params => {
|
|
1722
|
+
const cellValues = Array.isArray(params.value) ? params.value : [params.value];
|
|
1723
|
+
|
|
1724
|
+
// Return true only if none of the filter values are in the cell values
|
|
1725
|
+
return filterItem.value.every(filterVal => !cellValues.map(value => String(value)).includes(filterVal));
|
|
1726
|
+
};
|
|
1727
|
+
},
|
|
1728
|
+
InputComponent: GridFilterInputMultipleValue
|
|
1729
|
+
};
|
|
1730
|
+
const DOES_NOT_HAVE_ANY_OF = doesNotHaveAnyOf;
|
|
1731
|
+
const DOES_NOT_HAVE_ANY_OF_WITH_SELECT = _objectSpread2(_objectSpread2({}, DOES_NOT_HAVE_ANY_OF), {}, {
|
|
1732
|
+
InputComponent: GridFilterInputMultipleSingleSelect
|
|
1733
|
+
});
|
|
1734
|
+
|
|
1735
|
+
const getGridStringArrayOperators = () => [CONTAINS_ANY_OF, ENDS_WITH_ANY_OF, IS_ANY_OF, IS_NOT_ANY_OF, STARTS_WITH_ANY_OF];
|
|
1736
|
+
const getGridStringArrayOperatorsWithSelect = () => [CONTAINS_ANY_OF, ENDS_WITH_ANY_OF, IS_ANY_OF_WITH_SELECT, IS_ANY_OF_WITH_SELECT, IS_NOT_WITH_SELECT, IS_WITH_SELECT, STARTS_WITH_ANY_OF];
|
|
1737
|
+
const getGridStringArrayOperatorsWithSelectOnStringArrayColumns = () => [HAS_WITH_SELECT, HAS_ANY_OF_WITH_SELECT, HAS_ONLY_WITH_SELECT, DOES_NOT_HAVE_WITH_SELECT, DOES_NOT_HAVE_ANY_OF_WITH_SELECT];
|
|
1738
|
+
|
|
1739
|
+
const getGridStringOperators = () => [...getGridStringOperators$1().filter(operator => !['isAnyOf'].includes(operator.value)), DOES_NOT_CONTAIN, DOES_NOT_EQUAL, ...getGridStringArrayOperators()];
|
|
1740
|
+
|
|
1741
|
+
// istanbul ignore file
|
|
1742
|
+
const operatorList = {
|
|
1743
|
+
// Default types
|
|
1744
|
+
string: getGridStringOperators$1(),
|
|
1745
|
+
number: getGridNumericOperators$1(),
|
|
1746
|
+
boolean: getGridBooleanOperators(),
|
|
1747
|
+
date: getGridDateOperators(),
|
|
1748
|
+
dateTime: getGridDateOperators(true),
|
|
1749
|
+
singleSelect: getGridSingleSelectOperators(),
|
|
1750
|
+
// Extended types
|
|
1751
|
+
rsString: getGridStringOperators(),
|
|
1752
|
+
rsNumber: getGridNumericOperators(),
|
|
1753
|
+
rsSingleSelect: [CONTAINS_ANY_OF, ENDS_WITH_ANY_OF, IS_ANY_OF_WITH_SELECT, IS_NOT_WITH_SELECT, IS_WITH_SELECT, STARTS_WITH_ANY_OF],
|
|
1754
|
+
rsSingleSelectWithShortOperatorList: [IS_WITH_SELECT, IS_NOT_WITH_SELECT, IS_ANY_OF_WITH_SELECT],
|
|
1755
|
+
rsMultipleSelect: [HAS_WITH_SELECT, HAS_ANY_OF_WITH_SELECT, HAS_ONLY_WITH_SELECT, DOES_NOT_HAVE_WITH_SELECT, DOES_NOT_HAVE_ANY_OF_WITH_SELECT],
|
|
1756
|
+
rsMultipleSelectWithShortOperatorList: [HAS_WITH_SELECT, DOES_NOT_HAVE_WITH_SELECT, HAS_ANY_OF_WITH_SELECT],
|
|
1757
|
+
// Custom types
|
|
1758
|
+
rsStringArray: getGridStringArrayOperators()
|
|
1759
|
+
};
|
|
1760
|
+
|
|
13
1761
|
const PAGINATION_MODEL_KEY = 'paginationModel';
|
|
14
1762
|
const FILTER_MODEL_KEY = 'filterModel';
|
|
15
1763
|
const SORT_MODEL_KEY = 'sortModel';
|
|
@@ -148,42 +1896,39 @@ const numberOperatorDecoder = {
|
|
|
148
1896
|
lt: '<',
|
|
149
1897
|
lte: '<='
|
|
150
1898
|
};
|
|
151
|
-
const isOperatorValueValid = (
|
|
152
|
-
const column = columns.find(column => column.field ===
|
|
1899
|
+
const isOperatorValueValid = (field, operator, columns) => {
|
|
1900
|
+
const column = columns.find(column => column.field === field);
|
|
153
1901
|
if (!column) {
|
|
154
1902
|
return false;
|
|
155
1903
|
}
|
|
156
1904
|
const columnType = (column === null || column === void 0 ? void 0 : column.type) || 'string';
|
|
157
|
-
const operators = operatorList[columnType];
|
|
1905
|
+
const operators = column.filterOperators || operatorList[columnType];
|
|
158
1906
|
if (!operators) {
|
|
159
1907
|
return false;
|
|
160
1908
|
}
|
|
161
|
-
|
|
162
|
-
return !!operators.filterOperators.find(op => columnType === 'number' && Object.keys(numberOperatorEncoder).includes(op.value) ? numberOperatorEncoder[op.value] === operatorValue : op['value'] === operatorValue);
|
|
163
|
-
}
|
|
164
|
-
return !!operators.find(op => ['number', 'rsNumber'].includes(columnType) && Object.keys(numberOperatorEncoder).includes(op.value) ? numberOperatorEncoder[op.value] === operatorValue : op['value'] === operatorValue);
|
|
1909
|
+
return !!operators.find(op => columnType === 'number' && Object.keys(numberOperatorEncoder).includes(op.value) ? numberOperatorEncoder[op.value] === operator : op.value === operator);
|
|
165
1910
|
};
|
|
166
1911
|
const listOperators = ['containsAnyOf', 'doesNotContainAnyOf', 'endsWithAnyOf', 'doesNotEndWithAnyOf', 'hasAnyOf', 'doesNotHaveAnyOf', 'isAnyOf', 'isNotAnyOf', 'startsWithAnyOf', 'doesNotStartWithAnyOf'];
|
|
167
1912
|
|
|
168
1913
|
// Check if the value doesn't break
|
|
169
|
-
const isValueValid = (value,
|
|
1914
|
+
const isValueValid = (value, field, columns, operator) => {
|
|
170
1915
|
var _column$type;
|
|
171
1916
|
// every field accepts undefined as value for default
|
|
172
1917
|
if (value === undefined || value === '') {
|
|
173
1918
|
return true;
|
|
174
1919
|
}
|
|
175
1920
|
|
|
176
|
-
// xxxAnyOf accepts as value only lists, and we are
|
|
1921
|
+
// xxxAnyOf accepts as value only lists, and we are declaring them in the
|
|
177
1922
|
// URL as `list=[...]`
|
|
178
|
-
if (listOperators.includes(
|
|
1923
|
+
if (listOperators.includes(operator)) {
|
|
179
1924
|
return Array.isArray(value) || value === '';
|
|
180
1925
|
}
|
|
181
1926
|
|
|
182
1927
|
// We are accepting arrays only if they are of the 'xxxAnyOf' type
|
|
183
|
-
if (Array.isArray(value) && !listOperators.includes(
|
|
1928
|
+
if (Array.isArray(value) && !listOperators.includes(operator)) {
|
|
184
1929
|
return false;
|
|
185
1930
|
}
|
|
186
|
-
const column = columns.find(column => column.field ===
|
|
1931
|
+
const column = columns.find(column => column.field === field);
|
|
187
1932
|
if (!column) {
|
|
188
1933
|
return false;
|
|
189
1934
|
}
|
|
@@ -221,7 +1966,7 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
221
1966
|
if (!searchString) {
|
|
222
1967
|
return 'invalid';
|
|
223
1968
|
}
|
|
224
|
-
let
|
|
1969
|
+
let logicOperator = GridLogicOperator.And;
|
|
225
1970
|
let quickFilterValues = [];
|
|
226
1971
|
const searchParams = new URLSearchParams();
|
|
227
1972
|
for (const [key, value] of new URLSearchParams(searchString)) {
|
|
@@ -229,7 +1974,7 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
229
1974
|
searchParams.set(key, value);
|
|
230
1975
|
}
|
|
231
1976
|
if (key === '_logicOperator') {
|
|
232
|
-
|
|
1977
|
+
logicOperator = value === GridLogicOperator.And || value === GridLogicOperator.Or ? value : GridLogicOperator.And;
|
|
233
1978
|
}
|
|
234
1979
|
if (key === '_quickFilterValues') {
|
|
235
1980
|
try {
|
|
@@ -248,7 +1993,7 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
248
1993
|
if (isInvalid) {
|
|
249
1994
|
return;
|
|
250
1995
|
}
|
|
251
|
-
const field = key.split('[')[0].slice(1);
|
|
1996
|
+
const field = key.split('[')[0].slice(1);
|
|
252
1997
|
if (!fields.includes(field)) {
|
|
253
1998
|
return;
|
|
254
1999
|
}
|
|
@@ -265,7 +2010,6 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
265
2010
|
return;
|
|
266
2011
|
}
|
|
267
2012
|
const operator = splitRight[0];
|
|
268
|
-
// if the operator is not part of the valid operators invalidate the URL
|
|
269
2013
|
if (!isOperatorValueValid(field, operator, columns) || Array.isArray(operator)) {
|
|
270
2014
|
isInvalid = true;
|
|
271
2015
|
return;
|
|
@@ -277,41 +2021,37 @@ const getFilterModelFromString = (searchString, columns) => {
|
|
|
277
2021
|
return;
|
|
278
2022
|
}
|
|
279
2023
|
items.push({
|
|
280
|
-
|
|
281
|
-
|
|
2024
|
+
field,
|
|
2025
|
+
operator: columnType === 'number' && Object.keys(numberOperatorDecoder).includes(operator) ? numberOperatorDecoder[operator] : operator,
|
|
282
2026
|
id,
|
|
283
2027
|
value: listOperators.includes(operator) && decodedValue === '' ? [] : decodedValue,
|
|
284
2028
|
type
|
|
285
2029
|
});
|
|
286
2030
|
});
|
|
287
|
-
|
|
288
|
-
// If we found some condition that results in an invalid URL,
|
|
289
|
-
// return the empty filterModel (this will trigger the localStorage)
|
|
290
|
-
// and will pick up the last valid search
|
|
291
2031
|
if (isInvalid) {
|
|
292
2032
|
return 'invalid';
|
|
293
2033
|
}
|
|
294
2034
|
return {
|
|
295
2035
|
items,
|
|
296
|
-
|
|
2036
|
+
logicOperator,
|
|
297
2037
|
quickFilterValues
|
|
298
2038
|
};
|
|
299
2039
|
};
|
|
300
2040
|
const getSearchParamsFromFilterModel = filterModel => {
|
|
301
2041
|
var _filterModel$quickFil;
|
|
302
2042
|
const searchParams = new URLSearchParams();
|
|
303
|
-
searchParams.set('_logicOperator', filterModel['
|
|
2043
|
+
searchParams.set('_logicOperator', filterModel['logicOperator'] || '');
|
|
304
2044
|
filterModel['items'].forEach(item => {
|
|
305
2045
|
const {
|
|
306
|
-
|
|
307
|
-
|
|
2046
|
+
field,
|
|
2047
|
+
operator,
|
|
308
2048
|
value,
|
|
309
2049
|
type
|
|
310
2050
|
} = item;
|
|
311
|
-
if (Object.keys(numberOperatorEncoder).includes(
|
|
312
|
-
searchParams.set(`_${
|
|
2051
|
+
if (Object.keys(numberOperatorEncoder).includes(operator)) {
|
|
2052
|
+
searchParams.set(`_${field}[${numberOperatorEncoder[operator]},${encodeValue(type)}]`, encodeValue(value));
|
|
313
2053
|
} else {
|
|
314
|
-
searchParams.set(`_${
|
|
2054
|
+
searchParams.set(`_${field}[${encodeValue(operator)},${encodeValue(type)}]`, encodeValue(value));
|
|
315
2055
|
}
|
|
316
2056
|
});
|
|
317
2057
|
if ((_filterModel$quickFil = filterModel.quickFilterValues) !== null && _filterModel$quickFil !== void 0 && _filterModel$quickFil.length) {
|
|
@@ -327,7 +2067,7 @@ const getSearchParamsFromFilterModel = filterModel => {
|
|
|
327
2067
|
const getFilterModel = (search, columns, localStorageFilters, setLocalStorageFilters, initialState, isNewVersion) => {
|
|
328
2068
|
const defaultValue = initialState && initialState.filter && initialState.filter.filterModel ? initialState.filter.filterModel : {
|
|
329
2069
|
items: [],
|
|
330
|
-
|
|
2070
|
+
logicOperator: GridLogicOperator.And
|
|
331
2071
|
};
|
|
332
2072
|
if (isNewVersion) {
|
|
333
2073
|
return defaultValue;
|
|
@@ -466,13 +2206,38 @@ const getPaginationModel = (search, localStoragePagination, setLocalStoragePagin
|
|
|
466
2206
|
|
|
467
2207
|
/** COLUMN VISIBILITY */
|
|
468
2208
|
|
|
2209
|
+
const getColumnVisibilityFromString = (searchString, columns) => {
|
|
2210
|
+
if (!searchString) {
|
|
2211
|
+
return 'invalid';
|
|
2212
|
+
}
|
|
2213
|
+
const searchParams = new URLSearchParams(searchString);
|
|
2214
|
+
const value = searchParams.get('_columnVisibility');
|
|
2215
|
+
if (value === '' || value === null || value === '[]') {
|
|
2216
|
+
return 'invalid';
|
|
2217
|
+
}
|
|
2218
|
+
const parsedFields = value.slice(1, value.length - 1).split(',');
|
|
2219
|
+
const fields = columns.map(column => column.field);
|
|
2220
|
+
const visibility = {};
|
|
2221
|
+
for (const field of fields) {
|
|
2222
|
+
visibility[field] = false;
|
|
2223
|
+
}
|
|
2224
|
+
for (const parsedField of parsedFields) {
|
|
2225
|
+
if (fields.includes(parsedField)) {
|
|
2226
|
+
visibility[parsedField] = true;
|
|
2227
|
+
}
|
|
2228
|
+
}
|
|
2229
|
+
if (Object.values(visibility).filter(v => v === true).length === 0) {
|
|
2230
|
+
return 'invalid';
|
|
2231
|
+
}
|
|
2232
|
+
return visibility;
|
|
2233
|
+
};
|
|
469
2234
|
const getSearchParamsFromColumnVisibility = (columnVisibility, columns) => {
|
|
470
2235
|
const searchParams = new URLSearchParams();
|
|
471
|
-
const
|
|
2236
|
+
const fields = columns.map(column => column.field);
|
|
472
2237
|
|
|
473
2238
|
// if column visibility model is empty, show all columns
|
|
474
2239
|
if (Object.keys(columnVisibility).length == 0) {
|
|
475
|
-
searchParams.set('_columnVisibility', `[${
|
|
2240
|
+
searchParams.set('_columnVisibility', `[${fields.join(',')}]`);
|
|
476
2241
|
return searchParams;
|
|
477
2242
|
}
|
|
478
2243
|
const finalColumnVisibility = columns.filter(c => {
|
|
@@ -483,63 +2248,10 @@ const getSearchParamsFromColumnVisibility = (columnVisibility, columns) => {
|
|
|
483
2248
|
[colName]: true
|
|
484
2249
|
});
|
|
485
2250
|
}, columnVisibility);
|
|
486
|
-
const visibleColumns =
|
|
487
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
488
|
-
.filter(_ref => {
|
|
489
|
-
let [_, visible] = _ref;
|
|
490
|
-
return visible;
|
|
491
|
-
})
|
|
492
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
493
|
-
.map(_ref2 => {
|
|
494
|
-
let [column, _] = _ref2;
|
|
495
|
-
return encodeValue(column);
|
|
496
|
-
});
|
|
2251
|
+
const visibleColumns = fields.filter(column => finalColumnVisibility[column] !== false);
|
|
497
2252
|
searchParams.set('_columnVisibility', `[${visibleColumns.join(',')}]`);
|
|
498
2253
|
return searchParams;
|
|
499
2254
|
};
|
|
500
|
-
const getColumnVisibilityFromString = (notParsed, tableColumns) => {
|
|
501
|
-
if (!notParsed || notParsed.length === 1 && notParsed[0] === '?') {
|
|
502
|
-
return 'invalid';
|
|
503
|
-
}
|
|
504
|
-
// remove the initial ? if present
|
|
505
|
-
const parsed = notParsed[0] === '?' ? notParsed.slice(1) : notParsed;
|
|
506
|
-
const visibility = {};
|
|
507
|
-
let exist = false;
|
|
508
|
-
let visibleColumnsCount = 0;
|
|
509
|
-
for (const item of parsed.split('&')) {
|
|
510
|
-
// if it's not column visibility field, skip
|
|
511
|
-
const fieldURL = item.split('=')[0];
|
|
512
|
-
if (fieldURL !== '_columnVisibility') {
|
|
513
|
-
continue;
|
|
514
|
-
}
|
|
515
|
-
// e.g. item = _columnVisibility[abc,def]
|
|
516
|
-
const left = item.split(']')[0];
|
|
517
|
-
if (left.split('[').length < 2) {
|
|
518
|
-
continue;
|
|
519
|
-
}
|
|
520
|
-
const encodedValues = item.split('[')[1].split(']')[0];
|
|
521
|
-
if (typeof encodedValues !== 'string') {
|
|
522
|
-
continue;
|
|
523
|
-
}
|
|
524
|
-
exist = true;
|
|
525
|
-
const columnFields = tableColumns.map(column => column.field);
|
|
526
|
-
// TODO: Add validation that , is present
|
|
527
|
-
const columns = encodedValues.split(',').map(value => decodeValue(value));
|
|
528
|
-
|
|
529
|
-
// for each column, check if it's visible and add it to visibility model
|
|
530
|
-
for (const column of columnFields) {
|
|
531
|
-
const isColumnVisible = columns.includes(column);
|
|
532
|
-
visibility[column] = isColumnVisible;
|
|
533
|
-
if (isColumnVisible) {
|
|
534
|
-
visibleColumnsCount += 1;
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
if (visibleColumnsCount === 0 && !exist) {
|
|
539
|
-
return 'invalid';
|
|
540
|
-
}
|
|
541
|
-
return visibility;
|
|
542
|
-
};
|
|
543
2255
|
|
|
544
2256
|
// Rules:
|
|
545
2257
|
// - if we have something in the URL, use that info
|
|
@@ -600,8 +2312,8 @@ const getPinnedColumnsFromString = (notParsed, tableColumns) => {
|
|
|
600
2312
|
if (typeof encodedValues !== 'string') {
|
|
601
2313
|
continue;
|
|
602
2314
|
}
|
|
603
|
-
const
|
|
604
|
-
const columns = encodedValues.split(',').map(value => decodeValue(value)).filter(val => typeof val === 'string' &&
|
|
2315
|
+
const fields = [...tableColumns.map(column => column.field), '__check__'];
|
|
2316
|
+
const columns = encodedValues.split(',').map(value => decodeValue(value)).filter(val => typeof val === 'string' && fields.includes(val));
|
|
605
2317
|
if (fieldURL === '_pinnedColumnsLeft') {
|
|
606
2318
|
pinnedColumns['left'] = columns;
|
|
607
2319
|
}
|
|
@@ -609,9 +2321,9 @@ const getPinnedColumnsFromString = (notParsed, tableColumns) => {
|
|
|
609
2321
|
pinnedColumns['right'] = columns;
|
|
610
2322
|
}
|
|
611
2323
|
}
|
|
612
|
-
return pinnedColumns
|
|
613
|
-
left: pinnedColumns
|
|
614
|
-
right: pinnedColumns
|
|
2324
|
+
return pinnedColumns.left && pinnedColumns.left.length > 0 || pinnedColumns.right && pinnedColumns.right.length > 0 ? {
|
|
2325
|
+
left: pinnedColumns.left || [],
|
|
2326
|
+
right: pinnedColumns.right || []
|
|
615
2327
|
} : 'invalid';
|
|
616
2328
|
};
|
|
617
2329
|
const getSearchParamsFromPinnedColumns = pinnedColumns => {
|
|
@@ -661,7 +2373,7 @@ const getSearchParamsFromTab = search => {
|
|
|
661
2373
|
}
|
|
662
2374
|
return searchParams;
|
|
663
2375
|
};
|
|
664
|
-
const getFinalSearch =
|
|
2376
|
+
const getFinalSearch = _ref => {
|
|
665
2377
|
let {
|
|
666
2378
|
search,
|
|
667
2379
|
localStorageVersion,
|
|
@@ -671,7 +2383,7 @@ const getFinalSearch = _ref3 => {
|
|
|
671
2383
|
columnsVisibilityModel,
|
|
672
2384
|
pinnedColumnsModel,
|
|
673
2385
|
columns
|
|
674
|
-
} =
|
|
2386
|
+
} = _ref;
|
|
675
2387
|
const filterModelSearch = getSearchParamsFromFilterModel(filterModel);
|
|
676
2388
|
const sortModelSearch = getSearchParamsFromSorting(sortModel);
|
|
677
2389
|
const paginationModelSearch = getSearchParamsFromPagination(paginationModel);
|
|
@@ -736,14 +2448,14 @@ const getModelsParsedOrUpdateLocalStorage = (search, localStorageVersion, column
|
|
|
736
2448
|
pinnedColumnsModel
|
|
737
2449
|
};
|
|
738
2450
|
};
|
|
739
|
-
const updateUrl = (
|
|
2451
|
+
const updateUrl = (_ref2, search, localStorageVersion, historyReplace, columns) => {
|
|
740
2452
|
let {
|
|
741
2453
|
filterModel,
|
|
742
2454
|
sortModel,
|
|
743
2455
|
paginationModel,
|
|
744
2456
|
columnsModel: columnsVisibilityModel,
|
|
745
2457
|
pinnedColumnsModel
|
|
746
|
-
} =
|
|
2458
|
+
} = _ref2;
|
|
747
2459
|
const newSearch = getFinalSearch({
|
|
748
2460
|
search,
|
|
749
2461
|
localStorageVersion,
|
|
@@ -764,17 +2476,17 @@ const updateUrl = (_ref4, search, localStorageVersion, historyReplace, columns)
|
|
|
764
2476
|
// do not use it for equivalence (e.g. with value `3` and undefined we
|
|
765
2477
|
// will get 0).
|
|
766
2478
|
const compareFilters = (firstFilter, secondFilter) => {
|
|
767
|
-
if (firstFilter.
|
|
2479
|
+
if (firstFilter.field < secondFilter.field) {
|
|
768
2480
|
return -1;
|
|
769
|
-
} else if (firstFilter.
|
|
2481
|
+
} else if (firstFilter.field > secondFilter.field) {
|
|
770
2482
|
return 1;
|
|
771
2483
|
}
|
|
772
|
-
if (firstFilter.
|
|
2484
|
+
if (firstFilter.operator === undefined || secondFilter.operator === undefined) {
|
|
773
2485
|
return 0;
|
|
774
2486
|
}
|
|
775
|
-
if (firstFilter.
|
|
2487
|
+
if (firstFilter.operator < secondFilter.operator) {
|
|
776
2488
|
return -1;
|
|
777
|
-
} else if (firstFilter.
|
|
2489
|
+
} else if (firstFilter.operator > secondFilter.operator) {
|
|
778
2490
|
return 1;
|
|
779
2491
|
}
|
|
780
2492
|
if (firstFilter.value < secondFilter.value) {
|
|
@@ -785,18 +2497,18 @@ const compareFilters = (firstFilter, secondFilter) => {
|
|
|
785
2497
|
return 0;
|
|
786
2498
|
};
|
|
787
2499
|
const areFiltersEquivalent = (firstFilter, secondFilter) => {
|
|
788
|
-
return firstFilter.
|
|
2500
|
+
return firstFilter.field === secondFilter.field && firstFilter.operator === secondFilter.operator && firstFilter.value === secondFilter.value;
|
|
789
2501
|
};
|
|
790
2502
|
const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
|
|
791
2503
|
const {
|
|
792
2504
|
items,
|
|
793
|
-
|
|
2505
|
+
logicOperator
|
|
794
2506
|
} = filterModel;
|
|
795
2507
|
const {
|
|
796
2508
|
items: itemsToMatch,
|
|
797
|
-
|
|
2509
|
+
logicOperator: logicOperatorToMatch
|
|
798
2510
|
} = filterModelToMatch;
|
|
799
|
-
if (
|
|
2511
|
+
if (logicOperator !== logicOperatorToMatch) {
|
|
800
2512
|
return false;
|
|
801
2513
|
}
|
|
802
2514
|
if (items.length !== itemsToMatch.length) {
|
|
@@ -809,7 +2521,7 @@ const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
|
|
|
809
2521
|
const filterToCompare = itemsToMatch[i];
|
|
810
2522
|
|
|
811
2523
|
// compareFilters return 0 if and only if the filters have the same
|
|
812
|
-
//
|
|
2524
|
+
// field, operator, and value
|
|
813
2525
|
if (!areFiltersEquivalent(filter, filterToCompare)) {
|
|
814
2526
|
return false;
|
|
815
2527
|
}
|
|
@@ -818,8 +2530,6 @@ const areFilterModelsEquivalent = (filterModel, filterModelToMatch) => {
|
|
|
818
2530
|
};
|
|
819
2531
|
|
|
820
2532
|
// Get and Set data from LocalStorage WITHOUT useState
|
|
821
|
-
|
|
822
|
-
// triggering a state update and consecutive re-render
|
|
823
2533
|
const useFetchState = (defaultValue, key) => {
|
|
824
2534
|
let stickyValue = null;
|
|
825
2535
|
try {
|
|
@@ -827,16 +2537,7 @@ const useFetchState = (defaultValue, key) => {
|
|
|
827
2537
|
} catch (e) {
|
|
828
2538
|
console.error('StatefulDataGrid: error getting item from local storage: ', e);
|
|
829
2539
|
}
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
// TODO: temporary workaround to avoid clashes when someone had sorting on the now-removed screenshot field (renamed to num_annotations)
|
|
833
|
-
// Consider upgrading the Datagrid component library as the exception handling was added in this PR: https://github.com/mui-org/material-ui-x/pull/3224
|
|
834
|
-
if (parsedValue instanceof Array) {
|
|
835
|
-
const fields = (parsedValue || []).map(item => item.field);
|
|
836
|
-
if (fields.includes('screenshot') || fields.includes('diffs')) {
|
|
837
|
-
parsedValue = defaultValue;
|
|
838
|
-
}
|
|
839
|
-
}
|
|
2540
|
+
const parsedValue = stickyValue !== null && stickyValue !== undefined && stickyValue !== 'undefined' ? JSON.parse(stickyValue) : defaultValue;
|
|
840
2541
|
const updateValue = useCallback(value => {
|
|
841
2542
|
try {
|
|
842
2543
|
window.localStorage.setItem(key, JSON.stringify(value));
|
|
@@ -847,6 +2548,8 @@ const useFetchState = (defaultValue, key) => {
|
|
|
847
2548
|
return [parsedValue, updateValue];
|
|
848
2549
|
};
|
|
849
2550
|
|
|
2551
|
+
// import useLocalStorage from './useLocalStorage';
|
|
2552
|
+
|
|
850
2553
|
const useTableStates = (id, version) => {
|
|
851
2554
|
const [paginationModel, setPaginationModel] = useFetchState('', buildStorageKey({
|
|
852
2555
|
id,
|
|
@@ -903,8 +2606,7 @@ const useStatefulTable = props => {
|
|
|
903
2606
|
onColumnVisibilityModelChange: propsOnColumnVisibilityModelChange,
|
|
904
2607
|
onColumnWidthChange: propsOnColumnWidthChange,
|
|
905
2608
|
onFilterModelChange: propsOnFilterModelChange,
|
|
906
|
-
|
|
907
|
-
onPageSizeChange: propsOnPageSizeChange,
|
|
2609
|
+
onPaginationModelChange: propsOnPaginationModelChange,
|
|
908
2610
|
onPinnedColumnsChange: propsOnPinnedColumnsChange,
|
|
909
2611
|
onSortModelChange: propsOnSortModelChange,
|
|
910
2612
|
useRouter,
|
|
@@ -934,7 +2636,7 @@ const useStatefulTable = props => {
|
|
|
934
2636
|
setDimensionModel
|
|
935
2637
|
} = useTableStates(id, localStorageVersion);
|
|
936
2638
|
|
|
937
|
-
// clearing up old version keys
|
|
2639
|
+
// clearing up old version keys, triggering only on first render
|
|
938
2640
|
useEffect(() => clearPreviousVersionStorage(id, previousLocalStorageVersions), [id, previousLocalStorageVersions]);
|
|
939
2641
|
const onColumnDimensionChange = useCallback(_ref => {
|
|
940
2642
|
let {
|
|
@@ -967,7 +2669,6 @@ const useStatefulTable = props => {
|
|
|
967
2669
|
column.width = dimensionModel[column.field] || column.width || 100;
|
|
968
2670
|
return column;
|
|
969
2671
|
}), [propsColumns, dimensionModel]);
|
|
970
|
-
|
|
971
2672
|
/** Add resetPage method to apiRef. */
|
|
972
2673
|
apiRef.current.resetPage = () => {
|
|
973
2674
|
apiRef.current.setPage(0);
|
|
@@ -978,7 +2679,7 @@ const useStatefulTable = props => {
|
|
|
978
2679
|
onFilterModelChange: (model, details) => {
|
|
979
2680
|
const filterModel = _objectSpread2(_objectSpread2({}, model), {}, {
|
|
980
2681
|
items: model.items.map(item => {
|
|
981
|
-
const column = apiRef.current.getColumn(item.
|
|
2682
|
+
const column = apiRef.current.getColumn(item.field);
|
|
982
2683
|
item.type = column.type || 'string';
|
|
983
2684
|
return item;
|
|
984
2685
|
}),
|
|
@@ -1016,33 +2717,16 @@ const useStatefulTable = props => {
|
|
|
1016
2717
|
}, search, localStorageVersion, historyReplace, columns);
|
|
1017
2718
|
},
|
|
1018
2719
|
pinnedColumns: pinnedColumnsModel,
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
filterModel: filterParsed,
|
|
1026
|
-
sortModel: sortModelParsed,
|
|
1027
|
-
paginationModel: {
|
|
1028
|
-
page,
|
|
1029
|
-
pageSize: paginationModelParsed.pageSize,
|
|
1030
|
-
direction
|
|
1031
|
-
},
|
|
1032
|
-
columnsModel: apiRef.current.state.columns.columnVisibilityModel,
|
|
1033
|
-
pinnedColumnsModel: pinnedColumnsModel
|
|
1034
|
-
}, search, localStorageVersion, historyReplace, columns);
|
|
1035
|
-
},
|
|
1036
|
-
onPageSizeChange: (pageSize, details) => {
|
|
1037
|
-
propsOnPageSizeChange === null || propsOnPageSizeChange === void 0 ? void 0 : propsOnPageSizeChange(pageSize, details);
|
|
2720
|
+
paginationModel: paginationModelParsed,
|
|
2721
|
+
onPaginationModelChange: (model, details) => {
|
|
2722
|
+
const paginationModel = _objectSpread2(_objectSpread2({}, model), {}, {
|
|
2723
|
+
direction: paginationModelParsed.page < model.page ? 'next' : 'back'
|
|
2724
|
+
});
|
|
2725
|
+
propsOnPaginationModelChange === null || propsOnPaginationModelChange === void 0 ? void 0 : propsOnPaginationModelChange(paginationModel, details);
|
|
1038
2726
|
updateUrl({
|
|
1039
2727
|
filterModel: filterParsed,
|
|
1040
2728
|
sortModel: sortModelParsed,
|
|
1041
|
-
paginationModel:
|
|
1042
|
-
page: paginationModelParsed.page,
|
|
1043
|
-
pageSize,
|
|
1044
|
-
direction: paginationModelParsed.direction
|
|
1045
|
-
},
|
|
2729
|
+
paginationModel: paginationModel,
|
|
1046
2730
|
columnsModel: apiRef.current.state.columns.columnVisibilityModel,
|
|
1047
2731
|
pinnedColumnsModel: pinnedColumnsModel
|
|
1048
2732
|
}, search, localStorageVersion, historyReplace, columns);
|
|
@@ -1068,7 +2752,7 @@ const useStatefulTable = props => {
|
|
|
1068
2752
|
};
|
|
1069
2753
|
};
|
|
1070
2754
|
|
|
1071
|
-
const _excluded = ["apiRef", "autoHeight", "className", "columns", "
|
|
2755
|
+
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"];
|
|
1072
2756
|
const COMPONENT_NAME = 'DataGrid';
|
|
1073
2757
|
const CLASSNAME = 'redsift-datagrid';
|
|
1074
2758
|
const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
@@ -1078,15 +2762,13 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1078
2762
|
autoHeight,
|
|
1079
2763
|
className,
|
|
1080
2764
|
columns,
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
componentsProps,
|
|
2765
|
+
slots,
|
|
2766
|
+
slotProps,
|
|
1084
2767
|
filterModel: propsFilterModel,
|
|
1085
2768
|
columnVisibilityModel: propsColumnVisibilityModel,
|
|
1086
2769
|
pinnedColumns: propsPinnedColumns,
|
|
1087
2770
|
sortModel: propsSortModel,
|
|
1088
|
-
|
|
1089
|
-
pageSize: propsPageSize,
|
|
2771
|
+
paginationModel: propsPaginationModel,
|
|
1090
2772
|
height: propsHeight,
|
|
1091
2773
|
hideToolbar,
|
|
1092
2774
|
initialState,
|
|
@@ -1095,11 +2777,10 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1095
2777
|
localStorageVersion,
|
|
1096
2778
|
previousLocalStorageVersions,
|
|
1097
2779
|
onFilterModelChange: propsOnFilterModelChange,
|
|
1098
|
-
|
|
2780
|
+
rowSelectionModel: propsRowSelectionModel,
|
|
1099
2781
|
onColumnWidthChange: propsOnColumnWidthChange,
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
onSelectionModelChange: propsOnSelectionModelChange,
|
|
2782
|
+
onPaginationModelChange: propsOnPaginationModelChange,
|
|
2783
|
+
onRowSelectionModelChange: propsOnRowSelectionModelChange,
|
|
1103
2784
|
onColumnVisibilityModelChange: propsOnColumnVisibilityModelChange,
|
|
1104
2785
|
onPinnedColumnsChange: propsOnPinnedColumnsChange,
|
|
1105
2786
|
onSortModelChange: propsOnSortModelChange,
|
|
@@ -1107,7 +2788,7 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1107
2788
|
paginationPlacement = 'both',
|
|
1108
2789
|
paginationProps,
|
|
1109
2790
|
rows,
|
|
1110
|
-
|
|
2791
|
+
pageSizeOptions,
|
|
1111
2792
|
sx,
|
|
1112
2793
|
theme: propsTheme,
|
|
1113
2794
|
useRouter,
|
|
@@ -1115,46 +2796,41 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1115
2796
|
rowCount
|
|
1116
2797
|
} = props,
|
|
1117
2798
|
forwardedProps = _objectWithoutProperties(props, _excluded);
|
|
1118
|
-
const theme = useTheme(propsTheme);
|
|
2799
|
+
const theme = useTheme$1(propsTheme);
|
|
1119
2800
|
const _apiRef = useGridApiRef();
|
|
1120
2801
|
const apiRef = propsApiRef !== null && propsApiRef !== void 0 ? propsApiRef : _apiRef;
|
|
1121
|
-
const RenderedToolbar =
|
|
2802
|
+
const RenderedToolbar = slots !== null && slots !== void 0 && slots.toolbar ? slots.toolbar : Toolbar;
|
|
1122
2803
|
LicenseInfo.setLicenseKey(license);
|
|
1123
2804
|
const height = propsHeight !== null && propsHeight !== void 0 ? propsHeight : autoHeight ? undefined : '500px';
|
|
1124
2805
|
const {
|
|
1125
2806
|
onColumnVisibilityModelChange: controlledOnColumnVisibilityModelChange,
|
|
1126
2807
|
onFilterModelChange: controlledOnFilterModelChange,
|
|
1127
|
-
|
|
1128
|
-
onPageSizeChange: controlledOnPageSizeChange,
|
|
2808
|
+
onPaginationModelChange: controlledOnPaginationModelChange,
|
|
1129
2809
|
onPinnedColumnsChange: controlledOnPinnedColumnsChange,
|
|
1130
2810
|
onSortModelChange: controlledOnSortModelChange
|
|
1131
2811
|
} = useControlledDatagridState({
|
|
1132
2812
|
initialState,
|
|
1133
|
-
|
|
2813
|
+
pageSizeOptions,
|
|
1134
2814
|
propsColumnVisibilityModel,
|
|
1135
2815
|
propsFilterModel,
|
|
1136
2816
|
propsOnColumnVisibilityModelChange,
|
|
1137
2817
|
propsOnFilterModelChange,
|
|
1138
2818
|
propsOnPinnedColumnsChange,
|
|
1139
2819
|
propsOnSortModelChange,
|
|
1140
|
-
|
|
1141
|
-
propsPageSize,
|
|
2820
|
+
propsPaginationModel,
|
|
1142
2821
|
propsPinnedColumns,
|
|
1143
2822
|
propsSortModel,
|
|
1144
|
-
|
|
1145
|
-
propsOnPageSizeChange
|
|
2823
|
+
propsOnPaginationModelChange
|
|
1146
2824
|
});
|
|
1147
2825
|
const {
|
|
1148
2826
|
columnVisibilityModel,
|
|
1149
2827
|
filterModel,
|
|
1150
2828
|
onColumnVisibilityModelChange,
|
|
1151
2829
|
onFilterModelChange,
|
|
1152
|
-
|
|
1153
|
-
onPageSizeChange,
|
|
2830
|
+
onPaginationModelChange,
|
|
1154
2831
|
onPinnedColumnsChange,
|
|
1155
2832
|
onSortModelChange,
|
|
1156
|
-
|
|
1157
|
-
pageSize,
|
|
2833
|
+
paginationModel,
|
|
1158
2834
|
pinnedColumns,
|
|
1159
2835
|
sortModel,
|
|
1160
2836
|
onColumnWidthChange
|
|
@@ -1165,40 +2841,39 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1165
2841
|
onColumnVisibilityModelChange: controlledOnColumnVisibilityModelChange,
|
|
1166
2842
|
onColumnWidthChange: propsOnColumnWidthChange,
|
|
1167
2843
|
onFilterModelChange: controlledOnFilterModelChange,
|
|
1168
|
-
|
|
1169
|
-
onPageSizeChange: controlledOnPageSizeChange,
|
|
2844
|
+
onPaginationModelChange: controlledOnPaginationModelChange,
|
|
1170
2845
|
onPinnedColumnsChange: controlledOnPinnedColumnsChange,
|
|
1171
2846
|
onSortModelChange: controlledOnSortModelChange,
|
|
1172
2847
|
useRouter: useRouter,
|
|
1173
2848
|
localStorageVersion,
|
|
1174
2849
|
previousLocalStorageVersions
|
|
1175
2850
|
});
|
|
1176
|
-
const [
|
|
2851
|
+
const [rowSelectionModel, setRowSelectionModel] = useState(propsRowSelectionModel !== null && propsRowSelectionModel !== void 0 ? propsRowSelectionModel : []);
|
|
1177
2852
|
useEffect(() => {
|
|
1178
|
-
|
|
1179
|
-
}, [
|
|
1180
|
-
const
|
|
1181
|
-
if (
|
|
1182
|
-
|
|
2853
|
+
setRowSelectionModel(propsRowSelectionModel !== null && propsRowSelectionModel !== void 0 ? propsRowSelectionModel : []);
|
|
2854
|
+
}, [propsRowSelectionModel]);
|
|
2855
|
+
const onRowSelectionModelChange = (selectionModel, details) => {
|
|
2856
|
+
if (propsOnRowSelectionModelChange) {
|
|
2857
|
+
propsOnRowSelectionModelChange(selectionModel, details);
|
|
1183
2858
|
} else {
|
|
1184
|
-
|
|
2859
|
+
setRowSelectionModel(selectionModel);
|
|
1185
2860
|
}
|
|
1186
2861
|
};
|
|
1187
2862
|
const selectionStatus = useRef({
|
|
1188
2863
|
type: 'none',
|
|
1189
2864
|
numberOfSelectedRows: 0,
|
|
1190
2865
|
numberOfSelectedRowsInPage: 0,
|
|
1191
|
-
page,
|
|
1192
|
-
pageSize: pageSize
|
|
2866
|
+
page: paginationModel.page,
|
|
2867
|
+
pageSize: paginationModel.pageSize
|
|
1193
2868
|
});
|
|
1194
2869
|
|
|
1195
2870
|
// in server-side pagination we want to update the selection status
|
|
1196
2871
|
// every time we navigate between pages, resize our page or select something
|
|
1197
2872
|
useEffect(() => {
|
|
1198
2873
|
if (paginationMode == 'server') {
|
|
1199
|
-
onServerSideSelectionStatusChange(Array.isArray(
|
|
2874
|
+
onServerSideSelectionStatusChange(Array.isArray(rowSelectionModel) ? rowSelectionModel : [rowSelectionModel], apiRef, selectionStatus, isRowSelectable, paginationModel.page, paginationModel.pageSize);
|
|
1200
2875
|
}
|
|
1201
|
-
}, [
|
|
2876
|
+
}, [rowSelectionModel, paginationModel.page, paginationModel.pageSize]);
|
|
1202
2877
|
if (!Array.isArray(rows)) {
|
|
1203
2878
|
return null;
|
|
1204
2879
|
}
|
|
@@ -1224,22 +2899,20 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1224
2899
|
ref: datagridRef,
|
|
1225
2900
|
className: classNames(StatefulDataGrid.className, className),
|
|
1226
2901
|
$height: height
|
|
1227
|
-
}, /*#__PURE__*/React__default.createElement(DataGridPro, _extends({}, forwardedProps, {
|
|
2902
|
+
}, /*#__PURE__*/React__default.createElement(DataGridPro, _extends$1({}, forwardedProps, {
|
|
1228
2903
|
apiRef: apiRef,
|
|
1229
2904
|
columns: columns,
|
|
1230
2905
|
columnVisibilityModel: columnVisibilityModel,
|
|
1231
2906
|
filterModel: filterModel,
|
|
1232
2907
|
onColumnVisibilityModelChange: onColumnVisibilityModelChange,
|
|
1233
2908
|
onFilterModelChange: onFilterModelChange,
|
|
1234
|
-
|
|
1235
|
-
onPageSizeChange: onPageSizeChange,
|
|
2909
|
+
onPaginationModelChange: onPaginationModelChange,
|
|
1236
2910
|
onPinnedColumnsChange: onPinnedColumnsChange,
|
|
1237
2911
|
onSortModelChange: onSortModelChange,
|
|
1238
|
-
|
|
1239
|
-
pageSize: pageSize,
|
|
2912
|
+
paginationModel: paginationModel,
|
|
1240
2913
|
pinnedColumns: pinnedColumns,
|
|
1241
2914
|
sortModel: sortModel,
|
|
1242
|
-
|
|
2915
|
+
pageSizeOptions: pageSizeOptions,
|
|
1243
2916
|
onColumnWidthChange: onColumnWidthChange,
|
|
1244
2917
|
initialState: initialState,
|
|
1245
2918
|
isRowSelectable: isRowSelectable,
|
|
@@ -1250,79 +2923,74 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1250
2923
|
rowCount: rowCount,
|
|
1251
2924
|
autoHeight: autoHeight,
|
|
1252
2925
|
checkboxSelectionVisibleOnly: Boolean(pagination),
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
ColumnFilteredIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends({}, props, {
|
|
2926
|
+
slots: _objectSpread2(_objectSpread2({
|
|
2927
|
+
baseButton: BaseButton,
|
|
2928
|
+
baseCheckbox: BaseCheckbox,
|
|
2929
|
+
// baseTextField,
|
|
2930
|
+
basePopper: BasePopper,
|
|
2931
|
+
columnFilteredIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1260
2932
|
displayName: "ColumnFilteredIcon"
|
|
1261
2933
|
})),
|
|
1262
|
-
|
|
2934
|
+
columnSelectorIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1263
2935
|
displayName: "ColumnSelectorIcon"
|
|
1264
2936
|
})),
|
|
1265
|
-
|
|
2937
|
+
columnSortedAscendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1266
2938
|
displayName: "ColumnSortedAscendingIcon"
|
|
1267
2939
|
})),
|
|
1268
|
-
|
|
2940
|
+
columnSortedDescendingIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1269
2941
|
displayName: "ColumnSortedDescendingIcon"
|
|
1270
2942
|
})),
|
|
1271
|
-
|
|
2943
|
+
densityCompactIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1272
2944
|
displayName: "DensityCompactIcon"
|
|
1273
2945
|
})),
|
|
1274
|
-
|
|
2946
|
+
densityStandardIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1275
2947
|
displayName: "DensityStandardIcon"
|
|
1276
2948
|
})),
|
|
1277
|
-
|
|
2949
|
+
densityComfortableIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1278
2950
|
displayName: "DensityComfortableIcon"
|
|
1279
2951
|
})),
|
|
1280
|
-
|
|
2952
|
+
detailPanelCollapseIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1281
2953
|
displayName: "DetailPanelCollapseIcon"
|
|
1282
2954
|
})),
|
|
1283
|
-
|
|
2955
|
+
detailPanelExpandIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1284
2956
|
displayName: "DetailPanelExpandIcon"
|
|
1285
2957
|
})),
|
|
1286
|
-
|
|
2958
|
+
exportIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({}, props, {
|
|
1287
2959
|
displayName: "ExportIcon"
|
|
1288
2960
|
})),
|
|
1289
|
-
|
|
2961
|
+
openFilterButtonIcon: props => /*#__PURE__*/React__default.createElement(BaseIcon, _extends$1({
|
|
1290
2962
|
displayName: "OpenFilterButtonIcon"
|
|
1291
2963
|
}, props))
|
|
1292
|
-
},
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
return pagination ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, _extends({}, props, {
|
|
2964
|
+
}, slots), {}, {
|
|
2965
|
+
toolbar: ToolbarWrapper,
|
|
2966
|
+
pagination: props => {
|
|
2967
|
+
return pagination ? paginationMode == 'server' ? /*#__PURE__*/React__default.createElement(ServerSideControlledPagination, _extends$1({}, props, {
|
|
1296
2968
|
displaySelection: false,
|
|
1297
2969
|
displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
|
|
1298
2970
|
displayPagination: ['bottom', 'both'].includes(paginationPlacement),
|
|
1299
2971
|
selectionStatus: selectionStatus.current,
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
onPageSizeChange: onPageSizeChange,
|
|
1304
|
-
rowsPerPageOptions: rowsPerPageOptions,
|
|
2972
|
+
paginationModel: paginationModel,
|
|
2973
|
+
onPaginationModelChange: onPaginationModelChange,
|
|
2974
|
+
pageSizeOptions: pageSizeOptions,
|
|
1305
2975
|
paginationProps: paginationProps,
|
|
1306
2976
|
paginationMode: paginationMode,
|
|
1307
2977
|
rowCount: rowCount
|
|
1308
|
-
})) : /*#__PURE__*/React__default.createElement(ControlledPagination, _extends({}, props, {
|
|
2978
|
+
})) : /*#__PURE__*/React__default.createElement(ControlledPagination, _extends$1({}, props, {
|
|
1309
2979
|
displaySelection: false,
|
|
1310
2980
|
displayRowsPerPage: ['bottom', 'both'].includes(paginationPlacement),
|
|
1311
2981
|
displayPagination: ['bottom', 'both'].includes(paginationPlacement),
|
|
1312
2982
|
selectionStatus: selectionStatus.current,
|
|
1313
2983
|
apiRef: apiRef,
|
|
1314
2984
|
isRowSelectable: isRowSelectable,
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
onPageSizeChange: onPageSizeChange,
|
|
1319
|
-
rowsPerPageOptions: rowsPerPageOptions,
|
|
2985
|
+
paginationModel: paginationModel,
|
|
2986
|
+
onPaginationModelChange: onPaginationModelChange,
|
|
2987
|
+
pageSizeOptions: pageSizeOptions,
|
|
1320
2988
|
paginationProps: paginationProps,
|
|
1321
2989
|
paginationMode: paginationMode
|
|
1322
2990
|
})) : null;
|
|
1323
2991
|
}
|
|
1324
2992
|
}),
|
|
1325
|
-
|
|
2993
|
+
slotProps: _objectSpread2(_objectSpread2({}, slotProps), {}, {
|
|
1326
2994
|
toolbar: _objectSpread2({
|
|
1327
2995
|
hideToolbar,
|
|
1328
2996
|
RenderedToolbar,
|
|
@@ -1333,18 +3001,16 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1333
3001
|
selectionStatus,
|
|
1334
3002
|
apiRef,
|
|
1335
3003
|
isRowSelectable,
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
onPageSizeChange,
|
|
1340
|
-
rowsPerPageOptions,
|
|
3004
|
+
paginationModel,
|
|
3005
|
+
onPaginationModelChange,
|
|
3006
|
+
pageSizeOptions,
|
|
1341
3007
|
paginationProps,
|
|
1342
3008
|
paginationMode,
|
|
1343
3009
|
rowCount
|
|
1344
|
-
},
|
|
3010
|
+
}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.toolbar)
|
|
1345
3011
|
}),
|
|
1346
|
-
|
|
1347
|
-
|
|
3012
|
+
rowSelectionModel: rowSelectionModel,
|
|
3013
|
+
onRowSelectionModelChange: (newSelectionModel, details) => {
|
|
1348
3014
|
if (pagination && paginationMode != 'server') {
|
|
1349
3015
|
const selectableRowsInPage = isRowSelectable ? gridPaginatedVisibleSortedGridRowEntriesSelector(apiRef).filter(_ref => {
|
|
1350
3016
|
let {
|
|
@@ -1402,7 +3068,7 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1402
3068
|
};
|
|
1403
3069
|
}
|
|
1404
3070
|
}
|
|
1405
|
-
|
|
3071
|
+
onRowSelectionModelChange === null || onRowSelectionModelChange === void 0 ? void 0 : onRowSelectionModelChange(newSelectionModel, details);
|
|
1406
3072
|
},
|
|
1407
3073
|
sx: _objectSpread2(_objectSpread2({}, sx), {}, {
|
|
1408
3074
|
'.MuiDataGrid-columnHeaders': {
|
|
@@ -1418,5 +3084,5 @@ const StatefulDataGrid = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
1418
3084
|
StatefulDataGrid.className = CLASSNAME;
|
|
1419
3085
|
StatefulDataGrid.displayName = COMPONENT_NAME;
|
|
1420
3086
|
|
|
1421
|
-
export { CATEGORIES as C,
|
|
3087
|
+
export { getSearchParamsFromColumnVisibility as $, FILTER_SEARCH_KEY as A, CATEGORIES as B, CONTAINS_ANY_OF as C, DOES_NOT_CONTAIN as D, ENDS_WITH_ANY_OF as E, FILTER_MODEL_KEY as F, buildStorageKey as G, HAS as H, IS_BETWEEN as I, clearPreviousVersionStorage as J, decodeValue as K, encodeValue as L, urlSearchParamsToString as M, numberOperatorEncoder as N, numberOperatorDecoder as O, PAGINATION_MODEL_KEY as P, isOperatorValueValid as Q, isValueValid as R, STARTS_WITH_ANY_OF as S, getFilterModelFromString as T, getSearchParamsFromFilterModel as U, VISIBILITY_MODEL_KEY as V, getSortingFromString as W, getSearchParamsFromSorting as X, getPaginationFromString as Y, getSearchParamsFromPagination as Z, getColumnVisibilityFromString as _, DOES_NOT_EQUAL as a, getPinnedColumnsFromString as a0, getSearchParamsFromPinnedColumns as a1, getSearchParamsFromTab as a2, getFinalSearch as a3, getModelsParsedOrUpdateLocalStorage as a4, updateUrl as a5, areFilterModelsEquivalent as a6, StatefulDataGrid as a7, 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, IS_ANY_OF as n, operatorList as o, IS_ANY_OF_WITH_SELECT as p, HAS_ANY_OF as q, HAS_ANY_OF_WITH_SELECT as r, IS_NOT_ANY_OF as s, IS_NOT_ANY_OF_WITH_SELECT as t, getGridStringArrayOperators as u, getGridStringArrayOperatorsWithSelect as v, getGridStringArrayOperatorsWithSelectOnStringArrayColumns as w, SORT_MODEL_KEY as x, PINNED_COLUMNS as y, DIMENSION_MODEL_KEY as z };
|
|
1422
3088
|
//# sourceMappingURL=StatefulDataGrid2.js.map
|