phanpy/src/pages/lists.jsx

73 lines
1.9 KiB
React
Raw Normal View History

2023-02-10 16:05:18 +00:00
import { useEffect, useState } from 'preact/hooks';
2023-02-10 16:05:18 +00:00
import Icon from '../components/icon';
import Link from '../components/link';
import Loader from '../components/loader';
import Menu from '../components/menu';
import { api } from '../utils/api';
2023-02-11 09:57:26 +00:00
import useTitle from '../utils/useTitle';
function Lists() {
const { masto } = api();
2023-02-11 09:57:26 +00:00
useTitle(`Lists`, `/l`);
2023-02-10 16:05:18 +00:00
const [uiState, setUiState] = useState('default');
2023-02-10 16:05:18 +00:00
const [lists, setLists] = useState([]);
useEffect(() => {
2023-02-10 16:05:18 +00:00
setUiState('loading');
(async () => {
try {
2023-02-10 16:05:18 +00:00
const lists = await masto.v1.lists.list();
console.log(lists);
setLists(lists);
setUiState('default');
} catch (e) {
console.error(e);
2023-02-10 16:05:18 +00:00
setUiState('error');
}
})();
2023-02-10 16:05:18 +00:00
}, []);
return (
2023-02-10 16:05:18 +00:00
<div id="lists-page" class="deck-container">
<div class="timeline-deck deck">
<header>
<div class="header-grid">
<div class="header-side">
<Menu />
<Link to="/" class="button plain">
<Icon icon="home" size="l" />
</Link>
</div>
<h1>Lists</h1>
<div class="header-side" />
</div>
</header>
<main>
{lists.length > 0 ? (
2023-02-11 08:48:47 +00:00
<ul class="link-list">
2023-02-10 16:05:18 +00:00
{lists.map((list) => (
<li>
<Link to={`/l/${list.id}`}>
<Icon icon="list" /> <span>{list.title}</span>
</Link>
</li>
))}
</ul>
) : uiState === 'loading' ? (
<p class="ui-state">
<Loader />
</p>
) : uiState === 'error' ? (
<p class="ui-state">Unable to load lists.</p>
) : (
<p class="ui-state">No lists yet.</p>
)}
</main>
</div>
</div>
);
}
export default Lists;