mirror of
https://github.com/supabase/supabase.git
synced 2026-07-04 04:54:37 +08:00
116 lines
2.9 KiB
TypeScript
116 lines
2.9 KiB
TypeScript
import type { ContentFileProps } from 'components/interfaces/Connect/Connect.types'
|
|
|
|
import {
|
|
ConnectTabs,
|
|
ConnectTabTriggers,
|
|
ConnectTabTrigger,
|
|
ConnectTabContent,
|
|
} from 'components/interfaces/Connect/ConnectTabs'
|
|
import { SimpleCodeBlock } from 'ui'
|
|
|
|
const ContentFile = ({ projectKeys }: ContentFileProps) => {
|
|
return (
|
|
<ConnectTabs>
|
|
<ConnectTabTriggers>
|
|
<ConnectTabTrigger value=".env" />
|
|
<ConnectTabTrigger value="src/supabaseClient.tsx" />
|
|
<ConnectTabTrigger value="src/App.tsx" />
|
|
</ConnectTabTriggers>
|
|
|
|
<ConnectTabContent value=".env">
|
|
<SimpleCodeBlock className="bash" parentClassName="min-h-72">
|
|
{`
|
|
REACT_APP_SUPABASE_URL=${projectKeys.apiUrl ?? 'your-project-url'}
|
|
REACT_APP_SUPABASE_KEY=${projectKeys.publishableKey ?? '<prefer publishable key instead of anon key for mobile or desktop apps>'}
|
|
`}
|
|
</SimpleCodeBlock>
|
|
</ConnectTabContent>
|
|
|
|
<ConnectTabContent value="src/supabaseClient.tsx">
|
|
<SimpleCodeBlock className="ts" parentClassName="min-h-72">
|
|
{`
|
|
import { createClient } from '@supabase/supabase-js'
|
|
|
|
const supabaseUrl = process.env.REACT_APP_SUPABASE_URL
|
|
const supabaseKey = process.env.REACT_APP_SUPABASE_KEY
|
|
|
|
export const supabase = createClient(supabaseUrl, supabaseAnonKey)
|
|
`}
|
|
</SimpleCodeBlock>
|
|
</ConnectTabContent>
|
|
|
|
<ConnectTabContent value="src/App.tsx">
|
|
<SimpleCodeBlock className="ts" parentClassName="min-h-72">
|
|
{`
|
|
import React, { useEffect, useState } from 'react';
|
|
import { setupIonicReact, IonApp } from '@ionic/react';
|
|
import {
|
|
IonContent,
|
|
IonHeader,
|
|
IonTitle,
|
|
IonToolbar,
|
|
IonList,
|
|
IonItem,
|
|
} from '@ionic/react';
|
|
|
|
/* Core CSS required for Ionic components to work properly */
|
|
import '@ionic/react/css/core.css';
|
|
|
|
/* Theme variables */
|
|
import './theme/variables.css';
|
|
|
|
import { supabase } from './supabaseClient';
|
|
|
|
setupIonicReact();
|
|
|
|
export default function App() {
|
|
const [todos, setTodos] = useState([]);
|
|
useEffect(() => {
|
|
getTodos();
|
|
}, []);
|
|
|
|
const getTodos = async () => {
|
|
try {
|
|
const { data, error } = await supabase.from('todos').select();
|
|
|
|
if (error) {
|
|
console.error('Error fetching todos:', error.message);
|
|
return;
|
|
}
|
|
|
|
if (data) {
|
|
setTodos(data);
|
|
}
|
|
} catch (error) {
|
|
console.error('Error fetching todos:', error.message);
|
|
}
|
|
};
|
|
|
|
return (
|
|
<IonApp>
|
|
<>
|
|
<IonHeader>
|
|
<IonToolbar>
|
|
<IonTitle>Todos</IonTitle>
|
|
</IonToolbar>
|
|
</IonHeader>
|
|
<IonContent>
|
|
<IonList>
|
|
{todos.map((todo) => (
|
|
<IonItem key={todo.id}>{todo.title}</IonItem>
|
|
))}
|
|
</IonList>
|
|
</IonContent>
|
|
</>
|
|
</IonApp>
|
|
);
|
|
}
|
|
`}
|
|
</SimpleCodeBlock>
|
|
</ConnectTabContent>
|
|
</ConnectTabs>
|
|
)
|
|
}
|
|
|
|
export default ContentFile
|