Create structure

This commit is contained in:
Diego Mello 2024-03-01 13:45:57 -03:00
parent 54f2cea4e9
commit 29779b89a7
7 changed files with 37 additions and 5 deletions

View File

@ -20,7 +20,7 @@ import { onHoldLivechat, returnLivechat } from '../../lib/services/restApi';
import { getUserSelector } from '../../selectors/login'; import { getUserSelector } from '../../selectors/login';
import { TNavigation } from '../../stacks/stackType'; import { TNavigation } from '../../stacks/stackType';
import { ChatsStackParamList } from '../../stacks/types'; import { ChatsStackParamList } from '../../stacks/types';
import HeaderCallButton from './components/HeaderCallButton'; import { HeaderCallButton } from './components';
interface IRightButtonsProps extends Pick<ISubscription, 't'> { interface IRightButtonsProps extends Pick<ISubscription, 't'> {
userId?: string; userId?: string;

View File

@ -0,0 +1,8 @@
import React from 'react';
import { Text, View } from 'react-native';
export const EncryptedRoom = () => (
<View>
<Text>This room is encrypted</Text>
</View>
);

View File

@ -3,7 +3,7 @@ import React from 'react';
import * as HeaderButton from '../../../containers/HeaderButton'; import * as HeaderButton from '../../../containers/HeaderButton';
import { useVideoConf } from '../../../lib/hooks/useVideoConf'; import { useVideoConf } from '../../../lib/hooks/useVideoConf';
export default function HeaderCallButton({ rid }: { rid: string }): React.ReactElement | null { export const HeaderCallButton = ({ rid }: { rid: string }): React.ReactElement | null => {
const { showInitCallActionSheet, callEnabled, disabledTooltip } = useVideoConf(rid); const { showInitCallActionSheet, callEnabled, disabledTooltip } = useVideoConf(rid);
if (callEnabled) if (callEnabled)
@ -16,4 +16,4 @@ export default function HeaderCallButton({ rid }: { rid: string }): React.ReactE
/> />
); );
return null; return null;
} };

View File

@ -0,0 +1,8 @@
import React from 'react';
import { Text, View } from 'react-native';
export const MissingRoomE2EEKey = () => (
<View>
<Text>Check back in a few moments</Text>
</View>
);

View File

@ -0,0 +1,3 @@
export * from './EncryptedRoom';
export * from './HeaderCallButton';
export * from './MissingRoomE2EEKey';

View File

@ -23,6 +23,7 @@ export interface IRoomViewProps extends IActionSheetProvider, IBaseScreen<ChatsS
viewCannedResponsesPermission?: string[]; // TODO: Check if its the correct type viewCannedResponsesPermission?: string[]; // TODO: Check if its the correct type
livechatAllowManualOnHold?: boolean; livechatAllowManualOnHold?: boolean;
inAppFeedback?: { [key: string]: string }; inAppFeedback?: { [key: string]: string };
encryptionEnabled: boolean;
} }
export type TStateAttrsUpdate = keyof IRoomViewState; export type TStateAttrsUpdate = keyof IRoomViewState;

View File

@ -102,6 +102,7 @@ import { clearInAppFeedback, removeInAppFeedback } from '../../actions/inAppFeed
import UserPreferences from '../../lib/methods/userPreferences'; import UserPreferences from '../../lib/methods/userPreferences';
import { IRoomViewProps, IRoomViewState } from './definitions'; import { IRoomViewProps, IRoomViewState } from './definitions';
import { roomAttrsUpdate, stateAttrsUpdate } from './constants'; import { roomAttrsUpdate, stateAttrsUpdate } from './constants';
import { EncryptedRoom, MissingRoomE2EEKey } from './components';
class RoomView extends React.Component<IRoomViewProps, IRoomViewState> { class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
private rid?: string; private rid?: string;
@ -1441,7 +1442,7 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
render() { render() {
console.count(`${this.constructor.name}.render calls`); console.count(`${this.constructor.name}.render calls`);
const { room, loading, action, selectedMessages } = this.state; const { room, loading, action, selectedMessages } = this.state;
const { user, baseUrl, theme, width, serverVersion } = this.props; const { user, baseUrl, theme, width, serverVersion, encryptionEnabled } = this.props;
const { rid, t } = room; const { rid, t } = room;
let bannerClosed; let bannerClosed;
let announcement; let announcement;
@ -1449,6 +1450,16 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
({ bannerClosed, announcement } = room); ({ bannerClosed, announcement } = room);
} }
// Missing room encryption key
if (encryptionEnabled && 'encrypted' in room && room.encrypted && 'E2EKey' in room && !room.E2EKey) {
return <MissingRoomE2EEKey />;
}
// Encrypted room, but user session is not encrypted
if (!encryptionEnabled && 'encrypted' in room && room.encrypted) {
return <EncryptedRoom />;
}
return ( return (
<RoomContext.Provider <RoomContext.Provider
value={{ value={{
@ -1505,7 +1516,8 @@ const mapStateToProps = (state: IApplicationState) => ({
transferLivechatGuestPermission: state.permissions['transfer-livechat-guest'], transferLivechatGuestPermission: state.permissions['transfer-livechat-guest'],
viewCannedResponsesPermission: state.permissions['view-canned-responses'], viewCannedResponsesPermission: state.permissions['view-canned-responses'],
livechatAllowManualOnHold: state.settings.Livechat_allow_manual_on_hold as boolean, livechatAllowManualOnHold: state.settings.Livechat_allow_manual_on_hold as boolean,
inAppFeedback: state.inAppFeedback inAppFeedback: state.inAppFeedback,
encryptionEnabled: state.encryption.enabled
}); });
export default connect(mapStateToProps)(withDimensions(withTheme(withSafeAreaInsets(withActionSheet(RoomView))))); export default connect(mapStateToProps)(withDimensions(withTheme(withSafeAreaInsets(withActionSheet(RoomView)))));