OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / member / reported / members-reported.reducer.js

56 lines · javascript ref:
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
  }
}