Fix dialog closing animation jank
authorAjay Bura <ajbura@gmail.com>
Tue, 14 Dec 2021 11:56:32 +0000 (17:26 +0530)
committerAjay Bura <ajbura@gmail.com>
Tue, 14 Dec 2021 11:56:32 +0000 (17:26 +0530)
Signed-off-by: Ajay Bura <ajbura@gmail.com>
src/app/molecules/dialog/Dialog.jsx
src/app/organisms/profile-viewer/ProfileViewer.jsx
src/app/organisms/read-receipts/ReadReceipts.jsx

index 258422da18c656abc1beb237205f7d895d644859..1b918afda197267eee1e604e27f669d34331a20f 100644 (file)
@@ -10,14 +10,17 @@ import ScrollView from '../../atoms/scroll/ScrollView';
 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">
@@ -44,7 +47,10 @@ function Dialog({
 Dialog.defaultProps = {
   className: null,
   contentOptions: null,
+  onAfterOpen: null,
+  onAfterClose: null,
   onRequestClose: null,
+  closeFromOutside: true,
 };
 
 Dialog.propTypes = {
@@ -52,7 +58,10 @@ 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,
 };
 
index 66fa396829dfda04761905eb7a0ce1d8e3ec5610..bcb0cbc025ad5ca75d2eea3221198c5b91389148 100644 (file)
@@ -253,11 +253,10 @@ function ProfileViewer() {
     };
   }, []);
 
-  useEffect(() => {
-    if (isOpen) return;
+  const handleAfterClose = () => {
     setUserId(null);
     setRoomId(null);
-  }, [isOpen]);
+  };
 
   function renderProfile() {
     const member = room.getMember(userId) || mx.getUser(userId) || {};
@@ -298,10 +297,11 @@ function ProfileViewer() {
       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>
   );
 }
index 64601081d2dcd5b2c29dc5c7fe1daeb6a779bdbd..715fafef71966a779b29a84aee86d99a9bb2b798 100644 (file)
@@ -30,12 +30,10 @@ function ReadReceipts() {
     };
   }, []);
 
-  useEffect(() => {
-    if (isOpen === false) {
-      setReaders([]);
-      setRoomId(null);
-    }
-  }, [isOpen]);
+  const handleAfterClose = () => {
+    setReaders([]);
+    setRoomId(null);
+  };
 
   function renderPeople(userId) {
     const room = initMatrix.matrixClient.getRoom(roomId);
@@ -62,6 +60,7 @@ function ReadReceipts() {
     <Dialog
       isOpen={isOpen}
       title="Seen by"
+      onAfterClose={handleAfterClose}
       onRequestClose={() => setIsOpen(false)}
       contentOptions={<IconButton src={CrossIC} onClick={() => setIsOpen(false)} tooltip="Close" />}
     >