import { html, render } from "/js/lib/lit-html.js"; import { headerTemplate } from "/js/templates/header.template.js"; import { listFeedTemplate } from "/js/templates/listFeed.template.js"; import { bindToPage, pageEffect, bindPageTitle, onPageShow, } from "/js/router.js"; import { showToast } from "/js/toasts.js"; import { parseUri } from "/js/dataHelpers.js"; import "/js/components/create-list-dialog.js"; export default async function listsView({ root, layout, context: { auth, dataLayer }, }) { await auth.requireAuth(); onPageShow(root, ({ action }) => { if (action === "restore") return; loadPageData(); }); bindToPage(root, layout, "active-nav-click", () => { loadPageData(); }); bindPageTitle(root, () => "Lists"); pageEffect(root, () => { const currentUser = dataLayer.derived.$currentUser.get(); const actorLists = currentUser ? dataLayer.derived.$actorLists.get(currentUser.did) : null; render( html`
${headerTemplate({ title: "Lists", rightItemTemplate: () => html` `, })}
${listFeedTemplate({ lists: actorLists?.lists, cursor: actorLists?.cursor, onLoadMore: () => loadLists(), })}
`, root, ); }); async function loadLists({ reload = false } = {}) { await dataLayer.requests.loadCurrentUserLists({ reload }); } function loadPageData() { loadLists({ reload: true }); } async function handleClickNew({ currentUser }) { const dialog = document.createElement("create-list-dialog"); dialog.addEventListener("list-create", async (event) => { const { listData, successCallback, errorCallback } = event.detail; try { const list = await dataLayer.mutations.createList(listData); showToast("List created"); successCallback(); const { rkey } = parseUri(list.uri); window.router.go(`/profile/${currentUser.handle}/lists/${rkey}`); } catch (error) { errorCallback(error); } }); dialog.addEventListener("create-list-closed", () => { dialog.remove(); }); root.querySelector("main").appendChild(dialog); dialog.open(); } }