mirror of
https://github.com/supabase/supabase.git
synced 2026-05-14 14:49:37 +08:00
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com>
77 lines
2.0 KiB
TypeScript
77 lines
2.0 KiB
TypeScript
import { IS_PLATFORM, useParams } from 'common'
|
|
import { useTheme } from 'next-themes'
|
|
import { useMemo, useState } from 'react'
|
|
import { createMcpCopyHandler, McpConfigPanel, type McpClient } from 'ui-patterns/McpUrlBuilder'
|
|
import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader'
|
|
|
|
import type { projectKeys } from './Connect.types'
|
|
import Panel from '@/components/ui/Panel'
|
|
import { useTrack } from '@/lib/telemetry/track'
|
|
|
|
export const McpTabContent = ({ projectKeys }: { projectKeys: projectKeys }) => {
|
|
const { ref: projectRef } = useParams()
|
|
|
|
return (
|
|
<Panel className="bg-inherit border-none shadow-none">
|
|
{projectRef ? (
|
|
<McpTabContentInnerLoaded projectRef={projectRef} projectKeys={projectKeys} />
|
|
) : (
|
|
<McpTabContentInnerLoading />
|
|
)}
|
|
</Panel>
|
|
)
|
|
}
|
|
|
|
const McpTabContentInnerLoading = () => {
|
|
return (
|
|
<div className="flex flex-col gap-2">
|
|
<ShimmeringLoader className="w-3/4" />
|
|
<ShimmeringLoader className="w-1/2" />
|
|
</div>
|
|
)
|
|
}
|
|
|
|
const McpTabContentInnerLoaded = ({
|
|
projectRef,
|
|
projectKeys,
|
|
}: {
|
|
projectRef: string
|
|
projectKeys: projectKeys
|
|
}) => {
|
|
const { resolvedTheme } = useTheme()
|
|
const track = useTrack()
|
|
const [selectedClient, setSelectedClient] = useState<McpClient | null>(null)
|
|
|
|
const handleCopy = useMemo(
|
|
() =>
|
|
createMcpCopyHandler({
|
|
selectedClient,
|
|
source: 'studio',
|
|
onTrack: (event) => track(event.action, event.properties, event.groups),
|
|
projectRef,
|
|
}),
|
|
[selectedClient, track, projectRef]
|
|
)
|
|
|
|
const handleInstall = () => {
|
|
if (selectedClient?.label) {
|
|
track('mcp_install_button_clicked', {
|
|
client: selectedClient.label,
|
|
source: 'studio',
|
|
})
|
|
}
|
|
}
|
|
|
|
return (
|
|
<McpConfigPanel
|
|
projectRef={projectRef}
|
|
theme={resolvedTheme as 'light' | 'dark'}
|
|
isPlatform={IS_PLATFORM}
|
|
apiUrl={projectKeys.apiUrl ?? undefined}
|
|
onCopyCallback={handleCopy}
|
|
onInstallCallback={handleInstall}
|
|
onClientSelect={setSelectedClient}
|
|
/>
|
|
)
|
|
}
|