OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / room / room.selector.js

111 lines · javascript ref:
import { createSelector as o } from "@reduxjs/toolkit"
import { isFeatureSupported as t, FEATURES as e } from "@holepunchto/keet-core/features"
import {
  canModerate as m,
  getCanMyMemberManageRoles as r,
  getMyMemberCapabilities as s,
} from "../member"
import {
  ROOM_STATE_KEY as n,
  ROOM_TYPE as I,
  ROOM_PREFERENCES as g,
  defaultRoomPreferences as i,
  DELIVERY_STATUS as a,
} from "./room.constant"
import { getRoomMainId as R } from "./main/room-main.reducer"
import { getRoomPairingCount as c } from "./joint/room-joint.reducer"
import { getRoomListAllIds as d } from "./list/room-list.reducer"
import { getChatMessageById as p, getChatMyMessageNotSeenByPeer as y } from "../chat/list-view"
import { getChatLastMessage as l } from "../chat/last-message"
import { getMemberBlocked as x } from "../identity"
export const getRoomState = (o) => o[n]
export const getRoomItemById = (o) => (t) => getRoomState(t).roomById[o]
export const getRoomItemCount = (o) => Object.keys(getRoomState(o).roomById).length
export const getRoomTitle = (o) => (t) => getRoomItemById(o)(t)?.title || ""
export const getRoomDescription = (o) => (t) => getRoomItemById(o)(t)?.description || ""
export const getRoomDmMemberId = (o) => (t) => getRoomItemById(o)(t)?.dmMemberId || ""
export const getRoomDmMemberBlocked = (o) => (t) => {
  const e = getRoomDmMemberId(o)(t)
  return !!e && x(t, e)
}
export const getRoomAvatarUrl = (o) => (t) => getRoomItemById(o)(t)?.avatarUrl || ""
export const getRoomShowWarning = (o) => (t) => getRoomItemById(o)(t)?.showWarning || !1
export const getRoomAvatarUrlMedium = (o) => (t) => {
  const e = getRoomState(t).roomById[o]
  return (e && (e.avatarUrlMedium || e.avatarUrl)) || ""
}
export const getRoomAvatarColor = (o) => (t) => getRoomItemById(o)(t)?.avatarColor || ""
export const getRoomType = (o) => (t) => getRoomItemById(o)(t)?.roomType || ""
export const getRoomVersion = (o) => (t) => getRoomItemById(o)(t)?.version || 0
export const getRoomIsLatestVersion = (o) => (t) => !!getRoomItemById(o)(t)?.latest
export const getRoomIsReadOnly = (o) => (t) => getRoomItemById(o)(t)?.isReadOnly ?? !0
export const getIsRoomFavoriteByRoomId = (o) => (t) => !!getRoomState(t).favoriteByRoomId[o]
export const getRoomIsAppendingDisabled = (o) => (t) =>
  getRoomItemById(o)(t)?.isAppendingDisabled ?? !1
export const getRoomIsExperimental = (o) => (t) => !!getRoomItemById(o)(t)?.experimental
export const getRoomIsVerified = (o) => (t) => !!getRoomItemById(o)(t)?.isVerified
export const getRoomIsDm = (o) => (t) => getRoomType(o)(t) === I.DM
export const getRoomIsBroadcast = (o) => (t) => getRoomType(o)(t) === I.BROADCAST
export const getRoomCanCall = (o) => (t) => !!getRoomItemById(o)(t)?.canCall
export const getRoomIsMembershipEventsDisabled = (o) => (t) =>
  !!getRoomItemById(o)(t)?.isMembershipEventsDisabled
export const getRoomIsAttachmentsDisabled = (o) => (t) =>
  !!getRoomItemById(o)(t)?.isAttachmentsDisabled
export const getRoomIsLinksDisabled = (o) => (t) => !!getRoomItemById(o)(t)?.isLinksDisabled
export const getRoomIsCallEnabled = (t) =>
  o([getRoomItemById(t), s(t)], (o, t) => o?.canCall || m(t))
export const getRoomIsCompatible = (o) => (t) => !1 !== getRoomItemById(o)(t)?.isCompatible
export const getRoomLeavingDirty = (o) => (t) => 0 === getRoomItemById(o)(t)?.version
export const getRoomIsFirstRoom = (o, t) => {
  const e = d(o),
    m = c(o)
  return !(!t || e.length > 1 || m > 1 || (0 !== e.length && e[0] !== t))
}
export const getRoomMemberCount = (o) => (t) => getRoomItemById(o)(t)?.memberCount ?? 0
export const getRoomIsDebugging = (o) => (t) => getRoomItemById(o)(t)?.isDebugging ?? !1
export const getRoomAllNotifications = (o) => getRoomState(o).notificationsById
export const getRoomNotificationById = (o) => (t) => {
  const e = getRoomState(t).notificationsById?.[o]
  return e?.[g.NOTIFICATIONS] ?? i[g.NOTIFICATIONS]
}
export const getRoomIsUnread = (o) => (t) => {
  const e = getRoomItemById(o)
  return e?.(t)?.isUnread ?? !1
}
export const getIsRoomDm = (t) => o(getRoomItemById(t), (o) => o?.roomType === I.DM)
export const canCurrentMemberManageRoles = (o) => {
  const m = R(o),
    s = getRoomItemById(m)(o)
  return t(s?.version, e.PERMISSION_DOWNGRADE) && r(m)(o)
}
export const getIsRoomRepairing = (o) => (t) => getRoomItemById(o)(t)?.isRepairing
export const getIsRoomMovingIndexer = (o) => (t) => getRoomItemById(o)(t)?.isMovingIndexer
export const getRoomDiscoveryKeyById = (o) => (t) => getRoomState(t).roomDiscoveryKeyById[o]
export const getRoomStats = (o) => getRoomState(o).stats
export const getIsChatMessageSent = (o) => (t) => {
  const e = R(t),
    m = getRoomItemById(e)(t),
    r = p(t, o)
  return !(!m || !r) && (r.coreId.deviceId !== m.deviceId || r.coreId.seq < m.sentLength)
}
export const getLastMessageDeliveryStatus = (o) => {
  const t = getRoomIsDm(o)
  return (e) => {
    const { peerNotSeen: m, message: r } = l(e, o)
    if (!r?.local || r.event) return a.NONE
    const s = t(e)
    if (!m && s) return a.READ
    const n = getRoomItemById(o)(e)
    return n && (r.coreId.deviceId !== n.deviceId || r.coreId.seq < n.sentLength) ? a.SENT : a.NONE
  }
}
export const getChatMessageDeliveryStatus = (o) => {
  const t = y(o),
    e = getIsChatMessageSent(o)
  return (m) => {
    const r = p(m, o)?.local
    return r ? (t(m) ? (e(m) ? a.SENT : a.NONE) : a.READ) : a.NONE
  }
}
export const getRoomFileTotalSize = (o) => (t) => getRoomItemById(o)(t)?.fileTotalSize