content.tsx 2.2 KB

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