UNPKG

@towns-protocol/sdk

Version:

For more details, visit the following resources:

123 lines 5.82 kB
import { Observable } from '../observable/observable'; import { combine } from '../observable/combine'; import { StreamStatus } from './streams/streamStatus'; import { TimelinesView } from './streams/timelines'; import { makeUserInboxStreamId, makeUserMetadataStreamId, makeUserSettingsStreamId, makeUserStreamId, } from '../id'; import { UserSettingsStreamsView } from './streams/userSettingsStreams'; import { unreadMarkersTransform } from './streams/unreadMarkersTransform'; import { spaceMentionsTransform } from './streams/spaceMentionsTransform'; import { SpaceStreamsView } from './streams/spaceStreams'; import { UserStreamsView } from './streams/userStreamsView'; import { UserMetadataStreamsView } from './streams/userMetadataStreams'; import { UserInboxStreamsView } from './streams/userInboxStreams'; import { ChannelStreamsView } from './streams/channelStreams'; import { DmStreamsView } from './streams/dmStreams'; import { GdmStreamsView } from './streams/gdmStreams'; import { membershipsTransform } from './transforms/membershipsTransform'; import { spaceIdsTransform } from './transforms/spaceIdsTransform'; import { dmsAndGdmsTransform } from './transforms/dmsAndGdmsTransform'; import { StreamMemberIdsView } from './streams/streamMemberIds'; import { dmsAndGdmsUnreadIdsTransform } from './transforms/dmsAndGdmsUnreadIdsTransform'; import { blockedUserIdsTransform } from './transforms/blockedUserIdsTransform'; import { NotificationSettings } from './streams/notificationSettings'; class Consts { static obj = {}; static arr = []; } // a view of all the streams export class StreamsView { notificationSettings; streamStatus; streamMemberIds; spaceStreams; channelStreams; dmStreams; gdmStreams; userStreams; userInboxStreams; userMetadataStreams; userSettingsStreams; timelinesView; my; constructor(userId, delegate) { const myUserId = new Observable(userId); const userStreamId = userId !== '' ? makeUserStreamId(userId) : ''; const userInboxStreamId = userId !== '' ? makeUserInboxStreamId(userId) : ''; const userMetadataStreamId = userId !== '' ? makeUserMetadataStreamId(userId) : ''; const userSettingsStreamId = userId !== '' ? makeUserSettingsStreamId(userId) : ''; this.notificationSettings = new NotificationSettings(); this.streamStatus = new StreamStatus(); this.streamMemberIds = new StreamMemberIdsView(); this.userSettingsStreams = new UserSettingsStreamsView(); this.spaceStreams = new SpaceStreamsView(); this.channelStreams = new ChannelStreamsView(); this.dmStreams = new DmStreamsView(); this.gdmStreams = new GdmStreamsView(); this.userStreams = new UserStreamsView(); this.userMetadataStreams = new UserMetadataStreamsView(); this.userInboxStreams = new UserInboxStreamsView(); this.timelinesView = new TimelinesView(userId, delegate); // throttle the timelines for subsequent observers const throttledTimelinesView = this.timelinesView.throttle(15); // map my streams const myUserStream = this.userStreams.map((x) => x[userStreamId]); const myUserInboxStream = this.userInboxStreams.map((x) => x[userInboxStreamId]); const myUserMetadataStream = this.userMetadataStreams.map((x) => x[userMetadataStreamId]); const myUserSettingsStream = this.userSettingsStreams.map((x) => x[userSettingsStreamId]); // grab the remote fully read markers const myRemoteFullyReadMarkers = myUserSettingsStream .throttle(10) .map((x) => x?.fullyReadMarkers ?? Consts.obj); const myRemoteUserBlocks = myUserSettingsStream .throttle(10) .map((x) => x?.userBlocks ?? Consts.obj); // combine the userId, my remote fully read markers, and the timelines view // to get the unread markers const unreadMarkers = combine({ userId: myUserId, myRemoteFullyReadMarkers: myRemoteFullyReadMarkers.throttle(10), timelinesView: throttledTimelinesView, }) .throttle(250) .map(unreadMarkersTransform); // grab the space mentions const spaceMentions = combine({ timelinesView: throttledTimelinesView, fullyReadMarkers: unreadMarkers, }) .throttle(250) .map(spaceMentionsTransform); const throttledMyUserStream = myUserStream.throttle(10); const myMemberships = throttledMyUserStream.map(membershipsTransform); const mySpaceIds = myMemberships.map(spaceIdsTransform); const myDmsAndGdms = combine({ userId: myUserId, memberships: myMemberships, streamMemberIds: this.streamMemberIds, dmStreams: this.dmStreams, gdmStreams: this.gdmStreams, }) .throttle(250) .map(dmsAndGdmsTransform); const myDmsAndGdmsUnreadIds = combine({ myDmsAndGdms, unreadMarkers }) .throttle(250) .map(dmsAndGdmsUnreadIdsTransform); const myBlockedUserIds = myRemoteUserBlocks.map(blockedUserIdsTransform); /// this.my = { userId: myUserId, userStream: myUserStream, userInboxStream: myUserInboxStream, userMetadataStream: myUserMetadataStream, userSettingsStream: myUserSettingsStream, unreadMarkers, spaceMentions, memberships: myMemberships, spaceIds: mySpaceIds, dmsAndGdms: myDmsAndGdms, dmsAndGdmsUnreadIds: myDmsAndGdmsUnreadIds, blockedUserIds: myBlockedUserIds, }; } } //# sourceMappingURL=streamsView.js.map