@atlaskit/editor-plugin-collab-edit
Version:
Collab Edit plugin for @atlaskit/editor-core
57 lines • 1.48 kB
JavaScript
export class Participants {
constructor(participants = new Map()) {
this.participants = participants;
}
add(data) {
const newSet = new Map(this.participants);
data.forEach(participant => {
newSet.set(participant.sessionId, participant);
});
return new Participants(newSet);
}
remove(sessionIds) {
const newSet = new Map(this.participants);
sessionIds.forEach(sessionId => {
newSet.delete(sessionId);
});
return new Participants(newSet);
}
update(sessionId, lastActive) {
const newSet = new Map(this.participants);
const data = newSet.get(sessionId);
if (!data) {
return this;
}
newSet.set(sessionId, {
...data,
lastActive
});
return new Participants(newSet);
}
updateCursorPos(sessionId, cursorPos) {
const newSet = new Map(this.participants);
const data = newSet.get(sessionId);
if (!data) {
return this;
}
newSet.set(sessionId, {
...data,
cursorPos
});
return new Participants(newSet);
}
toArray() {
return Array.from(this.participants.values());
}
get(sessionId) {
return this.participants.get(sessionId);
}
size() {
return this.participants.size;
}
eq(other) {
const left = this.toArray().map(p => p.sessionId).sort((a, b) => a > b ? -1 : 1).join('');
const right = other.toArray().map(p => p.sessionId).sort((a, b) => a > b ? -1 : 1).join('');
return left === right;
}
}