Refactor loadAllMembers
This commit is contained in:
parent
e566c17a9a
commit
38b5567b68
@ -423,106 +423,123 @@ class ChatElement extends HTMLElement {
|
|||||||
|
|
||||||
const service = await Services.getInstance();
|
const service = await Services.getInstance();
|
||||||
const members = await service.getAllMembers();
|
const members = await service.getAllMembers();
|
||||||
const database = await Database.getInstance();
|
const processes = await service.getProcesses();
|
||||||
const db = database.db;
|
|
||||||
|
|
||||||
const memberList = document.createElement('ul');
|
const memberList = document.createElement('ul');
|
||||||
memberList.className = 'member-list active';
|
memberList.className = 'member-list active';
|
||||||
|
|
||||||
const prioritizedMembers: [string, any][] = [];
|
// Partition members into prioritized and remaining arrays.
|
||||||
const remainingMembers: [string, any][] = [];
|
const prioritizedMembers: [string, Member][] = [];
|
||||||
|
const remainingMembers: [string, Member][] = [];
|
||||||
for (const [processId, member] of Object.entries(members)) {
|
for (const [processId, member] of Object.entries(members)) {
|
||||||
if (this.dmMembersSet.has(processId)) {
|
if (this.dmMembersSet.has(processId)) {
|
||||||
prioritizedMembers.push([processId, member]);
|
prioritizedMembers.push([processId, member]);
|
||||||
} else {
|
} else {
|
||||||
remainingMembers.push([processId, member]);
|
remainingMembers.push([processId, member]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const sortedMembers = prioritizedMembers.concat(remainingMembers);
|
const sortedMembers = prioritizedMembers.concat(remainingMembers);
|
||||||
|
|
||||||
for (const [processId, member] of sortedMembers) {
|
// Process each member.
|
||||||
|
for (const [processId, member] of sortedMembers) {
|
||||||
const memberItem = document.createElement('li');
|
const memberItem = document.createElement('li');
|
||||||
memberItem.className = 'member-item';
|
memberItem.className = 'member-item';
|
||||||
|
|
||||||
|
// Apply special styling if the member is prioritized.
|
||||||
if (this.dmMembersSet.has(processId)) {
|
if (this.dmMembersSet.has(processId)) {
|
||||||
memberItem.style.cssText = `
|
memberItem.style.cssText = `
|
||||||
background-color: var(--accent-color);
|
background-color: var(--accent-color);
|
||||||
transition: background-color 0.3s ease;
|
transition: background-color 0.3s ease;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
`;
|
`;
|
||||||
memberItem.onmouseover = () => {
|
memberItem.addEventListener('mouseover', () => {
|
||||||
memberItem.style.backgroundColor = 'var(--accent-color-hover)';
|
memberItem.style.backgroundColor = 'var(--accent-color-hover)';
|
||||||
};
|
});
|
||||||
memberItem.onmouseout = () => {
|
memberItem.addEventListener('mouseout', () => {
|
||||||
memberItem.style.backgroundColor = 'var(--accent-color)';
|
memberItem.style.backgroundColor = 'var(--accent-color)';
|
||||||
};
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create a container for the member content.
|
||||||
const memberContainer = document.createElement('div');
|
const memberContainer = document.createElement('div');
|
||||||
memberContainer.className = 'member-container';
|
memberContainer.className = 'member-container';
|
||||||
|
|
||||||
|
// Create the emoji span and load its label.
|
||||||
const emojiSpan = document.createElement('span');
|
const emojiSpan = document.createElement('span');
|
||||||
emojiSpan.className = 'member-emoji';
|
emojiSpan.className = 'member-emoji';
|
||||||
|
|
||||||
const emojis = await addressToEmoji(processId);
|
const emojis = await addressToEmoji(processId);
|
||||||
emojiSpan.dataset.emojis = emojis;
|
emojiSpan.dataset.emojis = emojis;
|
||||||
|
|
||||||
const transaction = db.transaction("labels", "readonly");
|
// Get the member name, if any, and add it to the display
|
||||||
const store = transaction.objectStore("labels");
|
const process = processes[processId];
|
||||||
const request = store.get(emojis);
|
let memberPublicName;
|
||||||
|
if (process) {
|
||||||
request.onsuccess = () => {
|
const publicMemberData = service.getPublicData(process);
|
||||||
const label = request.result;
|
if (publicMemberData) {
|
||||||
emojiSpan.textContent = label ? `${label.label} (${emojis})` : `Member (${emojis})`;
|
const extractedName = publicMemberData['memberPublicName'];
|
||||||
};
|
if (extractedName !== undefined && extractedName !== null) {
|
||||||
|
memberPublicName = extractedName;
|
||||||
request.onerror = () => {
|
}
|
||||||
emojiSpan.textContent = `Member (${emojis})`;
|
}
|
||||||
};
|
}
|
||||||
|
if (!memberPublicName) {
|
||||||
|
memberPublicName = 'Unnamed Member';
|
||||||
|
}
|
||||||
|
|
||||||
|
emojiSpan.textContent = `${memberPublicName} (${emojis})`
|
||||||
|
|
||||||
memberContainer.appendChild(emojiSpan);
|
memberContainer.appendChild(emojiSpan);
|
||||||
memberItem.appendChild(memberContainer);
|
memberItem.appendChild(memberContainer);
|
||||||
|
|
||||||
|
// Add click handler to load member chat.
|
||||||
memberItem.addEventListener('click', async () => {
|
memberItem.addEventListener('click', async () => {
|
||||||
await this.loadMemberChat(processId);
|
await this.loadMemberChat(processId);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Create and configure the edit label button.
|
||||||
const editLabelButton = document.createElement('button');
|
const editLabelButton = document.createElement('button');
|
||||||
editLabelButton.className = 'edit-label-button';
|
editLabelButton.className = 'edit-label-button';
|
||||||
editLabelButton.textContent = "✏️";
|
editLabelButton.textContent = "✏️";
|
||||||
|
|
||||||
editLabelButton.addEventListener("click", (event) => {
|
editLabelButton.addEventListener("click", (event) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
});
|
});
|
||||||
|
|
||||||
editLabelButton.addEventListener("dblclick", async (event) => {
|
editLabelButton.addEventListener("dblclick", async (event) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
const newLabel = prompt("Set a new name for the member:");
|
const newLabel = prompt("Set a new name for the member:");
|
||||||
if (!newLabel) return;
|
if (!newLabel) return;
|
||||||
|
|
||||||
const editTransaction = db.transaction("labels", "readwrite");
|
const db = await Database.getInstance();
|
||||||
const editStore = editTransaction.objectStore("labels");
|
this.updateLabelForEmoji(emojis, newLabel, db, emojiSpan, processId);
|
||||||
|
|
||||||
const labelObject = { emoji: emojis, label: newLabel };
|
|
||||||
const putRequest = editStore.put(labelObject);
|
|
||||||
|
|
||||||
putRequest.onsuccess = () => {
|
|
||||||
emojiSpan.textContent = `${newLabel} : ${emojis}`;
|
|
||||||
this.reloadMemberChat(processId);
|
|
||||||
};
|
|
||||||
});
|
});
|
||||||
|
|
||||||
memberList.appendChild(memberItem);
|
|
||||||
memberContainer.appendChild(editLabelButton);
|
memberContainer.appendChild(editLabelButton);
|
||||||
|
|
||||||
|
memberList.appendChild(memberItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
groupList.appendChild(memberList);
|
groupList.appendChild(memberList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Helper function to update a label in IndexedDB.
|
||||||
|
private updateLabelForEmoji(
|
||||||
|
emojis: string,
|
||||||
|
newLabel: string,
|
||||||
|
db: IDBDatabase,
|
||||||
|
emojiSpan: HTMLElement,
|
||||||
|
processId: string
|
||||||
|
) {
|
||||||
|
const transaction = db.transaction("labels", "readwrite");
|
||||||
|
const store = transaction.objectStore("labels");
|
||||||
|
const labelObject = { emoji: emojis, label: newLabel };
|
||||||
|
const request = store.put(labelObject);
|
||||||
|
|
||||||
|
request.onsuccess = () => {
|
||||||
|
emojiSpan.textContent = `${newLabel} : ${emojis}`;
|
||||||
|
this.reloadMemberChat(processId);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private async lookForDmProcess(): Promise<string | null> {
|
private async lookForDmProcess(): Promise<string | null> {
|
||||||
const service = await Services.getInstance();
|
const service = await Services.getInstance();
|
||||||
const processes = await service.getMyProcesses();
|
const processes = await service.getMyProcesses();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user