fix anon mode was altering comment.author

This commit is contained in:
Tom (plebeius.eth)
2024-08-08 17:48:45 +02:00
parent 179a328941
commit 188d7b73b1
3 changed files with 46 additions and 25 deletions
+13 -5
View File
@@ -27,7 +27,8 @@ import useFetchGifFirstFrame from '../../hooks/use-fetch-gif-first-frame';
import useAnonMode from '../../hooks/use-anon-mode'; import useAnonMode from '../../hooks/use-anon-mode';
type SubmitState = { type SubmitState = {
author: any | undefined; author?: any | undefined;
displayName?: string | undefined;
signer?: any | undefined; signer?: any | undefined;
subplebbitAddress: string | undefined; subplebbitAddress: string | undefined;
title: string | undefined; title: string | undefined;
@@ -50,10 +51,11 @@ const useSubmitStore = create<SubmitState>((set) => ({
link: undefined, link: undefined,
spoiler: undefined, spoiler: undefined,
publishCommentOptions: {}, publishCommentOptions: {},
setSubmitStore: ({ author, signer, subplebbitAddress, title, content, link, spoiler }) => setSubmitStore: ({ author, displayName, signer, subplebbitAddress, title, content, link, spoiler }) =>
set((state) => { set((state) => {
const updatedAuthor = displayName ? { ...author, displayName } : author;
const nextState = { ...state }; const nextState = { ...state };
if (author !== undefined) nextState.author = author; if (author !== undefined) nextState.author = updatedAuthor;
if (signer !== undefined) nextState.signer = signer; if (signer !== undefined) nextState.signer = signer;
if (subplebbitAddress !== undefined) nextState.subplebbitAddress = subplebbitAddress; if (subplebbitAddress !== undefined) nextState.subplebbitAddress = subplebbitAddress;
if (title !== undefined) nextState.title = title || undefined; if (title !== undefined) nextState.title = title || undefined;
@@ -62,7 +64,6 @@ const useSubmitStore = create<SubmitState>((set) => ({
if (spoiler !== undefined) nextState.spoiler = spoiler || undefined; if (spoiler !== undefined) nextState.spoiler = spoiler || undefined;
const publishCommentOptions: PublishCommentOptions = { const publishCommentOptions: PublishCommentOptions = {
author: nextState.author,
subplebbitAddress: nextState.subplebbitAddress, subplebbitAddress: nextState.subplebbitAddress,
title: nextState.title, title: nextState.title,
content: nextState.content, content: nextState.content,
@@ -80,6 +81,10 @@ const useSubmitStore = create<SubmitState>((set) => ({
publishCommentOptions.signer = nextState.signer; publishCommentOptions.signer = nextState.signer;
} }
if (nextState.author) {
publishCommentOptions.author = nextState.author;
}
nextState.publishCommentOptions = publishCommentOptions; nextState.publishCommentOptions = publishCommentOptions;
return nextState; return nextState;
}), }),
@@ -269,7 +274,10 @@ const PostFormTable = ({ closeForm, postCid }: { closeForm: () => void; postCid:
type='text' type='text'
placeholder={!displayName ? _.capitalize(t('anonymous')) : undefined} placeholder={!displayName ? _.capitalize(t('anonymous')) : undefined}
defaultValue={displayName || undefined} defaultValue={displayName || undefined}
onChange={(e) => setAccount({ ...account, author: { ...account?.author, displayName: e.target.value } })} onChange={(e) => {
setAccount({ ...account, author: { ...account?.author, displayName: e.target.value } });
setSubmitStore({ displayName: e.target.value });
}}
/> />
{isInPostView && <button onClick={onPublishReply}>{t('post')}</button>} {isInPostView && <button onClick={onPublishReply}>{t('post')}</button>}
</td> </td>
+26 -15
View File
@@ -42,18 +42,24 @@ const ReplyModal = ({ closeModal, parentCid, postCid, scrollY }: ReplyModalProps
const getAnonAddressForReply = useCallback(async () => { const getAnonAddressForReply = useCallback(async () => {
if (anonMode && !hasCalledAnonAddressRef.current) { if (anonMode && !hasCalledAnonAddressRef.current) {
hasCalledAnonAddressRef.current = true; hasCalledAnonAddressRef.current = true;
let signer = getExistingSigner(address); const existingSigner = getExistingSigner(address);
if (!signer) { if (existingSigner) {
signer = await getNewSigner(); setPublishReplyOptions({
if (signer) { signer: existingSigner,
setPublishReplyOptions({ author: {
signer, displayName,
author: { address: existingSigner.address,
displayName, },
address: signer.address, });
}, } else {
}); const newSigner = await getNewSigner();
} setPublishReplyOptions({
signer: newSigner,
author: {
displayName,
address: newSigner.address,
},
});
} }
} }
}, [anonMode, address, getExistingSigner, getNewSigner, displayName, setPublishReplyOptions]); }, [anonMode, address, getExistingSigner, getNewSigner, displayName, setPublishReplyOptions]);
@@ -119,7 +125,9 @@ const ReplyModal = ({ closeModal, parentCid, postCid, scrollY }: ReplyModalProps
const setTextRef = (ref: HTMLTextAreaElement | null) => { const setTextRef = (ref: HTMLTextAreaElement | null) => {
if (ref) { if (ref) {
textRef.current = ref; textRef.current = ref;
!isMobile && ref.focus(); // if (!isMobile && !urlRef.current?.value) {
// ref.focus();
// }
} }
}; };
@@ -166,7 +174,10 @@ const ReplyModal = ({ closeModal, parentCid, postCid, scrollY }: ReplyModalProps
type='text' type='text'
defaultValue={displayName} defaultValue={displayName}
placeholder={displayName ? undefined : _.capitalize(t('name'))} placeholder={displayName ? undefined : _.capitalize(t('name'))}
onChange={(e) => setAccount({ ...account, author: { ...account?.author, displayName: e.target.value } })} onChange={(e) => {
setAccount({ ...account, author: { ...account?.author, displayName: e.target.value } });
setPublishReplyOptions({ displayName: e.target.value || undefined });
}}
/> />
</div> </div>
<div className={styles.link}> <div className={styles.link}>
@@ -176,7 +187,7 @@ const ReplyModal = ({ closeModal, parentCid, postCid, scrollY }: ReplyModalProps
placeholder={_.capitalize(t('link'))} placeholder={_.capitalize(t('link'))}
onChange={(e) => { onChange={(e) => {
setUrl(e.target.value); setUrl(e.target.value);
setPublishReplyOptions({ link: e.target.value }); setPublishReplyOptions({ link: e.target.value || undefined });
}} }}
/> />
</div> </div>
+7 -5
View File
@@ -8,7 +8,8 @@ import useAnonMode from './use-anon-mode';
type SetReplyStoreData = { type SetReplyStoreData = {
subplebbitAddress: string; subplebbitAddress: string;
parentCid: string; parentCid: string;
author: any | undefined; author?: any | undefined;
displayName?: string | undefined;
content: string | undefined; content: string | undefined;
link: string | undefined; link: string | undefined;
signer?: any | undefined; signer?: any | undefined;
@@ -37,11 +38,12 @@ const useReplyStore = create<ReplyState>((set) => ({
publishCommentOptions: {}, publishCommentOptions: {},
setReplyStore: (data: SetReplyStoreData) => setReplyStore: (data: SetReplyStoreData) =>
set((state) => { set((state) => {
const { subplebbitAddress, parentCid, author, content, link, signer, spoiler } = data; const { subplebbitAddress, parentCid, author, displayName, content, link, signer, spoiler } = data;
const updatedAuthor = displayName ? { ...author, displayName } : author;
const publishCommentOptions = { const publishCommentOptions = {
subplebbitAddress, subplebbitAddress,
parentCid, parentCid,
author, ...(data.author ? { author: updatedAuthor } : {}),
...(data.signer ? { signer: data.signer } : {}), ...(data.signer ? { signer: data.signer } : {}),
content, content,
link, link,
@@ -56,7 +58,7 @@ const useReplyStore = create<ReplyState>((set) => ({
}, },
}; };
return { return {
author: { ...state.author, [parentCid]: author }, author: { ...state.author, [parentCid]: updatedAuthor },
signer: { ...state.signer, [parentCid]: signer }, signer: { ...state.signer, [parentCid]: signer },
content: { ...state.content, [parentCid]: content }, content: { ...state.content, [parentCid]: content },
link: { ...state.link, [parentCid]: link }, link: { ...state.link, [parentCid]: link },
@@ -97,7 +99,7 @@ const useReply = ({ cid, subplebbitAddress }: { cid: string; subplebbitAddress:
setReplyStore({ setReplyStore({
subplebbitAddress, subplebbitAddress,
parentCid, parentCid,
author, ...(anonMode ? { author } : {}),
content, content,
link, link,
spoiler, spoiler,