mirror of
https://github.com/supabase/supabase.git
synced 2026-10-06 18:05:11 +03:00
Feature / Refactor ## What is the current behavior? Data API docs live at the `/api` route as a standalone page. Old links point to the previous location. ## What is the new behavior? Data API docs are moved to the integrations section with a dedicated docs tab and settings tab. Old links are cleaned up, a mobile menu is added for data API docs navigation, and minor code review fixes are applied. ## Additional context Resolves FE-2517 ## Summary by CodeRabbit * **New Features** * Revamped API docs UI with reusable section layout, language toggle (JS/Bash), API key selection, and improved code snippets * Added Data API docs tab, mobile navigation, and dedicated loading/error/disabled states * **Navigation Updates** * Moved API docs and related links into the Integrations/Data API area and added redirects to new routes * Updated various internal links to the new Data API settings and overview locations * **Tests** * Added comprehensive unit tests for Data API utilities
48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import { useParams } from 'common'
|
|
import { SimpleCodeBlock } from 'ui'
|
|
|
|
import { useSendEventMutation } from '@/data/telemetry/send-event-mutation'
|
|
import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization'
|
|
|
|
interface CodeSnippetProps {
|
|
selectedLang: 'bash' | 'js'
|
|
snippet: {
|
|
title?: string
|
|
bash: { language?: string; code: string }
|
|
js?: { language?: string; code: string }
|
|
}
|
|
}
|
|
|
|
const CodeSnippet = ({ selectedLang, snippet }: CodeSnippetProps) => {
|
|
const { ref: projectRef } = useParams()
|
|
const { data: org } = useSelectedOrganizationQuery()
|
|
const { mutate: sendEvent } = useSendEventMutation()
|
|
|
|
const handleCopy = () => {
|
|
sendEvent({
|
|
action: 'api_docs_code_copy_button_clicked',
|
|
properties: {
|
|
title: snippet.title,
|
|
selectedLanguage: selectedLang,
|
|
},
|
|
groups: {
|
|
project: projectRef ?? 'Unknown',
|
|
organization: org?.slug ?? 'Unknown',
|
|
},
|
|
})
|
|
}
|
|
|
|
if (!snippet[selectedLang]) return null
|
|
return (
|
|
<div>
|
|
<h4 className="heading-default mb-2">{snippet.title}</h4>
|
|
<div className="[&_.codeBlock]:p-0 [&_.token-line]:text-sm">
|
|
<SimpleCodeBlock className={snippet[selectedLang]?.language} onCopy={handleCopy}>
|
|
{snippet[selectedLang]?.code}
|
|
</SimpleCodeBlock>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
export default CodeSnippet
|