diff --git a/src/App.tsx b/src/App.tsx index 5138080..fb60be6 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -766,6 +766,24 @@ function App() { balanceSetInterval(); }); }; + + const refetchUserInfo = () => { + window + .sendMessage('userInfo') + .then((response) => { + if (response && !response.error) { + setUserInfo(response); + } + }) + .catch((error) => { + console.error('Failed to get user info:', error); + }); + }; + + const getBalanceAndUserInfoFunc = () => { + getBalanceFunc(); + refetchUserInfo(); + }; const getLtcBalanceFunc = () => { setLtcBalanceLoading(true); window @@ -1502,7 +1520,7 @@ function App() { 0) { - return nameData[0].name; + if (nameData?.name) { + return nameData.name; } else { return ''; } } export async function getNameInfoForOthers(address) { + if (!address) return ''; const validApi = await getBaseApi(); - const response = await fetch(validApi + '/names/address/' + address); + const response = await fetch(validApi + '/names/primary/' + address); const nameData = await response.json(); - if (nameData?.length > 0) { - return nameData[0].name; + if (nameData?.name) { + return nameData?.name; } else { return ''; } diff --git a/src/components/Chat/ChatOptions.tsx b/src/components/Chat/ChatOptions.tsx index 59124a0..2d2c352 100644 --- a/src/components/Chat/ChatOptions.tsx +++ b/src/components/Chat/ChatOptions.tsx @@ -35,6 +35,7 @@ import { convert } from 'html-to-text'; import { generateHTML } from '@tiptap/react'; import ErrorBoundary from '../../common/ErrorBoundary'; import { useTranslation } from 'react-i18next'; +import { isHtmlString } from '../../utils/chat'; const extractTextFromHTML = (htmlString = '') => { return convert(htmlString, { @@ -76,13 +77,16 @@ export const ChatOptions = ({ return untransformedMessages?.map((item) => { if (item?.messageText) { let transformedMessage = item?.messageText; + const isHtml = isHtmlString(item?.messageText); try { - transformedMessage = generateHTML(item?.messageText, [ - StarterKit, - Underline, - Highlight, - Mention, - ]); + transformedMessage = isHtml + ? item?.messageText + : generateHTML(item?.messageText, [ + StarterKit, + Underline, + Highlight, + Mention, + ]); return { ...item, messageText: transformedMessage, diff --git a/src/components/Chat/MessageItem.tsx b/src/components/Chat/MessageItem.tsx index 3151fc5..29a6a88 100644 --- a/src/components/Chat/MessageItem.tsx +++ b/src/components/Chat/MessageItem.tsx @@ -47,7 +47,11 @@ import level8Img from '../../assets/badges/level-8.png'; import level9Img from '../../assets/badges/level-9.png'; import level10Img from '../../assets/badges/level-10.png'; import { Embed } from '../Embeds/Embed'; -import { buildImageEmbedLink, messageHasImage } from '../../utils/chat'; +import { + buildImageEmbedLink, + isHtmlString, + messageHasImage, +} from '../../utils/chat'; import { useTranslation } from 'react-i18next'; const getBadgeImg = (level) => { @@ -135,6 +139,8 @@ export const MessageItem = memo( const htmlText = useMemo(() => { if (message?.messageText) { + const isHtml = isHtmlString(message?.messageText); + if (isHtml) return message?.messageText; return generateHTML(message?.messageText, [ StarterKit, Underline, @@ -147,6 +153,8 @@ export const MessageItem = memo( const htmlReply = useMemo(() => { if (reply?.messageText) { + const isHtml = isHtmlString(reply?.messageText); + if (isHtml) return reply?.messageText; return generateHTML(reply?.messageText, [ StarterKit, Underline, @@ -616,6 +624,18 @@ export const ReplyPreview = ({ message, isEdit = false }) => { 'tutorial', ]); + const replyMessageText = useMemo(() => { + const isHtml = isHtmlString(message?.messageText); + if (isHtml) return message?.messageText; + return generateHTML(message?.messageText, [ + StarterKit, + Underline, + Highlight, + Mention, + TextStyle, + ]); + }, [message?.messageText]); + return ( { )} {message?.messageText && ( - + )} {message?.decryptedData?.type === 'notification' ? ( diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index bb39f34..b5fcc4f 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -265,11 +265,11 @@ export const getDataPublishesFunc = async (groupId, type) => { }; export async function getNameInfo(address: string) { - const response = await fetch(`${getBaseApiReact()}/names/address/` + address); + const response = await fetch(`${getBaseApiReact()}/names/primary/` + address); const nameData = await response.json(); - if (nameData?.length > 0) { - return nameData[0]?.name; + if (nameData?.name) { + return nameData?.name; } else { return ''; } diff --git a/src/components/Minting/Minting.tsx b/src/components/Minting/Minting.tsx index 0992e57..8ac5e55 100644 --- a/src/components/Minting/Minting.tsx +++ b/src/components/Minting/Minting.tsx @@ -85,14 +85,14 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => { const getName = async (address) => { try { const response = await fetch( - `${getBaseApiReact()}/names/address/${address}` + `${getBaseApiReact()}/names/primary/${address}` ); const nameData = await response.json(); - if (nameData?.length > 0) { + if (nameData?.name) { setNames((prev) => { return { ...prev, - [address]: nameData[0].name, + [address]: nameData?.name, }; }); } else { diff --git a/src/encryption/encryption.ts b/src/encryption/encryption.ts index ab0a36d..2bf82f6 100644 --- a/src/encryption/encryption.ts +++ b/src/encryption/encryption.ts @@ -26,10 +26,10 @@ export async function getNameInfo() { const wallet = await getSaveWallet(); const address = wallet.address0; const validApi = await getBaseApi(); - const response = await fetch(validApi + '/names/address/' + address); + const response = await fetch(validApi + '/names/primary/' + address); const nameData = await response.json(); - if (nameData?.length > 0) { - return nameData[0].name; + if (nameData?.name) { + return nameData?.name; } else { return ''; } diff --git a/src/hooks/useQortalMessageListener.tsx b/src/hooks/useQortalMessageListener.tsx index 29549dc..d2a54c4 100644 --- a/src/hooks/useQortalMessageListener.tsx +++ b/src/hooks/useQortalMessageListener.tsx @@ -256,6 +256,7 @@ export const listOfAllQortalRequests = [ 'UPDATE_GROUP', 'UPDATE_NAME', 'VOTE_ON_POLL', + 'GET_PRIMARY_NAME', ]; export const UIQortalRequests = [ @@ -319,6 +320,7 @@ export const UIQortalRequests = [ 'UPDATE_GROUP', 'UPDATE_NAME', 'VOTE_ON_POLL', + 'GET_PRIMARY_NAME', ]; async function retrieveFileFromIndexedDB(fileId) { diff --git a/src/qortal/qortal-requests.ts b/src/qortal/qortal-requests.ts index 6a164b6..f67b922 100644 --- a/src/qortal/qortal-requests.ts +++ b/src/qortal/qortal-requests.ts @@ -1,4 +1,8 @@ -import { gateways, getApiKeyFromStorage } from '../background/background.ts'; +import { + gateways, + getApiKeyFromStorage, + getNameInfoForOthers, +} from '../background/background.ts'; import { listOfAllQortalRequests } from '../hooks/useQortalMessageListener.tsx'; import { addForeignServer, @@ -1932,6 +1936,33 @@ function setupMessageListenerQortalRequest() { break; } + case 'GET_PRIMARY_NAME': { + try { + const res = await getNameInfoForOthers(request.payload?.address); + const resData = res ? res : null; + event.source.postMessage( + { + requestId: request.requestId, + action: request.action, + payload: resData, + type: 'backgroundMessageResponse', + }, + event.origin + ); + } catch (error) { + event.source.postMessage( + { + requestId: request.requestId, + action: request.action, + error: error.message, + type: 'backgroundMessageResponse', + }, + event.origin + ); + } + break; + } + default: break; } diff --git a/src/utils/chat.ts b/src/utils/chat.ts index c7099c0..fed287d 100644 --- a/src/utils/chat.ts +++ b/src/utils/chat.ts @@ -20,3 +20,7 @@ export const messageHasImage = (message) => { message.images[0]?.service ); }; + +export function isHtmlString(value) { + return typeof value === 'string' && /<[^>]+>/.test(value.trim()); +}