Update static/js/07-team-channel-adapter.js
This commit is contained in:
parent
f08e24696c
commit
13b3564b84
@ -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();
|
||||
Loading…
x
Reference in New Issue
Block a user