-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[DataGrid] Customize FilterPanel
with props
#3497
Changes from 3 commits
9afd3f4
129e939
0af7213
93e7aa3
bd3fcdd
7651d6b
3c9de83
d421ad9
01dbe3e
5b50bf0
3560f2b
2855ab6
d8c41ac
7d39cd8
15630d7
87e656a
1b16222
3d7b052
3936174
9d3e4fa
8170224
7ff5e6c
08225c9
808261e
00f7cd1
9dcadb0
b2e6453
7e659ab
6c6d6a9
84f4e16
29bd314
6d5c487
72d2886
64e7767
04a5331
f10cb3d
7127c06
3c8dbf7
ec687de
cc8ef3e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
import * as React from 'react'; | ||
import { DataGridPro, GridLinkOperator } from '@mui/x-data-grid-pro'; | ||
import { useDemoData } from '@mui/x-data-grid-generator'; | ||
|
||
export default function DisableSortingGrid() { | ||
const { data } = useDemoData({ | ||
dataSet: 'Commodity', | ||
rowLength: 10, | ||
maxColumns: 6, | ||
}); | ||
|
||
return ( | ||
<div style={{ height: 400, width: '100%' }}> | ||
<DataGridPro | ||
{...data} | ||
// components={{ | ||
// FilterPanel: MyCustomFilterPanel, | ||
// }} | ||
componentsProps={{ | ||
filterPanel: { | ||
linkOperators: [GridLinkOperator.And], | ||
columnsSort: 'asc', | ||
deleteIconContainerSx: { display: 'none' }, | ||
valueContainerSx: { width: 200 }, | ||
// linkOperatorContainerSx: {}, | ||
// columnContainerSx: {}, | ||
// operatorContainerSx: {} | ||
}, | ||
}} | ||
/> | ||
</div> | ||
); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
import * as React from 'react'; | ||
import { DataGridPro, GridLinkOperator } from '@mui/x-data-grid-pro'; | ||
import { useDemoData } from '@mui/x-data-grid-generator'; | ||
|
||
export default function DisableSortingGrid() { | ||
alexfauquette marked this conversation as resolved.
Show resolved
Hide resolved
|
||
const { data } = useDemoData({ | ||
dataSet: 'Commodity', | ||
rowLength: 10, | ||
maxColumns: 6, | ||
}); | ||
|
||
return ( | ||
<div style={{ height: 400, width: '100%' }}> | ||
<DataGridPro | ||
{...data} | ||
// components={{ | ||
// FilterPanel: MyCustomFilterPanel, | ||
// }} | ||
componentsProps={{ | ||
filterPanel: { | ||
linkOperators: [GridLinkOperator.And], | ||
columnsSort: 'asc', | ||
deleteIconContainerSx: { display: 'none' }, | ||
valueContainerSx: { width: 200 }, | ||
// linkOperatorContainerSx: {}, | ||
// columnContainerSx: {}, | ||
// operatorContainerSx: {} | ||
}, | ||
}} | ||
/> | ||
</div> | ||
); | ||
} |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -6,7 +6,7 @@ import IconButton from '@mui/material/IconButton'; | |||||||||||||||||||||||||||||
import InputLabel from '@mui/material/InputLabel'; | ||||||||||||||||||||||||||||||
import Select, { SelectChangeEvent } from '@mui/material/Select'; | ||||||||||||||||||||||||||||||
import { capitalize, unstable_useId as useId } from '@mui/material/utils'; | ||||||||||||||||||||||||||||||
import { styled } from '@mui/material/styles'; | ||||||||||||||||||||||||||||||
import { styled, SxProps, Theme } from '@mui/material/styles'; | ||||||||||||||||||||||||||||||
import { filterableGridColumnsSelector } from '../../../hooks/features/columns/gridColumnsSelector'; | ||||||||||||||||||||||||||||||
import { useGridSelector } from '../../../hooks/utils/useGridSelector'; | ||||||||||||||||||||||||||||||
import { GridFilterItem, GridLinkOperator } from '../../../models/gridFilterItem'; | ||||||||||||||||||||||||||||||
|
@@ -27,6 +27,14 @@ export interface GridFilterFormProps { | |||||||||||||||||||||||||||||
applyFilterChanges: (item: GridFilterItem) => void; | ||||||||||||||||||||||||||||||
applyMultiFilterOperatorChanges: (operator: GridLinkOperator) => void; | ||||||||||||||||||||||||||||||
deleteFilter: (item: GridFilterItem) => void; | ||||||||||||||||||||||||||||||
hasLinkOperatorColumn?: boolean; | ||||||||||||||||||||||||||||||
linkOperators?: (GridLinkOperator.And | GridLinkOperator.Or)[]; | ||||||||||||||||||||||||||||||
alexfauquette marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||
columnsSort?: 'asc' | 'desc'; | ||||||||||||||||||||||||||||||
deleteIconContainerSx?: SxProps<Theme>; | ||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @mnajdova in the core how to you handle when you want the user to easily customize the style of nested elements with Do you pass down the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would recommend using
At least this is what we do in the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @mnajdova Do you mean using const CustomFilterForm = (props) => <GridFilterForm
componentsProps={{ deleteIconContainer: { sx: /* ... */ } }}
{...props}
/>
<DataGrid
...
components={{
filterForm: CustomFilterForm
}} For now, I tried to use nesting classes as follows. Considering that <DataGrid
...
componentsProps={{
filterPanel: {
sx: {
"& .MuiDataGrid-filterForm": { ... },
"& .MuiDataGrid-closeIconController": { ... },
...
}
}
}} There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sorry, for some reason I have missed this comment. If the other nested components can only be customized by CSS selectors, why are you adding this new prop My point was that, we don't add first class props on the component for prop that should be passed on some nested elements, we prefer using |
||||||||||||||||||||||||||||||
linkOperatorContainerSx?: SxProps<Theme>; | ||||||||||||||||||||||||||||||
columnContainerSx?: SxProps<Theme>; | ||||||||||||||||||||||||||||||
operatorContainerSx?: SxProps<Theme>; | ||||||||||||||||||||||||||||||
valueContainerSx?: SxProps<Theme>; | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
type OwnerState = { classes: GridComponentProps['classes'] }; | ||||||||||||||||||||||||||||||
|
@@ -47,21 +55,66 @@ const GridFilterFormRoot = styled('div', { | |||||||||||||||||||||||||||||
overridesResolver: (props, styles) => styles.filterForm, | ||||||||||||||||||||||||||||||
alexfauquette marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||
})(({ theme }) => ({ | ||||||||||||||||||||||||||||||
display: 'flex', | ||||||||||||||||||||||||||||||
justifyContent: 'space-around', | ||||||||||||||||||||||||||||||
padding: theme.spacing(1), | ||||||||||||||||||||||||||||||
})); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
const getLinkOperatorLocaleKey = (linkOperator) => { | ||||||||||||||||||||||||||||||
alexfauquette marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||
switch (linkOperator) { | ||||||||||||||||||||||||||||||
case GridLinkOperator.And: | ||||||||||||||||||||||||||||||
return 'filterPanelOperatorAnd'; | ||||||||||||||||||||||||||||||
case GridLinkOperator.Or: | ||||||||||||||||||||||||||||||
return 'filterPanelOperatorOr'; | ||||||||||||||||||||||||||||||
default: | ||||||||||||||||||||||||||||||
throw new Error('MUI: Invalid `linkOperator` property in the `GridFilterPanel`.'); | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
const getColumnLabel = (col) => col.headerName || col.field; | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
const useColumnSorting = (filterableColumns, columnsSort) => { | ||||||||||||||||||||||||||||||
const [sortedColumns, setSortedColumns] = React.useState(filterableColumns); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
React.useEffect(() => { | ||||||||||||||||||||||||||||||
switch (columnsSort) { | ||||||||||||||||||||||||||||||
case 'asc': | ||||||||||||||||||||||||||||||
setSortedColumns( | ||||||||||||||||||||||||||||||
filterableColumns.sort((a, b) => (getColumnLabel(a) < getColumnLabel(b) ? -1 : 1)), | ||||||||||||||||||||||||||||||
alexfauquette marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||
case 'desc': | ||||||||||||||||||||||||||||||
setSortedColumns( | ||||||||||||||||||||||||||||||
filterableColumns.sort((a, b) => (getColumnLabel(a) < getColumnLabel(b) ? 1 : -1)), | ||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||
default: | ||||||||||||||||||||||||||||||
setSortedColumns(filterableColumns); | ||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
}, [filterableColumns, columnsSort]); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
return sortedColumns; | ||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
function GridFilterForm(props: GridFilterFormProps) { | ||||||||||||||||||||||||||||||
const { | ||||||||||||||||||||||||||||||
item, | ||||||||||||||||||||||||||||||
hasMultipleFilters, | ||||||||||||||||||||||||||||||
deleteFilter, | ||||||||||||||||||||||||||||||
applyFilterChanges, | ||||||||||||||||||||||||||||||
multiFilterOperator, | ||||||||||||||||||||||||||||||
showMultiFilterOperators, | ||||||||||||||||||||||||||||||
disableMultiFilterOperator, | ||||||||||||||||||||||||||||||
applyMultiFilterOperatorChanges, | ||||||||||||||||||||||||||||||
focusElementRef, | ||||||||||||||||||||||||||||||
hasLinkOperatorColumn, | ||||||||||||||||||||||||||||||
linkOperators = [GridLinkOperator.And, GridLinkOperator.Or], | ||||||||||||||||||||||||||||||
columnsSort, | ||||||||||||||||||||||||||||||
deleteIconContainerSx = {}, | ||||||||||||||||||||||||||||||
linkOperatorContainerSx = {}, | ||||||||||||||||||||||||||||||
columnContainerSx = {}, | ||||||||||||||||||||||||||||||
operatorContainerSx = {}, | ||||||||||||||||||||||||||||||
valueContainerSx = {}, | ||||||||||||||||||||||||||||||
} = props; | ||||||||||||||||||||||||||||||
const apiRef = useGridApiContext(); | ||||||||||||||||||||||||||||||
const filterableColumns = useGridSelector(apiRef, filterableGridColumnsSelector); | ||||||||||||||||||||||||||||||
|
@@ -77,6 +130,8 @@ function GridFilterForm(props: GridFilterFormProps) { | |||||||||||||||||||||||||||||
const valueRef = React.useRef<any>(null); | ||||||||||||||||||||||||||||||
const filterSelectorRef = React.useRef<HTMLInputElement>(null); | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
const sortedFilterableColumns = useColumnSorting(filterableColumns, columnsSort); | ||||||||||||||||||||||||||||||
alexfauquette marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
const currentColumn = item.columnField ? apiRef.current.getColumn(item.columnField) : null; | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
const currentOperator = React.useMemo(() => { | ||||||||||||||||||||||||||||||
|
@@ -175,7 +230,12 @@ function GridFilterForm(props: GridFilterFormProps) { | |||||||||||||||||||||||||||||
<GridFilterFormRoot className={classes.root}> | ||||||||||||||||||||||||||||||
<FormControl | ||||||||||||||||||||||||||||||
variant="standard" | ||||||||||||||||||||||||||||||
sx={{ flexShrink: 0, justifyContent: 'flex-end', marginRight: 0.5, marginBottom: 0.2 }} | ||||||||||||||||||||||||||||||
sx={[ | ||||||||||||||||||||||||||||||
{ flexShrink: 0, justifyContent: 'flex-end', marginRight: 0.5, marginBottom: 0.2 }, | ||||||||||||||||||||||||||||||
...(Array.isArray(deleteIconContainerSx) | ||||||||||||||||||||||||||||||
? deleteIconContainerSx | ||||||||||||||||||||||||||||||
: [deleteIconContainerSx]), | ||||||||||||||||||||||||||||||
]} | ||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. As we discussed, the prop could be renamed to
Suggested change
Another alternative is to make the const StyledFormControl = styled(FormControl)({ flexShrink: 0 });
<StyledFormControl {...deleteIconContainerProps} /> |
||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||
<IconButton | ||||||||||||||||||||||||||||||
aria-label={apiRef.current.getLocaleText('filterPanelDeleteIconLabel')} | ||||||||||||||||||||||||||||||
|
@@ -188,11 +248,16 @@ function GridFilterForm(props: GridFilterFormProps) { | |||||||||||||||||||||||||||||
</FormControl> | ||||||||||||||||||||||||||||||
<FormControl | ||||||||||||||||||||||||||||||
variant="standard" | ||||||||||||||||||||||||||||||
sx={{ | ||||||||||||||||||||||||||||||
minWidth: 60, | ||||||||||||||||||||||||||||||
display: hasMultipleFilters ? 'block' : 'none', | ||||||||||||||||||||||||||||||
visibility: showMultiFilterOperators ? 'visible' : 'hidden', | ||||||||||||||||||||||||||||||
}} | ||||||||||||||||||||||||||||||
sx={[ | ||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||
minWidth: 60, | ||||||||||||||||||||||||||||||
display: hasLinkOperatorColumn ? 'block' : 'none', | ||||||||||||||||||||||||||||||
visibility: showMultiFilterOperators ? 'visible' : 'hidden', | ||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||
...(Array.isArray(linkOperatorContainerSx) | ||||||||||||||||||||||||||||||
? linkOperatorContainerSx | ||||||||||||||||||||||||||||||
: [linkOperatorContainerSx]), | ||||||||||||||||||||||||||||||
]} | ||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||
<InputLabel htmlFor={linkOperatorSelectId} id={linkOperatorSelectLabelId}> | ||||||||||||||||||||||||||||||
{apiRef.current.getLocaleText('filterPanelOperators')} | ||||||||||||||||||||||||||||||
|
@@ -202,18 +267,23 @@ function GridFilterForm(props: GridFilterFormProps) { | |||||||||||||||||||||||||||||
id={linkOperatorSelectId} | ||||||||||||||||||||||||||||||
value={multiFilterOperator} | ||||||||||||||||||||||||||||||
onChange={changeLinkOperator} | ||||||||||||||||||||||||||||||
disabled={!!disableMultiFilterOperator} | ||||||||||||||||||||||||||||||
disabled={!!disableMultiFilterOperator || linkOperators.length === 1} | ||||||||||||||||||||||||||||||
native | ||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||
<option key={GridLinkOperator.And.toString()} value={GridLinkOperator.And.toString()}> | ||||||||||||||||||||||||||||||
{apiRef.current.getLocaleText('filterPanelOperatorAnd')} | ||||||||||||||||||||||||||||||
</option> | ||||||||||||||||||||||||||||||
<option key={GridLinkOperator.Or.toString()} value={GridLinkOperator.Or.toString()}> | ||||||||||||||||||||||||||||||
{apiRef.current.getLocaleText('filterPanelOperatorOr')} | ||||||||||||||||||||||||||||||
</option> | ||||||||||||||||||||||||||||||
{linkOperators.map((linkOperator) => ( | ||||||||||||||||||||||||||||||
<option key={linkOperator.toString()} value={linkOperator.toString()}> | ||||||||||||||||||||||||||||||
{apiRef.current.getLocaleText(getLinkOperatorLocaleKey(linkOperator))} | ||||||||||||||||||||||||||||||
</option> | ||||||||||||||||||||||||||||||
))} | ||||||||||||||||||||||||||||||
</Select> | ||||||||||||||||||||||||||||||
</FormControl> | ||||||||||||||||||||||||||||||
<FormControl variant="standard" sx={{ width: 150 }}> | ||||||||||||||||||||||||||||||
<FormControl | ||||||||||||||||||||||||||||||
variant="standard" | ||||||||||||||||||||||||||||||
sx={[ | ||||||||||||||||||||||||||||||
{ width: 150 }, | ||||||||||||||||||||||||||||||
...(Array.isArray(columnContainerSx) ? columnContainerSx : [columnContainerSx]), | ||||||||||||||||||||||||||||||
]} | ||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||
<InputLabel htmlFor={columnSelectId} id={columnSelectLabelId}> | ||||||||||||||||||||||||||||||
{apiRef.current.getLocaleText('filterPanelColumns')} | ||||||||||||||||||||||||||||||
</InputLabel> | ||||||||||||||||||||||||||||||
|
@@ -224,14 +294,20 @@ function GridFilterForm(props: GridFilterFormProps) { | |||||||||||||||||||||||||||||
onChange={changeColumn} | ||||||||||||||||||||||||||||||
native | ||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||
{filterableColumns.map((col) => ( | ||||||||||||||||||||||||||||||
{sortedFilterableColumns.map((col) => ( | ||||||||||||||||||||||||||||||
<option key={col.field} value={col.field}> | ||||||||||||||||||||||||||||||
{col.headerName || col.field} | ||||||||||||||||||||||||||||||
{getColumnLabel(col)} | ||||||||||||||||||||||||||||||
</option> | ||||||||||||||||||||||||||||||
))} | ||||||||||||||||||||||||||||||
</Select> | ||||||||||||||||||||||||||||||
</FormControl> | ||||||||||||||||||||||||||||||
<FormControl variant="standard" sx={{ width: 120 }}> | ||||||||||||||||||||||||||||||
<FormControl | ||||||||||||||||||||||||||||||
variant="standard" | ||||||||||||||||||||||||||||||
sx={[ | ||||||||||||||||||||||||||||||
{ width: 120 }, | ||||||||||||||||||||||||||||||
...(Array.isArray(operatorContainerSx) ? operatorContainerSx : [operatorContainerSx]), | ||||||||||||||||||||||||||||||
]} | ||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||
<InputLabel htmlFor={operatorSelectId} id={operatorSelectLabelId}> | ||||||||||||||||||||||||||||||
{apiRef.current.getLocaleText('filterPanelOperators')} | ||||||||||||||||||||||||||||||
</InputLabel> | ||||||||||||||||||||||||||||||
|
@@ -253,7 +329,13 @@ function GridFilterForm(props: GridFilterFormProps) { | |||||||||||||||||||||||||||||
))} | ||||||||||||||||||||||||||||||
</Select> | ||||||||||||||||||||||||||||||
</FormControl> | ||||||||||||||||||||||||||||||
<FormControl variant="standard" sx={{ width: 190 }}> | ||||||||||||||||||||||||||||||
<FormControl | ||||||||||||||||||||||||||||||
variant="standard" | ||||||||||||||||||||||||||||||
sx={[ | ||||||||||||||||||||||||||||||
{ width: 190 }, | ||||||||||||||||||||||||||||||
...(Array.isArray(valueContainerSx) ? valueContainerSx : [valueContainerSx]), | ||||||||||||||||||||||||||||||
]} | ||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||
{currentOperator?.InputComponent ? ( | ||||||||||||||||||||||||||||||
<currentOperator.InputComponent | ||||||||||||||||||||||||||||||
apiRef={apiRef} | ||||||||||||||||||||||||||||||
|
@@ -275,21 +357,49 @@ GridFilterForm.propTypes = { | |||||||||||||||||||||||||||||
// ---------------------------------------------------------------------- | ||||||||||||||||||||||||||||||
applyFilterChanges: PropTypes.func.isRequired, | ||||||||||||||||||||||||||||||
applyMultiFilterOperatorChanges: PropTypes.func.isRequired, | ||||||||||||||||||||||||||||||
columnContainerSx: PropTypes.oneOfType([ | ||||||||||||||||||||||||||||||
PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), | ||||||||||||||||||||||||||||||
PropTypes.func, | ||||||||||||||||||||||||||||||
PropTypes.object, | ||||||||||||||||||||||||||||||
]), | ||||||||||||||||||||||||||||||
columnsSort: PropTypes.oneOf(['asc', 'desc']), | ||||||||||||||||||||||||||||||
deleteFilter: PropTypes.func.isRequired, | ||||||||||||||||||||||||||||||
deleteIconContainerSx: PropTypes.oneOfType([ | ||||||||||||||||||||||||||||||
PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), | ||||||||||||||||||||||||||||||
PropTypes.func, | ||||||||||||||||||||||||||||||
PropTypes.object, | ||||||||||||||||||||||||||||||
]), | ||||||||||||||||||||||||||||||
disableMultiFilterOperator: PropTypes.bool, | ||||||||||||||||||||||||||||||
focusElementRef: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([ | ||||||||||||||||||||||||||||||
PropTypes.func, | ||||||||||||||||||||||||||||||
PropTypes.object, | ||||||||||||||||||||||||||||||
]), | ||||||||||||||||||||||||||||||
hasLinkOperatorColumn: PropTypes.bool, | ||||||||||||||||||||||||||||||
hasMultipleFilters: PropTypes.bool.isRequired, | ||||||||||||||||||||||||||||||
item: PropTypes.shape({ | ||||||||||||||||||||||||||||||
columnField: PropTypes.string.isRequired, | ||||||||||||||||||||||||||||||
id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), | ||||||||||||||||||||||||||||||
operatorValue: PropTypes.string, | ||||||||||||||||||||||||||||||
value: PropTypes.any, | ||||||||||||||||||||||||||||||
}).isRequired, | ||||||||||||||||||||||||||||||
linkOperatorContainerSx: PropTypes.oneOfType([ | ||||||||||||||||||||||||||||||
PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), | ||||||||||||||||||||||||||||||
PropTypes.func, | ||||||||||||||||||||||||||||||
PropTypes.object, | ||||||||||||||||||||||||||||||
]), | ||||||||||||||||||||||||||||||
linkOperators: PropTypes.arrayOf(PropTypes.oneOf(['and', 'or']).isRequired), | ||||||||||||||||||||||||||||||
multiFilterOperator: PropTypes.oneOf(['and', 'or']), | ||||||||||||||||||||||||||||||
operatorContainerSx: PropTypes.oneOfType([ | ||||||||||||||||||||||||||||||
PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), | ||||||||||||||||||||||||||||||
PropTypes.func, | ||||||||||||||||||||||||||||||
PropTypes.object, | ||||||||||||||||||||||||||||||
]), | ||||||||||||||||||||||||||||||
showMultiFilterOperators: PropTypes.bool, | ||||||||||||||||||||||||||||||
valueContainerSx: PropTypes.oneOfType([ | ||||||||||||||||||||||||||||||
PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), | ||||||||||||||||||||||||||||||
PropTypes.func, | ||||||||||||||||||||||||||||||
PropTypes.object, | ||||||||||||||||||||||||||||||
]), | ||||||||||||||||||||||||||||||
} as any; | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
export { GridFilterForm }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove commented-out code (or maybe it's still a WIP).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In fact, I was looking for a way to show all the customization options in the same code, and comment on those which are not used in the demo. But yes, that's not explicit enough.