content.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { SimpleCodeBlock } from 'ui-patterns/SimpleCodeBlock'
  2. import type { ContentFileProps } from '@/components/interfaces/Connect/Connect.types'
  3. import {
  4. ConnectTabContent,
  5. ConnectTabs,
  6. ConnectTabTrigger,
  7. ConnectTabTriggers,
  8. } from '@/components/interfaces/Connect/ConnectTabs'
  9. const ContentFile = ({ projectKeys }: ContentFileProps) => {
  10. return (
  11. <ConnectTabs>
  12. <ConnectTabTriggers>
  13. <ConnectTabTrigger value=".env" />
  14. <ConnectTabTrigger value="app/utils/briven.server.ts" />
  15. <ConnectTabTrigger value="app/routes/_index.tsx" />
  16. </ConnectTabTriggers>
  17. <ConnectTabContent value=".env">
  18. <SimpleCodeBlock className="bash" parentClassName="min-h-72">
  19. {[
  20. '',
  21. `VITE_BRIVEN_URL=${projectKeys.apiUrl ?? 'your-project-url'}`,
  22. projectKeys?.publishableKey
  23. ? `VITE_BRIVEN_PUBLISHABLE_KEY=${projectKeys.publishableKey}`
  24. : `VITE_BRIVEN_ANON_KEY=${projectKeys.anonKey ?? 'your-anon-key'}`,
  25. '',
  26. ].join('\n')}
  27. </SimpleCodeBlock>
  28. </ConnectTabContent>
  29. <ConnectTabContent value="app/utils/briven.server.ts">
  30. <SimpleCodeBlock className="ts" parentClassName="min-h-72">
  31. {`
  32. import {
  33. createServerClient,
  34. parseCookieHeader,
  35. serializeCookieHeader,
  36. } from "@supabase/ssr";
  37. export function createClient(request: Request) {
  38. const headers = new Headers();
  39. const briven = createServerClient(
  40. process.env.VITE_BRIVEN_URL!,
  41. process.env.VITE_${projectKeys.publishableKey ? 'BRIVEN_PUBLISHABLE_KEY' : 'BRIVEN_ANON_KEY'};,
  42. {
  43. cookies: {
  44. getAll() {
  45. return parseCookieHeader(request.headers.get("Cookie") ?? "") as {
  46. name: string;
  47. value: string;
  48. }[];
  49. },
  50. setAll(cookiesToSet) {
  51. cookiesToSet.forEach(({ name, value, options }) =>
  52. headers.append(
  53. "Set-Cookie",
  54. serializeCookieHeader(name, value, options)
  55. )
  56. );
  57. },
  58. },
  59. }
  60. );
  61. return { briven, headers };
  62. }
  63. `}
  64. </SimpleCodeBlock>
  65. </ConnectTabContent>
  66. <ConnectTabContent value="app/routes/_index.tsx">
  67. <SimpleCodeBlock className="tsx" parentClassName="min-h-72">
  68. {`
  69. import type { Route } from "./+types/home";
  70. import { createClient } from "~/utils/briven.server";
  71. export async function loader({ request }: Route.LoaderArgs) {
  72. const { briven } = createClient(request);
  73. const { data: todos } = await briven.from("todos").select();
  74. return { todos };
  75. }
  76. export default function Home({ loaderData }: Route.ComponentProps) {
  77. return (
  78. <>
  79. <ul>
  80. {loaderData.todos?.map((todo) => (
  81. <li key={todo.id}>{todo.name}</li>
  82. ))}
  83. </ul>
  84. </>
  85. );
  86. }
  87. `}
  88. </SimpleCodeBlock>
  89. </ConnectTabContent>
  90. </ConnectTabs>
  91. )
  92. }
  93. export default ContentFile