From f3a4c1beacabbcc72980b7c13b2b1cd7e0c2bf8b Mon Sep 17 00:00:00 2001 From: Derrick Thrower Date: Wed, 29 Apr 2026 12:44:11 -0700 Subject: [PATCH 1/3] fix: make filters for admin updates work --- client/src/components/updates/UpdatesPage.jsx | 22 +++++++++++++++---- .../updates/config/useUpdatesPageData.js | 3 ++- client/src/contexts/hooks/TableFilter.js | 11 +++++++--- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/client/src/components/updates/UpdatesPage.jsx b/client/src/components/updates/UpdatesPage.jsx index 26c6b60c..66411d79 100644 --- a/client/src/components/updates/UpdatesPage.jsx +++ b/client/src/components/updates/UpdatesPage.jsx @@ -19,7 +19,10 @@ import { EmptyStateBadge } from '@/components/badges/EmptyStateBadge'; import { useTranslation } from 'react-i18next'; import { AccountUpdatesTable } from './AccountUpdatesTable'; -import { programSectionColumns } from './config/updatesColumnConfig'; +import { + mediaSectionColumns, + programSectionColumns, +} from './config/updatesColumnConfig'; import { UpdatesFilterPopover, UpdatesSearchInput, @@ -55,6 +58,15 @@ export const UpdatesPage = () => { const [searchQuery, setSearchQuery] = useState(''); const [tabIndex, setTabIndex] = useState(0); + const [activeFilters, setActiveFilters] = useState([]); + + const handleTabChange = (index) => { + setTabIndex(index); + setActiveFilters([]); + }; + + const filterColumns = + tabIndex === 1 ? mediaSectionColumns : programSectionColumns; const handleDownload = () => { if (tabIndex === 0) downloadProgramUpdatesAsCsv(programUpdatesData, t); @@ -106,8 +118,8 @@ export const UpdatesPage = () => { onChange={setSearchQuery} /> {}} + columns={filterColumns} + onFilterChange={setActiveFilters} /> ); @@ -147,7 +159,7 @@ export const UpdatesPage = () => { { isLoading={isProgramUpdatesLoading} onSave={refetchProgramUpdates} searchQuery={searchQuery} + activeFilters={activeFilters} showStatus showFlagAndType embedded @@ -225,6 +238,7 @@ export const UpdatesPage = () => { originalData={originalMediaUpdatesData} isLoading={isLoading} searchQuery={searchQuery} + activeFilters={activeFilters} embedded /> diff --git a/client/src/components/updates/config/useUpdatesPageData.js b/client/src/components/updates/config/useUpdatesPageData.js index 9bf27332..8f632588 100644 --- a/client/src/components/updates/config/useUpdatesPageData.js +++ b/client/src/components/updates/config/useUpdatesPageData.js @@ -10,7 +10,8 @@ const mapUpdatesWithFullName = (items) => { .filter(Boolean) .join(' ') .trim(); - return { ...item, fullName }; + const status = item.resolved ? 'Resolved' : 'Unresolved'; + return { ...item, fullName, status }; }); }; diff --git a/client/src/contexts/hooks/TableFilter.js b/client/src/contexts/hooks/TableFilter.js index 1e6eaa5d..0088b99c 100644 --- a/client/src/contexts/hooks/TableFilter.js +++ b/client/src/contexts/hooks/TableFilter.js @@ -14,9 +14,14 @@ const OPERATION_FUNCTIONS = { gte: (dataVal, filterVal) => Number(dataVal) >= Number(filterVal), lte: (dataVal, filterVal) => Number(dataVal) <= Number(filterVal), is: (dataVal, filterVal) => - new Date(dataVal).getTime() === new Date(filterVal).getTime(), - before: (dataVal, filterVal) => new Date(dataVal) < new Date(filterVal), - after: (dataVal, filterVal) => new Date(dataVal) > new Date(filterVal), + new Date(dataVal).toISOString().slice(0, 10) === + new Date(filterVal).toISOString().slice(0, 10), + before: (dataVal, filterVal) => + new Date(dataVal).toISOString().slice(0, 10) < + new Date(filterVal).toISOString().slice(0, 10), + after: (dataVal, filterVal) => + new Date(dataVal).toISOString().slice(0, 10) > + new Date(filterVal).toISOString().slice(0, 10), contains_item: (dataVal, filterVal) => dataVal.some((item) => str(item).toLowerCase().includes(str(filterVal).toLowerCase()) From 3231f9a3281c10e20f33b2cefdc7e39ae17fc288 Mon Sep 17 00:00:00 2001 From: Derrick Thrower Date: Wed, 29 Apr 2026 12:58:02 -0700 Subject: [PATCH 2/3] fix: guard date filters against invalid dates --- client/src/contexts/hooks/TableFilter.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/client/src/contexts/hooks/TableFilter.js b/client/src/contexts/hooks/TableFilter.js index 0088b99c..171e0a14 100644 --- a/client/src/contexts/hooks/TableFilter.js +++ b/client/src/contexts/hooks/TableFilter.js @@ -2,6 +2,11 @@ import { useEffect, useRef, useState } from 'react'; const str = (v) => (v ?? '').toString(); +const toDateStr = (v) => { + const d = new Date(v); + return isNaN(d.getTime()) ? null : d.toISOString().slice(0, 10); +}; + const OPERATION_FUNCTIONS = { contains: (dataVal, filterVal) => str(dataVal).toLowerCase().includes(str(filterVal).toLowerCase()), @@ -14,14 +19,15 @@ const OPERATION_FUNCTIONS = { gte: (dataVal, filterVal) => Number(dataVal) >= Number(filterVal), lte: (dataVal, filterVal) => Number(dataVal) <= Number(filterVal), is: (dataVal, filterVal) => - new Date(dataVal).toISOString().slice(0, 10) === - new Date(filterVal).toISOString().slice(0, 10), + toDateStr(dataVal) !== null && toDateStr(dataVal) === toDateStr(filterVal), before: (dataVal, filterVal) => - new Date(dataVal).toISOString().slice(0, 10) < - new Date(filterVal).toISOString().slice(0, 10), + toDateStr(dataVal) !== null && + toDateStr(filterVal) !== null && + toDateStr(dataVal) < toDateStr(filterVal), after: (dataVal, filterVal) => - new Date(dataVal).toISOString().slice(0, 10) > - new Date(filterVal).toISOString().slice(0, 10), + toDateStr(dataVal) !== null && + toDateStr(filterVal) !== null && + toDateStr(dataVal) > toDateStr(filterVal), contains_item: (dataVal, filterVal) => dataVal.some((item) => str(item).toLowerCase().includes(str(filterVal).toLowerCase()) From e17600aefc4b29bbcad6dd707f8fb5aa938bd5bc Mon Sep 17 00:00:00 2001 From: Derrick Thrower Date: Wed, 29 Apr 2026 13:01:55 -0700 Subject: [PATCH 3/3] fix: preserve media status values in shared update mapper --- client/src/components/updates/config/useUpdatesPageData.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/components/updates/config/useUpdatesPageData.js b/client/src/components/updates/config/useUpdatesPageData.js index 8f632588..9c9cffe2 100644 --- a/client/src/components/updates/config/useUpdatesPageData.js +++ b/client/src/components/updates/config/useUpdatesPageData.js @@ -10,7 +10,7 @@ const mapUpdatesWithFullName = (items) => { .filter(Boolean) .join(' ') .trim(); - const status = item.resolved ? 'Resolved' : 'Unresolved'; + const status = item.status ?? (item.resolved ? 'Resolved' : 'Unresolved'); return { ...item, fullName, status }; }); };