useDestinationInformation.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { useParams } from 'common'
  2. import { DestinationType } from './DestinationPanel/DestinationPanel.types'
  3. import { getStatusName } from './Pipeline.utils'
  4. import { getReplicationDestinationType } from './ReplicationDiagram/Nodes.utils'
  5. import { useReplicationDestinationByIdQuery } from '@/data/replication/destination-by-id-query'
  6. import { useReplicationPipelineStatusQuery } from '@/data/replication/pipeline-status-query'
  7. import { useReplicationPipelinesQuery } from '@/data/replication/pipelines-query'
  8. import { useReplicationSourcesQuery } from '@/data/replication/sources-query'
  9. export const useDestinationInformation = ({ id }: { id?: number | null }) => {
  10. const { ref: projectRef } = useParams()
  11. const { data: sourcesData, isSuccess: isSourcesSuccess } = useReplicationSourcesQuery({
  12. projectRef,
  13. })
  14. const sourceId = sourcesData?.sources.find((s) => s.name === projectRef)?.id
  15. const replicationNotEnabled = isSourcesSuccess && !sourceId
  16. const {
  17. data: destination,
  18. error: destinationError,
  19. isPending: isDestinationPending,
  20. isError: isDestinationError,
  21. isSuccess: isDestinationSuccess,
  22. } = useReplicationDestinationByIdQuery({
  23. projectRef,
  24. destinationId: id,
  25. })
  26. const destinationType: DestinationType | undefined = getReplicationDestinationType(
  27. destination?.config as Record<string, unknown> | undefined
  28. )
  29. const {
  30. data: pipelinesData,
  31. error: pipelineError,
  32. isPending: isPipelinePending,
  33. isError: isPipelineError,
  34. isSuccess: isPipelineSuccess,
  35. } = useReplicationPipelinesQuery({ projectRef })
  36. const pipeline = pipelinesData?.pipelines.find((p) => p.destination_id === id)
  37. const { data: pipelineStatus } = useReplicationPipelineStatusQuery({
  38. projectRef,
  39. pipelineId: pipeline?.id,
  40. })
  41. const statusName = getStatusName(pipelineStatus?.status)
  42. return {
  43. sourceId,
  44. destination,
  45. pipeline,
  46. pipelineStatus,
  47. // Derivatives
  48. statusName,
  49. type: destinationType,
  50. replicationNotEnabled,
  51. // Data fetching status (Secondary information)
  52. pipelineFetcher: {
  53. error: pipelineError,
  54. isPending: isPipelinePending,
  55. isError: isPipelineError,
  56. isSuccess: isPipelineSuccess,
  57. },
  58. destinationFetcher: {
  59. error: destinationError,
  60. isPending: isDestinationPending,
  61. isError: isDestinationError,
  62. isSuccess: isDestinationSuccess,
  63. },
  64. }
  65. }