@river-build/sdk
Version:
For more details, visit the following resources:
57 lines • 1.66 kB
JavaScript
import { Observable } from '../../../observable/observable';
export class Threads extends Observable {
constructor(initialValue = {}) {
super(initialValue);
}
update(fn) {
this.setValue(fn(this.value));
}
reset() {
this.setValue({});
}
get(parentId) {
return this.value?.[parentId];
}
add(event) {
const parentId = event.threadParentId;
if (!parentId) {
return;
}
const sorted = [...(this.value[parentId] ?? []), event].sort((a, b) => a.eventNum > b.eventNum ? 1 : -1);
this.update((current) => ({
...current,
[parentId]: sorted,
}));
}
remove(event) {
const parentId = event.threadParentId;
if (!parentId) {
return;
}
const threadEventIndex = this.value[parentId]?.findIndex((e) => e.eventId === event.eventId) ?? -1;
if (threadEventIndex === -1) {
return;
}
this.update((current) => ({
...current,
[parentId]: current[parentId]
.splice(0, threadEventIndex)
.concat(current[parentId].slice(threadEventIndex + 1)),
}));
}
replace(event, eventIndex) {
const parentId = event.threadParentId;
if (!parentId) {
return;
}
this.update((current) => ({
...current,
[parentId]: [
...current[parentId].slice(0, eventIndex),
event,
...current[parentId].slice(eventIndex + 1),
],
}));
}
}
//# sourceMappingURL=threads.js.map