OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / room / list / room-list-item-update-saga.js

51 lines · javascript ref:
import { select as e, put as o, call as m } from "redux-saga/effects"
import { hasObjChanges as r } from "../../lib/object"
import {
  setMemberDisabledCapabilities as s,
  setMemberProfile as t,
  parseMemberResponse as i,
  getMemberItemById as a,
} from "../../member"
import { setNotifications as l, setRoomInfo as d } from "../room.action"
import { ROOM_TYPE as p } from "../room.constant"
import { parseRoomInfoResponse as f } from "../room.model"
import { getRoomItemById as c, getRoomNotificationById as y } from "../room.selector"
import { chatSetLastMessage as n } from "../../chat/last-message"
export function* roomListItemUpdateSaga({
  roomId: g,
  data: M,
  appVersion: b,
  trackLastMsgUpdates: I = !0,
  trackNotificationsUpdates: u = !0,
}) {
  const T = yield e(c(g)),
    h = f(M, b)
  ;(T && !r(T, h)) || (yield o(d(h)))
  const D = yield e(c(g))
  if (
    (D.roomType === p.DM && T && T.roomType !== p.DM && (yield o(s({ roomId: g }))),
    M.self.member &&
      ((yield e(a(g, M.self.member.memberId))) ||
        (yield o(t({ roomId: g, profile: i(M.self.member) })))),
    M.lastMessage?.chat && I)
  ) {
    yield m(n, {
      roomId: g,
      ignoreBlocked: D.roomType === p.BROADCAST,
      hasPeerSeen: D.roomType === p.DM,
      lastMessage: M.lastMessage.chat,
    })
    const { displayName: r, id: s } = M.lastMessage.member,
      l = yield e(a(g, s))
    if (l) l.displayName !== r && (yield o(t({ roomId: g, profile: { ...l, displayName: r } })))
    else {
      const e = i(M.lastMessage.member)
      yield o(t({ roomId: g, profile: e }))
    }
  }
  if (u) {
    const m = !M.preferences?.status?.isFullyMuted
    m !== (yield e(y(g))) && (yield o(l({ [g]: { notifications: m } })))
  }
}