Rocket.Chat.ReactNative/app/lib/hooks/useVideoConf/useVideoConfCall.ts

69 lines
2.9 KiB
TypeScript

import { useEffect, useState } from 'react';
import { SubscriptionType } from '../../../definitions';
import { getUserSelector } from '../../../selectors/login';
import { getSubscriptionByRoomId } from '../../database/services/Subscription';
import { compareServerVersion, isReadOnly } from '../../methods/helpers';
import { useAppSelector } from '../useAppSelector';
import { usePermissions } from '../usePermissions';
import { useSetting } from '../useSetting';
import { isRoomFederated } from '../../methods';
export const useVideoConfCall = (rid: string): { callEnabled: boolean; disabledTooltip?: boolean } => {
const [callEnabled, setCallEnabled] = useState(false);
const [disabledTooltip, setDisabledTooltip] = useState(false);
// OLD SETTINGS
const jitsiEnabled = useSetting('Jitsi_Enabled');
const jitsiEnableTeams = useSetting('Jitsi_Enable_Teams');
const jitsiEnableChannels = useSetting('Jitsi_Enable_Channels');
// NEW SETTINGS
// Only disable video conf if the settings are explicitly FALSE - any falsy value counts as true
const enabledDMs = useSetting('VideoConf_Enable_DMs') !== false;
const enabledChannel = useSetting('VideoConf_Enable_Channels') !== false;
const enabledTeams = useSetting('VideoConf_Enable_Teams') !== false;
const enabledGroups = useSetting('VideoConf_Enable_Groups') !== false;
const enabledLiveChat = useSetting('Omnichannel_call_provider') === 'default-provider';
const serverVersion = useAppSelector(state => state.server.version);
const isServer5OrNewer = compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '5.0.0');
const [canStartCall] = usePermissions(['call-management'], rid);
const user = useAppSelector(state => getUserSelector(state));
const init = async () => {
const room = await getSubscriptionByRoomId(rid);
if (room) {
if (isServer5OrNewer) {
const isReadyOnly = await isReadOnly(room, user.username);
const ownUser = room.uids && room.uids.length === 1;
const enabled = enabledDMs || enabledChannel || enabledTeams || enabledGroups || enabledLiveChat;
const enableOption = enabled && canStartCall && (!user?.username || !room.muted?.includes(user.username));
const federated = isRoomFederated(room);
if (enableOption && !ownUser) {
if (federated || (room.ro && isReadyOnly)) {
setDisabledTooltip(true);
}
return setCallEnabled(true);
}
return;
}
// OLD SERVERS VERSIONS
const isJitsiDisabledForTeams = room.teamMain && !jitsiEnableTeams;
const isJitsiDisabledForChannels = !room.teamMain && (room.t === 'p' || room.t === 'c') && !jitsiEnableChannels;
if (room.t === SubscriptionType.DIRECT) return setCallEnabled(!!jitsiEnabled);
if (room.t === SubscriptionType.CHANNEL) return setCallEnabled(!isJitsiDisabledForChannels);
if (room.t === SubscriptionType.GROUP) return setCallEnabled(!isJitsiDisabledForTeams);
}
return setCallEnabled(false);
};
useEffect(() => {
init();
}, []);
return { callEnabled, disabledTooltip };
};