From 7ad7a211b4dbe1f927455f21ab9a0c6b547f6cbc Mon Sep 17 00:00:00 2001 From: teodorus-nathaniel Date: Mon, 27 Nov 2023 22:19:04 +0700 Subject: [PATCH 01/10] Remove continue anonymously for certain chats --- .../auth/LoginModal/LoginModalContent.tsx | 71 ++++++++++++------- src/constants/chat.ts | 5 ++ 2 files changed, 49 insertions(+), 27 deletions(-) diff --git a/src/components/auth/LoginModal/LoginModalContent.tsx b/src/components/auth/LoginModal/LoginModalContent.tsx index 301aef535..a7f178381 100644 --- a/src/components/auth/LoginModal/LoginModalContent.tsx +++ b/src/components/auth/LoginModal/LoginModalContent.tsx @@ -16,6 +16,7 @@ import MenuList from '@/components/MenuList' import { ModalFunctionalityProps } from '@/components/modals/Modal' import ProfilePreview from '@/components/ProfilePreview' import Toast from '@/components/Toast' +import { getChatIdsWithoutAnonLoginOptions } from '@/constants/chat' import useLoginAndRequestToken from '@/hooks/useLoginAndRequestToken' import useSignMessageAndLinkEvmAddress from '@/hooks/useSignMessageAndLinkEvmAddress' import useToastError from '@/hooks/useToastError' @@ -25,7 +26,9 @@ import { useSendEvent } from '@/stores/analytics' import { useMyAccount, useMyMainAddress } from '@/stores/my-account' import { useProfileModal } from '@/stores/profile-modal' import { cx } from '@/utils/class-names' +import { getIdFromSlug } from '@/utils/slug' import Image from 'next/image' +import { useRouter } from 'next/router' import { Dispatch, SetStateAction, @@ -70,6 +73,9 @@ export const LoginContent = ({ }: ContentProps) => { const [hasStartCaptcha, setHasStartCaptcha] = useState(false) const sendEvent = useSendEvent() + const { query } = useRouter() + const chatId = + typeof query.slug === 'string' ? getIdFromSlug(query.slug) : undefined const { mutateAsync: loginAndRequestToken, @@ -83,12 +89,20 @@ export const LoginContent = ({ ) const isLoading = loadingRequestToken || hasStartCaptcha + const withoutAnonLoginOptions = getChatIdsWithoutAnonLoginOptions().includes( + chatId ?? '' + ) return (
-
+
- - - {termsAndService('mt-4')} + {!withoutAnonLoginOptions && ( + <> + + {termsAndService('mt-4')} + + )}
diff --git a/src/constants/chat.ts b/src/constants/chat.ts index 94c7b4b6d..fb131b556 100644 --- a/src/constants/chat.ts +++ b/src/constants/chat.ts @@ -41,3 +41,8 @@ const INCLUDED_CHAT_IDS_FOR_UNREAD_COUNT: string[] = ['754', '7465'] export function getIncludedChatIdsForUnreadCount() { return INCLUDED_CHAT_IDS_FOR_UNREAD_COUNT } + +const CHAT_IDS_WITHOUT_ANON_LOGIN_OPTIONS: string[] = ['6946'] +export function getChatIdsWithoutAnonLoginOptions() { + return CHAT_IDS_WITHOUT_ANON_LOGIN_OPTIONS +} From b8f468be5b082b78d176d7e5255aeb8a94b29cc5 Mon Sep 17 00:00:00 2001 From: teodorus-nathaniel Date: Mon, 27 Nov 2023 23:32:08 +0700 Subject: [PATCH 02/10] Add login functionality before doing tx if without anon login --- .../auth/LoginModal/LoginModalContent.tsx | 11 +---- src/components/chats/ChatForm.tsx | 6 ++- src/components/navbar/Navbar/Navbar.tsx | 10 +++-- src/hooks/useRequestTokenAndSendMessage.ts | 27 ++++++++---- src/hooks/useWithoutAnonLoginOptions.ts | 41 +++++++++++++++++++ src/services/subsocial/hooks.ts | 18 ++++++-- src/stores/login-modal.ts | 20 +++++++++ 7 files changed, 106 insertions(+), 27 deletions(-) create mode 100644 src/hooks/useWithoutAnonLoginOptions.ts create mode 100644 src/stores/login-modal.ts diff --git a/src/components/auth/LoginModal/LoginModalContent.tsx b/src/components/auth/LoginModal/LoginModalContent.tsx index a7f178381..59414a358 100644 --- a/src/components/auth/LoginModal/LoginModalContent.tsx +++ b/src/components/auth/LoginModal/LoginModalContent.tsx @@ -16,19 +16,17 @@ import MenuList from '@/components/MenuList' import { ModalFunctionalityProps } from '@/components/modals/Modal' import ProfilePreview from '@/components/ProfilePreview' import Toast from '@/components/Toast' -import { getChatIdsWithoutAnonLoginOptions } from '@/constants/chat' import useLoginAndRequestToken from '@/hooks/useLoginAndRequestToken' import useSignMessageAndLinkEvmAddress from '@/hooks/useSignMessageAndLinkEvmAddress' import useToastError from '@/hooks/useToastError' +import useWithoutAnonLoginOptions from '@/hooks/useWithoutAnonLoginOptions' import { ApiRequestTokenResponse } from '@/pages/api/request-token' import { useRequestToken } from '@/services/api/mutation' import { useSendEvent } from '@/stores/analytics' import { useMyAccount, useMyMainAddress } from '@/stores/my-account' import { useProfileModal } from '@/stores/profile-modal' import { cx } from '@/utils/class-names' -import { getIdFromSlug } from '@/utils/slug' import Image from 'next/image' -import { useRouter } from 'next/router' import { Dispatch, SetStateAction, @@ -73,9 +71,7 @@ export const LoginContent = ({ }: ContentProps) => { const [hasStartCaptcha, setHasStartCaptcha] = useState(false) const sendEvent = useSendEvent() - const { query } = useRouter() - const chatId = - typeof query.slug === 'string' ? getIdFromSlug(query.slug) : undefined + const withoutAnonLoginOptions = useWithoutAnonLoginOptions() const { mutateAsync: loginAndRequestToken, @@ -89,9 +85,6 @@ export const LoginContent = ({ ) const isLoading = loadingRequestToken || hasStartCaptcha - const withoutAnonLoginOptions = getChatIdsWithoutAnonLoginOptions().includes( - chatId ?? '' - ) return (
diff --git a/src/components/chats/ChatForm.tsx b/src/components/chats/ChatForm.tsx index 0813d08fc..a1217a6e6 100644 --- a/src/components/chats/ChatForm.tsx +++ b/src/components/chats/ChatForm.tsx @@ -6,6 +6,7 @@ import { ERRORS } from '@/constants/error' import useAutofocus from '@/hooks/useAutofocus' import useRequestTokenAndSendMessage from '@/hooks/useRequestTokenAndSendMessage' import { showErrorToast } from '@/hooks/useToastError' +import useWithoutAnonLoginOptions from '@/hooks/useWithoutAnonLoginOptions' import { useConfigContext } from '@/providers/ConfigProvider' import { getPostQuery } from '@/services/api/query' import { @@ -91,6 +92,7 @@ export default function ChatForm({ const messageToEdit = useMessageData((state) => state.messageToEdit) const clearAction = useMessageData((state) => state.clearAction) const setMessageBody = useMessageData((state) => state.setMessageBody) + const { withoutAnonLoginOptions } = useWithoutAnonLoginOptions() const { data: editedMessage } = getPostQuery.useQuery(messageToEdit, { enabled: !!messageToEdit, @@ -188,6 +190,7 @@ export default function ChatForm({ clearAction?.() } + const needCaptcha = !shouldSendMessage && !withoutAnonLoginOptions const handleSubmit = async (captchaToken: string | null) => { if ( shouldSendMessage && @@ -244,7 +247,6 @@ export default function ChatForm({ resetForm() sendMessage(messageParams) } else { - if (!captchaToken) return resetForm() requestTokenAndSendMessage({ captchaToken, @@ -274,7 +276,7 @@ export default function ChatForm({ {(runCaptcha) => { const submitForm = async (e?: SyntheticEvent) => { e?.preventDefault() - if (shouldSendMessage) { + if (!needCaptcha) { handleSubmit(null) return } diff --git a/src/components/navbar/Navbar/Navbar.tsx b/src/components/navbar/Navbar/Navbar.tsx index e8d6050e5..894549dc8 100644 --- a/src/components/navbar/Navbar/Navbar.tsx +++ b/src/components/navbar/Navbar/Navbar.tsx @@ -8,6 +8,7 @@ import usePrevious from '@/hooks/usePrevious' import { useConfigContext } from '@/providers/ConfigProvider' import { getUnreadCountQuery } from '@/services/subsocial/datahub/posts/query' import { useSendEvent } from '@/stores/analytics' +import { useLoginModal } from '@/stores/login-modal' import { useMyAccount, useMyMainAddress } from '@/stores/my-account' import { cx } from '@/utils/class-names' import { getDatahubConfig } from '@/utils/env/client' @@ -58,7 +59,8 @@ export default function Navbar({ const prevAddress = usePrevious(address) const isLoggedIn = !!address - const [openLoginModal, setOpenLoginModal] = useState(false) + const isOpen = useLoginModal((state) => state.isOpen) + const setIsOpen = useLoginModal((state) => state.setIsOpen) const [openPrivateKeyNotice, setOpenPrivateKeyNotice] = useState(false) const isLoggingInWithKey = useRef(false) const timeoutRef = useRef() @@ -79,7 +81,7 @@ export default function Navbar({ }, [address, isInitializedAddress, prevAddress]) const login = () => { - setOpenLoginModal(true) + setIsOpen(true) } const renderAuthComponent = () => { @@ -154,8 +156,8 @@ export default function Navbar({ setOpenLoginModal(false)} + isOpen={isOpen} + closeModal={() => setIsOpen(false)} beforeLogin={() => (isLoggingInWithKey.current = true)} afterLogin={() => (isLoggingInWithKey.current = false)} /> diff --git a/src/hooks/useRequestTokenAndSendMessage.ts b/src/hooks/useRequestTokenAndSendMessage.ts index 5b75ac1a8..ab819f79b 100644 --- a/src/hooks/useRequestTokenAndSendMessage.ts +++ b/src/hooks/useRequestTokenAndSendMessage.ts @@ -5,14 +5,17 @@ import { } from '@/services/subsocial/commentIds' import { useMyAccount, useMyMainAddress } from '@/stores/my-account' import { useMutation, UseMutationOptions } from '@tanstack/react-query' +import useWithoutAnonLoginOptions from './useWithoutAnonLoginOptions' type Params = SendMessageParams & { - captchaToken: string + captchaToken: string | null } export default function useRequestTokenAndSendMessage( options?: UseMutationOptions ) { const address = useMyMainAddress() + const { withoutAnonLoginOptions, promptUserForLogin } = + useWithoutAnonLoginOptions() const { mutateAsync: requestToken } = useRequestToken() const { mutateAsync: sendMessage } = useSendMessage() @@ -22,15 +25,23 @@ export default function useRequestTokenAndSendMessage( const { captchaToken, ...sendMessageParams } = params let usedAddress: string = address ?? '' if (!address) { - const address = await login() - if (!address) throw new Error('Failed to login') - usedAddress = address + if (withoutAnonLoginOptions) { + const loginAddress = await promptUserForLogin() + if (!loginAddress) return + usedAddress = loginAddress + } else { + const address = await login() + if (!address) throw new Error('Failed to login') + usedAddress = address + } } - await Promise.all([ - requestToken({ address: usedAddress, captchaToken }), - sendMessage(sendMessageParams), - ]) + const promises: Promise[] = [sendMessage(sendMessageParams)] + if (captchaToken) { + promises.push(requestToken({ address: usedAddress, captchaToken })) + } + + await Promise.all(promises) } return useMutation(requestTokenAndSendMessage, options) diff --git a/src/hooks/useWithoutAnonLoginOptions.ts b/src/hooks/useWithoutAnonLoginOptions.ts new file mode 100644 index 000000000..2616817a6 --- /dev/null +++ b/src/hooks/useWithoutAnonLoginOptions.ts @@ -0,0 +1,41 @@ +import { getChatIdsWithoutAnonLoginOptions } from '@/constants/chat' +import { useLoginModal } from '@/stores/login-modal' +import { useMyAccount } from '@/stores/my-account' +import { generateManuallyTriggeredPromise } from '@/utils/promise' +import { getIdFromSlug } from '@/utils/slug' +import { useRouter } from 'next/router' +import { useCallback, useEffect, useRef } from 'react' + +const openLoginModal = () => { + useLoginModal.getState().setIsOpen(true) +} + +export default function useWithoutAnonLoginOptions() { + const { query } = useRouter() + const chatId = + typeof query.slug === 'string' ? getIdFromSlug(query.slug) : undefined + const withoutAnonLoginOptions = getChatIdsWithoutAnonLoginOptions().includes( + chatId ?? '' + ) + + const isOpen = useLoginModal((state) => state.isOpen) + const waitingLoginResolvers = useRef([]) + useEffect(() => { + if (!isOpen) { + waitingLoginResolvers.current.forEach((resolver) => resolver()) + waitingLoginResolvers.current = [] + } + }, [isOpen]) + + const setIsOpen = useLoginModal((state) => state.setIsOpen) + + const promptUserForLogin = useCallback(async () => { + setIsOpen(true) + const { getPromise, getResolver } = generateManuallyTriggeredPromise() + waitingLoginResolvers.current.push(getResolver()) + await getPromise() + return useMyAccount.getState().address + }, [setIsOpen]) + + return { withoutAnonLoginOptions, promptUserForLogin } +} diff --git a/src/services/subsocial/hooks.ts b/src/services/subsocial/hooks.ts index aa14d8398..b6e7e1258 100644 --- a/src/services/subsocial/hooks.ts +++ b/src/services/subsocial/hooks.ts @@ -1,3 +1,4 @@ +import useWithoutAnonLoginOptions from '@/hooks/useWithoutAnonLoginOptions' import { useRequestToken } from '@/services/api/mutation' import { getHasEnoughEnergy, useMyAccount } from '@/stores/my-account' import { @@ -49,15 +50,24 @@ export default function useCommonTxSteps( const { mutateAsync: requestToken } = useRequestToken() const login = useMyAccount((state) => state.login) - const needToRunCaptcha = !address || !hasEnoughEnergy + const { withoutAnonLoginOptions, promptUserForLogin } = + useWithoutAnonLoginOptions() + const needToRunCaptcha = + (!address && !withoutAnonLoginOptions) || (address && !hasEnoughEnergy) const workerFunc = async (params: { captchaToken?: string } & Data) => { const { captchaToken } = params let usedAddress: string = address ?? '' if (!address) { - const address = await login() - if (!address) throw new Error('Failed to login') - usedAddress = address + if (withoutAnonLoginOptions) { + const address = await promptUserForLogin() + if (!address) return + usedAddress = address + } else { + const address = await login() + if (!address) throw new Error('Failed to login') + usedAddress = address + } } if (!hasEnoughEnergy && captchaToken) { diff --git a/src/stores/login-modal.ts b/src/stores/login-modal.ts new file mode 100644 index 000000000..4aad2dd37 --- /dev/null +++ b/src/stores/login-modal.ts @@ -0,0 +1,20 @@ +import { create } from './utils' + +type State = { + isOpen: boolean +} + +type Actions = { + setIsOpen: (isOpen: boolean) => void +} + +const initialState: State = { + isOpen: false, +} + +export const useLoginModal = create()((set) => ({ + ...initialState, + setIsOpen: (isOpen) => { + set({ isOpen }) + }, +})) From 1dd9d7ec0d2f525fffd2a5e3d6a857bb9217faf3 Mon Sep 17 00:00:00 2001 From: teodorus-nathaniel Date: Mon, 27 Nov 2023 23:33:24 +0700 Subject: [PATCH 03/10] Fix wrong var used --- src/components/auth/LoginModal/LoginModalContent.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/auth/LoginModal/LoginModalContent.tsx b/src/components/auth/LoginModal/LoginModalContent.tsx index 59414a358..5a76271a0 100644 --- a/src/components/auth/LoginModal/LoginModalContent.tsx +++ b/src/components/auth/LoginModal/LoginModalContent.tsx @@ -71,7 +71,7 @@ export const LoginContent = ({ }: ContentProps) => { const [hasStartCaptcha, setHasStartCaptcha] = useState(false) const sendEvent = useSendEvent() - const withoutAnonLoginOptions = useWithoutAnonLoginOptions() + const { withoutAnonLoginOptions } = useWithoutAnonLoginOptions() const { mutateAsync: loginAndRequestToken, From 4cc1b888876d76819a7a5db40ab1b9fc44e1b692 Mon Sep 17 00:00:00 2001 From: teodorus-nathaniel Date: Mon, 27 Nov 2023 23:56:51 +0700 Subject: [PATCH 04/10] Fix issue if user logs in using account with 0 energy when sending flow --- src/components/chats/ChatForm.tsx | 2 +- src/pages/api/request-token.ts | 32 +++++++++++++++++++++++++++++++ src/services/subsocial/hooks.ts | 3 +-- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/components/chats/ChatForm.tsx b/src/components/chats/ChatForm.tsx index a1217a6e6..280e162b8 100644 --- a/src/components/chats/ChatForm.tsx +++ b/src/components/chats/ChatForm.tsx @@ -190,7 +190,7 @@ export default function ChatForm({ clearAction?.() } - const needCaptcha = !shouldSendMessage && !withoutAnonLoginOptions + const needCaptcha = !shouldSendMessage const handleSubmit = async (captchaToken: string | null) => { if ( shouldSendMessage && diff --git a/src/pages/api/request-token.ts b/src/pages/api/request-token.ts index fa8886dd8..e1cb6e2d2 100644 --- a/src/pages/api/request-token.ts +++ b/src/pages/api/request-token.ts @@ -1,3 +1,4 @@ +import { ESTIMATED_ENERGY_FOR_ONE_TX } from '@/constants/subsocial' import { ApiResponse, handlerWrapper } from '@/server/common' import { getSubsocialApi } from '@/subsocial-query/subsocial/connection' import { validateAddress } from '@/utils/account' @@ -46,6 +47,12 @@ export default handlerWrapper({ } } + try { + const isNeedEnergy = getIsAddressNeedEnergy(data.address) + if (!isNeedEnergy) + return res.status(200).send({ success: true, message: 'OK', data: '' }) + } catch {} + let hash: string try { hash = await sendToken(data.address) @@ -72,6 +79,31 @@ export default handlerWrapper({ }, }) +async function getIsAddressNeedEnergy(address: string) { + const { getSubsocialApi } = await import( + '@/subsocial-query/subsocial/connection' + ) + + const subsocialApi = await getSubsocialApi() + const substrateApi = await subsocialApi.substrateApi + + return new Promise((resolve) => { + const unsub = substrateApi.query.energy.energyBalance( + address, + (energyAmount) => { + let parsedEnergy: unknown = energyAmount + if (typeof energyAmount.toPrimitive === 'function') { + parsedEnergy = energyAmount.toPrimitive() + } + const energy = parseFloat(parsedEnergy + '') + const isAddressNeedEnergy = energy < ESTIMATED_ENERGY_FOR_ONE_TX + resolve(isAddressNeedEnergy) + unsub.then((unsub) => unsub()) + } + ) + }) +} + async function getServerAccount() { const mnemonic = getServerMnemonic() const keyring = new Keyring() diff --git a/src/services/subsocial/hooks.ts b/src/services/subsocial/hooks.ts index b6e7e1258..908871022 100644 --- a/src/services/subsocial/hooks.ts +++ b/src/services/subsocial/hooks.ts @@ -52,8 +52,7 @@ export default function useCommonTxSteps( const { withoutAnonLoginOptions, promptUserForLogin } = useWithoutAnonLoginOptions() - const needToRunCaptcha = - (!address && !withoutAnonLoginOptions) || (address && !hasEnoughEnergy) + const needToRunCaptcha = !address || !hasEnoughEnergy const workerFunc = async (params: { captchaToken?: string } & Data) => { const { captchaToken } = params From 608447329407515781a44bd6a21ea66aa9c7fa5c Mon Sep 17 00:00:00 2001 From: teodorus-nathaniel Date: Tue, 28 Nov 2023 00:10:21 +0700 Subject: [PATCH 05/10] Do not open cta modal if opening login modal --- src/components/chats/ChatForm.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/chats/ChatForm.tsx b/src/components/chats/ChatForm.tsx index 280e162b8..9f2d0d9bf 100644 --- a/src/components/chats/ChatForm.tsx +++ b/src/components/chats/ChatForm.tsx @@ -225,7 +225,8 @@ export default function ChatForm({ return } - if (!hasSentMessageStorage.get()) { + const willOpenLoginModal = withoutAnonLoginOptions && !isLoggedIn + if (!hasSentMessageStorage.get() && willOpenLoginModal) { setTimeout(() => { setIsOpenCtaModal(true) }, 2000) From c3ac9c6b184f00b1a9cfbce13e2560c9d35c6293 Mon Sep 17 00:00:00 2001 From: teodorus-nathaniel Date: Tue, 28 Nov 2023 00:27:55 +0700 Subject: [PATCH 06/10] Fix wrong logic --- src/components/chats/ChatForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/chats/ChatForm.tsx b/src/components/chats/ChatForm.tsx index 9f2d0d9bf..0f68b152a 100644 --- a/src/components/chats/ChatForm.tsx +++ b/src/components/chats/ChatForm.tsx @@ -226,7 +226,7 @@ export default function ChatForm({ } const willOpenLoginModal = withoutAnonLoginOptions && !isLoggedIn - if (!hasSentMessageStorage.get() && willOpenLoginModal) { + if (!hasSentMessageStorage.get() && !willOpenLoginModal) { setTimeout(() => { setIsOpenCtaModal(true) }, 2000) From b9814edc513333c1ae9049c52f877f70484749e5 Mon Sep 17 00:00:00 2001 From: teodorus-nathaniel Date: Tue, 28 Nov 2023 00:30:17 +0700 Subject: [PATCH 07/10] Remove unused function --- src/hooks/useWithoutAnonLoginOptions.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/hooks/useWithoutAnonLoginOptions.ts b/src/hooks/useWithoutAnonLoginOptions.ts index 2616817a6..63cf64a87 100644 --- a/src/hooks/useWithoutAnonLoginOptions.ts +++ b/src/hooks/useWithoutAnonLoginOptions.ts @@ -6,10 +6,6 @@ import { getIdFromSlug } from '@/utils/slug' import { useRouter } from 'next/router' import { useCallback, useEffect, useRef } from 'react' -const openLoginModal = () => { - useLoginModal.getState().setIsOpen(true) -} - export default function useWithoutAnonLoginOptions() { const { query } = useRouter() const chatId = From 6d2371888ffb4dc97d144a868a40af8f6ec41d81 Mon Sep 17 00:00:00 2001 From: Oleh Mell Date: Tue, 28 Nov 2023 11:53:35 +0200 Subject: [PATCH 08/10] Change CHAT_IDS_WITHOUT_ANON_LOGIN_OPTIONS --- src/constants/chat.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/constants/chat.ts b/src/constants/chat.ts index fb131b556..aa527d4d2 100644 --- a/src/constants/chat.ts +++ b/src/constants/chat.ts @@ -42,7 +42,7 @@ export function getIncludedChatIdsForUnreadCount() { return INCLUDED_CHAT_IDS_FOR_UNREAD_COUNT } -const CHAT_IDS_WITHOUT_ANON_LOGIN_OPTIONS: string[] = ['6946'] +const CHAT_IDS_WITHOUT_ANON_LOGIN_OPTIONS: string[] = ['19361'] export function getChatIdsWithoutAnonLoginOptions() { return CHAT_IDS_WITHOUT_ANON_LOGIN_OPTIONS } From 1dd89d1ea95cfa93278c242812a843984e66efaa Mon Sep 17 00:00:00 2001 From: teodorus-nathaniel Date: Tue, 28 Nov 2023 19:07:30 +0700 Subject: [PATCH 09/10] Rename hooks --- .../{useWithoutAnonLoginOptions.ts => useLoginOptions.ts} | 6 +++--- src/hooks/useRequestTokenAndSendMessage.ts | 7 +++---- src/services/subsocial/hooks.ts | 7 +++---- 3 files changed, 9 insertions(+), 11 deletions(-) rename src/hooks/{useWithoutAnonLoginOptions.ts => useLoginOptions.ts} (85%) diff --git a/src/hooks/useWithoutAnonLoginOptions.ts b/src/hooks/useLoginOptions.ts similarity index 85% rename from src/hooks/useWithoutAnonLoginOptions.ts rename to src/hooks/useLoginOptions.ts index 63cf64a87..b95610df5 100644 --- a/src/hooks/useWithoutAnonLoginOptions.ts +++ b/src/hooks/useLoginOptions.ts @@ -6,11 +6,11 @@ import { getIdFromSlug } from '@/utils/slug' import { useRouter } from 'next/router' import { useCallback, useEffect, useRef } from 'react' -export default function useWithoutAnonLoginOptions() { +export default function useLoginOptions() { const { query } = useRouter() const chatId = typeof query.slug === 'string' ? getIdFromSlug(query.slug) : undefined - const withoutAnonLoginOptions = getChatIdsWithoutAnonLoginOptions().includes( + const isNonAnonLoginRequired = getChatIdsWithoutAnonLoginOptions().includes( chatId ?? '' ) @@ -33,5 +33,5 @@ export default function useWithoutAnonLoginOptions() { return useMyAccount.getState().address }, [setIsOpen]) - return { withoutAnonLoginOptions, promptUserForLogin } + return { isNonAnonLoginRequired, promptUserForLogin } } diff --git a/src/hooks/useRequestTokenAndSendMessage.ts b/src/hooks/useRequestTokenAndSendMessage.ts index ab819f79b..cee7924fa 100644 --- a/src/hooks/useRequestTokenAndSendMessage.ts +++ b/src/hooks/useRequestTokenAndSendMessage.ts @@ -5,7 +5,7 @@ import { } from '@/services/subsocial/commentIds' import { useMyAccount, useMyMainAddress } from '@/stores/my-account' import { useMutation, UseMutationOptions } from '@tanstack/react-query' -import useWithoutAnonLoginOptions from './useWithoutAnonLoginOptions' +import useLoginOptions from './useLoginOptions' type Params = SendMessageParams & { captchaToken: string | null @@ -14,8 +14,7 @@ export default function useRequestTokenAndSendMessage( options?: UseMutationOptions ) { const address = useMyMainAddress() - const { withoutAnonLoginOptions, promptUserForLogin } = - useWithoutAnonLoginOptions() + const { isNonAnonLoginRequired, promptUserForLogin } = useLoginOptions() const { mutateAsync: requestToken } = useRequestToken() const { mutateAsync: sendMessage } = useSendMessage() @@ -25,7 +24,7 @@ export default function useRequestTokenAndSendMessage( const { captchaToken, ...sendMessageParams } = params let usedAddress: string = address ?? '' if (!address) { - if (withoutAnonLoginOptions) { + if (isNonAnonLoginRequired) { const loginAddress = await promptUserForLogin() if (!loginAddress) return usedAddress = loginAddress diff --git a/src/services/subsocial/hooks.ts b/src/services/subsocial/hooks.ts index 908871022..3ab584bb3 100644 --- a/src/services/subsocial/hooks.ts +++ b/src/services/subsocial/hooks.ts @@ -1,4 +1,4 @@ -import useWithoutAnonLoginOptions from '@/hooks/useWithoutAnonLoginOptions' +import useLoginOptions from '@/hooks/useLoginOptions' import { useRequestToken } from '@/services/api/mutation' import { getHasEnoughEnergy, useMyAccount } from '@/stores/my-account' import { @@ -50,15 +50,14 @@ export default function useCommonTxSteps( const { mutateAsync: requestToken } = useRequestToken() const login = useMyAccount((state) => state.login) - const { withoutAnonLoginOptions, promptUserForLogin } = - useWithoutAnonLoginOptions() + const { isNonAnonLoginRequired, promptUserForLogin } = useLoginOptions() const needToRunCaptcha = !address || !hasEnoughEnergy const workerFunc = async (params: { captchaToken?: string } & Data) => { const { captchaToken } = params let usedAddress: string = address ?? '' if (!address) { - if (withoutAnonLoginOptions) { + if (isNonAnonLoginRequired) { const address = await promptUserForLogin() if (!address) return usedAddress = address From 880980ca580efc08c0b7dd8f07324dba48b2f80c Mon Sep 17 00:00:00 2001 From: teodorus-nathaniel Date: Tue, 28 Nov 2023 19:08:35 +0700 Subject: [PATCH 10/10] Fix wrong var used --- src/components/auth/LoginModal/LoginModalContent.tsx | 8 ++++---- src/components/chats/ChatForm.tsx | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/auth/LoginModal/LoginModalContent.tsx b/src/components/auth/LoginModal/LoginModalContent.tsx index 5a76271a0..76c8f232e 100644 --- a/src/components/auth/LoginModal/LoginModalContent.tsx +++ b/src/components/auth/LoginModal/LoginModalContent.tsx @@ -17,9 +17,9 @@ import { ModalFunctionalityProps } from '@/components/modals/Modal' import ProfilePreview from '@/components/ProfilePreview' import Toast from '@/components/Toast' import useLoginAndRequestToken from '@/hooks/useLoginAndRequestToken' +import useLoginOptions from '@/hooks/useLoginOptions' import useSignMessageAndLinkEvmAddress from '@/hooks/useSignMessageAndLinkEvmAddress' import useToastError from '@/hooks/useToastError' -import useWithoutAnonLoginOptions from '@/hooks/useWithoutAnonLoginOptions' import { ApiRequestTokenResponse } from '@/pages/api/request-token' import { useRequestToken } from '@/services/api/mutation' import { useSendEvent } from '@/stores/analytics' @@ -71,7 +71,7 @@ export const LoginContent = ({ }: ContentProps) => { const [hasStartCaptcha, setHasStartCaptcha] = useState(false) const sendEvent = useSendEvent() - const { withoutAnonLoginOptions } = useWithoutAnonLoginOptions() + const { isNonAnonLoginRequired } = useLoginOptions() const { mutateAsync: loginAndRequestToken, @@ -93,7 +93,7 @@ export const LoginContent = ({
- {!withoutAnonLoginOptions && ( + {!isNonAnonLoginRequired && ( <>