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