Skip to content

Commit 6491757

Browse files
authored
Merge pull request #11114 from marmelab/fix-columnselector-col-order
[Fix] Keep `ColumnsSelector` search input fixed above menu list
2 parents eca0c1b + c09a8cf commit 6491757

2 files changed

Lines changed: 34 additions & 33 deletions

File tree

packages/ra-ui-materialui/src/list/datatable/ColumnsButton.spec.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ describe('ColumnsButton', () => {
3434
screen
3535
.getByRole('menu')
3636
.querySelectorAll('li:not(.columns-selector-actions)')
37-
).toHaveLength(8); // 7 columns + the filter input li
37+
).toHaveLength(7);
3838
// Typing a filter
3939
fireEvent.change(
4040
screen.getByPlaceholderText('ra.action.search_columns'),
@@ -48,7 +48,7 @@ describe('ColumnsButton', () => {
4848
screen
4949
.getByRole('menu')
5050
.querySelectorAll('li:not(.columns-selector-actions)')
51-
).toHaveLength(2); // only the column with 'DiA' in its label should remain + the filter input li
51+
).toHaveLength(1);
5252
});
5353
screen.getByLabelText('Téstïng diàcritics');
5454
// Clear the filter
@@ -58,7 +58,7 @@ describe('ColumnsButton', () => {
5858
screen
5959
.getByRole('menu')
6060
.querySelectorAll('li:not(.columns-selector-actions)')
61-
).toHaveLength(8);
61+
).toHaveLength(7);
6262
});
6363
});
6464
it('should work with columns that have no source', async () => {

packages/ra-ui-materialui/src/list/datatable/ColumnsSelector.tsx

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ export const ColumnsSelector = ({ children }: ColumnsSelectorProps) => {
6767
const shouldDisplaySearchInput = childrenArray.length > 5;
6868

6969
return createPortal(
70-
<MenuList>
70+
<Box sx={{ pt: 1 }}>
7171
{shouldDisplaySearchInput ? (
72-
<Box component="li" tabIndex={-1}>
72+
<Box sx={{ mb: 1 }}>
7373
<ResettableTextField
7474
hiddenLabel
7575
label=""
@@ -94,39 +94,40 @@ export const ColumnsSelector = ({ children }: ColumnsSelectorProps) => {
9494
resettable
9595
autoFocus
9696
size="small"
97-
sx={{ mb: 1 }}
9897
/>
9998
</Box>
10099
) : null}
101-
{paddedColumnRanks.map((position, index) => (
102-
<DataTableColumnRankContext.Provider
103-
value={position}
104-
key={index}
105-
>
106-
<DataTableColumnFilterContext.Provider
107-
value={columnFilter}
100+
<MenuList sx={{ pt: 0 }}>
101+
{paddedColumnRanks.map((position, index) => (
102+
<DataTableColumnRankContext.Provider
103+
value={position}
108104
key={index}
109105
>
110-
{childrenArray[position]}
111-
</DataTableColumnFilterContext.Provider>
112-
</DataTableColumnRankContext.Provider>
113-
))}
114-
<Box
115-
component="li"
116-
className="columns-selector-actions"
117-
sx={{ textAlign: 'center', mt: 1 }}
118-
>
119-
<Button
120-
onClick={() => {
121-
setColumnRanks(undefined);
122-
setHiddenColumns(defaultHiddenColumns);
123-
}}
124-
label={translate('ra.action.reset', {
125-
_: 'Reset',
126-
})}
127-
/>
128-
</Box>
129-
</MenuList>,
106+
<DataTableColumnFilterContext.Provider
107+
value={columnFilter}
108+
key={index}
109+
>
110+
{childrenArray[position]}
111+
</DataTableColumnFilterContext.Provider>
112+
</DataTableColumnRankContext.Provider>
113+
))}
114+
<Box
115+
component="li"
116+
className="columns-selector-actions"
117+
sx={{ textAlign: 'center', mt: 1 }}
118+
>
119+
<Button
120+
onClick={() => {
121+
setColumnRanks(undefined);
122+
setHiddenColumns(defaultHiddenColumns);
123+
}}
124+
label={translate('ra.action.reset', {
125+
_: 'Reset',
126+
})}
127+
/>
128+
</Box>
129+
</MenuList>
130+
</Box>,
130131
container
131132
);
132133
};

0 commit comments

Comments
 (0)