import { Badge, Box, Button, color, config, Dialog, Header, Icon, IconButton, Icons, Overlay, OverlayBackdrop, OverlayCenter, Spinner, Text, } from 'folds'; import React, { useCallback, useState } from 'react'; import { MatrixError } from 'matrix-js-sdk'; import FocusTrap from 'focus-trap-react'; import { SequenceCard } from '../../../components/sequence-card'; import { SequenceCardStyle } from '../../room-settings/styles.css'; import { SettingTile } from '../../../components/setting-tile'; import { useMatrixClient } from '../../../hooks/useMatrixClient'; import { StateEvent } from '../../../../types/matrix/room'; import { AsyncStatus, useAsyncCallback } from '../../../hooks/useAsyncCallback'; import { useRoom } from '../../../hooks/useRoom'; import { useStateEvent } from '../../../hooks/useStateEvent'; import { stopPropagation } from '../../../utils/keyboard'; import { RoomPermissionsAPI } from '../../../hooks/useRoomPermissions'; const ROOM_ENC_ALGO = 'm.megolm.v1.aes-sha2'; type RoomEncryptionProps = { permissions: RoomPermissionsAPI; }; export function RoomEncryption({ permissions }: RoomEncryptionProps) { const mx = useMatrixClient(); const room = useRoom(); const canEnable = permissions.stateEvent(StateEvent.RoomEncryption, mx.getSafeUserId()); const content = useStateEvent(room, StateEvent.RoomEncryption)?.getContent<{ algorithm: string; }>(); const enabled = content?.algorithm === ROOM_ENC_ALGO; const [enableState, enable] = useAsyncCallback( useCallback(async () => { await mx.sendStateEvent(room.roomId, StateEvent.RoomEncryption as any, { algorithm: ROOM_ENC_ALGO, }); }, [mx, room.roomId]) ); const enabling = enableState.status === AsyncStatus.Loading; const [prompt, setPrompt] = useState(false); const handleEnable = () => { enable(); setPrompt(false); }; return ( Enabled ) : ( ) } > {enableState.status === AsyncStatus.Error && ( {(enableState.error as MatrixError).message} )} {prompt && ( }> setPrompt(false), clickOutsideDeactivates: true, escapeDeactivates: stopPropagation, }} >
Enable Encryption setPrompt(false)} radii="300">
Are you sure? Once enabled, encryption cannot be disabled!
)}
); }