From 4f0be099e74bf5d813be117eb7a14a853f67ffee Mon Sep 17 00:00:00 2001
From: Danny White <3104761+dnywh@users.noreply.github.com>
Date: Thu, 1 Oct 2026 18:00:55 +1000
Subject: [PATCH] fix(studio): restore the Snowflake destination mark (#51075)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## Problem
The Snowflake destination still uses a neutral text monogram even though
its Studio asset is available. Supporting that monogram also leaves a
separate rendering path used by no other destination.
## Solution
Restore Snowflake through the shared brand-icon registry introduced by
#51073. Simplify `DestinationLogo` back to a map of destination marks,
removing the monogram type, configuration, and rendering branch.
| After |
| --- |
|
|
## Review instructions
1. Open `/project/[/database/replication` with a Snowflake pipeline.
2. Confirm the Snowflake mark appears in the pipeline list and diagram.
3. Open the pipeline child route and confirm the same mark appears in
its header.
4. Confirm the other destination marks remain unchanged in light and
dark themes.
## Summary by CodeRabbit
* **Visual Updates**
* Snowflake replication destinations now display a themed brand icon
instead of the “SF” monogram. Other destinations retain their existing
icons.
---
.../Database/Replication/DestinationLogo.tsx | 32 ++++++-------------
1 file changed, 9 insertions(+), 23 deletions(-)
diff --git a/apps/studio/components/interfaces/Database/Replication/DestinationLogo.tsx b/apps/studio/components/interfaces/Database/Replication/DestinationLogo.tsx
index 77b9fcca777..2d3a7c1978d 100644
--- a/apps/studio/components/interfaces/Database/Replication/DestinationLogo.tsx
+++ b/apps/studio/components/interfaces/Database/Replication/DestinationLogo.tsx
@@ -6,13 +6,11 @@ import type { DestinationType } from './DestinationPanel/DestinationPanel.types'
import { BRAND_ICONS, resolveThemedIconSrc, type ThemedIconSrc } from '@/lib/brand-icons'
import { resolveThemeOverrideMode } from '@/lib/theme-overrides'
-type DestinationBrand = { type: 'mark'; src: ThemedIconSrc } | { type: 'monogram'; label: string }
-
-const BRAND_BY_TYPE: Partial> = {
- BigQuery: { type: 'mark', src: BRAND_ICONS.bigquery },
- ClickHouse: { type: 'mark', src: BRAND_ICONS.clickhouse },
- DuckLake: { type: 'mark', src: BRAND_ICONS.ducklake },
- Snowflake: { type: 'monogram', label: 'SF' },
+const BRAND_MARK_BY_TYPE: Partial> = {
+ BigQuery: BRAND_ICONS.bigquery,
+ ClickHouse: BRAND_ICONS.clickhouse,
+ DuckLake: BRAND_ICONS.ducklake,
+ Snowflake: BRAND_ICONS.snowflake,
}
const SIZE_CLASS_NAME = {
@@ -41,29 +39,17 @@ export const DestinationLogo = ({
const { resolvedTheme } = useTheme()
const isDark = resolveThemeOverrideMode(resolvedTheme) === 'dark'
const sizing = SIZE_CLASS_NAME[size]
- const brand = BRAND_BY_TYPE[type]
- const brandMarkSrc = brand?.type === 'mark' ? resolveThemedIconSrc(brand.src, isDark) : undefined
+ const brandMark = BRAND_MARK_BY_TYPE[type]
+ const brandMarkSrc = brandMark === undefined ? undefined : resolveThemedIconSrc(brandMark, isDark)
return (
- {brand === undefined && (
+ {brandMarkSrc === undefined ? (
- )}
- {brand?.type === 'mark' && (
+ ) : (
]
)}
- {brand?.type === 'monogram' && (
-
- {brand.label}
-
- )}
{hasErrors && (