import {
DEFAULT_ROOM_TITLE as e,
ROOM_TYPE as o,
ROOM_DESCRIPTION_MAX_LENGTH as s,
RECENT_ROOM_UPDATE as t,
} from "./room.constant"
import { calcAvatarColorById as i } from "../lib/color"
import { getAvatarUrl as r, getAvatarUrlMedium as a } from "../identity"
export const isDmPeerHasLeft = ({ dmMemberId: e, memberCount: s, roomType: t }) =>
t === o.DM && !!e && 1 === s
export const parseRecentRoomsAllResponse = (e) => ({
total: e.rooms?.length ?? 0,
rooms: e.rooms.map((e) => ({ roomId: e.roomId ?? "", timestamp: e.timestamp ?? 0 })),
})
export const parseRecentRoomsChangeResponse = (e) => ({
type: t.CHANGED,
timestamp: e.timestamp ?? 0,
roomId: e.roomId || "",
})
export const parseRecentRoomsAddRemoveResponse = (e) => {
switch (e.type) {
case t.ADDED:
case t.REMOVED:
return { type: e.type, timestamp: e.timestamp ?? 0, roomId: e.roomId || "" }
default:
return null
}
}
export const parseRoomConfigIdsResponse = (e) => ({
roomId: e.roomId ?? "",
dmMemberId: e.dmMemberId ?? "",
discoveryId: e.discoveryId ?? "",
isReadOnly: !e.self?.deviceId,
})
export const parseRoomConfigResponse = (s, t) => {
const n = s.roomType === o.DM ? "" : e,
m = "string" != typeof s.canCall || "true" === s.canCall
return {
title: s.title ?? n,
description: s.description ?? "",
roomType: s.roomType ?? o.ROOM,
avatarUrl: r(s.avatar),
avatarUrlMedium: a(s.avatar),
avatarColor: i(t),
canCall: m,
isMembershipEventsDisabled: s.isMembershipEventsDisabled || !1,
}
}
export const parseRoomVersionResponse = (e, o) => (s) => ({
roomId: e,
isCompatible: o >= s?.version,
version: s?.version,
experimental: s?.experimental,
latest: o === s?.version,
})
export const parseRoomVersionFromInfoResponse = (e, o) => (s) => ({
roomId: e,
isCompatible: o >= s.digest.abi.version,
version: s.digest.abi.version ?? 0,
experimental: !!s.digest.settings.isExperimental,
})
export const parseRoomInfoResponse = (e, o) => {
const {
title: s,
description: t,
roomType: i,
avatarUrl: r,
avatarUrlMedium: a,
avatarColor: n,
canCall: m,
isMembershipEventsDisabled: d,
} = parseRoomConfigResponse(e.config, e.roomId),
{ dmMemberId: p, discoveryId: l, isReadOnly: c } = parseRoomConfigIdsResponse(e)
return {
roomId: e.roomId ?? "",
dmMemberId: p,
discoveryId: l,
isReadOnly: c,
title: s,
description: t,
roomType: i,
avatarUrl: r,
avatarUrlMedium: a,
avatarColor: n,
canCall: m,
isMembershipEventsDisabled: d,
isAttachmentsDisabled: !!e.digest.settings.isAttachmentsDisabled,
isLinksDisabled: !!e.digest.settings.isLinksDisabled,
isCompatible: o >= e.digest.abi.version,
version: e.digest.abi.version ?? 0,
experimental: !!e.digest.settings.isExperimental,
isAppendingDisabled: !!e.digest.settings.isAppendingDisabled,
memberCount: e.stats.members.active,
sentLength: e.self.sentLength,
deviceId: e.self.deviceId,
fileTotalSize: e.fileStats?.total,
activeCallId: e.activeCall?.callId || "",
isVerified: e.isVerified,
isUnread: e.preferences?.status?.isUnread ?? !1,
}
}
export const createRoomInitialConfig = (
e,
{ description: s = "", roomType: t = o.ROOM, canCall: i = "true" } = {},
) => ({ title: e, description: s, roomType: t, canCall: i })
export const getRoomConfigChanges = (e, o) =>
e
? Object.keys(o).reduce(
(s, t) => (e[t] !== o[t] && "avatar" !== t && void 0 !== o[t] && (s[t] = o[t]), s),
{},
)
: o
export const sanitizeRoomDescription = (e) => (e ? e.trim().slice(0, s) : "")
export const sanitizeRoomOpts = (e) => ({
...e,
description: sanitizeRoomDescription(e.description),
})
export const getRecentRoomItemChanged = (e, o) =>
e ? (e.timestamp !== o.timestamp || e.roomId !== o.roomId ? o : null) : o