le8i2digy: Keep the posts and show an inline error when a refresh fails
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
import { useCallback, useEffect, useRef, useState } from "react";
|
||||
import { fetchFeedPage, FeedLoadError } from "@/lib/feed-client";
|
||||
import { applyLikeOutcome, LikeError, sendLike } from "@/lib/like-client";
|
||||
import { mergePosts, toCardPosts, upgradeVideos, type CardPost } from "@/lib/feed-model";
|
||||
import { firstLoadFailure, mergePosts, toCardPosts, upgradeVideos, type CardPost } from "@/lib/feed-model";
|
||||
import { PostError, publishAndConfirm } from "@/lib/post-client";
|
||||
import { DeleteError, sendDelete } from "@/lib/delete-client";
|
||||
import type { ComposerProps } from "./Composer";
|
||||
@@ -26,6 +26,7 @@ export function Feed({
|
||||
const [nextCursor, setNextCursor] = useState<string | null>(null);
|
||||
const [loadingMore, setLoadingMore] = useState(false);
|
||||
const [refreshing, setRefreshing] = useState(false);
|
||||
const [refreshFailed, setRefreshFailed] = useState(false);
|
||||
const [loadMoreFailed, setLoadMoreFailed] = useState(false);
|
||||
const [pending, setPending] = useState<CardPost[]>([]);
|
||||
const [likeBusy, setLikeBusy] = useState<ReadonlySet<string>>(new Set());
|
||||
@@ -59,6 +60,7 @@ export function Feed({
|
||||
const loadFirst = useCallback(async (quiet = false) => {
|
||||
if (busy.current) return;
|
||||
busy.current = true;
|
||||
setRefreshFailed(false);
|
||||
if (quiet) setRefreshing(true);
|
||||
else setStatus("loading");
|
||||
setLoadMoreFailed(false);
|
||||
@@ -70,7 +72,9 @@ export function Feed({
|
||||
setStatus("ready");
|
||||
} catch (e) {
|
||||
fail(e);
|
||||
setStatus("error");
|
||||
const out = firstLoadFailure(quiet);
|
||||
if (out.fullError) setStatus("error");
|
||||
setRefreshFailed(out.refreshFailed);
|
||||
} finally {
|
||||
busy.current = false;
|
||||
setRefreshing(false);
|
||||
@@ -262,6 +266,7 @@ export function Feed({
|
||||
onShowNew={showNew}
|
||||
onRefresh={refresh}
|
||||
refreshing={refreshing}
|
||||
refreshFailed={refreshFailed}
|
||||
onToggleLike={(p) => void toggleLike(p)}
|
||||
likeBusy={likeBusy}
|
||||
likeErrors={likeErrors}
|
||||
|
||||
Reference in New Issue
Block a user