McpTabContent.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // @ts-nocheck
  2. import { IS_PLATFORM, useParams } from 'common'
  3. import { useTheme } from 'next-themes'
  4. import { useMemo, useState } from 'react'
  5. import { createMcpCopyHandler, McpConfigPanel, type McpClient } from 'ui-patterns/McpUrlBuilder'
  6. import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader'
  7. import type { projectKeys } from './Connect.types'
  8. import Panel from '@/components/ui/Panel'
  9. import { useTrack } from '@/lib/telemetry/track'
  10. export const McpTabContent = ({ projectKeys }: { projectKeys: projectKeys }) => {
  11. const { ref: projectRef } = useParams()
  12. return (
  13. <Panel className="bg-inherit border-none shadow-none">
  14. {projectRef ? (
  15. <McpTabContentInnerLoaded projectRef={projectRef} projectKeys={projectKeys} />
  16. ) : (
  17. <McpTabContentInnerLoading />
  18. )}
  19. </Panel>
  20. )
  21. }
  22. const McpTabContentInnerLoading = () => {
  23. return (
  24. <div className="flex flex-col gap-2">
  25. <ShimmeringLoader className="w-3/4" />
  26. <ShimmeringLoader className="w-1/2" />
  27. </div>
  28. )
  29. }
  30. const McpTabContentInnerLoaded = ({
  31. projectRef,
  32. projectKeys,
  33. }: {
  34. projectRef: string
  35. projectKeys: projectKeys
  36. }) => {
  37. const { resolvedTheme } = useTheme()
  38. const track = useTrack()
  39. const [selectedClient, setSelectedClient] = useState<McpClient | null>(null)
  40. const handleCopy = useMemo(
  41. () =>
  42. createMcpCopyHandler({
  43. selectedClient,
  44. source: 'studio',
  45. onTrack: (event) => track(event.action, event.properties, event.groups),
  46. projectRef,
  47. }),
  48. [selectedClient, track, projectRef]
  49. )
  50. const handleInstall = () => {
  51. if (selectedClient?.label) {
  52. track('mcp_install_button_clicked', {
  53. client: selectedClient.label,
  54. source: 'studio',
  55. })
  56. }
  57. }
  58. return (
  59. <McpConfigPanel
  60. projectRef={projectRef}
  61. theme={resolvedTheme as 'light' | 'dark'}
  62. isPlatform={IS_PLATFORM}
  63. apiUrl={projectKeys.apiUrl ?? undefined}
  64. onCopyCallback={handleCopy}
  65. onInstallCallback={handleInstall}
  66. onClientSelect={setSelectedClient}
  67. />
  68. )
  69. }