mirror of
https://github.com/supabase/supabase.git
synced 2026-09-22 13:37:53 +08:00
db0e6b761b
## Context
As per PR title - we're bringing Database Connections out of feature
preview and it'll live on the dashboard by default 🙂
Also deprecating the existing Ongoing queries panel which Database
Connections now supercedes.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Database Connections is now available without feature-preview
activation.
* The SQL editor’s “View running queries” option now links directly to
Database Connections.
* **Bug Fixes**
* Query cancellation and session termination now refresh database
activity data.
* **Removed**
* Removed the in-editor ongoing queries panel and its termination
controls.
* Removed the Database Connections promotional banner, preview
messaging, settings, and related telemetry.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
94 lines
2.8 KiB
TypeScript
94 lines
2.8 KiB
TypeScript
import { LOCAL_STORAGE_KEYS, useParams } from 'common'
|
|
import { usePathname } from 'next/navigation'
|
|
import { PropsWithChildren, useEffect, useRef } from 'react'
|
|
|
|
import { ProjectLayout } from '../ProjectLayout'
|
|
import { ObservabilityMenu } from './ObservabilityMenu'
|
|
import { useIndexAdvisorStatus } from '@/components/interfaces/QueryPerformance/hooks/useIsIndexAdvisorStatus'
|
|
import { BannerIndexAdvisor } from '@/components/ui/BannerStack/Banners/BannerIndexAdvisor'
|
|
import { useBannerStack } from '@/components/ui/BannerStack/BannerStackProvider'
|
|
import { UnknownInterface } from '@/components/ui/UnknownInterface'
|
|
import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
|
|
import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage'
|
|
import { withAuth } from '@/hooks/misc/withAuth'
|
|
|
|
interface ObservabilityLayoutProps {
|
|
title: string
|
|
}
|
|
|
|
const ObservabilityLayoutContent = ({
|
|
title,
|
|
children,
|
|
}: PropsWithChildren<ObservabilityLayoutProps>) => {
|
|
const { ref } = useParams()
|
|
const pathname = usePathname()
|
|
const { addBanner, dismissBanner } = useBannerStack()
|
|
const { isIndexAdvisorAvailable, isIndexAdvisorEnabled } = useIndexAdvisorStatus()
|
|
|
|
const [isIndexAdvisorBannerDismissed] = useLocalStorageQuery(
|
|
LOCAL_STORAGE_KEYS.INDEX_ADVISOR_NOTICE_DISMISSED(ref ?? ''),
|
|
false
|
|
)
|
|
|
|
const prevPathnameRef = useRef(pathname)
|
|
|
|
useEffect(() => {
|
|
const isQueryPerformancePage = pathname?.includes('/query-performance')
|
|
|
|
if (
|
|
isQueryPerformancePage &&
|
|
isIndexAdvisorAvailable &&
|
|
!isIndexAdvisorEnabled &&
|
|
!isIndexAdvisorBannerDismissed
|
|
) {
|
|
addBanner({
|
|
id: 'index-advisor-banner',
|
|
isDismissed: false,
|
|
content: <BannerIndexAdvisor />,
|
|
priority: 3,
|
|
})
|
|
} else if (isIndexAdvisorBannerDismissed || !isQueryPerformancePage || isIndexAdvisorEnabled) {
|
|
dismissBanner('index-advisor-banner')
|
|
}
|
|
|
|
prevPathnameRef.current = pathname
|
|
}, [
|
|
pathname,
|
|
isIndexAdvisorAvailable,
|
|
isIndexAdvisorEnabled,
|
|
isIndexAdvisorBannerDismissed,
|
|
addBanner,
|
|
dismissBanner,
|
|
])
|
|
|
|
const { reportsAll } = useIsFeatureEnabled(['reports:all'])
|
|
|
|
if (reportsAll) {
|
|
return (
|
|
<ProjectLayout
|
|
product="Observability"
|
|
browserTitle={{ section: title }}
|
|
productMenu={<ObservabilityMenu />}
|
|
isBlocking={false}
|
|
>
|
|
{children}
|
|
</ProjectLayout>
|
|
)
|
|
} else {
|
|
return <UnknownInterface urlBack={`/project/${ref}`} />
|
|
}
|
|
}
|
|
|
|
const ObservabilityLayout = (props: PropsWithChildren<ObservabilityLayoutProps>) => {
|
|
const { ref } = useParams()
|
|
const { reportsAll } = useIsFeatureEnabled(['reports:all'])
|
|
|
|
if (reportsAll) {
|
|
return <ObservabilityLayoutContent {...props} />
|
|
} else {
|
|
return <UnknownInterface urlBack={`/project/${ref}`} />
|
|
}
|
|
}
|
|
|
|
export default withAuth(ObservabilityLayout)
|