* Add useDeviceList hook Signed-off-by: Ajay Bura <ajbura@gmail.com> * Add isCrossVerified func to matrixUtil Signed-off-by: Ajay Bura <ajbura@gmail.com> * Add className prop in sidebar avatar comp Signed-off-by: Ajay Bura <ajbura@gmail.com> * Add unverified session indicator in sidebar Signed-off-by: Ajay Bura <ajbura@gmail.com> * Add info card component Signed-off-by: Ajay Bura <ajbura@gmail.com> * Add css variables Signed-off-by: Ajay Bura <ajbura@gmail.com> * Add cross signin status hook Signed-off-by: Ajay Bura <ajbura@gmail.com> * Add hasCrossSigninAccountData function Signed-off-by: Ajay Bura <ajbura@gmail.com> * Add cross signin info card in device manage component Signed-off-by: Ajay Bura <ajbura@gmail.com> * Add cross signing and key backup component Signed-off-by: Ajay Bura <ajbura@gmail.com> * Fix typo Signed-off-by: Ajay Bura <ajbura@gmail.com> * WIP Signed-off-by: Ajay Bura <ajbura@gmail.com> * Add cross singing dialogs Signed-off-by: Ajay Bura <ajbura@gmail.com> * Add cross signing set/reset Signed-off-by: Ajay Bura <ajbura@gmail.com> * Add SecretStorageAccess component Signed-off-by: Ajay Bura <ajbura@gmail.com> * Add key backup Signed-off-by: Ajay Bura <ajbura@gmail.com> * WIP * WIP * WIP * WIP * Show progress when restoring key backup * Add SSSS and key backup
50 lines
1.3 KiB
JavaScript
50 lines
1.3 KiB
JavaScript
import React, { useState, useEffect } from 'react';
|
|
|
|
import cons from '../../../client/state/cons';
|
|
|
|
import navigation from '../../../client/state/navigation';
|
|
import IconButton from '../../atoms/button/IconButton';
|
|
import Dialog from './Dialog';
|
|
|
|
import CrossIC from '../../../../public/res/ic/outlined/cross.svg';
|
|
|
|
function ReusableDialog() {
|
|
const [isOpen, setIsOpen] = useState(false);
|
|
const [data, setData] = useState(null);
|
|
|
|
useEffect(() => {
|
|
const handleOpen = (title, render, afterClose) => {
|
|
setIsOpen(true);
|
|
setData({ title, render, afterClose });
|
|
};
|
|
navigation.on(cons.events.navigation.REUSABLE_DIALOG_OPENED, handleOpen);
|
|
return () => {
|
|
navigation.removeListener(cons.events.navigation.REUSABLE_DIALOG_OPENED, handleOpen);
|
|
};
|
|
}, []);
|
|
|
|
const handleAfterClose = () => {
|
|
data.afterClose?.();
|
|
setData(null);
|
|
};
|
|
|
|
const handleRequestClose = () => {
|
|
setIsOpen(false);
|
|
};
|
|
|
|
return (
|
|
<Dialog
|
|
isOpen={isOpen}
|
|
title={data?.title || ''}
|
|
onAfterClose={handleAfterClose}
|
|
onRequestClose={handleRequestClose}
|
|
contentOptions={<IconButton src={CrossIC} onClick={handleRequestClose} tooltip="Close" />}
|
|
invisibleScroll
|
|
>
|
|
{data?.render(handleRequestClose) || <div />}
|
|
</Dialog>
|
|
);
|
|
}
|
|
|
|
export default ReusableDialog;
|