import { createAction as o, createSelector as r } from "@reduxjs/toolkit"
import {
FORWARD_MESSAGE_STATE_KEY as e,
FORWARD_MESSAGE_STEP as s,
} from "./forward-message.constants"
import { sendChatMessageSuccess as t } from "../../chat/message/message.action"
import { myMemberMuted as a } from "../../member"
import { getRoomListAllIds as d } from "../list/room-list.reducer"
import { ROOM_STATE_KEY as g } from "../room.constant"
export const setForwardMessage = o("room/forward/set-forward-message")
export const setForwardMessageRoomTo = o("room/forward/set-forward-message-room-to")
export const setForwardMessageSearchText = o("room/forward/set-search-text")
export const forwardMessage = o("room/forward/forward-message")
export const setForwardMsgRoomListItemsInView = o("room/forward/set-room-list-in-view")
export const setForwardMsgListSearchRoomIds = o("room/forward/set-room-list-search-room-ids")
export const setForwardMsgRoomListIsSearching = o("room/forward/set-room-list-is-searching")
export const searchForwardMsgAllRooms = o("room/forward/search-all-rooms")
export const searchForwardMsgInputEvt = o("room/forward/search-forward-input-evt")
export const setForwardMsgRoomListSearchError = o("room/forward/set-room-list-search-error")
export const resetForwardMessage = o("room/forward/reset-forward-message")
export const forwardMsgRoomListInViewIdsChangeEvt = o("room/forward/room-list-in-view-change-evt")
export const forwardMessageEvt = o("chat/forward-message")
export const FORWARD_MESSAGE_INITIAL_STATE = {
forwardedMessage: null,
step: s.SELECT_MESSAGE,
searchRoomIds: [],
searchText: "",
inView: { top: -1, bottom: -1 },
isSearching: !1,
searchError: "",
}
export const SEARCH_FORWARD_INPUT_THROTTLE = 250
export const forwardMessageReducer = (o = FORWARD_MESSAGE_INITIAL_STATE, r) => {
switch (r.type) {
case setForwardMessage.type:
return { ...o, step: s.SELECT_ROOM }
case forwardMessage.type:
return {
...o,
forwardedMessage: {
text: r.payload.text,
display: r.payload.display,
segments: r.payload.segments,
roomIdTo: r.payload.roomIdTo,
roomIdFrom: r.payload.roomIdFrom,
messageId: r.payload.messageId,
},
step: s.COMPLETE,
}
case setForwardMsgRoomListItemsInView.type: {
const { top: e, bottom: s } = r.payload
return { ...o, inView: { top: e, bottom: s } }
}
case setForwardMsgListSearchRoomIds.type:
return { ...o, isSearching: !1, searchRoomIds: r.payload }
case setForwardMsgRoomListIsSearching.type:
return { ...o, isSearching: r.payload }
case searchForwardMsgAllRooms.type:
return { ...o, searchText: r.payload, isSearching: !!r.payload }
case setForwardMsgRoomListSearchError.type:
return { ...o, searchError: r.payload, isSearching: !1 }
case a.type:
case t.type:
case resetForwardMessage.type:
return FORWARD_MESSAGE_INITIAL_STATE
default:
return o
}
}
export const getForwardMessageState = (o) => o[g][e]
export const getIsSelectingForwardMessageRoom = (o) =>
"select_room" === getForwardMessageState(o).step
const c = (o, r) => {
const e = getForwardMessageState(o)
return e.forwardedMessage?.roomIdTo === r ? e : null
}
export const getForwardedMessageStepByRoomId = (o, r) => c(o, r)?.step
export const getForwardedMessageByRoomId = (o, r) => c(o, r)?.forwardedMessage
export const getForwardMsgRoomListSearchText = (o) => getForwardMessageState(o).searchText
export const getForwardMsgRoomListSearchIds = (o) => getForwardMessageState(o).searchRoomIds
export const getForwardMsgRoomListSearchActive = (o) => !!getForwardMessageState(o).searchText
export const getForwardMsgRoomListIsSearching = (o) => getForwardMessageState(o).isSearching
export const getForwardMsgRoomListSearchIsEmpty = (o) =>
!!getForwardMessageState(o).searchText && 0 === getForwardMsgRoomListSearchIds(o).length
export const getForwardMsgRoomListInView = (o) => getForwardMessageState(o).inView
export const getForwardMsgRoomListIds = r(
getForwardMsgRoomListSearchActive,
getForwardMsgRoomListSearchIds,
d,
(o, r, e) => (o ? r : e),
)
export const getForwardMsgRoomListInViewIds = r(
getForwardMsgRoomListInView,
getForwardMsgRoomListIds,
(o, r) => {
const { top: e, bottom: s } = o
return o.top < 0 || o.bottom < 0 ? [] : r.slice(e, s + 1)
},
)
export const getForwardMsgRoomListSearchError = (o) => getForwardMessageState(o).searchError