From eb5395b10ef8bd434270180a1e55c640ff9a279f Mon Sep 17 00:00:00 2001 From: Kevin Cormier Date: Thu, 16 Jul 2026 15:51:35 -0400 Subject: [PATCH] Provide type parameter for useFleetSearch so users do not have to cast Signed-off-by: Kevin Cormier --- frontend/packages/multicluster-sdk/README.md | 2 +- .../src/api/useFleetSearch.ts | 19 +++++++++---------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/frontend/packages/multicluster-sdk/README.md b/frontend/packages/multicluster-sdk/README.md index c66aac3335..4d5b113201 100644 --- a/frontend/packages/multicluster-sdk/README.md +++ b/frontend/packages/multicluster-sdk/README.md @@ -878,7 +878,7 @@ object. The caller is responsible for constructing those values. | Function | Type | | ---------- | ---------- | -| `useFleetSearch` | `(input: SearchInput or undefined, subscriptionEnabled?: boolean or undefined) => [any[] or undefined, boolean, Error or undefined, () => void]` | +| `useFleetSearch` | `(input: SearchInput or undefined, subscriptionEnabled?: boolean or undefined) => [SearchResult or undefined, boolean, Error or undefined, () => void]` | Parameters: diff --git a/frontend/packages/multicluster-sdk/src/api/useFleetSearch.ts b/frontend/packages/multicluster-sdk/src/api/useFleetSearch.ts index f41d52522d..f108422f78 100644 --- a/frontend/packages/multicluster-sdk/src/api/useFleetSearch.ts +++ b/frontend/packages/multicluster-sdk/src/api/useFleetSearch.ts @@ -4,8 +4,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react' import { convertSearchItemToResource } from '../internal/search/convertSearchItemToResource' import { searchClient } from '../internal/search/search-client' import { useSearchResultItemsQuery } from '../internal/search/search-sdk' -import { Fleet } from '../types/fleet' -import { SearchInput } from '../types/search' +import { SearchInput, SearchResult } from '../types/search' import { useFleetSearchSubscription } from './useFleetSearchSubscription' /** @@ -76,10 +75,10 @@ import { useFleetSearchSubscription } from './useFleetSearchSubscription' * ) * ``` */ -export function useFleetSearch( +export function useFleetSearch( input: SearchInput | undefined, subscriptionEnabled?: boolean -): [Fleet[] | undefined, boolean, Error | undefined, () => void] { +): [SearchResult | undefined, boolean, Error | undefined, () => void] { // ── Base query ───────────────────────────────────────────────────────────── const { @@ -94,15 +93,15 @@ export function useFleetSearch( }) // Derive the converted resource list from the raw query response. - const queryData = useMemo[] | undefined>(() => { + const queryData = useMemo | undefined>(() => { const items = queryResult?.searchResult?.[0]?.items if (!items) return undefined - return items.map((item) => convertSearchItemToResource(item)) + return items.map((item) => convertSearchItemToResource(item)) as unknown as SearchResult }, [queryResult]) // ── Local state (patched by subscription events) ─────────────────────────── - const [localData, setLocalData] = useState[] | undefined>(queryData) + const [localData, setLocalData] = useState | undefined>(queryData) // When the base query returns fresh data (initial load or after refetch), // reset local state to match. @@ -141,7 +140,7 @@ export function useFleetSearch( const newK8sUid = newResource.metadata?.uid // Avoid duplicate insertions. if (newK8sUid && current.some((r) => r.metadata?.uid === newK8sUid)) return prev - return [...current, newResource] + return [...current, newResource] as SearchResult } case 'UPDATE': { if (!latestEvent.newData) return prev @@ -149,11 +148,11 @@ export function useFleetSearch( const patchedNewData = { ...latestEvent.newData, cluster, _uid: latestEvent.uid } const updatedResource = convertSearchItemToResource(patchedNewData) const updatedK8sUid = updatedResource.metadata?.uid - return current.map((r) => (r.metadata?.uid === updatedK8sUid ? updatedResource : r)) + return current.map((r) => (r.metadata?.uid === updatedK8sUid ? updatedResource : r)) as SearchResult } case 'DELETE': { const deletedK8sUid = latestEvent.uid.split('/').pop() - return current.filter((r) => r.metadata?.uid !== deletedK8sUid) + return current.filter((r) => r.metadata?.uid !== deletedK8sUid) as SearchResult } default: return prev