diff --git a/app/components/feed-quality/FeedQualitySection.tsx b/app/components/feed-quality/FeedQualitySection.tsx index 64c0796..e6e6bf7 100644 --- a/app/components/feed-quality/FeedQualitySection.tsx +++ b/app/components/feed-quality/FeedQualitySection.tsx @@ -44,7 +44,7 @@ export function FeedQualitySection() { const filterQuery = useFeedQualityFilters(); const hasFilters = Object.keys(filterQuery).length > 0; - const { rows, groups, isLoading, error, retry } = useFeedQuality( + const { groups, isLoading, error, retry } = useFeedQuality( enabled, filterQuery ); @@ -53,13 +53,13 @@ export function FeedQualitySection() { let okCount = 0; let warningCount = 0; let errorCount = 0; - for (const row of rows) { - if (row.status === "OK") okCount += 1; - else if (row.status === "WARNING") warningCount += 1; + for (const group of groups) { + if (group.worstStatus === "OK") okCount += 1; + else if (group.worstStatus === "WARNING") warningCount += 1; else errorCount += 1; } - return { total: rows.length, okCount, warningCount, errorCount }; - }, [rows]); + return { total: groups.length, okCount, warningCount, errorCount }; + }, [groups]); // True while a fresh result is loading (first load or a new filter // combination). Only the figures and table rows swap to placeholders — the @@ -101,7 +101,7 @@ export function FeedQualitySection() { role="status" aria-live="polite" > - Showing data streams that match your filters above. + Showing data providers that match your filters above.

)} {error ? ( @@ -145,7 +145,7 @@ function EmptyState() { No data quality data yet.

- OpenActive hasn't assessed any data streams in this window. Check back + OpenActive hasn't assessed any data providers in this window. Check back once data providers have started sharing data.

@@ -156,7 +156,7 @@ function NoMatchesState() { return (

- No data streams match your current filters. + No data providers match your current filters.

Try removing a filter above to widen the search. diff --git a/app/components/feed-quality/FeedQualityStatusFilter.tsx b/app/components/feed-quality/FeedQualityStatusFilter.tsx index a358d5c..acd38ea 100644 --- a/app/components/feed-quality/FeedQualityStatusFilter.tsx +++ b/app/components/feed-quality/FeedQualityStatusFilter.tsx @@ -101,7 +101,7 @@ export function FeedQualityStatusFilter({

- Data stream status + Data provider status

@@ -72,8 +72,8 @@ export function FeedQualitySummary({ {!loading && total === 1 - ? "data stream tracked" - : "data streams tracked"} + ? "data provider tracked" + : "data providers tracked"}

diff --git a/app/components/feed-quality/FeedQualityTable.tsx b/app/components/feed-quality/FeedQualityTable.tsx index f91ee38..ff8b167 100644 --- a/app/components/feed-quality/FeedQualityTable.tsx +++ b/app/components/feed-quality/FeedQualityTable.tsx @@ -256,10 +256,10 @@ export function FeedQualityTable({ // currently sees so screen readers know if their filter actually matched. const liveMessage = useMemo(() => { const count = filteredGroups.length; - const noun = count === 1 ? "data stream" : "data streams"; + const noun = count === 1 ? "data provider" : "data providers"; if (!hasActiveFilters) return ""; return count === 0 - ? "No data streams match the current filters." + ? "No data providers match the current filters." : `${count} ${noun} match the current filters.`; }, [filteredGroups.length, hasActiveFilters]); @@ -388,7 +388,7 @@ export function FeedQualityTable({ {!loading && filteredGroups.length === 0 ? (

- No data streams match those filters. + No data providers match those filters.

{query @@ -493,7 +493,7 @@ export function FeedQualityTable({ aria-live="polite" className="px-3 py-3 text-center text-xs text-oa-grey-500" > - Loading more data streams… + Loading more data providers…

)}
diff --git a/docs/feed-quality.md b/docs/feed-quality.md index c8f4d1e..b062bc5 100644 --- a/docs/feed-quality.md +++ b/docs/feed-quality.md @@ -28,6 +28,8 @@ If the API fails, the failed key is dropped so Retry can try again. `groupFeedsByDataset` in `app/lib/feed-quality.ts` groups rows by dataset. +Each group gets a `worstStatus` (the most severe status among that dataset's feeds). The summary overview and the All / Healthy / Warnings / Errors chips both count **data providers** (dataset groups) by that `worstStatus`, so their totals match the table. Individual feed statuses still show when a group is expanded. + The UI has two views (`FeedQualityViewToggle`): - **Data completeness** - core fields used for headline opportunity figures (dates, location, activity or facility) @@ -35,7 +37,7 @@ The UI has two views (`FeedQualityViewToggle`): Completeness bands (high / moderate / low / none / not assessed) are defined in `COMPLETENESS_BANDS` in the same file. Colour cells use those bands. -Each feeds also has a status: `OK`, `WARNING`, or `ERROR` (shown as Healthy / Warning / Error). +Each feed also has a status: `OK`, `WARNING`, or `ERROR` (shown as Healthy / Warning / Error). ## Opportunities column