@towns-protocol/sdk
Version:
For more details, visit the following resources:
52 lines • 1.91 kB
JavaScript
import { ObservableRecord } from '../../observable/observableRecord';
// entries in the map should never be undefined, but Records don't differentiate between
// undefined and missing keys, so we need to use a Record with undefined values
export class SpaceStreamsView extends ObservableRecord {
constructor() {
super({
makeDefault: (spaceStreamId) => ({
streamId: spaceStreamId,
channelsMetadata: {},
}),
});
}
delete(spaceStreamId, channelId) {
return this.set((prev) => {
if (prev[spaceStreamId]?.channelsMetadata[channelId] === undefined) {
return prev;
}
const channelsMetadata = { ...prev[spaceStreamId].channelsMetadata };
delete channelsMetadata[channelId];
return {
...prev,
[spaceStreamId]: {
...prev[spaceStreamId],
channelsMetadata,
},
};
});
}
updateChannelMetadata(spaceStreamId, channelId, properties) {
this.set((prev) => {
const prevSpace = prev[spaceStreamId] ?? this.makeDefault(spaceStreamId);
const prevChannel = prevSpace.channelsMetadata[channelId] ?? {
isDefault: false,
updatedAtEventNum: BigInt(0),
isAutojoin: false,
hideUserJoinLeaveEvents: false,
};
const retVal = {
...prev,
[spaceStreamId]: {
...prevSpace,
channelsMetadata: {
...prevSpace.channelsMetadata,
[channelId]: { ...prevChannel, ...properties },
},
},
};
return retVal;
});
}
}
//# sourceMappingURL=spaceStreams.js.map