import { pageEffect, bindPageTitle, onPageShow } from "/js/router.js"; import { html, render } from "/js/lib/lit-html.js"; import { headerTemplate } from "/js/templates/header.template.js"; import { displayRelativeTime } from "/js/utils.js"; import { getConvoPreviewText, getDisplayName, getGroupConvoDetails, getGroupConvoOwner, MISSING_HANDLE, } from "/js/dataHelpers.js"; import { avatarTemplate } from "/js/templates/avatar.template.js"; import { avatarGroupTemplate } from "/js/templates/avatarGroup.template.js"; import { knownFollowersSummaryTemplate } from "/js/templates/knownFollowersSummary.template.js"; import { showToast } from "/js/toasts.js"; import "/js/components/container-link.js"; import "/js/components/infinite-scroll-container.js"; import { tryAgainButtonTemplate } from "/js/templates/tryAgainButton.template.js"; export default async function chatRequestsView({ root, router, layout, context: { auth, dataLayer }, }) { await auth.requireAuth(); async function handleAccept(convo) { try { await dataLayer.mutations.acceptConvo(convo); // on accept, navigate to the chat detail page window.router.go(`/messages/${convo.id}`); } catch (error) { console.error(error); showToast("Failed to accept chat request", { style: "error" }); } } async function handleReject(convo) { try { await dataLayer.mutations.rejectConvo(convo); } catch (error) { console.error(error); showToast("Failed to reject chat request", { style: "error" }); } } function requestItemTemplate({ convo }) { const groupDetails = getGroupConvoDetails(convo); const currentUser = dataLayer.derived.$currentUser.get(); const lastMessage = convo.lastMessage; const otherMembers = convo.members.filter( (member) => member.did !== currentUser?.did, ); const otherMember = groupDetails ? null : otherMembers[0]; const timeAgo = lastMessage ? displayRelativeTime(lastMessage.sentAt) : ""; const messagePreview = lastMessage ? getConvoPreviewText(lastMessage, { currentUser, convo, profiles: dataLayer.derived.$convoProfiles.get(convo.id), }) : "No messages yet"; const canAccept = !groupDetails || groupDetails.lockStatus === "unlocked"; return html`