import { EMPTY_ARRAY as e } from "../../lib/array"
import { isMessageChanged as s } from "../message"
import {
setIsPinnedLimitMessageShown as n,
setPinnedMessages as i,
setPinnedTabIsOpen as d,
updateChatPinnedMessage as a,
updateChatPinnedMessageBlocked as t,
} from "./pin-message.action"
export const PIN_MESSAGE_INITIAL_STATE = {
pinnedMessages: e,
isPinnedTabOpen: !1,
isPinnedLimitShown: !1,
isMessagePinnedMap: {},
}
export const pinMessageReducer = (e = PIN_MESSAGE_INITIAL_STATE, p) => {
switch (p.type) {
case i.type: {
const { payload: n } = p,
{ pinnedMessages: i } = e,
d = [],
a = {}
let t = n.length !== i.length
for (let e = n.length - 1; e >= 0; e -= 1) {
const p = n[e],
g = i.find((e) => e?.id === p?.id)
p && !p.deleted
? (!g || s(g, p) ? ((t = !0), d.push(p)) : d.push(g || p), (a[p.id] = !0))
: (t = !0)
}
return t ? { ...e, pinnedMessages: d, isMessagePinnedMap: a } : e
}
case a.type: {
const { payload: n } = p,
{
nextMessages: i,
isChanged: d,
isDeleted: a,
} = e.pinnedMessages.reduce(
(e, i) => (
i.id === n.id
? n.deleted
? (e.isDeleted = !0)
: s(i, n) && (e.nextMessages.push(n), (e.isChanged = !0))
: e.nextMessages.push(i),
e
),
{ nextMessages: [], isChanged: !1, isDeleted: !1 },
)
return d || a
? {
...e,
pinnedMessages: i,
isMessagePinnedMap: a ? { ...e.isMessagePinnedMap, [n.id]: !1 } : e.isMessagePinnedMap,
}
: e
}
case t.type: {
const { blockedByMemberId: s, ignoreBlocked: n } = p.payload,
{ pinnedMessages: i } = e
if (!i.length) return e
const { pinnedMessages: d, isChanged: a } = i.reduce(
(e, i) => {
let d
return (
s[i.memberId] && !n
? ((e.isChanged = !0), (d = { ...i, blocked: !0 }))
: i.blocked
? ((e.isChanged = !0), (d = { ...i, blocked: !1 }))
: (d = i),
e.pinnedMessages.push(d),
e
)
},
{ pinnedMessages: [], isChanged: !1 },
)
return a ? { ...e, pinnedMessages: d } : e
}
case d.type: {
const { payload: s } = p
return s === e.isPinnedTabOpen ? e : { ...e, isPinnedTabOpen: s }
}
case n.type: {
const { payload: s } = p
return s === e.isPinnedLimitShown ? e : { ...e, isPinnedLimitShown: s }
}
default:
return e
}
}