content.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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.local" />
  14. <ConnectTabTrigger value="utils/briven.ts" />
  15. <ConnectTabTrigger value="App.tsx" />
  16. </ConnectTabTriggers>
  17. <ConnectTabContent value=".env.local">
  18. <SimpleCodeBlock className="bash" parentClassName="min-h-72">
  19. {`
  20. EXPO_PUBLIC_BRIVEN_URL=${projectKeys.apiUrl ?? 'your-project-url'}
  21. EXPO_PUBLIC_BRIVEN_KEY=${projectKeys.publishableKey ?? '<prefer publishable key instead of anon key for mobile and desktop apps>'}
  22. `}
  23. </SimpleCodeBlock>
  24. </ConnectTabContent>
  25. <ConnectTabContent value="utils/briven.ts">
  26. <SimpleCodeBlock className="ts" parentClassName="min-h-72">
  27. {`
  28. import 'react-native-url-polyfill/auto'
  29. import AsyncStorage from '@react-native-async-storage/async-storage'
  30. import { createClient, processLock } from '@supabase/supabase-js'
  31. export const briven = createClient(
  32. process.env.EXPO_PUBLIC_BRIVEN_URL!,
  33. process.env.EXPO_PUBLIC_BRIVEN_KEY!,
  34. {
  35. auth: {
  36. storage: AsyncStorage,
  37. autoRefreshToken: true,
  38. persistSession: true,
  39. detectSessionInUrl: false,
  40. lock: processLock,
  41. },
  42. })
  43. `}
  44. </SimpleCodeBlock>
  45. </ConnectTabContent>
  46. <ConnectTabContent value="App.tsx">
  47. <SimpleCodeBlock className="tsx" parentClassName="min-h-72">
  48. {`
  49. import React, { useState, useEffect } from 'react';
  50. import { View, Text, FlatList } from 'react-native';
  51. import { briven } from '../utils/briven';
  52. export default function App() {
  53. const [todos, setTodos] = useState([]);
  54. useEffect(() => {
  55. const getTodos = async () => {
  56. try {
  57. const { data: todos, error } = await briven.from('todos').select();
  58. if (error) {
  59. console.error('Error fetching todos:', error.message);
  60. return;
  61. }
  62. if (todos && todos.length > 0) {
  63. setTodos(todos);
  64. }
  65. } catch (error) {
  66. console.error('Error fetching todos:', error.message);
  67. }
  68. };
  69. getTodos();
  70. }, []);
  71. return (
  72. <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
  73. <Text>Todo List</Text>
  74. <FlatList
  75. data={todos}
  76. keyExtractor={(item) => item.id.toString()}
  77. renderItem={({ item }) => <Text key={item.id}>{item.title}</Text>}
  78. />
  79. </View>
  80. );
  81. };
  82. `}
  83. </SimpleCodeBlock>
  84. </ConnectTabContent>
  85. </ConnectTabs>
  86. )
  87. }
  88. export default ContentFile