import {
LOADING_STATUS as e,
appendSortedItems as t,
prependSortedItems as o,
} from "../../lib/clock-list"
import { parseMemberResponse as r } from "../member.model"
import { MEMBER_REPORTED_DEFAULT_LIMIT as s } from "./members-reported.constant"
import {
updateLatestMembersReportedOrder as a,
appendOlderMembersReportedOrder as n,
upsertMembersReportedById as m,
updateMembersReportedLoadingStatus as c,
setMembersReportedInViewRange as d,
resetMembersReported as p,
} from "./members-reported.action"
const l = (e) => {
const t = r(e)
return { id: t?.memberId, clock: t?.reportedClock }
}
export const MEMBER_REPORTED_INITIAL_STATE = {
sortedItems: [],
byId: {},
minClock: null,
inView: { top: -1, bottom: -1 },
loadingStatus: e.INITIAL,
}
export const membersReportedReducer = (e, i) => {
switch (i.type) {
case c.type:
return { ...e, loadingStatus: i.payload }
case a.type: {
const t = i.payload.map(l)
return { ...e, ...o(t, e) }
}
case n.type: {
const o = i.payload.map(l),
r = o.length < s
return { ...e, ...t(o, { sortedItems: e.sortedItems, allLoaded: r }) }
}
case m.type: {
const t = {}
for (const e of i.payload) {
const { id: o } = l(e)
t[o] = r(e)
}
return { ...e, byId: { ...e.byId, ...t } }
}
case d.type:
return { ...e, inView: i.payload }
case p.type:
return MEMBER_REPORTED_INITIAL_STATE
default:
return e
}
}