OverviewFilesCommitsIssuesDocsReleasesPeers

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

104 lines · javascript ref:
import { createSlice as o, createAction as t, createSelector as e } from "@reduxjs/toolkit"
import { ROOM_STATE_KEY as s } from "../room.constant"
import { ROOM_LIST_STATE_KEY as r, ROOM_FILTER_MAP_INITIAL as a } from "./room-list.constant"
export const setRoomFilterMap = t("room/set-room-filter-map")
export const setSearchRoomIds = t("room/set-search-room-ids")
export const ROOM_LIST_INITIAL_STATE = {
  allRoomIds: [],
  discoveryIds: [],
  actualRoomIds: [],
  searchRoomIds: [],
  roomFilterMap: a,
  searchText: "",
  inView: { top: -1, bottom: -1 },
  isLoading: !0,
  isRoomFavoriteLoading: !0,
  isError: !1,
  isSearching: !1,
  searchError: "",
  unreadRoomsCount: 0,
  total: -1,
  recentRoomsBufferInterval: 1e3,
  scrollToRoomId: null,
  preloadOverscan: 0,
}
export const roomListSlice = o({
  name: r,
  initialState: ROOM_LIST_INITIAL_STATE,
  reducers: {
    setItemsInView: (o, { payload: t }) => {
      const { top: e, bottom: s } = t
      ;((o.inView.top = e), (o.inView.bottom = s))
    },
    setRoomListIsSearching: (o, { payload: t }) => {
      o.isSearching = t
    },
    searchAllRooms: (o, { payload: t }) => {
      ;((o.searchText = t || ""), (o.isSearching = !!t))
    },
    setRoomListSearchError: (o, { payload: t }) => {
      ;((o.searchError = t), (o.isSearching = !1))
    },
    setUnreadRoomsCount: (o, { payload: t }) => {
      o.unreadRoomsCount = t
    },
    setScrollToRoomId: (o, { payload: t }) => {
      o.scrollToRoomId = o.actualRoomIds.includes(t) ? t : null
    },
    resetScrollToRoomId: (o) => {
      o.scrollToRoomId = null
    },
    setRoomListPreloadOverscan: (o, { payload: t }) => {
      o.preloadOverscan = Math.max(0, Math.floor(t))
    },
  },
})
export const getRoomListState = (o) => o[s][r]
export const getRoomListSearchText = (o) => getRoomListState(o).searchText
export const getRoomListAllIds = (o) => getRoomListState(o).allRoomIds
export const getRoomListDiscoveryIds = (o) => getRoomListState(o).discoveryIds
export const getRoomListActualIds = (o) => getRoomListState(o).actualRoomIds
export const getRoomFilterMap = (o) => getRoomListState(o).roomFilterMap
export const getRoomListHasRooms = (o) => getRoomListActualIds(o).length > 0
export const getRoomListSearchIds = (o) => getRoomListState(o).searchRoomIds
export const getRoomListSearchActive = (o) => !!getRoomListState(o).searchText
export const getRoomListIsSearching = (o) => getRoomListState(o).isSearching
export const getRoomListSearchIsEmpty = (o) =>
  !!getRoomListState(o).searchText && 0 === getRoomListActualIds(o).length
export const getRoomListInView = (o) => getRoomListState(o).inView
export const getRoomListIsLoading = (o) => getRoomListState(o).isLoading
export const getRoomFavoriteListIsLoading = (o) => getRoomListState(o).isRoomFavoriteLoading
export const getRoomListIsError = (o) => getRoomListState(o).isError
export const getRoomListPreloadOverscan = (o) => getRoomListState(o).preloadOverscan
export const getRoomListInViewIds = e(getRoomListInView, getRoomListActualIds, (o, t) => {
  const { top: e, bottom: s } = o
  return e < 0 || s < 0 ? [] : t.slice(e, s + 1)
})
export const getRoomListInViewOverscanIds = e(
  getRoomListActualIds,
  getRoomListInView,
  getRoomListPreloadOverscan,
  (o, t, e) => {
    const { top: s, bottom: r } = t
    return s < 0 || r < 0 || e <= 0
      ? []
      : [...o.slice(Math.max(0, s - e), s), ...o.slice(r + 1, r + 1 + e)]
  },
)
export const getRoomListSearchError = (o) => getRoomListState(o).searchError
export const getRoomListUnreadRoomsCount = (o) => getRoomListState(o).unreadRoomsCount
export const getRecentRoomsBufferInterval = (o) => getRoomListState(o).recentRoomsBufferInterval
export const getScrollToRoomId = (o) => getRoomListState(o).scrollToRoomId
export const {
  setItemsInView: setItemsInView,
  setRoomListIsSearching: setRoomListIsSearching,
  searchAllRooms: searchAllRooms,
  setRoomListSearchError: setRoomListSearchError,
  setUnreadRoomsCount: setUnreadRoomsCount,
  setScrollToRoomId: setScrollToRoomId,
  resetScrollToRoomId: resetScrollToRoomId,
  setRoomListPreloadOverscan: setRoomListPreloadOverscan,
} = roomListSlice.actions
export const roomListInViewIdsChangeEvt = t("room-list/in-view-ids-change-evt")
export const roomListReducer = roomListSlice.reducer