You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.9 KiB
TypeScript
57 lines
1.9 KiB
TypeScript
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<string> {
|
|
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<string> {
|
|
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);
|
|
};
|