(READ ONLY) Margin is an open annotation layer for the internet. Powered by the AT Protocol. margin.at
extension web atproto comments
99
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix load more

scanash00 babbce21 8b50abe4

+18 -6
+4 -2
web/src/api/client.ts
··· 177 177 } 178 178 : undefined, 179 179 context: raw.context 180 - ? raw.context.map((c: any) => ({ 180 + ? raw.context.map((c) => ({ 181 181 uri: c.uri, 182 182 name: c.name, 183 183 icon: c.icon, ··· 294 294 return { 295 295 cursor: data.cursor, 296 296 items: groupedItems, 297 + hasMore: normalizedItems.length >= limit, 298 + fetchedCount: normalizedItems.length, 297 299 }; 298 300 } catch (e) { 299 301 console.error(e); 300 - return { items: [] }; 302 + return { items: [], hasMore: false, fetchedCount: 0 }; 301 303 } 302 304 } 303 305
+2
web/src/types.ts
··· 94 94 export interface FeedResponse { 95 95 cursor?: string; 96 96 items: AnnotationItem[]; 97 + hasMore?: boolean; 98 + fetchedCount?: number; 97 99 } 98 100 99 101 export interface NotificationItem {
+12 -4
web/src/views/core/Feed.tsx
··· 53 53 if (cancelled) return; 54 54 const fetched = data?.items || []; 55 55 setItems(fetched); 56 - setHasMore(fetched.length >= LIMIT); 57 - setOffset(fetched.length); 56 + if (data?.hasMore !== undefined) { 57 + setHasMore(data.hasMore); 58 + } else { 59 + setHasMore(fetched.length >= LIMIT); 60 + } 61 + setOffset(data?.fetchedCount ?? fetched.length); 58 62 setLoading(false); 59 63 }) 60 64 .catch((e) => { ··· 82 86 }); 83 87 const fetched = data?.items || []; 84 88 setItems((prev) => [...prev, ...fetched]); 85 - setHasMore(fetched.length >= LIMIT); 86 - setOffset((prev) => prev + fetched.length); 89 + if (data?.hasMore !== undefined) { 90 + setHasMore(data.hasMore); 91 + } else { 92 + setHasMore(fetched.length >= LIMIT); 93 + } 94 + setOffset((prev) => prev + (data?.fetchedCount ?? fetched.length)); 87 95 } catch (e) { 88 96 console.error(e); 89 97 } finally {