import { isEmpty, isNil } from 'lodash'; import { SogsRoomInfoState } from '../ducks/sogsRoomInfo'; import { StateType } from '../reducer'; const getSogsRoomInfoState = (state: StateType): SogsRoomInfoState => state.sogsRoomInfo; export function getCanWrite(state: StateType, selectedConvo?: string): boolean { if (!selectedConvo) { return false; } const canWrite = getSogsRoomInfoState(state).rooms[selectedConvo]?.canWrite; // if there is no entry in the redux slice, consider it true (as this selector will be hit for non sogs convo too) return isNil(canWrite) ? true : canWrite; } export function getSubscriberCount(state: StateType, selectedConvo?: string): number { if (!selectedConvo) { return 0; } const subscriberCount = getSogsRoomInfoState(state).rooms[selectedConvo]?.subscriberCount; // if there is no entry in the redux slice, consider it 0 (as this selector will be hit for non sogs convo too) return isNil(subscriberCount) ? 0 : subscriberCount; } export function getModerators(state: StateType, selectedConvo?: string): Array { if (!selectedConvo) { return []; } const moderators = getSogsRoomInfoState(state).rooms[selectedConvo]?.moderators; return isEmpty(moderators) ? [] : moderators; } export function getSubscriberCountOutsideRedux(convoId: string): number { const state = window.inboxStore?.getState(); return state ? getSubscriberCount(state, convoId) : 0; } export function getCanWriteOutsideRedux(convoId: string): boolean { const state = window.inboxStore?.getState(); return state ? getCanWrite(state, convoId) : false; } export function getModeratorsOutsideRedux(convoId: string): Array { const state = window.inboxStore?.getState(); return state ? getModerators(state, convoId) : []; } export const getCurrentSubscriberCountOutsideRedux = (convoId?: string): number | undefined => { const state = window.inboxStore?.getState(); return getSubscriberCount(state, convoId); };