import RawModal from '../../atoms/modal/RawModal';
function Dialog({
- className, isOpen, title,
- contentOptions, onRequestClose, children,
+ className, isOpen, title, onAfterOpen, onAfterClose,
+ contentOptions, onRequestClose, closeFromOutside, children,
}) {
return (
<RawModal
className={`${className === null ? '' : `${className} `}dialog-model`}
isOpen={isOpen}
+ onAfterOpen={onAfterOpen}
+ onAfterClose={onAfterClose}
onRequestClose={onRequestClose}
+ closeFromOutside={closeFromOutside}
size="small"
>
<div className="dialog">
Dialog.defaultProps = {
className: null,
contentOptions: null,
+ onAfterOpen: null,
+ onAfterClose: null,
onRequestClose: null,
+ closeFromOutside: true,
};
Dialog.propTypes = {
isOpen: PropTypes.bool.isRequired,
title: PropTypes.string.isRequired,
contentOptions: PropTypes.node,
+ onAfterOpen: PropTypes.func,
+ onAfterClose: PropTypes.func,
onRequestClose: PropTypes.func,
+ closeFromOutside: PropTypes.bool,
children: PropTypes.node.isRequired,
};
};
}, []);
- useEffect(() => {
- if (isOpen) return;
+ const handleAfterClose = () => {
setUserId(null);
setRoomId(null);
- }, [isOpen]);
+ };
function renderProfile() {
const member = room.getMember(userId) || mx.getUser(userId) || {};
className="profile-viewer__dialog"
isOpen={isOpen}
title={`${username} in ${room?.name ?? ''}`}
+ onAfterClose={handleAfterClose}
onRequestClose={() => setIsOpen(false)}
contentOptions={<IconButton src={CrossIC} onClick={() => setIsOpen(false)} tooltip="Close" />}
>
- {isOpen && renderProfile()}
+ {roomId ? renderProfile() : <div />}
</Dialog>
);
}
};
}, []);
- useEffect(() => {
- if (isOpen === false) {
- setReaders([]);
- setRoomId(null);
- }
- }, [isOpen]);
+ const handleAfterClose = () => {
+ setReaders([]);
+ setRoomId(null);
+ };
function renderPeople(userId) {
const room = initMatrix.matrixClient.getRoom(roomId);
<Dialog
isOpen={isOpen}
title="Seen by"
+ onAfterClose={handleAfterClose}
onRequestClose={() => setIsOpen(false)}
contentOptions={<IconButton src={CrossIC} onClick={() => setIsOpen(false)} tooltip="Close" />}
>