From c948752c3081333a289991cab9ac5bfc99d5d471 Mon Sep 17 00:00:00 2001 From: Alexander Taylor Date: Fri, 13 Feb 2026 07:50:39 +0000 Subject: [PATCH] feat(activists): don't refresh data until column popup closes --- .../src/app/activists/column-selector.tsx | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/frontend-v2/src/app/activists/column-selector.tsx b/frontend-v2/src/app/activists/column-selector.tsx index c14cd5ae..66e2686a 100644 --- a/frontend-v2/src/app/activists/column-selector.tsx +++ b/frontend-v2/src/app/activists/column-selector.tsx @@ -31,6 +31,7 @@ export function ColumnSelector({ isChapterColumnShown, }: ColumnSelectorProps) { const [isOpen, setIsOpen] = useState(false) + const [localColumns, setLocalColumns] = useState(visibleColumns) const groupedColumns = groupColumnsByCategory() const slugifyCategory = (category: ColumnCategory) => category @@ -39,10 +40,10 @@ export function ColumnSelector({ .replace(/^-+|-+$/g, '') const handleToggleColumn = (columnName: ActivistColumnName) => { - const newColumns = visibleColumns.includes(columnName) - ? visibleColumns.filter((col) => col !== columnName) - : [...visibleColumns, columnName] - onColumnsChange(normalizeColumns(newColumns)) + const newColumns = localColumns.includes(columnName) + ? localColumns.filter((col) => col !== columnName) + : [...localColumns, columnName] + setLocalColumns(normalizeColumns(newColumns)) } const handleToggleCategory = (category: ColumnCategory) => { @@ -51,25 +52,25 @@ export function ColumnSelector({ .map((col) => col.name) .filter((name) => name !== 'chapter_name') // chapter_name is managed outside of this component const allVisible = categoryColumnNames.every((col) => - visibleColumns.includes(col), + localColumns.includes(col), ) let newColumns: ActivistColumnName[] if (allVisible) { // Remove all columns in this category - newColumns = visibleColumns.filter( + newColumns = localColumns.filter( (col) => !categoryColumnNames.includes(col), ) } else { // Add all columns in this category - newColumns = [...visibleColumns] + newColumns = [...localColumns] categoryColumnNames.forEach((col) => { if (!newColumns.includes(col)) { newColumns.push(col) } }) } - onColumnsChange(normalizeColumns(newColumns)) + setLocalColumns(normalizeColumns(newColumns)) } const getCategorySelectionState = ( @@ -80,7 +81,7 @@ export function ColumnSelector({ (col) => col.name !== 'chapter_name' && col.name !== 'name', ) const selectedCount = userToggleableColumns.filter((col) => - visibleColumns.includes(col.name), + localColumns.includes(col.name), ).length if (selectedCount === 0) return 'none' @@ -88,8 +89,21 @@ export function ColumnSelector({ return 'partial' } + const handleOpenChange = (open: boolean) => { + if ( + !open && + JSON.stringify(localColumns) !== JSON.stringify(visibleColumns) + ) { + onColumnsChange(localColumns) + } + if (open) { + setLocalColumns(visibleColumns) + } + setIsOpen(open) + } + return ( - + @@ -147,7 +165,7 @@ export function ColumnSelector({
handleToggleColumn(col.name)} disabled={isDisabled} />