import React, { useState } from 'react'; // tslint:disable: no-submodule-imports use-simple-attributes import { SessionJoinableRooms } from './SessionJoinableDefaultRooms'; import { SessionButton } from '../../basic/SessionButton'; import { SessionIdEditable } from '../../basic/SessionIdEditable'; import { SessionSpinner } from '../../basic/SessionSpinner'; import { OverlayHeader } from './OverlayHeader'; import { useDispatch, useSelector } from 'react-redux'; import { resetOverlayMode } from '../../../state/ducks/section'; import { joinOpenGroupV2WithUIEvents, JoinSogsRoomUICallbackArgs, } from '../../../session/apis/open_group_api/opengroupV2/JoinOpenGroupV2'; import { openGroupV2CompleteURLRegex } from '../../../session/apis/open_group_api/utils/OpenGroupUtils'; import { ToastUtils } from '../../../session/utils'; import useKey from 'react-use/lib/useKey'; import { getOverlayMode } from '../../../state/selectors/section'; import { markConversationInitialLoadingInProgress, openConversationWithMessages, } from '../../../state/ducks/conversations'; async function joinOpenGroup( serverUrl: string, uiCallback?: (args: JoinSogsRoomUICallbackArgs) => void ) { // guess if this is an open if (serverUrl.match(openGroupV2CompleteURLRegex)) { const groupCreated = await joinOpenGroupV2WithUIEvents(serverUrl, true, false, uiCallback); return groupCreated; } else { ToastUtils.pushToastError('invalidOpenGroupUrl', window.i18n('invalidOpenGroupUrl')); window.log.warn('Invalid opengroupv2 url'); return false; } } export const OverlayCommunity = () => { const dispatch = useDispatch(); const [loading, setLoading] = useState(false); const [groupUrl, setGroupUrl] = useState(''); const overlayModeIsCommunity = useSelector(getOverlayMode) === 'open-group'; function closeOverlay() { dispatch(resetOverlayMode()); } async function onTryJoinRoom(completeUrl?: string) { try { if (loading) { return; } await joinOpenGroup(completeUrl || groupUrl, joinSogsUICallback); } catch (e) { window.log.warn(e); } finally { setLoading(false); } } function joinSogsUICallback(args: JoinSogsRoomUICallbackArgs) { setLoading(args.loadingState === 'started'); if (args.conversationKey) { dispatch( markConversationInitialLoadingInProgress({ conversationKey: args.conversationKey, isInitialFetchingInProgress: true, }) ); } if (args.loadingState === 'finished' && overlayModeIsCommunity && args.conversationKey) { closeOverlay(); void openConversationWithMessages({ conversationKey: args.conversationKey, messageId: null }); // open to last unread for a session run sogs } } useKey('Escape', closeOverlay); const title = window.i18n('joinOpenGroup'); const buttonText = window.i18n('join'); const subtitle = window.i18n('openGroupURL'); const placeholder = window.i18n('enterAnOpenGroupURL'); return (