import { applyLang, avatarError, bindHeader, connectToApp, get, post, t, toast } from "../bd-static/shared.js?v=auth-bridge-2"; const config = { title: "invite_become_BD", list: "/team/bd/invite-bd-message-own", invite: "/team/bd/invite-bd", cancel: (id) => `/team/bd/invite-bd-cancel/${id}` }; let invited = []; let searchResult = []; let selected = null; let locked = false; let appConnected = false; bindHeader(config.title); applyLang(); const input = document.getElementById("searchInput"); const clearButton = document.getElementById("clearButton"); input.placeholder = t("enter_user_id"); input.addEventListener("input", () => { selected = null; clearButton.hidden = !input.value; if (!input.value.trim()) { searchResult = []; loadInvited(); return; } render(); }); input.addEventListener("keyup", (event) => { if (event.key === "Enter") search(); }); document.getElementById("inviteButton").addEventListener("click", invite); clearButton.addEventListener("click", () => { input.value = ""; searchResult = []; selected = null; clearButton.hidden = true; loadInvited(); }); init(); async function init() { try { await connectToApp(); appConnected = true; await loadInvited(); } catch (error) { toast(error.response?.errorMsg || error.message); } } async function loadInvited() { if (!appConnected) return; try { const response = await get(config.list); invited = response.body || []; render(); } catch (error) { toast(error.response?.errorMsg || error.message); } } async function search() { if (locked || !appConnected) return; const account = input.value.trim(); selected = null; searchResult = []; if (!account) { await loadInvited(); return; } locked = true; render(); try { const response = await get(`/user/user-profile/open-search?account=${encodeURIComponent(account)}`); if (response.status && response.body) searchResult = [{ userProfile: response.body }]; } catch (error) { toast(error.response?.errorMsg || error.message); } finally { locked = false; } render(); } function render() { const list = document.getElementById("list"); const data = input.value.trim() ? searchResult : invited; list.innerHTML = ""; document.getElementById("empty").hidden = data.length > 0; data.forEach((item) => { const user = item.userProfile || {}; const card = document.createElement("article"); card.className = "member-card"; card.innerHTML = `
${user.userNickname || "-"}
${t("user_id_prefix")}${user.account || "-"}
`; card.addEventListener("click", () => { if (!input.value.trim() || item.status === 0 || item.status === 1) return; selected = selected?.id === user.id ? null : user; render(); }); const side = card.querySelector(".member-side"); if (item.status === 0) { side.innerHTML = `
${t("pending")}
`; side.querySelector("button").addEventListener("click", (event) => { event.stopPropagation(); cancelInvite(item.id); }); } else if (item.status === 1) { side.innerHTML = `${t("success")}`; } else if (selected?.id === user.id) { side.innerHTML = ``; } avatarError(card.querySelector("img")); list.appendChild(card); }); document.getElementById("inviteButton").disabled = !selected; } async function invite() { if (!selected || !appConnected) return; try { await post(config.invite, { inviteUserId: selected.id }); toast(t("invitation_submitted")); input.value = ""; selected = null; searchResult = []; await loadInvited(); } catch (error) { toast(error.response?.errorMsg || t("something_went_wrong")); } } async function cancelInvite(id) { if (!appConnected) return; try { await post(config.cancel(id)); toast(t("application_cancelled")); await loadInvited(); } catch (error) { const msg = error.response?.errorMsg?.replace(/^.*\]\s*/, "") || t("cancellation_failed_try_again"); toast(msg); } }