From 4f4d738a98f63442c862049feb5937c85d8635eb Mon Sep 17 00:00:00 2001 From: joaquin Date: Thu, 20 Nov 2025 10:15:50 -0300 Subject: [PATCH 1/3] Bulk edit: Do not disable search bar after search --- apps/bulk-edit/src/locations/Page/index.tsx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/bulk-edit/src/locations/Page/index.tsx b/apps/bulk-edit/src/locations/Page/index.tsx index 01271f5d41..84b08a5d4d 100644 --- a/apps/bulk-edit/src/locations/Page/index.tsx +++ b/apps/bulk-edit/src/locations/Page/index.tsx @@ -94,8 +94,12 @@ const Page = () => { setActivePage(0); }; - const shouldDisableFilters = () => { - return (entries.length === 0 && initialTotal === 0) || !selectedContentType || entriesLoading; + const shouldDisableFilters = (disableIfLoading: boolean = true) => { + return ( + (entries.length === 0 && initialTotal === 0) || + !selectedContentType || + (disableIfLoading ? entriesLoading : false) + ); }; const getAllContentTypes = async (): Promise => { @@ -539,7 +543,7 @@ const Page = () => { setSearchQuery(query); setActivePage(0); }} - isDisabled={shouldDisableFilters()} + isDisabled={shouldDisableFilters(false)} debounceDelay={300} /> @@ -579,7 +583,6 @@ const Page = () => { return aIndex - bIndex; }); setSelectedColumns(sortedSelectedColumns); - setActivePage(0); }} disabled={shouldDisableFilters()} placeholderConfig={{ From b8186cc655ff148eef41b39f97ac775e824ed552 Mon Sep 17 00:00:00 2001 From: joaquin Date: Thu, 20 Nov 2025 10:56:38 -0300 Subject: [PATCH 2/3] Bulk edit: Add clear selection button --- apps/bulk-edit/src/locations/Page/index.tsx | 35 ++++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/apps/bulk-edit/src/locations/Page/index.tsx b/apps/bulk-edit/src/locations/Page/index.tsx index 84b08a5d4d..63714d984f 100644 --- a/apps/bulk-edit/src/locations/Page/index.tsx +++ b/apps/bulk-edit/src/locations/Page/index.tsx @@ -79,6 +79,7 @@ const Page = () => { const [currentContentType, setCurrentContentType] = useState(null); const [searchQuery, setSearchQuery] = useState(''); const [initialTotal, setInitialTotal] = useState(0); + const [tableKey, setTableKey] = useState(0); const hasActiveFilters = () => { const hasSearchQuery = searchQuery.trim() !== ''; @@ -230,6 +231,12 @@ const Page = () => { setInitialTotal(0); }; + const clearSelectionState = () => { + setSelectedField(null); + setSelectedEntryIds([]); + setTableKey((tableKey) => tableKey + 1); + }; + // Fetch content type and fields when selectedContentTypeId changes useEffect(() => { const fetchContentTypeAndFields = async (): Promise => { @@ -525,6 +532,7 @@ const Page = () => { setActivePage(0); setSearchQuery(''); setInitialTotal(0); + clearSelectionState(); }} disabled={entriesLoading} /> @@ -542,6 +550,7 @@ const Page = () => { onSearchChange={(query) => { setSearchQuery(query); setActivePage(0); + clearSelectionState(); }} isDisabled={shouldDisableFilters(false)} debounceDelay={300} @@ -564,6 +573,7 @@ const Page = () => { setSelectedItems={(statuses) => { setSelectedStatuses(statuses); setActivePage(0); + clearSelectionState(); }} disabled={shouldDisableFilters()} placeholderConfig={{ @@ -603,18 +613,26 @@ const Page = () => { )} {!entriesLoading && ( - - + <> + + + + {selectedEntryIds.length || 'No'} entry field {selectedEntryIds.length === 1 ? '' : 's'} selected - + )} {entriesLoading ? ( @@ -640,6 +658,7 @@ const Page = () => { /> )} fields.find((f) => f.uniqueId === field.value) || [] From e7ab411245ef4a67664c5b8bc25d7db89bc8a860 Mon Sep 17 00:00:00 2001 From: joaquin Date: Thu, 20 Nov 2025 18:18:59 -0300 Subject: [PATCH 3/3] Add comment about forcing the re-render of the entry table --- apps/bulk-edit/src/locations/Page/index.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/bulk-edit/src/locations/Page/index.tsx b/apps/bulk-edit/src/locations/Page/index.tsx index 63714d984f..96b3aed505 100644 --- a/apps/bulk-edit/src/locations/Page/index.tsx +++ b/apps/bulk-edit/src/locations/Page/index.tsx @@ -79,6 +79,7 @@ const Page = () => { const [currentContentType, setCurrentContentType] = useState(null); const [searchQuery, setSearchQuery] = useState(''); const [initialTotal, setInitialTotal] = useState(0); + // Used to force a re-render of the table when the selection changes const [tableKey, setTableKey] = useState(0); const hasActiveFilters = () => { @@ -231,6 +232,7 @@ const Page = () => { setInitialTotal(0); }; + // Used to clear the selection states and force a re-render of the table const clearSelectionState = () => { setSelectedField(null); setSelectedEntryIds([]);