All checks were successful
Build Docker Image / build (push) Successful in 3m41s
- Add entityType prop to CatalogMap for icon selection - Change circle layers to symbol layers with entity-specific icons - Icons: shopping bag (offers), warehouse (hubs), factory (suppliers) - Add watcher to update colors when pointColor/entityType changes - Clear old points and show loading indicator when switching view modes - Add clearNodes function to useClusteredNodes composable
58 lines
1.4 KiB
TypeScript
58 lines
1.4 KiB
TypeScript
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<string | undefined>,
|
|
nodeType?: Ref<string | undefined>
|
|
) {
|
|
const { client } = useApolloClient('publicGeo')
|
|
|
|
const clusteredNodes = ref<ClusterPointType[]>([])
|
|
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
|
|
},
|
|
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
|
|
}
|
|
}
|