import { GetClusteredNodesDocument } from './graphql/public/geo-generated' import type { ClusterPointType } from './graphql/public/geo-generated' export interface MapBounds { west: number south: number east: number north: number zoom: number } export function useClusteredNodes( transportType?: Ref, nodeType?: Ref, productUuid?: Ref, hubUuid?: Ref, supplierUuid?: Ref ) { const { client } = useApolloClient('publicGeo') const clusteredNodes = ref([]) const loading = ref(false) const fetchClusters = async (bounds: MapBounds) => { loading.value = true try { const { data } = await client.query({ query: GetClusteredNodesDocument, variables: { west: bounds.west, south: bounds.south, east: bounds.east, north: bounds.north, zoom: Math.floor(bounds.zoom), transportType: transportType?.value, nodeType: nodeType?.value, productUuid: productUuid?.value, hubUuid: hubUuid?.value, supplierUuid: supplierUuid?.value }, fetchPolicy: 'network-only' }) clusteredNodes.value = (data?.clusteredNodes ?? []).filter(Boolean) as ClusterPointType[] } catch (error) { console.error('Failed to fetch clustered nodes:', error) clusteredNodes.value = [] } finally { loading.value = false } } const clearNodes = () => { clusteredNodes.value = [] } return { clusteredNodes, loading, fetchClusters, clearNodes } }