OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / member-list / member-list.reducer.js

142 lines · javascript ref:
import { createAction as e, createSlice as t, createSelector as s } from "@reduxjs/toolkit"
import { getMyMember as r } from "../member/member.reducer"
export const MEMBER_LIST_STATE_KEY = "member-list"
const i = {
  admins: [],
  moderators: [],
  peers: [],
  lastPeer: null,
  searchPeers: [],
  memberById: {},
  isAdminsModeratorsLoading: !1,
  subscribeToPeers: !1,
  subscribeToAdminsAndModerators: !1,
  isLoading: !0,
  isError: !1,
  isSearching: !1,
  searchText: "",
  peersLimit: null,
  inView: { top: 0, bottom: 0 },
  isFetching: !1,
}
export const memberListSlice = t({
  name: "member-list",
  initialState: i,
  reducers: {
    setAdmins: (e, { payload: t }) => {
      ;((e.admins = t), (e.isAdminsModeratorsLoading = !1), e.isSearching && (e.isSearching = !1))
    },
    setModerators: (e, { payload: t }) => {
      ;((e.moderators = t),
        (e.isAdminsModeratorsLoading = !1),
        e.isSearching && (e.isSearching = !1))
    },
    setAdminsModeratorsIsLoading: (e, { payload: t }) => {
      e.isAdminsModeratorsLoading = t
    },
    setPeers: (e, { payload: t }) => {
      ;((e.peers = t), (e.isLoading = !1), e.isSearching && (e.isSearching = !1))
    },
    searchMembers: (e, { payload: t }) => {
      ;("" === t && (e.searchPeers = []), (e.searchText = t), (e.isSearching = !!t))
    },
    setSearchPeers: (e, { payload: t }) => {
      ;(Array.isArray(t) ? (e.searchPeers = t) : (e.searchPeers = []), (e.isSearching = !1))
    },
    initializeMemberListSubscriptionCmd: (e, { payload: t }) => {
      const {
        limit: s,
        subscribeToAdminsAndModerators: r = !0,
        subscribeToPeers: o = !0,
        searchText: m,
      } = t
      return {
        ...i,
        peersLimit: s,
        subscribeToPeers: o,
        subscribeToAdminsAndModerators: r,
        searchText: m,
        isLoading: !m,
      }
    },
    setItemsInView: (e, { payload: t }) => {
      const { top: s, bottom: r } = t
      ;((e.inView.top = s), (e.inView.bottom = r))
    },
    setMemberById: (e, { payload: t }) => {
      const { memberId: s = null, memberData: r, data: i } = t
      s
        ? (e.memberById[s] = { ...e.memberById[s], ...r })
        : (e.memberById = { ...e.memberById, ...i })
    },
    resetMemberList: () => ({ ...i }),
    onScrollEnd: (e) => {
      const { peers: t } = e,
        [s] = t.slice(-1)
      e.lastPeer = s
    },
  },
})
export const getMemberListState = (e) => e["member-list"]
export const getMemberListSearch = (e) => getMemberListState(e).searchText
export const getMemberListAdmins = (e) => getMemberListState(e).admins
export const getMemberListModerators = (e) => getMemberListState(e).moderators
export const getMemberListPeers = (e) => getMemberListState(e).peers
export const getMemberListLastPeer = (e) => getMemberListState(e).lastPeer
export const getMembersListSearchPeers = (e) => getMemberListState(e).searchPeers
export const getIsPeerListLoading = (e) => getMemberListState(e).isLoading
export const getIsMemberListSearching = (e) => getMemberListState(e).isSearching
export const getIsModeratorsAndAdminsListLoading = (e) =>
  getMemberListState(e).isAdminsModeratorsLoading
export const getMemberListIsFetching = (e) => getMemberListState(e).isFetching
export const getMemberListIsError = (e) => getMemberListState(e).isError
export const getMemberById = (e) => getMemberListState(e).memberById
export const getMemberItemById = (e) => (t) => getMemberById(t)[e]
export const makeGetIsMeLastAdmin = ({ roomId: e, memberId: t }) =>
  s([r(e), getMemberListAdmins], (e, s) => 1 === s.length && s[0] === t && e?.memberId === t)
export const getMemberListAdminsAndModerators = s(
  [getMemberListAdmins, getMemberListModerators],
  (e, t) => [...e, ...t],
)
export const getMemberListData = s(
  [
    getMemberListAdmins,
    getMemberListModerators,
    getMemberListPeers,
    getMemberListSearch,
    getMembersListSearchPeers,
  ],
  (e, t, s, r, i) => {
    if (r) return i
    const o = [...e, ...t],
      m = s.filter((e) => !o.includes(e))
    return o.concat(m)
  },
)
export const getMembersData = ({ length: e, compact: t }) =>
  s([getMemberListData], (s) => (t ? s.slice(0, e) : s))
export const getMemberListPeersLimit = (e) => getMemberListState(e).peersLimit
export const getMemberListSubscribeToMemberTypes = s([getMemberListState], (e) => ({
  subscribeToPeers: e.subscribeToPeers,
  subscribeToAdminsAndModerators: e.subscribeToAdminsAndModerators,
}))
export const getMemberListIsLoading = s(
  [getMemberListSubscribeToMemberTypes, getIsPeerListLoading, getIsModeratorsAndAdminsListLoading],
  ({ subscribeToPeers: e, subscribeToAdminsAndModerators: t }, s, r) =>
    t && e ? r || s : t ? r : !!e && s,
)
export const {
  setAdmins: setAdmins,
  setModerators: setModerators,
  setAdminsModeratorsIsLoading: setAdminsModeratorsIsLoading,
  setPeers: setPeers,
  searchMembers: searchMembers,
  resetMemberList: resetMemberList,
  setSearchPeers: setSearchPeers,
  setItemsInView: setItemsInView,
  setMemberById: setMemberById,
  initializeMemberListSubscriptionCmd: initializeMemberListSubscriptionCmd,
} = memberListSlice.actions
export const memberListInViewIdsChangeEvt = e("member-list/in-view-ids-change-evt")
export const onScrollEnd = e("member-list/onScrollEnd")