Skip to content

Commit 412bf4f

Browse files
fix(ui): select all should reset when params change, page, filter, etc (#12612)
Fixes #11938 Fixes #13154 When select-all is checked and you filter or change the page, the selected documents should reset.
1 parent 246a42b commit 412bf4f

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

packages/ui/src/providers/Selection/index.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import * as qs from 'qs-esm'
66
import React, { createContext, use, useCallback, useEffect, useRef, useState } from 'react'
77

88
import { parseSearchParams } from '../../utilities/parseSearchParams.js'
9+
import { useListQuery } from '../ListQuery/index.js'
910
import { useLocale } from '../Locale/index.js'
1011

1112
export enum SelectAllStatus {
@@ -54,6 +55,7 @@ export const SelectionProvider: React.FC<Props> = ({ children, docs = [], totalD
5455
const [selectAll, setSelectAll] = useState<SelectAllStatus>(SelectAllStatus.None)
5556
const [count, setCount] = useState(0)
5657
const searchParams = useSearchParams()
58+
const { query } = useListQuery()
5759

5860
const toggleAll = useCallback(
5961
(allAvailable = false) => {
@@ -201,7 +203,11 @@ export const SelectionProvider: React.FC<Props> = ({ children, docs = [], totalD
201203
setCount(newCount)
202204
}, [selectAll, selected, totalDocs])
203205

204-
// eslint-disable-next-line react-compiler/react-compiler -- TODO: fix
206+
useEffect(() => {
207+
setSelectAll(SelectAllStatus.None)
208+
setSelected(new Map())
209+
}, [query])
210+
205211
contextRef.current = {
206212
count,
207213
getQueryParams,
@@ -213,7 +219,6 @@ export const SelectionProvider: React.FC<Props> = ({ children, docs = [], totalD
213219
totalDocs,
214220
}
215221

216-
// eslint-disable-next-line react-compiler/react-compiler -- TODO: fix
217222
return <Context value={contextRef.current}>{children}</Context>
218223
}
219224

test/admin/e2e/list-view/e2e.spec.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1649,6 +1649,33 @@ describe('List View', () => {
16491649
'Custom placeholder',
16501650
)
16511651
})
1652+
1653+
test('should reset list selection when query params change', async () => {
1654+
await deleteAllPosts()
1655+
await Promise.all(Array.from({ length: 12 }, (_, i) => createPost({ title: `post${i + 1}` })))
1656+
await page.goto(postsUrl.list)
1657+
1658+
const pageOneButton = page.locator('.paginator__page', { hasText: '1' })
1659+
await expect(pageOneButton).toBeVisible()
1660+
await pageOneButton.click()
1661+
1662+
await page.locator('.checkbox-input:has(#select-all)').locator('input').click()
1663+
await expect(page.locator('.checkbox-input:has(#select-all)').locator('input')).toBeChecked()
1664+
await expect(page.locator('.list-selection')).toContainText('5 selected')
1665+
1666+
const pageTwoButton = page.locator('.paginator__page', { hasText: '2' })
1667+
await expect(pageTwoButton).toBeVisible()
1668+
await pageTwoButton.click()
1669+
1670+
await expect(
1671+
page.locator('.checkbox-input:has(#select-all) input:not([checked])'),
1672+
).toBeVisible()
1673+
1674+
await page.locator('.row-1 .cell-_select input').check()
1675+
await page.locator('.row-2 .cell-_select input').check()
1676+
1677+
await expect(page.locator('.list-selection')).toContainText('2 selected')
1678+
})
16521679
})
16531680

16541681
async function createPost(overrides?: Partial<Post>): Promise<Post> {

0 commit comments

Comments
 (0)