Update static/js/07-team-channel-adapter.js

This commit is contained in:
dev 2026-11-02 04:42:00 +00:00
parent f08e24696c
commit 13b3564b84

View File

@ -3,11 +3,14 @@
window.Glow = window.Glow || {};
// note:
// this file keeps team/channel helper methods available,
// but the old production monkey-patching adapter is disabled.
// rooms remain the stable fallback runtime path.
Glow.teamAdapter = Glow.teamAdapter || {
initialized: false,
originalLoadRooms: null,
originalUpdateViewUI: null,
chatBarVisibilityInstalled: false
enabled: false
};
Glow.loadTeamsForAdapter = async () => {
@ -43,7 +46,7 @@ Glow.loadTeamsForAdapter = async () => {
Glow.els.teamSelect.value = Glow.state.activeTeam.slug;
}
} catch (error) {
console.warn("Team adapter could not load teams:", error);
console.warn("could not load teams:", error);
Glow.state.teams = [];
Glow.state.activeTeam = null;
Glow.els.teamSelect.disabled = true;
@ -69,7 +72,6 @@ Glow.loadChannelsForTeam = async (teamSlug, preferredChannelSlug = null) => {
Glow.state.channels = channels;
const matchingTeam = Glow.state.teams.find(team => team.slug === teamSlug);
if (matchingTeam || data.team) {
Glow.state.activeTeam = {
...(matchingTeam || {}),
@ -89,24 +91,21 @@ Glow.loadChannelsForTeam = async (teamSlug, preferredChannelSlug = null) => {
const selected =
channels.find(channel => channel.slug === preferredChannelSlug) ||
channels.find(channel => channel.slug === Glow.state.activeChannel?.slug) ||
channels.find(channel => channel.slug === Glow.state.activeRoom?.slug) ||
channels.find(channel => channel.slug === "general") ||
channels[0] ||
null;
Glow.state.activeChannel = selected;
Glow.state.activeRoom = selected;
Glow.els.roomSelect.disabled = !selected;
if (selected) {
Glow.state.activeRoom = selected;
Glow.els.roomSelect.value = selected.slug;
}
Glow.els.roomSelect.disabled = !selected;
};
Glow.decorateChannelSelector = () => {
if (!Glow.els.roomSelect) return;
Glow.els.roomSelect.classList.add("channel-select");
Glow.els.roomSelect.setAttribute("aria-label", "Select channel");
};
@ -116,21 +115,25 @@ Glow.updateTeamChannelHeader = () => {
const channel = Glow.state.activeChannel || Glow.state.activeRoom;
const view = Glow.state.activeView;
if (view === "dm" || view === "dms" || view === "feed" || view === "pages" || view === "page" || view === "profile" || view === "settings" || view === "thread") {
if (
view === "dm" ||
view === "dms" ||
view === "feed" ||
view === "pages" ||
view === "page" ||
view === "profile" ||
view === "settings" ||
view === "thread"
) {
return;
}
if (!(view === "channel" || view === "room")) {
return;
}
if (!team || !channel || !Glow.els.headerTitle) {
return;
}
if (!(view === "channel" || view === "room")) return;
if (!team || !channel || !Glow.els.headerTitle) return;
Glow.els.headerTitle.textContent = `# ${channel.name}`;
Glow.els.headerSubtitle.textContent =
`${team.name} · ${channel.description || "Channel conversation"}`;
`${team.name} · ${channel.description || "Channel conversation"}`;
};
Glow.applyComposerVisibility = () => {
@ -345,7 +348,7 @@ Glow.manageTeamMembers = async team => {
row.className = "member-row";
const name = document.createElement("span");
name.textContent = `${member.username} · ${member.membership_role}`;
name.textContent = `${member.username} · ${member.membership_role}`;
const actions = document.createElement("div");
actions.className = "settings-actions";
@ -528,152 +531,10 @@ Glow.refreshTeamAndChannelData = async (teamSlug = null, channelSlug = null) =>
Glow.installTeamAdapter = () => {
if (Glow.teamAdapter.initialized) return;
if (!Glow.els.teamSelect || !Glow.els.roomSelect) {
console.warn("Team adapter skipped: expected team/channel elements are missing.");
return;
}
Glow.teamAdapter.initialized = true;
Glow.state.teams ||= [];
Glow.state.channels ||= [];
Glow.state.activeTeam ||= null;
Glow.state.activeChannel ||= null;
Glow.decorateChannelSelector();
Glow.teamAdapter.originalLoadRooms = Glow.loadRooms;
Glow.loadRooms = async () => {
await Glow.teamAdapter.originalLoadRooms();
await Glow.loadTeamsForAdapter();
Glow.decorateChannelSelector();
if (Glow.state.activeTeam) {
try {
await Glow.loadChannelsForTeam(
Glow.state.activeTeam.slug,
Glow.state.activeRoom?.slug
);
} catch (error) {
console.warn("Team adapter could not load channels after rooms:", error);
}
}
Glow.updateTeamChannelHeader();
};
Glow.teamAdapter.originalUpdateViewUI = Glow.updateViewUI;
Glow.updateViewUI = () => {
Glow.teamAdapter.originalUpdateViewUI?.();
Glow.updateTeamChannelHeader();
Glow.applyComposerVisibility();
};
const initializeAdapter = async () => {
await Glow.loadTeamsForAdapter();
Glow.decorateChannelSelector();
if (!Glow.state.activeTeam) {
Glow.applyComposerVisibility();
return;
}
try {
await Glow.loadChannelsForTeam(
Glow.state.activeTeam.slug,
Glow.state.activeRoom?.slug
);
Glow.updateTeamChannelHeader();
} catch (error) {
console.warn("Team adapter could not load initial channels:", error);
}
Glow.applyComposerVisibility();
};
initializeAdapter();
Glow.els.teamSelect.addEventListener("change", async () => {
const selected = Glow.state.teams.find(
team => team.slug === Glow.els.teamSelect.value
);
if (!selected) return;
Glow.state.activeDm = null;
Glow.state.activeTeam = selected;
Glow.state.activeChannel = null;
Glow.state.activeRoom = null;
Glow.state.typingUsers = [];
Glow.state.dmTypingUsers = [];
Glow.renderTyping?.();
Glow.clearMessages?.();
try {
await Glow.loadChannelsForTeam(selected.slug);
Glow.state.activeView = "channel";
Glow.updateViewUI();
if (Glow.state.activeChannel) {
await Glow.loadChannelMessages?.();
Glow.pollTyping?.();
Glow.pingPresence?.();
Glow.refreshPresence?.();
} else {
Glow.renderEmptyState?.("No channels are available in this team.");
}
} catch (error) {
Glow.showToast(error.message || "Could not load channels for this team.", "error");
}
Glow.schedulePoll?.();
});
Glow.els.roomSelect.addEventListener("change", () => {
window.setTimeout(() => {
const selected = Glow.state.channels.find(
channel => channel.slug === Glow.els.roomSelect.value
);
if (!selected) return;
Glow.state.activeDm = null;
Glow.state.activeChannel = selected;
Glow.state.activeRoom = selected;
if (
Glow.state.activeView === "room" ||
Glow.state.activeView === "channel"
) {
Glow.state.activeView = "channel";
}
Glow.updateViewUI();
Glow.pingPresence?.();
Glow.refreshPresence?.();
}, 0);
});
console.info("Team/channel adapter enabled.");
console.info("team/channel helper mode enabled; runtime monkey-patching disabled.");
};
Glow.installTeamAdapter();
if (!Glow.teamAdapter.chatBarVisibilityInstalled) {
Glow.teamAdapter.chatBarVisibilityInstalled = true;
const previousUpdateViewUI = Glow.updateViewUI;
Glow.updateViewUI = () => {
previousUpdateViewUI?.();
Glow.applyComposerVisibility();
};
}
Glow.applyComposerVisibility();