Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions src/app/dashboard/reader/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,14 @@ async function fetchDonationPage(
if (!supabase) return { rows: [], totalCount: 0 };
const from = page * PAGE_SIZE;
const to = from + PAGE_SIZE - 1;
const { data, count } = await supabase
const { data, count, error } = await supabase
.from("donations")
.select("*", { count: "exact" })
.eq("donor_address", address.toLowerCase())
.order("block_timestamp", { ascending: false })
.range(from, to)
.returns<Donation[]>();
if (error) throw error;
return { rows: data ?? [], totalCount: count ?? 0 };
}

Expand All @@ -40,7 +41,7 @@ export default function ReaderDashboard() {
setPage(0);
}, [address]);

const { data, isLoading } = useQuery({
const { data, isLoading, error } = useQuery({
queryKey: ["reader-donations", address, page],
queryFn: () => fetchDonationPage(address!, page),
enabled: isConnected && !!address,
Expand Down Expand Up @@ -100,11 +101,17 @@ export default function ReaderDashboard() {

{isLoading && <p className="text-muted mt-4 text-sm">Loading...</p>}

{error && (
<p className="mt-4 text-sm text-red-400">
Failed to load donations. Please try again.
</p>
)}

<div className="mt-4 space-y-2">
{donations.map((d) => (
<DonationRow key={d.id} donation={d} />
))}
{!isLoading && donations.length === 0 && (
{!isLoading && !error && donations.length === 0 && (
<p className="text-muted py-6 text-center text-sm">
No donations yet.
</p>
Expand Down
13 changes: 10 additions & 3 deletions src/app/dashboard/writer/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,21 @@ async function fetchWriterStorylines(
address: string,
): Promise<Storyline[]> {
if (!supabase) return [];
const { data } = await supabase
const { data, error } = await supabase
.from("storylines")
.select("*")
.eq("writer_address", address.toLowerCase())
.eq("hidden", false)
.order("block_timestamp", { ascending: false })
.returns<Storyline[]>();
if (error) throw error;
return data ?? [];
}

export default function WriterDashboard() {
const { address, isConnected } = useAccount();

const { data: storylines = [], isLoading } = useQuery({
const { data: storylines = [], isLoading, error } = useQuery({
queryKey: ["writer-storylines", address],
queryFn: () => fetchWriterStorylines(address!),
enabled: isConnected && !!address,
Expand Down Expand Up @@ -53,11 +54,17 @@ export default function WriterDashboard() {

{isLoading && <p className="text-muted mt-8 text-sm">Loading...</p>}

{error && (
<p className="mt-8 text-sm text-red-400">
Failed to load storylines. Please try again.
</p>
)}

<div className="mt-8 space-y-4">
{storylines.map((s) => (
<StorylineDetail key={s.id} storyline={s} />
))}
{!isLoading && storylines.length === 0 && (
{!isLoading && !error && storylines.length === 0 && (
<p className="text-muted py-8 text-center text-sm">
No storylines yet.
</p>
Expand Down
Loading