DefaultEdgeFunctionSecrets.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { toast } from 'sonner'
  2. import {
  3. Badge,
  4. Card,
  5. copyToClipboard,
  6. Table,
  7. TableBody,
  8. TableCell,
  9. TableHead,
  10. TableHeader,
  11. TableRow,
  12. Tooltip,
  13. TooltipContent,
  14. TooltipTrigger,
  15. } from 'ui'
  16. import type { DefaultEdgeFunctionSecret } from './DefaultEdgeFunctionSecrets.utils'
  17. interface DefaultEdgeFunctionSecretsProps {
  18. secrets: DefaultEdgeFunctionSecret[]
  19. }
  20. export const DefaultEdgeFunctionSecrets = ({ secrets }: DefaultEdgeFunctionSecretsProps) => {
  21. return (
  22. <Card>
  23. <Table>
  24. <TableHeader>
  25. <TableRow>
  26. <TableHead>Name</TableHead>
  27. <TableHead>Description</TableHead>
  28. </TableRow>
  29. </TableHeader>
  30. <TableBody>
  31. {secrets.map((secret) => (
  32. <SecretRow key={secret.name} secret={secret} />
  33. ))}
  34. </TableBody>
  35. </Table>
  36. </Card>
  37. )
  38. }
  39. const SecretRow = ({ secret }: { secret: DefaultEdgeFunctionSecret }) => {
  40. return (
  41. <TableRow key={secret.name}>
  42. <TableCell>
  43. <div className="flex items-center gap-x-2 py-1">
  44. <Tooltip>
  45. <TooltipTrigger
  46. onClick={() => {
  47. copyToClipboard(secret.name)
  48. toast.success(`Copied ${secret.name}`)
  49. }}
  50. >
  51. <p className="truncate">
  52. <code className="text-code-inline">{secret.name}</code>
  53. </p>
  54. </TooltipTrigger>
  55. <TooltipContent side="bottom">Click to copy</TooltipContent>
  56. </Tooltip>
  57. {secret.isDeprecated && <Badge variant="warning">Deprecated</Badge>}
  58. </div>
  59. </TableCell>
  60. <TableCell>
  61. <p className="text-sm text-foreground-light">{secret.description}</p>
  62. </TableCell>
  63. </TableRow>
  64. )
  65. }