拆分part
This commit is contained in:
77
client/public/participants.js
Normal file
77
client/public/participants.js
Normal file
@@ -0,0 +1,77 @@
|
||||
export const DEFAULT_PARTICIPANT_NAME = '参与者';
|
||||
export const DEFAULT_PARTICIPANT_AVATAR = '/images/p2.png';
|
||||
|
||||
const DEFAULT_MEDIA_STATE = Object.freeze({
|
||||
audio: false,
|
||||
video: true,
|
||||
isSpeaking: false
|
||||
});
|
||||
|
||||
function createParticipantRecord(current = {}, patch = {}) {
|
||||
return {
|
||||
id: '',
|
||||
name: DEFAULT_PARTICIPANT_NAME,
|
||||
avatar: DEFAULT_PARTICIPANT_AVATAR,
|
||||
mediaState: { ...DEFAULT_MEDIA_STATE },
|
||||
status: 'online',
|
||||
...current,
|
||||
...patch,
|
||||
mediaState: {
|
||||
...DEFAULT_MEDIA_STATE,
|
||||
...(current.mediaState || {}),
|
||||
...(patch.mediaState || {})
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export function upsertParticipant(participants, participantId, patch = {}) {
|
||||
if (!participantId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
participants[participantId] = createParticipantRecord(participants[participantId], patch);
|
||||
return participants[participantId];
|
||||
}
|
||||
|
||||
export function removeParticipant(participants, participantId) {
|
||||
if (!participantId || !participants[participantId]) {
|
||||
return false;
|
||||
}
|
||||
|
||||
delete participants[participantId];
|
||||
return true;
|
||||
}
|
||||
|
||||
export function omitParticipant(participants, excludedParticipantId) {
|
||||
const filtered = {};
|
||||
|
||||
for (const [participantId, participant] of Object.entries(participants || {})) {
|
||||
if (participantId !== excludedParticipantId) {
|
||||
filtered[participantId] = participant;
|
||||
}
|
||||
}
|
||||
|
||||
return filtered;
|
||||
}
|
||||
|
||||
export function buildParticipantsSyncData(localUser, participants) {
|
||||
const memberList = {
|
||||
host: {
|
||||
id: localUser.id,
|
||||
name: localUser.name,
|
||||
avatar: localUser.avatar,
|
||||
mediaState: { ...localUser.mediaState },
|
||||
status: 'online',
|
||||
role: 'host'
|
||||
}
|
||||
};
|
||||
|
||||
for (const [participantId, participant] of Object.entries(participants || {})) {
|
||||
memberList[participantId] = {
|
||||
...createParticipantRecord(participant),
|
||||
role: 'participant'
|
||||
};
|
||||
}
|
||||
|
||||
return memberList;
|
||||
}
|
||||
Reference in New Issue
Block a user