fix signer asynchronicity for anon mode

This commit is contained in:
Tom (plebeius.eth)
2024-08-06 21:51:45 +02:00
parent db67a9452c
commit 19d7475470
2 changed files with 50 additions and 39 deletions
+23 -13
View File
@@ -142,8 +142,11 @@ const PostFormTable = ({ closeForm, postCid }: { closeForm: () => void; postCid:
}
};
const getAnonAddressForPost = async () => {
if (anonMode) {
const hasCalledAnonAddressRef = useRef(false);
const getAnonAddressForPost = useCallback(async () => {
if (anonMode && !hasCalledAnonAddressRef.current) {
hasCalledAnonAddressRef.current = true;
const newSigner = (await getNewSigner()) || {};
setSubmitStore({
signer: newSigner,
@@ -153,7 +156,7 @@ const PostFormTable = ({ closeForm, postCid }: { closeForm: () => void; postCid:
},
});
}
};
}, [anonMode, getNewSigner, setSubmitStore, displayName]);
const onPublishPost = async () => {
if (!title && !content && !link) {
@@ -165,9 +168,7 @@ const PostFormTable = ({ closeForm, postCid }: { closeForm: () => void; postCid:
return;
}
getAnonAddressForPost().then(() => {
publishComment();
});
publishComment();
};
const params = useParams();
@@ -194,8 +195,9 @@ const PostFormTable = ({ closeForm, postCid }: { closeForm: () => void; postCid:
const cid = params?.commentCid as string;
const { setPublishReplyOptions, resetPublishReplyOptions, replyIndex, publishReply } = useReply({ cid, subplebbitAddress });
const getAnonAddressForReply = async () => {
if (anonMode) {
const getAnonAddressForReply = useCallback(async () => {
if (anonMode && !hasCalledAnonAddressRef.current) {
hasCalledAnonAddressRef.current = true;
const existingSigner = getExistingSigner(address);
if (existingSigner) {
console.log('onPublishReply - existingSigner:', existingSigner);
@@ -207,7 +209,7 @@ const PostFormTable = ({ closeForm, postCid }: { closeForm: () => void; postCid:
},
});
} else {
const newSigner = (await getNewSigner()) || {};
const newSigner = await getNewSigner();
setPublishReplyOptions({
signer: newSigner,
author: {
@@ -217,7 +219,7 @@ const PostFormTable = ({ closeForm, postCid }: { closeForm: () => void; postCid:
});
}
}
};
}, [address, getExistingSigner, getNewSigner, setPublishReplyOptions, displayName, anonMode]);
const onPublishReply = () => {
const currentContent = textRef.current?.value || '';
@@ -233,9 +235,7 @@ const PostFormTable = ({ closeForm, postCid }: { closeForm: () => void; postCid:
return;
}
getAnonAddressForReply().then(() => {
publishReply();
});
publishReply();
};
useEffect(() => {
@@ -246,6 +246,16 @@ const PostFormTable = ({ closeForm, postCid }: { closeForm: () => void; postCid:
}
}, [replyIndex, resetPublishReplyOptions, closeForm]);
useEffect(() => {
if (anonMode) {
if (isInPostView) {
getAnonAddressForReply();
} else {
getAnonAddressForPost();
}
}
}, [anonMode, getAnonAddressForPost, getAnonAddressForReply, isInPostView]);
return (
<table className={styles.postFormTable}>
<tbody>
+27 -26
View File
@@ -1,4 +1,4 @@
import { useEffect, useRef, useState } from 'react';
import { useCallback, useEffect, useRef, useState } from 'react';
import { useLocation, useParams } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
import Draggable from 'react-draggable';
@@ -37,29 +37,32 @@ const ReplyModal = ({ closeModal, parentCid, postCid, scrollY }: ReplyModalProps
const comment = useComment({ commentCid: postCid });
const address = comment?.author?.address;
const getAnonAddressForReply = async () => {
if (anonMode) {
const existingSigner = getExistingSigner(address);
if (existingSigner) {
setPublishReplyOptions({
signer: existingSigner,
author: {
displayName,
address: existingSigner.address,
},
});
} else {
const newSigner = (await getNewSigner()) || {};
setPublishReplyOptions({
signer: newSigner,
author: {
displayName,
address: newSigner.address,
},
});
const hasCalledAnonAddressRef = useRef(false);
const getAnonAddressForReply = useCallback(async () => {
if (anonMode && !hasCalledAnonAddressRef.current) {
hasCalledAnonAddressRef.current = true;
let signer = getExistingSigner(address);
if (!signer) {
signer = await getNewSigner();
if (signer) {
setPublishReplyOptions({
signer,
author: {
displayName,
address: signer.address,
},
});
}
}
}
};
}, [anonMode, address, getExistingSigner, getNewSigner, displayName, setPublishReplyOptions]);
useEffect(() => {
if (anonMode) {
getAnonAddressForReply();
}
}, [anonMode, getAnonAddressForReply]);
const onPublishReply = async () => {
const currentContent = textRef.current?.value || '';
@@ -75,10 +78,8 @@ const ReplyModal = ({ closeModal, parentCid, postCid, scrollY }: ReplyModalProps
return;
}
getAnonAddressForReply().then(() => {
publishReply();
closeModal();
});
publishReply();
closeModal();
};
const nodeRef = useRef<HTMLDivElement>(null);