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