mirror of
https://github.com/supabase/supabase.git
synced 2026-10-06 01:45:10 +03:00
fix: examples (#33276)
This commit is contained in:
1 parent
f003ec8df1
commit
80ee4c9ab0
11 files changed
+94
-95
No files matched your search
@@ -101,7 +101,7 @@ hideToc: true
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const MaterialApp(
|
||||
title: 'Countries',
|
||||
title: 'Instruments',
|
||||
home: HomePage(),
|
||||
);
|
||||
}
|
||||
@@ -116,7 +116,7 @@ hideToc: true
|
||||
|
||||
class _HomePageState extends State<HomePage> {
|
||||
final _future = Supabase.instance.client
|
||||
.from('countries')
|
||||
.from('instruments')
|
||||
.select();
|
||||
|
||||
@override
|
||||
@@ -128,13 +128,13 @@ hideToc: true
|
||||
if (!snapshot.hasData) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
}
|
||||
final countries = snapshot.data!;
|
||||
final instruments = snapshot.data!;
|
||||
return ListView.builder(
|
||||
itemCount: countries.length,
|
||||
itemCount: instruments.length,
|
||||
itemBuilder: ((context, index) {
|
||||
final country = countries[index];
|
||||
final instrument = instruments[index];
|
||||
return ListTile(
|
||||
title: Text(country['name']),
|
||||
title: Text(instrument['name']),
|
||||
);
|
||||
}),
|
||||
);
|
||||
|
||||
@@ -63,18 +63,18 @@ hideToc: true
|
||||
|
||||
<StepHikeCompact.Step step={5}>
|
||||
|
||||
<StepHikeCompact.Details title="Create a data model for countries">
|
||||
<StepHikeCompact.Details title="Create a data model for instruments">
|
||||
|
||||
Create a decodable struct to deserialize the data from the database.
|
||||
|
||||
Add the following code to a new file named `Country.swift`.
|
||||
Add the following code to a new file named `Instrument.swift`.
|
||||
|
||||
</StepHikeCompact.Details>
|
||||
|
||||
<StepHikeCompact.Code>
|
||||
|
||||
```swift Supabase.swift
|
||||
struct Country: Decodable, Identifiable {
|
||||
struct Instrument: Decodable, Identifiable {
|
||||
let id: Int
|
||||
let name: String
|
||||
}
|
||||
@@ -99,20 +99,20 @@ hideToc: true
|
||||
```swift ContentView.swift
|
||||
struct ContentView: View {
|
||||
|
||||
@State var countries: [Country] = []
|
||||
@State var instruments: [Instrument] = []
|
||||
|
||||
var body: some View {
|
||||
List(countries) { country in
|
||||
Text(country.name)
|
||||
List(instruments) { instrument in
|
||||
Text(instrument.name)
|
||||
}
|
||||
.overlay {
|
||||
if countries.isEmpty {
|
||||
if instruments.isEmpty {
|
||||
ProgressView()
|
||||
}
|
||||
}
|
||||
.task {
|
||||
do {
|
||||
countries = try await supabase.from("countries").select().execute().value
|
||||
instruments = try await supabase.from("instruments").select().execute().value
|
||||
} catch {
|
||||
dump(error)
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ hideToc: true
|
||||
<StepHikeCompact>
|
||||
|
||||
<StepHikeCompact.Step step={1}>
|
||||
|
||||
|
||||
<QuickstartDbSetup />
|
||||
|
||||
</StepHikeCompact.Step>
|
||||
@@ -103,7 +103,7 @@ hideToc: true
|
||||
|
||||
<StepHikeCompact.Step step={6}>
|
||||
|
||||
<StepHikeCompact.Details title="Create a data model for countries">
|
||||
<StepHikeCompact.Details title="Create a data model for instruments">
|
||||
Create a serializable data class to represent the data from the database.
|
||||
|
||||
Add the following below the `createSupabaseClient` function in the `MainActivity.kt` file.
|
||||
@@ -112,7 +112,7 @@ hideToc: true
|
||||
<StepHikeCompact.Code>
|
||||
```kotlin
|
||||
@Serializable
|
||||
data class Country(
|
||||
data class Instrument(
|
||||
val id: Int,
|
||||
val name: String,
|
||||
)
|
||||
@@ -144,7 +144,7 @@ hideToc: true
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
color = MaterialTheme.colorScheme.background
|
||||
) {
|
||||
CountriesList()
|
||||
InstrumentsList()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -152,21 +152,21 @@ hideToc: true
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun CountriesList() {
|
||||
var countries by remember { mutableStateOf<List<Country>>(listOf()) }
|
||||
fun InstrumentsList() {
|
||||
var instruments by remember { mutableStateOf<List<Instrument>>(listOf()) }
|
||||
LaunchedEffect(Unit) {
|
||||
withContext(Dispatchers.IO) {
|
||||
countries = supabase.from("countries")
|
||||
.select().decodeList<Country>()
|
||||
instruments = supabase.from("instruments")
|
||||
.select().decodeList<Instrument>()
|
||||
}
|
||||
}
|
||||
LazyColumn {
|
||||
items(
|
||||
countries,
|
||||
key = { country -> country.id },
|
||||
) { country ->
|
||||
instruments,
|
||||
key = { instrument -> instrument.id },
|
||||
) { instrument ->
|
||||
Text(
|
||||
country.name,
|
||||
instrument.name,
|
||||
modifier = Modifier.padding(8.dp),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -58,9 +58,9 @@ hideToc: true
|
||||
<StepHikeCompact.Step step={4}>
|
||||
<StepHikeCompact.Details title="Query Supabase data from Next.js">
|
||||
|
||||
Create a new file at `app/countries/page.tsx` and populate with the following.
|
||||
Create a new file at `app/instruments/page.tsx` and populate with the following.
|
||||
|
||||
This will select all the rows from the `countries` table in Supabase and render them on the page.
|
||||
This will select all the rows from the `instruments` table in Supabase and render them on the page.
|
||||
|
||||
</StepHikeCompact.Details>
|
||||
|
||||
@@ -68,14 +68,14 @@ hideToc: true
|
||||
|
||||
<CH.Code className="min-h-[34rem]">
|
||||
|
||||
```ts app/countries/page.tsx
|
||||
```ts app/instruments/page.tsx
|
||||
import { createClient } from '@/utils/supabase/server';
|
||||
|
||||
export default async function Countries() {
|
||||
export default async function Instruments() {
|
||||
const supabase = await createClient();
|
||||
const { data: countries } = await supabase.from("countries").select();
|
||||
const { data: instruments } = await supabase.from("instruments").select();
|
||||
|
||||
return <pre>{JSON.stringify(countries, null, 2)}</pre>
|
||||
return <pre>{JSON.stringify(instruments, null, 2)}</pre>
|
||||
}
|
||||
```
|
||||
|
||||
@@ -120,7 +120,7 @@ hideToc: true
|
||||
<StepHikeCompact.Step step={5}>
|
||||
<StepHikeCompact.Details title="Start the app">
|
||||
|
||||
Run the development server, go to http://localhost:3000/countries in a browser and you should see the list of countries.
|
||||
Run the development server, go to http://localhost:3000/instruments in a browser and you should see the list of instruments.
|
||||
|
||||
</StepHikeCompact.Details>
|
||||
|
||||
|
||||
@@ -68,21 +68,21 @@ hideToc: true
|
||||
<script setup>
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('https://<project>.supabase.co', '<your-anon-key>')
|
||||
const countries = ref([])
|
||||
const instruments = ref([])
|
||||
|
||||
async function getCountries() {
|
||||
const { data } = await supabase.from('countries').select()
|
||||
countries.value = data
|
||||
async function getInstruments() {
|
||||
const { data } = await supabase.from('instruments').select()
|
||||
instruments.value = data
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getCountries()
|
||||
getInstruments()
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ul>
|
||||
<li v-for="country in countries" :key="country.id">{{ country.name }}</li>
|
||||
<li v-for="instrument in instruments" :key="instrument.id">{{ instrument.name }}</li>
|
||||
</ul>
|
||||
</template>
|
||||
```
|
||||
@@ -94,7 +94,7 @@ hideToc: true
|
||||
<StepHikeCompact.Step step={5}>
|
||||
<StepHikeCompact.Details title="Start the app">
|
||||
|
||||
Start the app, navigate to http://localhost:3000 in the browser, open the browser console, and you should see the list of countries.
|
||||
Start the app, navigate to http://localhost:3000 in the browser, open the browser console, and you should see the list of instruments.
|
||||
|
||||
</StepHikeCompact.Details>
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ hideToc: true
|
||||
<StepHikeCompact>
|
||||
|
||||
<StepHikeCompact.Step step={1}>
|
||||
|
||||
|
||||
<QuickstartDbSetup />
|
||||
|
||||
</StepHikeCompact.Step>
|
||||
@@ -58,7 +58,7 @@ hideToc: true
|
||||
<ProjectConfigVariables variable="url" />
|
||||
<ProjectConfigVariables variable="anonKey" />
|
||||
|
||||
Add a `getCountries` function to fetch the data and display the query result to the page.
|
||||
Add a `getInstruments` function to fetch the data and display the query result to the page.
|
||||
|
||||
</StepHikeCompact.Details>
|
||||
<StepHikeCompact.Code>
|
||||
@@ -71,21 +71,21 @@ hideToc: true
|
||||
const supabase = createClient("https://<project>.supabase.co", "<your-anon-key>");
|
||||
|
||||
function App() {
|
||||
const [countries, setCountries] = useState([]);
|
||||
const [instruments, setInstruments] = useState([]);
|
||||
|
||||
useEffect(() => {
|
||||
getCountries();
|
||||
getInstruments();
|
||||
}, []);
|
||||
|
||||
async function getCountries() {
|
||||
const { data } = await supabase.from("countries").select();
|
||||
setCountries(data);
|
||||
async function getInstruments() {
|
||||
const { data } = await supabase.from("instruments").select();
|
||||
setInstruments(data);
|
||||
}
|
||||
|
||||
return (
|
||||
<ul>
|
||||
{countries.map((country) => (
|
||||
<li key={country.name}>{country.name}</li>
|
||||
{instruments.map((instrument) => (
|
||||
<li key={instrument.name}>{instrument.name}</li>
|
||||
))}
|
||||
</ul>
|
||||
);
|
||||
@@ -101,7 +101,7 @@ hideToc: true
|
||||
<StepHikeCompact.Step step={5}>
|
||||
<StepHikeCompact.Details title="Start the app">
|
||||
|
||||
Start the app, go to http://localhost:5173 in a browser, and open the browser console and you should see the list of countries.
|
||||
Start the app, go to http://localhost:5173 in a browser, and open the browser console and you should see the list of instruments.
|
||||
|
||||
</StepHikeCompact.Details>
|
||||
|
||||
|
||||
@@ -105,13 +105,13 @@ hideToc: true
|
||||
</StepHikeCompact.Step>
|
||||
|
||||
<StepHikeCompact.Step step={6}>
|
||||
<StepHikeCompact.Details title="Add countries resource and pages">
|
||||
<StepHikeCompact.Details title="Add instruments resource and pages">
|
||||
|
||||
You have to then configure resources and define pages for `countries` resource.
|
||||
You have to then configure resources and define pages for `instruments` resource.
|
||||
|
||||
Use the following command to automatically add resources and generate code for pages for `countries` using refine Inferencer.
|
||||
Use the following command to automatically add resources and generate code for pages for `instruments` using refine Inferencer.
|
||||
|
||||
This defines pages for `list`, `create`, `show` and `edit` actions inside the `src/pages/countries/` directory with `<HeadlessInferencer />` component.
|
||||
This defines pages for `list`, `create`, `show` and `edit` actions inside the `src/pages/instruments/` directory with `<HeadlessInferencer />` component.
|
||||
|
||||
The `<HeadlessInferencer />` component depends on `@refinedev/react-table` and `@refinedev/react-hook-form` packages. In order to avoid errors, you should install them as dependencies with `npm install @refinedev/react-table @refinedev/react-hook-form`.
|
||||
|
||||
@@ -129,14 +129,14 @@ hideToc: true
|
||||
<StepHikeCompact.Code>
|
||||
|
||||
```bash Terminal
|
||||
npm run refine create-resource countries
|
||||
npm run refine create-resource instruments
|
||||
```
|
||||
</StepHikeCompact.Code>
|
||||
|
||||
</StepHikeCompact.Step>
|
||||
|
||||
<StepHikeCompact.Step step={7}>
|
||||
<StepHikeCompact.Details title="Add routes for countries pages">
|
||||
<StepHikeCompact.Details title="Add routes for instruments pages">
|
||||
|
||||
Add routes for the `list`, `create`, `show`, and `edit` pages.
|
||||
|
||||
@@ -163,7 +163,7 @@ hideToc: true
|
||||
import "./App.css";
|
||||
import authProvider from "./authProvider";
|
||||
import { supabaseClient } from "./utility";
|
||||
import { CountriesCreate, CountriesEdit, CountriesList, CountriesShow } from "./pages/countries";
|
||||
import { InstrumentsCreate, InstrumentsEdit, InstrumentsList, InstrumentsShow } from "./pages/instruments";
|
||||
|
||||
function App() {
|
||||
return (
|
||||
@@ -179,21 +179,21 @@ hideToc: true
|
||||
warnWhenUnsavedChanges: true,
|
||||
}}
|
||||
resources={[{
|
||||
name: "countries",
|
||||
list: "/countries",
|
||||
create: "/countries/create",
|
||||
edit: "/countries/edit/:id",
|
||||
show: "/countries/show/:id"
|
||||
name: "instruments",
|
||||
list: "/instruments",
|
||||
create: "/instruments/create",
|
||||
edit: "/instruments/edit/:id",
|
||||
show: "/instruments/show/:id"
|
||||
}]}>
|
||||
<Routes>
|
||||
<Route index
|
||||
element={<NavigateToResource resource="countries" />}
|
||||
element={<NavigateToResource resource="instruments" />}
|
||||
/>
|
||||
<Route path="/countries">
|
||||
<Route index element={<CountriesList />} />
|
||||
<Route path="create" element={<CountriesCreate />} />
|
||||
<Route path="edit/:id" element={<CountriesEdit />} />
|
||||
<Route path="show/:id" element={<CountriesShow />} />
|
||||
<Route path="/instruments">
|
||||
<Route index element={<InstrumentsList />} />
|
||||
<Route path="create" element={<InstrumentsCreate />} />
|
||||
<Route path="edit/:id" element={<InstrumentsEdit />} />
|
||||
<Route path="show/:id" element={<InstrumentsShow />} />
|
||||
</Route>
|
||||
</Routes>
|
||||
<RefineKbar />
|
||||
@@ -212,9 +212,9 @@ hideToc: true
|
||||
</StepHikeCompact.Step>
|
||||
|
||||
<StepHikeCompact.Step step={8}>
|
||||
<StepHikeCompact.Details title="View countries pages">
|
||||
<StepHikeCompact.Details title="View instruments pages">
|
||||
|
||||
Now you should be able to see the countries pages along the `/countries` routes. You may now edit and add new countries using the Inferencer generated UI.
|
||||
Now you should be able to see the instruments pages along the `/instruments` routes. You may now edit and add new instruments using the Inferencer generated UI.
|
||||
|
||||
The Inferencer auto-generated code gives you a good starting point on which to keep building your `list`, `create`, `show` and `edit` pages. They can be obtained by clicking the `Show the auto-generated code` buttons in their respective pages.
|
||||
</StepHikeCompact.Details>
|
||||
|
||||
@@ -8,7 +8,7 @@ hideToc: true
|
||||
<StepHikeCompact>
|
||||
|
||||
<StepHikeCompact.Step step={1}>
|
||||
|
||||
|
||||
<QuickstartDbSetup />
|
||||
|
||||
</StepHikeCompact.Step>
|
||||
@@ -58,7 +58,7 @@ hideToc: true
|
||||
<ProjectConfigVariables variable="url" />
|
||||
<ProjectConfigVariables variable="anonKey" />
|
||||
|
||||
Add a `getCountries` function to fetch the data and display the query result to the page.
|
||||
Add a `getInstruments` function to fetch the data and display the query result to the page.
|
||||
|
||||
</StepHikeCompact.Details>
|
||||
<StepHikeCompact.Code>
|
||||
@@ -70,17 +70,17 @@ hideToc: true
|
||||
|
||||
const supabase = createClient('https://<project>.supabase.co', '<your-anon-key>');
|
||||
|
||||
async function getCountries() {
|
||||
const { data } = await supabase.from("countries").select();
|
||||
async function getInstruments() {
|
||||
const { data } = await supabase.from("instruments").select();
|
||||
return data;
|
||||
}
|
||||
|
||||
function App() {
|
||||
const [countries] = createResource(getCountries);
|
||||
const [instruments] = createResource(getInstruments);
|
||||
|
||||
return (
|
||||
<ul>
|
||||
<For each={countries()}>{(country) => <li>{country.name}</li>}</For>
|
||||
<For each={instruments()}>{(instrument) => <li>{instrument.name}</li>}</For>
|
||||
</ul>
|
||||
);
|
||||
}
|
||||
@@ -95,7 +95,7 @@ hideToc: true
|
||||
<StepHikeCompact.Step step={5}>
|
||||
<StepHikeCompact.Details title="Start the app">
|
||||
|
||||
Start the app and go to http://localhost:3000 in a browser and you should see the list of countries.
|
||||
Start the app and go to http://localhost:3000 in a browser and you should see the list of instruments.
|
||||
|
||||
</StepHikeCompact.Details>
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ hideToc: true
|
||||
<StepHikeCompact>
|
||||
|
||||
<StepHikeCompact.Step step={1}>
|
||||
|
||||
|
||||
<QuickstartDbSetup />
|
||||
|
||||
</StepHikeCompact.Step>
|
||||
@@ -87,9 +87,9 @@ hideToc: true
|
||||
import { supabase } from "$lib/supabaseClient";
|
||||
|
||||
export async function load() {
|
||||
const { data } = await supabase.from("countries").select();
|
||||
const { data } = await supabase.from("instruments").select();
|
||||
return {
|
||||
countries: data ?? [],
|
||||
instruments: data ?? [],
|
||||
};
|
||||
}
|
||||
```
|
||||
@@ -110,8 +110,8 @@ hideToc: true
|
||||
</script>
|
||||
|
||||
<ul>
|
||||
{#each data.countries as country}
|
||||
<li>{country.name}</li>
|
||||
{#each data.instruments as instrument}
|
||||
<li>{instrument.name}</li>
|
||||
{/each}
|
||||
</ul>
|
||||
```
|
||||
@@ -123,7 +123,7 @@ hideToc: true
|
||||
<StepHikeCompact.Step step={6}>
|
||||
<StepHikeCompact.Details title="Start the app">
|
||||
|
||||
Start the app and go to http://localhost:5173 in a browser and you should see the list of countries.
|
||||
Start the app and go to http://localhost:5173 in a browser and you should see the list of instruments.
|
||||
|
||||
</StepHikeCompact.Details>
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ hideToc: true
|
||||
<StepHikeCompact>
|
||||
|
||||
<StepHikeCompact.Step step={1}>
|
||||
|
||||
|
||||
<QuickstartDbSetup />
|
||||
|
||||
</StepHikeCompact.Step>
|
||||
@@ -86,21 +86,21 @@ hideToc: true
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { supabase } from './lib/supabaseClient'
|
||||
|
||||
const countries = ref([])
|
||||
const instruments = ref([])
|
||||
|
||||
async function getCountries() {
|
||||
const { data } = await supabase.from('countries').select()
|
||||
countries.value = data
|
||||
async function getInstruments() {
|
||||
const { data } = await supabase.from('instruments').select()
|
||||
instruments.value = data
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getCountries()
|
||||
getInstruments()
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ul>
|
||||
<li v-for="country in countries" :key="country.id">{{ country.name }}</li>
|
||||
<li v-for="instrument in instruments" :key="instrument.id">{{ instrument.name }}</li>
|
||||
</ul>
|
||||
</template>
|
||||
```
|
||||
@@ -112,7 +112,7 @@ hideToc: true
|
||||
<StepHikeCompact.Step step={6}>
|
||||
<StepHikeCompact.Details title="Start the app">
|
||||
|
||||
Start the app and go to http://localhost:5173 in a browser and you should see the list of countries.
|
||||
Start the app and go to http://localhost:5173 in a browser and you should see the list of instruments.
|
||||
|
||||
</StepHikeCompact.Details>
|
||||
|
||||
|
||||
@@ -2573,11 +2573,10 @@ functions:
|
||||
code: |
|
||||
```dart
|
||||
final data = await supabase
|
||||
.from('products')
|
||||
.from('orchestral_sections')
|
||||
.select('''
|
||||
id,
|
||||
supplier:supplier_id ( name ),
|
||||
purchaser:purchaser_id ( name )
|
||||
name,
|
||||
instruments ( name )
|
||||
''');
|
||||
```
|
||||
data:
|
||||
|
||||
Reference in new issue
Block a user