diff --git a/apps/studio/components/interfaces/Database/Replication/ComingSoon.tsx b/apps/studio/components/interfaces/Database/Replication/ComingSoon.tsx
index 03fe8f53b0c..54709f07004 100644
--- a/apps/studio/components/interfaces/Database/Replication/ComingSoon.tsx
+++ b/apps/studio/components/interfaces/Database/Replication/ComingSoon.tsx
@@ -1,3 +1,4 @@
+import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold'
import Table from 'components/to-be-cleaned/Table'
import { motion } from 'framer-motion'
import { BASE_PATH } from 'lib/constants'
@@ -62,6 +63,14 @@ const STATIC_EDGES = [
{ id: 'e1-4', source: '1', target: '4', type: 'smoothstep', animated: true },
]
+export const ReplicationComingSoon = () => {
+ return (
+
+
+
+ )
+}
+
const ReplicationStaticMockup = () => {
const nodes = useMemo(() => STATIC_NODES, [])
const edges = useMemo(() => STATIC_EDGES, [])
@@ -108,16 +117,6 @@ const ReplicationStaticMockup = () => {
)
}
-const ReplicationComingSoon = () => {
- return (
-
-
-
- )
-}
-
-export default ReplicationComingSoon
-
const PrimaryNode = ({
data,
}: {
@@ -251,58 +250,68 @@ const StaticDestinations = () => {
return (
<>
-
-
-
-
-
-
-
-
}
- type="primary"
- className="flex items-center"
- onClick={() => {}}
- >
- New destination
-
-
-
Name,
- Publication,
- Lag,
- Status,
- ,
- ]}
- className="mt-4"
- body={mockRows.map((row, i) => (
-
- {row.name}
-
-
- All
- {row.tables} tables
-
-
- {row.lag}
-
-
-
- {row.status}
-
-
-
-
-
-
- ))}
- />
+
+
+
+
+
+
+
+
+
+
+
+
}
+ className="flex items-center pointer-events-none"
+ >
+ New destination
+
+
+
Name,
+ Publication,
+ Lag,
+ Status,
+ ,
+ ]}
+ className="mt-4"
+ body={mockRows.map((row, i) => (
+
+ {row.name}
+
+
+ All
+ {row.tables} tables
+
+
+ {row.lag}
+
+
+
+ {row.status}
+
+
+
+
+
+
+ ))}
+ />
+
+
+
>
)
diff --git a/apps/studio/components/interfaces/Database/Replication/DestinationRow.tsx b/apps/studio/components/interfaces/Database/Replication/DestinationRow.tsx
index 6960f354890..75cd013e93d 100644
--- a/apps/studio/components/interfaces/Database/Replication/DestinationRow.tsx
+++ b/apps/studio/components/interfaces/Database/Replication/DestinationRow.tsx
@@ -136,10 +136,11 @@ export const DestinationRow = ({
)}
-
+
{pipeline && (
}
onClick={() => onSelectPipeline?.(pipeline.id, destinationName)}
className="px-1.5"
diff --git a/apps/studio/components/interfaces/Database/Replication/PipelineStatus.tsx b/apps/studio/components/interfaces/Database/Replication/PipelineStatus.tsx
index b9b63273e34..d8013eedae0 100644
--- a/apps/studio/components/interfaces/Database/Replication/PipelineStatus.tsx
+++ b/apps/studio/components/interfaces/Database/Replication/PipelineStatus.tsx
@@ -55,8 +55,8 @@ export const PipelineStatus = ({
Failed
-
- {getPipelineStateMessages(requestStatus, 'failed').message}
+
+ {getPipelineStateMessages(requestStatus, 'failed').message}
)
@@ -165,9 +165,7 @@ export const PipelineStatus = ({
{statusConfig.label}
-
- {statusConfig.tooltip}
-
+ {statusConfig.tooltip}
)}
>
diff --git a/apps/studio/components/interfaces/Database/Replication/ReplicationPipelineStatus.tsx b/apps/studio/components/interfaces/Database/Replication/ReplicationPipelineStatus.tsx
index 6c5fdc4a68f..ae4e554a6da 100644
--- a/apps/studio/components/interfaces/Database/Replication/ReplicationPipelineStatus.tsx
+++ b/apps/studio/components/interfaces/Database/Replication/ReplicationPipelineStatus.tsx
@@ -18,7 +18,6 @@ import { useParams } from 'common'
import Table from 'components/to-be-cleaned/Table'
import AlertError from 'components/ui/AlertError'
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
-import { InlineLink } from 'components/ui/InlineLink'
import { useReplicationPipelineByIdQuery } from 'data/replication/pipeline-by-id-query'
import { useReplicationPipelineReplicationStatusQuery } from 'data/replication/pipeline-replication-status-query'
import { useReplicationPipelineStatusQuery } from 'data/replication/pipeline-status-query'
@@ -28,7 +27,16 @@ import {
PipelineStatusRequestStatus,
usePipelineRequestStatus,
} from 'state/replication-pipeline-request-status'
-import { Badge, Button, cn, copyToClipboard, Input_Shadcn_ } from 'ui'
+import {
+ Badge,
+ Button,
+ cn,
+ copyToClipboard,
+ Input_Shadcn_,
+ Tooltip,
+ TooltipContent,
+ TooltipTrigger,
+} from 'ui'
import { GenericSkeletonLoader } from 'ui-patterns'
import { getPipelineStateMessages, getStatusName, PIPELINE_ERROR_MESSAGES } from './Pipeline.utils'
import { PipelineStatus } from './PipelineStatus'
@@ -298,7 +306,6 @@ export const ReplicationPipelineStatus = ({
requestStatus={requestStatus}
/>
- Table replication status
@@ -314,6 +321,14 @@ export const ReplicationPipelineStatus = ({
onChange={(e) => setFilterString(e.target.value)}
/>
+
@@ -358,39 +373,31 @@ export const ReplicationPipelineStatus = ({
)}
- {/* Pipeline not running state */}
- {showDisabledState && hasTableData && (
-
-
-
-
-
-
{config.title}
-
{config.message}
+ {hasTableData && (
+
+ {showDisabledState && (
+
+
+
+
+
{config.title}
+
{config.message}
+
- {['stopped', 'started'].includes(statusName ?? '') && (
-
- )}
-
+ )}
,
]}
- body={filteredTableStatuses.map((table: TableState, index: number) => (
-
-
-
- {table.table_name}
-
-
-
-
- Not Available
-
-
-
-
- Status unavailable while pipeline is {config.badge.toLowerCase()}
-
-
-
- }
- className="px-1.5"
- disabled
- tooltip={{
- content: {
- side: 'bottom',
- text: `Copy unavailable while pipeline is ${config.badge.toLowerCase()}`,
- },
- }}
- />
-
-
- ))}
- />
-
-
- )}
-
- {/* Tables list - active/running pipeline */}
- {showActiveTable && !isStatusLoading && hasTableData && (
-
-
Table,
- Status,
- Details,
-
- Actions
- ,
- ]}
- body={filteredTableStatuses.map((table: TableState, index: number) => {
- const statusConfig = getStatusConfig(table.state)
- return (
-
-
-
- {table.table_name}
-
-
- {statusConfig.badge}
-
-
-
{statusConfig.description}
- {'lag' in table.state && (
-
- Lag: {table.state.lag}ms
+ body={filteredTableStatuses.map((table: TableState, index: number) => {
+ const statusConfig = getStatusConfig(table.state)
+ return (
+
+
+
+
{table.table_name}
+
+
+
+
+
+
+ Open in Table Editor
+
+
+
+
+ {showDisabledState ? (
+ Not Available
+ ) : (
+ statusConfig.badge
+ )}
+
+
+ {showDisabledState ? (
+
+ Status unavailable while pipeline is {config.badge.toLowerCase()}
+
+ ) : (
+
+
{statusConfig.description}
+ {'lag' in table.state && (
+
+ Lag: {table.state.lag}ms
+
+ )}
)}
-
-
-
- }
- className="px-1.5"
- onClick={() => handleCopyTableStatus(table.table_name, table.state)}
- tooltip={{
- content: {
- side: 'bottom',
- text: 'Copy status details',
- },
- }}
- />
-
-
- )
- })}
- />
+
+
+ }
+ className="px-1.5"
+ disabled={showDisabledState}
+ onClick={() => handleCopyTableStatus(table.table_name, table.state)}
+ tooltip={{
+ content: {
+ side: 'bottom',
+ text: showDisabledState
+ ? `Copy unavailable while pipeline is ${config.badge.toLowerCase()}`
+ : 'Copy status details',
+ },
+ }}
+ />
+
+
+ )
+ })}
+ />
+
)}
diff --git a/apps/studio/pages/project/[ref]/database/replication/index.tsx b/apps/studio/pages/project/[ref]/database/replication/index.tsx
index 033c0b38551..bc1a2a5445a 100644
--- a/apps/studio/pages/project/[ref]/database/replication/index.tsx
+++ b/apps/studio/pages/project/[ref]/database/replication/index.tsx
@@ -1,4 +1,6 @@
-import ReplicationComingSoon from 'components/interfaces/Database/Replication/ComingSoon'
+import { useState } from 'react'
+
+import { ReplicationComingSoon } from 'components/interfaces/Database/Replication/ComingSoon'
import { Destinations } from 'components/interfaces/Database/Replication/Destinations'
import { ReplicationPipelineStatus } from 'components/interfaces/Database/Replication/ReplicationPipelineStatus'
import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout'
@@ -6,7 +8,6 @@ import DefaultLayout from 'components/layouts/DefaultLayout'
import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold'
import { FormHeader } from 'components/ui/Forms/FormHeader'
import { useFlag } from 'hooks/ui/useFlag'
-import { useState } from 'react'
import { PipelineRequestStatusProvider } from 'state/replication-pipeline-request-status'
import type { NextPageWithLayout } from 'types'
@@ -51,14 +52,16 @@ const DatabaseReplicationPage: NextPageWithLayout = () => {
) : (
-
-
-
-
-
-
-
-
+ <>
+
+
+
+
+
+
+
+
+ >
)}
>
)
diff --git a/apps/studio/styles/ui.scss b/apps/studio/styles/ui.scss
index 886f96393d4..f0f37298fec 100644
--- a/apps/studio/styles/ui.scss
+++ b/apps/studio/styles/ui.scss
@@ -119,7 +119,7 @@
}
.table-container thead th:first-child {
- @apply pl-6 rounded rounded-r-none rounded-b-none;
+ @apply rounded rounded-r-none rounded-b-none;
@apply border-l;
}