import { useEffect, useRef, useState } from 'preact/hooks'; import Icon from '../components/icon'; import Link from '../components/link'; import Loader from '../components/loader'; import Status from '../components/status'; import useTitle from '../utils/useTitle'; const LIMIT = 40; function Bookmarks() { useTitle('Bookmarks'); const [bookmarks, setBookmarks] = useState([]); const [uiState, setUIState] = useState('default'); const [showMore, setShowMore] = useState(false); const bookmarksIterator = useRef(); async function fetchBookmarks(firstLoad) { if (firstLoad || !bookmarksIterator.current) { bookmarksIterator.current = masto.v1.bookmarks.list({ limit: LIMIT }); } const allBookmarks = await bookmarksIterator.current.next(); const bookmarksValue = allBookmarks.value; if (bookmarksValue?.length) { if (firstLoad) { setBookmarks(bookmarksValue); } else { setBookmarks([...bookmarks, ...bookmarksValue]); } } return allBookmarks; } const loadBookmarks = (firstLoad) => { setUIState('loading'); (async () => { try { const { done } = await fetchBookmarks(firstLoad); setShowMore(!done); setUIState('default'); } catch (e) { console.error(e); setUIState('error'); } })(); }; useEffect(() => { loadBookmarks(true); }, []); const scrollableRef = useRef(null); return (
No bookmarks yet. Go bookmark something!
) )} {uiState === 'loading' ? (
Unable to load bookmarks.
The end.
)}