import { html, render } from "/js/lib/lit-html.js"; import { resolveDidFromHandleOrDid } from "/js/atproto.js"; import { pageEffect, bindPageTitle, onPageShow } from "/js/router.js"; import { headerTemplate } from "/js/templates/header.template.js"; import { profileFeedTemplate } from "/js/templates/profileFeed.template.js"; import { formatLargeNumber } from "/js/utils.js"; import "/js/components/infinite-scroll-container.js"; import { tryAgainButtonTemplate } from "/js/templates/tryAgainButton.template.js"; export default async function postRepostsView({ root, params, context: { dataLayer, identityResolver, isAuthenticated, interactionHandlers, pluginService, }, }) { const { handleOrDid, rkey } = params; const authorDid = await resolveDidFromHandleOrDid( handleOrDid, identityResolver, ); const postUri = `at://${authorDid}/app.bsky.feed.post/${rkey}`; function repostsErrorTemplate({ error }) { console.error(error); return html`
Error loading reposts
${tryAgainButtonTemplate()}
`; } pageEffect(root, () => { const currentUser = dataLayer.derived.$currentUser.get(); const postReposts = dataLayer.derived.$postReposts.get(postUri); const post = dataLayer.derived.$hydratedPosts.get(postUri); const postRepostsRequestStatus = dataLayer.requests.statusStore.$statuses.get( "loadPostReposts-" + postUri, ); const hasMore = postReposts?.cursor ? true : false; const subtitle = post?.repostCount ? `${formatLargeNumber(post.repostCount)} ${ post.repostCount === 1 ? "repost" : "reposts" }` : null; render( html`
${headerTemplate({ title: "Reposted by", subtitle, })}
${(() => { if (postRepostsRequestStatus.error) { return repostsErrorTemplate({ error: postRepostsRequestStatus.error, }); } return profileFeedTemplate({ profiles: postReposts?.repostedBy ?? null, hasMore, onLoadMore: loadReposts, emptyMessage: "No reposts yet.", isAuthenticated, currentUserDid: currentUser?.did ?? null, profileInteractionHandler: interactionHandlers.profileInteractionHandler, pluginService, }); })()}
`, root, ); }); bindPageTitle(root, () => "Reposted by"); async function loadReposts({ reload = false } = {}) { const cursor = reload ? undefined : dataLayer.derived.$postReposts.get(postUri)?.cursor; await dataLayer.requests.loadPostReposts(postUri, { cursor }); } function loadPageData() { dataLayer.requests.loadPostThread(postUri); loadReposts({ reload: true }); } onPageShow(root, ({ action }) => { if (action === "restore") return; loadPageData(); }); }