From 24947d3aefe196bc039ac68f44b24ff1522a7455 Mon Sep 17 00:00:00 2001 From: lukas Date: Thu, 25 Sep 2025 14:36:31 +0200 Subject: [PATCH 1/3] Add retrievability filter (http and rpa) for score compliance dashboards --- .../allocators/retrievability/page.tsx | 33 +++------- .../storage-providers/retrievability/page.tsx | 33 +++------- .../components/retrievability-type-select.tsx | 63 +++++++++++++++++++ src/lib/hooks/cdp.hooks.ts | 20 +++--- 4 files changed, 91 insertions(+), 58 deletions(-) create mode 100644 src/app/compliance-data-portal/components/retrievability-type-select.tsx diff --git a/src/app/compliance-data-portal/(pages)/allocators/retrievability/page.tsx b/src/app/compliance-data-portal/(pages)/allocators/retrievability/page.tsx index a2b02034..7c1eaed0 100644 --- a/src/app/compliance-data-portal/(pages)/allocators/retrievability/page.tsx +++ b/src/app/compliance-data-portal/(pages)/allocators/retrievability/page.tsx @@ -2,6 +2,7 @@ import { ChartWrapper } from "@/app/compliance-data-portal/components/chart-wrapper"; import { StackedBarGraph } from "@/app/compliance-data-portal/components/graphs/stacked-bar-graph"; +import { RetrievabilityTypeSelect } from "@/app/compliance-data-portal/components/retrievability-type-select"; import useWeeklyChartData from "@/app/compliance-data-portal/hooks/useWeeklyChartData"; import { Checkbox } from "@/components/ui/checkbox"; import { useAllocatorRetrievability } from "@/lib/hooks/cdp.hooks"; @@ -13,17 +14,17 @@ import { type ComponentProps, useCallback, useEffect, useState } from "react"; type CheckboxProps = ComponentProps; type CheckedChangeHandler = NonNullable; -const httpRetrievabilityFilterKey = "httpRetrievability"; +const retrievabilityFilterKey = "retrievabilityType"; const openDataFilterKey = "openDataOnly"; export default function AllocatorRetrievabilityPage() { const { filters, updateFilter } = useSearchParamsFilters(); - const httpRetrievability = filters[httpRetrievabilityFilterKey] === "true"; + const retrievabilityType = filters[retrievabilityFilterKey] ?? "rpa"; const openDataOnly = filters[openDataFilterKey] === "true"; const [usePercentage, setUsePercentage] = useState(false); const { data, isLoading } = useAllocatorRetrievability({ - httpRetrievability, + retrievabilityType, openDataOnly, }); @@ -44,17 +45,6 @@ export default function AllocatorRetrievabilityPage() { const { scale, calcPercentage, selectedScale, setSelectedScale } = useChartScale(minValue); - const handleHTTPRetrievabilityToggleChange = - useCallback( - (state) => { - updateFilter( - httpRetrievabilityFilterKey, - state === true ? "true" : undefined - ); - }, - [updateFilter] - ); - const handleOpenDataToggleChange = useCallback( (state) => { updateFilter(openDataFilterKey, state === true ? "true" : undefined); @@ -83,19 +73,12 @@ export default function AllocatorRetrievabilityPage() { additionalFilters={[
- -
,
; type CheckedChangeHandler = NonNullable; -const httpRetrievabilityFilterKey = "httpRetrievability"; +const retrievabilityFilterKey = "retrievabilityType"; const openDataFilterKey = "openDataOnly"; export default function StorageProviderRetrievabilityPage() { const { filters, updateFilter } = useSearchParamsFilters(); - const httpRetrievability = filters[httpRetrievabilityFilterKey] === "true"; + const retrievabilityType = filters[retrievabilityFilterKey] ?? "rpa"; const openDataOnly = filters[openDataFilterKey] === "true"; const [usePercentage, setUsePercentage] = useState(false); const { data, isLoading } = useStorageProviderRetrievability({ - httpRetrievability, + retrievabilityType, openDataOnly, }); @@ -47,17 +48,6 @@ export default function StorageProviderRetrievabilityPage() { const { scale, calcPercentage, selectedScale, setSelectedScale } = useChartScale(minValue); - const handleHTTPRetrievabilityToggleChange = - useCallback( - (state) => { - updateFilter( - httpRetrievabilityFilterKey, - state === true ? "true" : undefined - ); - }, - [updateFilter] - ); - const handleOpenDataToggleChange = useCallback( (state) => { updateFilter(openDataFilterKey, state === true ? "true" : undefined); @@ -94,19 +84,12 @@ export default function StorageProviderRetrievabilityPage() { additionalFilters={[
- -
,
{ + updateFilter(queryParamName, value); + }, + [updateFilter, queryParamName] + ); + + return ( +
+ {!!label && {label}} + + +
+ ); +} diff --git a/src/lib/hooks/cdp.hooks.ts b/src/lib/hooks/cdp.hooks.ts index 9071559f..2922abe8 100644 --- a/src/lib/hooks/cdp.hooks.ts +++ b/src/lib/hooks/cdp.hooks.ts @@ -30,19 +30,21 @@ const allocatorSPsComplianceMetrics = [ ] as const; interface UseStorageProviderRetrievabilityParameters { - httpRetrievability?: boolean; + retrievabilityType?: string; openDataOnly?: boolean; } const useStorageProviderRetrievability = ({ - httpRetrievability = false, + retrievabilityType = undefined, openDataOnly = false, }: UseStorageProviderRetrievabilityParameters) => { const { selectedRoundId } = useEditionRound(); const fetchData = useCallback(async () => { const searchParams = new URLSearchParams(); - searchParams.set("httpRetrievability", String(httpRetrievability)); + if (retrievabilityType) + searchParams.set("retrievabilityType", String(retrievabilityType)); + searchParams.set("openDataOnly", String(openDataOnly)); if (selectedRoundId) searchParams.set("editionId", selectedRoundId); @@ -55,7 +57,7 @@ const useStorageProviderRetrievability = ({ count: data?.histogram?.total, buckets: data?.histogram?.results, } as ICDPUnifiedHistogram; - }, [httpRetrievability, openDataOnly, selectedRoundId]); + }, [retrievabilityType, openDataOnly, selectedRoundId]); const [data, setData] = useState(undefined); const [isLoading, setIsLoading] = useState(false); @@ -141,19 +143,21 @@ const useStorageProviderBiggestDeal = () => { }; interface UseAllocatorRetrievabilityParameters { - httpRetrievability?: boolean; + retrievabilityType?: string; openDataOnly?: boolean; } const useAllocatorRetrievability = ({ - httpRetrievability = false, + retrievabilityType = undefined, openDataOnly = false, }: UseAllocatorRetrievabilityParameters) => { const { selectedRoundId } = useEditionRound(); const fetchData = useCallback(async () => { const searchParams = new URLSearchParams(); - searchParams.set("httpRetrievability", String(httpRetrievability)); + if (retrievabilityType) + searchParams.set("retrievabilityType", String(retrievabilityType)); + searchParams.set("openDataOnly", String(openDataOnly)); if (selectedRoundId) searchParams.set("editionId", selectedRoundId); @@ -166,7 +170,7 @@ const useAllocatorRetrievability = ({ count: data?.histogram?.total, buckets: data?.histogram?.results, } as ICDPUnifiedHistogram; - }, [httpRetrievability, openDataOnly, selectedRoundId]); + }, [retrievabilityType, openDataOnly, selectedRoundId]); const [data, setData] = useState(undefined); const [isLoading, setIsLoading] = useState(false); From fd03609d81b537201d91863cbae45351dc25e615 Mon Sep 17 00:00:00 2001 From: lukas Date: Fri, 26 Sep 2025 08:30:14 +0200 Subject: [PATCH 2/3] Remove retrieval rate colum from reports views --- .../provider-view/provider-table.tsx | 25 ---------------- .../report-view-provider-table.tsx | 30 ------------------- 2 files changed, 55 deletions(-) diff --git a/src/app/allocators/(pages)/[id]/(pages)/reports/(pages)/[...report]/components/provider-view/provider-table.tsx b/src/app/allocators/(pages)/[id]/(pages)/reports/(pages)/[...report]/components/provider-view/provider-table.tsx index 34dcc82f..056a724b 100644 --- a/src/app/allocators/(pages)/[id]/(pages)/reports/(pages)/[...report]/components/provider-view/provider-table.tsx +++ b/src/app/allocators/(pages)/[id]/(pages)/reports/(pages)/[...report]/components/provider-view/provider-table.tsx @@ -162,31 +162,6 @@ const useReportViewProvidersColumns = (/*compareMode: boolean*/) => { ); }, }, - { - accessorKey: "retrievability_success_rate", - header: () => { - return
Retrieval Rate
; - }, - cell: ({ row }) => { - if (row.original.not_found) { - return ( -
- N/A -
- ); - } - - const successRate = row.getValue( - "retrievability_success_rate" - ) as number; - - return ( -
- {(successRate * 100).toFixed(2)}% -
- ); - }, - }, { accessorKey: "retrievability_success_rate_http", header: () => { diff --git a/src/app/clients/(pages)/[id]/(pages)/reports/(pages)/[...report]/components/provider-view/report-view-provider-table.tsx b/src/app/clients/(pages)/[id]/(pages)/reports/(pages)/[...report]/components/provider-view/report-view-provider-table.tsx index ae1f8284..3f46c3a9 100644 --- a/src/app/clients/(pages)/[id]/(pages)/reports/(pages)/[...report]/components/provider-view/report-view-provider-table.tsx +++ b/src/app/clients/(pages)/[id]/(pages)/reports/(pages)/[...report]/components/provider-view/report-view-provider-table.tsx @@ -248,36 +248,6 @@ const useReportViewProvidersColumns = (compareMode: boolean) => { ); }, }, - { - accessorKey: "retrievability_success_rate", - header: () => { - return
Retrieval Rate
; - }, - cell: ({ row }) => { - if (row.original.not_found) { - return ( -
- N/A -
- ); - } - - const successRate = row.getValue( - "retrievability_success_rate" - ) as number; - - return ( -
- {(successRate * 100).toFixed(2)}% - {compareMode && ( - - )} -
- ); - }, - }, { accessorKey: "retrievability_success_rate_http", header: () => { From 9b4f612d55c0b835c44446deba1bc31e767d14cf Mon Sep 17 00:00:00 2001 From: lukas Date: Wed, 15 Oct 2025 10:47:44 +0200 Subject: [PATCH 3/3] Change query retrievabilityType value --- .../components/retrievability-type-select.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/compliance-data-portal/components/retrievability-type-select.tsx b/src/app/compliance-data-portal/components/retrievability-type-select.tsx index 5abb8e1c..16f90752 100644 --- a/src/app/compliance-data-portal/components/retrievability-type-select.tsx +++ b/src/app/compliance-data-portal/components/retrievability-type-select.tsx @@ -16,11 +16,11 @@ export interface RetrievabilityTypeSelectProps { queryParamName?: string; } -const retrievabilityType = ["http", "rpa"] as const; +const retrievabilityType = ["http", "urlFinder"] as const; const availableValues = retrievabilityType as unknown as string[]; export function RetrievabilityTypeSelect({ - defaultValue = "rpa", + defaultValue = "urlFinder", label = null, queryParamName = "retrievabilityType", }: RetrievabilityTypeSelectProps) { @@ -53,7 +53,7 @@ export function RetrievabilityTypeSelect({ key={`select_item_retrieveability_type_${type}`} value={type} > - {type.toUpperCase()} + {type === "urlFinder" ? "RPA" : "HTTP"} ))}