CodeSnippet.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // @ts-nocheck
  2. import { useParams } from 'common'
  3. import { SimpleCodeBlock } from 'ui-patterns/SimpleCodeBlock'
  4. import { useSendEventMutation } from '@/data/telemetry/send-event-mutation'
  5. import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization'
  6. interface CodeSnippetProps {
  7. selectedLang: 'bash' | 'js'
  8. snippet: {
  9. title?: string
  10. bash: { language?: string; code: string }
  11. js?: { language?: string; code: string }
  12. }
  13. }
  14. const CodeSnippet = ({ selectedLang, snippet }: CodeSnippetProps) => {
  15. const { ref: projectRef } = useParams()
  16. const { data: org } = useSelectedOrganizationQuery()
  17. const { mutate: sendEvent } = useSendEventMutation()
  18. const handleCopy = () => {
  19. sendEvent({
  20. action: 'api_docs_code_copy_button_clicked',
  21. properties: {
  22. title: snippet.title,
  23. selectedLanguage: selectedLang,
  24. },
  25. groups: {
  26. project: projectRef ?? 'Unknown',
  27. organization: org?.slug ?? 'Unknown',
  28. },
  29. })
  30. }
  31. if (!snippet[selectedLang]) return null
  32. return (
  33. <div>
  34. <h4 className="heading-default mb-2">{snippet.title}</h4>
  35. <div className="[&_.codeBlock]:p-0 [&_.token-line]:text-sm">
  36. <SimpleCodeBlock className={snippet[selectedLang]?.language} onCopy={handleCopy}>
  37. {snippet[selectedLang]?.code}
  38. </SimpleCodeBlock>
  39. </div>
  40. </div>
  41. )
  42. }
  43. export default CodeSnippet