diff --git a/apps/studio/components/interfaces/UnifiedLogs/UnifiedLogsBanner.tsx b/apps/studio/components/interfaces/UnifiedLogs/UnifiedLogsBanner.tsx new file mode 100644 index 00000000000..15cc4bcba18 --- /dev/null +++ b/apps/studio/components/interfaces/UnifiedLogs/UnifiedLogsBanner.tsx @@ -0,0 +1,63 @@ +import { CircleHelpIcon, Undo2 } from 'lucide-react' +import { Button, cn } from 'ui' + +import { ButtonTooltip } from '@/components/ui/ButtonTooltip' + +interface UnifiedLogsBannerProps { + variant: 'promo' | 'utility' + onEnable?: () => void + onMoreInfo?: () => void + onSwitchBack?: () => void + className?: string +} + +export function UnifiedLogsBanner({ + variant, + onEnable, + onMoreInfo, + onSwitchBack, + className, +}: UnifiedLogsBannerProps) { + const stripClassName = cn( + 'flex items-center justify-between gap-3 border-b border-border px-4 py-3', + className + ) + + if (variant === 'utility') { + return ( +
+
+

Go back to old logs

+

Use the traditional interface

+
+ } + onClick={onSwitchBack} + tooltip={{ content: { side: 'bottom', text: 'Switch back' } }} + /> +
+ ) + } + + return ( +
+

+ Try Unified Logs +

+
+ + } + onClick={onMoreInfo} + tooltip={{ content: { side: 'bottom', text: 'More information' } }} + /> +
+
+ ) +} diff --git a/apps/studio/components/layouts/LogsLayout/LogsLayout.tsx b/apps/studio/components/layouts/LogsLayout/LogsLayout.tsx index 36176eb3da8..9d2af4613f3 100644 --- a/apps/studio/components/layouts/LogsLayout/LogsLayout.tsx +++ b/apps/studio/components/layouts/LogsLayout/LogsLayout.tsx @@ -25,7 +25,7 @@ const LogsLayout = ({ title, children }: PropsWithChildren) => if (!logsEnabled) { return ( - + ) @@ -33,14 +33,12 @@ const LogsLayout = ({ title, children }: PropsWithChildren) => if (!canUseLogsExplorer) { if (isLoading) { - return ( - - ) + return } if (!isLoading && !canUseLogsExplorer) { return ( - + ) @@ -49,7 +47,7 @@ const LogsLayout = ({ title, children }: PropsWithChildren) => return ( } > diff --git a/apps/studio/components/layouts/LogsLayout/LogsSidebarMenuV2.tsx b/apps/studio/components/layouts/LogsLayout/LogsSidebarMenuV2.tsx index b2daa4da0f3..d2d135e867d 100644 --- a/apps/studio/components/layouts/LogsLayout/LogsSidebarMenuV2.tsx +++ b/apps/studio/components/layouts/LogsLayout/LogsSidebarMenuV2.tsx @@ -1,5 +1,5 @@ import { IS_PLATFORM, useFlag, useParams } from 'common' -import { ChevronRight, CircleHelpIcon, Plus } from 'lucide-react' +import { ChevronRight, Plus } from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' import React, { useState } from 'react' @@ -29,7 +29,7 @@ import { useIsETLPrivateAlpha } from '@/components/interfaces/Database/Replicati import { LOG_DRAIN_TYPES } from '@/components/interfaces/LogDrains/LogDrains.constants' import SavedQueriesItem from '@/components/interfaces/Settings/Logs/Logs.SavedQueriesItem' import { LogsSidebarItem } from '@/components/interfaces/Settings/Logs/SidebarV2/SidebarItem' -import { ButtonTooltip } from '@/components/ui/ButtonTooltip' +import { UnifiedLogsBanner } from '@/components/interfaces/UnifiedLogs/UnifiedLogsBanner' import { useContentQuery } from '@/data/content/content-query' import { useReplicationSourcesQuery } from '@/data/replication/sources-query' import { useCheckEntitlements } from '@/hooks/misc/useCheckEntitlements' @@ -241,32 +241,13 @@ export function LogsSidebarMenuV2() { /> )} {isUnifiedLogsEligible && ( - New} - actions={ - <> - - } - onClick={() => selectFeaturePreview('supabase-ui-preview-unified-logs')} - tooltip={{ content: { side: 'bottom', text: 'More information' } }} - /> - - } + { + enableUnifiedLogs() + router.push(`/project/${ref}/logs`) + }} + onMoreInfo={() => selectFeaturePreview('supabase-ui-preview-unified-logs')} /> )} diff --git a/apps/studio/components/ui/DataTable/FilterSideBar.tsx b/apps/studio/components/ui/DataTable/FilterSideBar.tsx index e4297f5a50b..6ed57d3e663 100644 --- a/apps/studio/components/ui/DataTable/FilterSideBar.tsx +++ b/apps/studio/components/ui/DataTable/FilterSideBar.tsx @@ -1,10 +1,9 @@ -import { LOCAL_STORAGE_KEYS, useParams } from 'common' +import { useParams } from 'common' import Link from 'next/link' import { useRouter } from 'next/router' import React, { useEffect, type ReactNode } from 'react' -import { Button, cn, ResizablePanel, usePanelRef } from 'ui' +import { Badge, Button, cn, ResizablePanel, usePanelRef } from 'ui' -import { FeaturePreviewBadge } from '../FeaturePreviewBadge' import { FeaturePreviewSidebarPanel } from '../FeaturePreviewSidebarPanel' import { DateRangeDisabled } from './DataTable.types' import { DataTableFilterControls } from './DataTableFilters/DataTableFilterControls' @@ -12,6 +11,7 @@ import { DataTableResetButton } from './DataTableResetButton' import { useDataTable } from './providers/DataTableProvider' import { useUnifiedLogsPreview } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext' import { LOG_DRAIN_TYPES } from '@/components/interfaces/LogDrains/LogDrains.constants' +import { UnifiedLogsBanner } from '@/components/interfaces/UnifiedLogs/UnifiedLogsBanner' interface FilterSideBarProps { isFilterBarOpen: boolean @@ -30,11 +30,7 @@ export function FilterSideBar({ const { ref } = useParams() const { table } = useDataTable() - const { - disable: disableUnifiedLogs, - isEligible: isUnifiedLogsEligible, - isEnabled: isUnifiedLogsEnabled, - } = useUnifiedLogsPreview() + const { disable: disableUnifiedLogs, isEligible: isUnifiedLogsEligible } = useUnifiedLogsPreview() const handleGoBackToOldLogs = () => { disableUnifiedLogs() @@ -70,29 +66,19 @@ export function FilterSideBar({ >
-

Logs

+
+

Logs

+ {isUnifiedLogsEligible && Beta} +
{table.getState().columnFilters.length ? : null}
+ {isUnifiedLogsEligible && ( + + )} +
- {isUnifiedLogsEligible && ( - - ) : undefined - } - actions={ - - } - /> - )} {afterFilters} { */ await page.goto(toUrl(`/project/${ref}/logs/${logPage.route}`)) - await expect(page.getByRole('heading', { name: 'Logs & Analytics' }), { - message: 'Logs & Analytics heading should be visible', + await expect(page.getByRole('heading', { name: 'Logs', exact: true }), { + message: 'Logs heading should be visible', }).toBeVisible() /**