OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / chat / message / message.saga.js

63 lines · javascript ref:
import { all as e, select as r } from "redux-saga/effects"
import { getCoreBackend as t } from "../../../backend"
import { apiCall as m } from "../../../api/core"
import { getMyMemberId as o, getMemberBlockedByIdMap as s } from "../../identity"
import {
  parseMemberResponse as i,
  disableMemberCapabilities as a,
  getMemberById as d,
  canModerate as c,
} from "../../member"
import { getChatMessageFilters as n } from "../init"
import { getReportedFromReactions as p } from "../reaction/chat-reaction.model"
import { displayReplaceMention as l } from "./message-parser"
import { getIsMessageHidden as b, parseMessage as f } from "./message"
export function* chatGetMessageRender({
  roomId: r,
  message: o,
  memberData: s,
  blockedMembers: d,
  disabledCapabilities: c,
  memberLimit: n = 10,
}) {
  let p = i(s)
  c && (p = a(p))
  const b = !!d.find(({ memberId: e }) => e === o.memberId)
  let f = o.chat?.text,
    g = o.chat?.display
  if (!b && f && o.chat.mentions?.length) {
    const s = o.chat.mentions.slice(0, n),
      i = t()
    ;(yield e(s.map((e) => m(i.getMember, r, e.memberId, { includeAvatar: !1 })))).forEach((e) => {
      const { memberId: r, displayName: t } = e,
        m = l({ text: f, display: g }, r, t)
      ;((f = m.text), (g = m.display))
    })
  }
  return { member: p, isBlocked: b, messageText: f, messageDisplay: g }
}
export function* chatMessagesTransform({ roomId: t, ignoreBlocked: m, coreEvents: i }) {
  const [a, l, g, h] = yield e([r(s), r(o), r(d(t)), r(n)]),
    y = [],
    I = []
  let u = -1
  for (const e of i) {
    const r = !!a[e.memberId] && !m,
      t = l ? l === e.memberId : void 0
    t && e.read && e.seq > u && (u = e.seq)
    const o = g[e.memberId],
      s = c(o?.capabilities),
      { reported: i, reportedByMe: d } = s ? { reported: !1, reportedByMe: !1 } : p(e.reactions),
      { message: n, files: x } = f(e, {
        memberById: g,
        blocked: r,
        local: t,
        hidden: b(e, h),
        reported: i,
        reportedByMe: d,
      })
    ;(y.push(n), I.push(...x))
  }
  return [y, I, u]
}