From e4cb81893237d504aa8b971eca6feb5e1974de0f Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sat, 17 May 2025 15:13:25 +0200 Subject: [PATCH 01/16] Travslate attachment --- src/components/Embeds/AttachmentEmbed.tsx | 93 +++++++++++++++-------- src/i18n/locales/en/auth.json | 2 + src/i18n/locales/en/core.json | 8 ++ src/i18n/locales/en/group.json | 1 + 4 files changed, 74 insertions(+), 30 deletions(-) diff --git a/src/components/Embeds/AttachmentEmbed.tsx b/src/components/Embeds/AttachmentEmbed.tsx index 8086253..292be68 100644 --- a/src/components/Embeds/AttachmentEmbed.tsx +++ b/src/components/Embeds/AttachmentEmbed.tsx @@ -1,19 +1,12 @@ -import React, { useContext, useEffect, useMemo, useRef, useState } from 'react'; +import { useContext, useState } from 'react'; import { MyContext, getBaseApiReact } from '../../App'; import { Card, CardContent, - CardHeader, Typography, - RadioGroup, - Radio, - FormControlLabel, - Button, Box, ButtonBase, Divider, - Dialog, - IconButton, CircularProgress, useTheme, } from '@mui/material'; @@ -27,8 +20,8 @@ import { Spacer } from '../../common/Spacer'; import { FileAttachmentContainer, FileAttachmentFont } from './Embed-styles'; import DownloadIcon from '@mui/icons-material/Download'; import SaveIcon from '@mui/icons-material/Save'; - import { decodeIfEncoded } from '../../utils/decode'; +import { useTranslation } from 'react-i18next'; export const AttachmentCard = ({ resourceData, @@ -45,6 +38,7 @@ export const AttachmentCard = ({ const [isOpen, setIsOpen] = useState(true); const { downloadResource } = useContext(MyContext); const theme = useTheme(); + const { t } = useTranslation(['auth', 'core', 'group']); const saveToDisk = async () => { const { name, service, identifier } = resourceData; @@ -64,16 +58,15 @@ export const AttachmentCard = ({ let blobUrl; try { const { name, service, identifier, key } = resourceData; - const url = `${getBaseApiReact()}/arbitrary/${service}/${name}/${identifier}?encoding=base64`; const res = await fetch(url); const data = await res.text(); let decryptedData; + try { if (key && encryptionType === 'private') { decryptedData = await window.sendMessage( 'DECRYPT_DATA_WITH_SHARING_KEY', - { encryptedData: data, key: decodeURIComponent(key), @@ -91,11 +84,19 @@ export const AttachmentCard = ({ ); } } catch (error) { - throw new Error('Unable to decrypt'); + throw new Error( + t('auth:message.error.unable_decrypt', { + postProcess: 'capitalizeFirst', + }) + ); } if (!decryptedData || decryptedData?.error) - throw new Error('Could not decrypt data'); + throw new Error( + t('auth:message.error.decrypt_data', { + postProcess: 'capitalizeFirst', + }) + ); blobUrl = base64ToBlobUrl(decryptedData, resourceData?.mimeType); const response = await fetch(blobUrl); const blob = await response.blob(); @@ -108,18 +109,18 @@ export const AttachmentCard = ({ } } }; + return ( - ATTACHMENT embed + + {t('core:attachment', { postProcess: 'capitalizeAll' })} + + @@ -154,6 +158,7 @@ export const AttachmentCard = ({ }} /> + {external && ( + - Created by {decodeIfEncoded(owner)} + {t('core:message.generic.created_by', { + owner: decodeIfEncoded(owner), + postProcess: 'capitalizeFirst', + })} + {encryptionType === 'private' - ? 'ENCRYPTED' + ? t('core:message.generic.encrypted', { + postProcess: 'capitalizeAll', + }) : encryptionType === 'group' - ? 'GROUP ENCRYPTED' - : 'Not encrypted'} + ? t('group:message.generic.group_encrypted', { + postProcess: 'capitalizeAll', + }) + : t('core:message.generic.encrypted_not', { + postProcess: 'capitalizeAll', + })} + + {isLoadingParent && isOpen && ( {' '} @@ -215,9 +233,9 @@ export const AttachmentCard = ({ {errorMsg && ( {' '} @@ -249,8 +267,8 @@ export const AttachmentCard = ({ )} { if (resourceDetails?.status?.status === 'READY') { @@ -267,15 +285,23 @@ export const AttachmentCard = ({ {resourceDetails?.status?.status === 'DOWNLOADED' - ? 'BUILDING' + ? t('core:message.error.generic.building', { + postProcess: 'capitalizeAll', + }) : resourceDetails?.status?.status} + {!resourceDetails && ( <> - Download File + + {t('core:action.download_file', { + postProcess: 'capitalizeFirst', + })} + )} + {resourceDetails && resourceDetails?.status?.status !== 'READY' && resourceDetails?.status?.status !== 'FAILED_TO_DOWNLOAD' && ( @@ -287,16 +313,23 @@ export const AttachmentCard = ({ }} /> - Downloading:{' '} - {resourceDetails?.status?.percentLoaded || '0'}% + {t('core:message.generic.downloading', { + postProcess: 'capitalizeFirst', + })} + : {resourceDetails?.status?.percentLoaded || '0'}% )} + {resourceDetails && resourceDetails?.status?.status === 'READY' && ( <> - Save to Disk + + {t('core:action.save_disk', { + postProcess: 'capitalizeFirst', + })} + )} diff --git a/src/i18n/locales/en/auth.json b/src/i18n/locales/en/auth.json index daf0c8d..a62b460 100644 --- a/src/i18n/locales/en/auth.json +++ b/src/i18n/locales/en/auth.json @@ -35,9 +35,11 @@ "message": { "error": { "account_creation": "could not create account.", + "decrypt_data": "could not decrypt data", "field_not_found_json": "{{ field }} not found in JSON", "incorrect_password": "incorrect password", "invalid_secret_key": "secretKey is not valid", + "unable_decrypt": "unable to decrypt", "unable_reencrypt_secret_key": "unable to re-encrypt secret key" }, "generic": { diff --git a/src/i18n/locales/en/core.json b/src/i18n/locales/en/core.json index cc7d495..ff3c051 100644 --- a/src/i18n/locales/en/core.json +++ b/src/i18n/locales/en/core.json @@ -30,6 +30,7 @@ "decrypt": "decrypt", "disable_enter": "disable enter", "download": "download", + "download_file": "download file", "edit": "edit", "enter_name": "enter a name", "export": "export", @@ -61,6 +62,7 @@ "remove_reaction": "remove reaction", "return_apps_dashboard": "return to Apps Dashboard", "save": "save", + "save_disk": "save to disk", "search": "search", "search_apps": "search for apps", "select_app_type": "select App Type", @@ -84,6 +86,7 @@ "app_service_type": "app service type", "apps_dashboard": "apps Dashboard", "apps_official": "official Apps", + "attachment": "attachment", "category": "category", "category_other": "categories", "core": { @@ -156,11 +159,16 @@ }, "generic": { "avatar_size": "{{ size }} KB max. for GIFS", + "building": "building", + "created_by": "created by {{ owner }}", "buy_order_request": "the Application
{{hostname}}
is requesting {{count}} buy order", "buy_order_request_other": "the Application
{{hostname}}
is requesting {{count}} buy orders", "devmode_local_node": "please use your local node for dev mode! Logout and use Local node.", + "downloading": "downloading", "edited": "edited", "editing_message": "editing message", + "encrypted": "encrypted", + "encrypted_not": "not encrypted", "fee_qort": "fee: {{ message }} QORT", "foreign_fee": "foreign fee: {{ message }}", "mentioned": "mentioned", diff --git a/src/i18n/locales/en/group.json b/src/i18n/locales/en/group.json index 5b14b7c..d70309b 100644 --- a/src/i18n/locales/en/group.json +++ b/src/i18n/locales/en/group.json @@ -70,6 +70,7 @@ "descrypt_wallet": "decrypting wallet...", "encryption_key": "the group's first common encryption key is in the process of creation. Please wait a few minutes for it to be retrieved by the network. Checking every 2 minutes...", "group_announcement": "group Announcements", + "group_encrypted": "group encrypted", "group_invited_you": "{{group}} has invited you", "group_key_created": "first group key created.", "group_member_list_changed": "the group member list has changed. Please re-encrypt the secret key.", From 431cebdd907825f48919772f99c0521fc111211f Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sat, 17 May 2025 15:19:02 +0200 Subject: [PATCH 02/16] Remove unused functions --- src/components/Minting/Minting.tsx | 52 ------------------------------ 1 file changed, 52 deletions(-) diff --git a/src/components/Minting/Minting.tsx b/src/components/Minting/Minting.tsx index b0e1763..5869f34 100644 --- a/src/components/Minting/Minting.tsx +++ b/src/components/Minting/Minting.tsx @@ -302,7 +302,6 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => { const fee = await getFee('REWARD_SHARE'); await show({ message: t('core:message.question.perform_transaction', { - // TODO move from group into core namespace action: 'REWARD_SHARE', postProcess: 'capitalizeFirst', }), @@ -495,57 +494,6 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => { }); }, []); - // TODO unused functions. Remove?? - - // const handleRemoveRewardShare = async (rewardShare) => { - // try { - // setIsLoading(true); - - // const privateRewardShare = await removeRewardShare(rewardShare); - // } catch (error) { - // setInfo({ - // type: 'error', - // message: error?.message || 'Unable to remove reward share', - // }); - // setOpenSnack(true); - // } finally { - // setIsLoading(false); - // } - // }; - - // const createRewardShareForPotentialMinter = async (receiver) => { - // try { - // setIsLoading(true); - // const confirmReceiver = await getNameOrAddress(receiver); - // if (confirmReceiver.error) - // throw new Error('Invalid receiver address or name'); - // const isInMinterGroup = await checkIfMinterGroup(confirmReceiver); - // if (!isInMinterGroup) throw new Error('Account not in Minter Group'); - // const publicKey = await getPublicKeyFromAddress(confirmReceiver); - // const findRewardShare = rewardShares?.find( - // (item) => - // item?.recipient === confirmReceiver && - // item?.mintingAccount === myAddress - // ); - // if (findRewardShare) { - // const privateRewardShare = await getRewardSharePrivateKey(publicKey); - // setRewardsharekey(privateRewardShare); - // } else { - // await createRewardShare(publicKey, confirmReceiver); - // const privateRewardShare = await getRewardSharePrivateKey(publicKey); - // setRewardsharekey(privateRewardShare); - // } - // } catch (error) { - // setInfo({ - // type: 'error', - // message: error?.message || 'Unable to create reward share', - // }); - // setOpenSnack(true); - // } finally { - // setIsLoading(false); - // } - // }; - useEffect(() => { getNodeInfos(); getMintingAccounts(); From 7e3c97c4a793315e4d37deb6ad8edffcd7b8e480 Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sat, 17 May 2025 15:19:10 +0200 Subject: [PATCH 03/16] Refactor --- src/components/Embeds/Embed-styles.tsx | 32 +++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/components/Embeds/Embed-styles.tsx b/src/components/Embeds/Embed-styles.tsx index b0b5482..fa20b36 100644 --- a/src/components/Embeds/Embed-styles.tsx +++ b/src/components/Embeds/Embed-styles.tsx @@ -1,18 +1,18 @@ -import { Box, Typography, styled } from "@mui/material"; +import { Box, Typography, styled } from '@mui/material'; export const FileAttachmentContainer = styled(Box)(({ theme }) => ({ - display: "flex", - alignItems: "center", - padding: "5px 10px", - border: `1px solid ${theme.palette.text.primary}`, - width: "100%", - gap: '20px' - })); - - export const FileAttachmentFont = styled(Typography)(({ theme }) => ({ - fontSize: "20px", - letterSpacing: 0, - fontWeight: 400, - userSelect: "none", - whiteSpace: "nowrap", - })); \ No newline at end of file + alignItems: 'center', + border: `1px solid ${theme.palette.text.primary}`, + display: 'flex', + gap: '20px', + padding: '5px 10px', + width: '100%', +})); + +export const FileAttachmentFont = styled(Typography)(({ theme }) => ({ + fontSize: '20px', + fontWeight: 400, + letterSpacing: 0, + userSelect: 'none', + whiteSpace: 'nowrap', +})); From a7b7768d2267ac2d61f6bd2c16c3e9fda6faf35d Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sat, 17 May 2025 15:30:23 +0200 Subject: [PATCH 04/16] Add translations --- .../Chat/AnnouncementDiscussion.tsx | 2 +- src/components/Embeds/Embed.tsx | 47 +++++++++++++------ src/i18n/locales/en/core.json | 3 ++ 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/components/Chat/AnnouncementDiscussion.tsx b/src/components/Chat/AnnouncementDiscussion.tsx index 4ab4771..e101246 100644 --- a/src/components/Chat/AnnouncementDiscussion.tsx +++ b/src/components/Chat/AnnouncementDiscussion.tsx @@ -185,7 +185,7 @@ export const AnnouncementDiscussion = ({ clearEditorContent(); } - // TODO send chat message + // send chat message } catch (error) { console.error(error); } finally { diff --git a/src/components/Embeds/Embed.tsx b/src/components/Embeds/Embed.tsx index 995284a..997d5fd 100644 --- a/src/components/Embeds/Embed.tsx +++ b/src/components/Embeds/Embed.tsx @@ -1,11 +1,8 @@ -import React, { useEffect, useMemo, useRef, useState } from 'react'; +import { useEffect, useMemo, useRef, useState } from 'react'; import { getBaseApiReact } from '../../App'; - import { CustomizedSnackbars } from '../Snackbar/Snackbar'; - import { extractComponents } from '../Chat/MessageDisplay'; import { executeEvent } from '../../utils/events'; - import { base64ToBlobUrl } from '../../utils/fileReading'; import { blobControllerAtom, @@ -17,8 +14,8 @@ import { parseQortalLink } from './embed-utils'; import { PollCard } from './PollEmbed'; import { ImageCard } from './ImageEmbed'; import { AttachmentCard } from './AttachmentEmbed'; -import { decodeIfEncoded } from '../../utils/decode'; import { useAtom, useAtomValue, useSetAtom } from 'jotai'; +import { useTranslation } from 'react-i18next'; const getPoll = async (name) => { const pollName = name; @@ -32,6 +29,7 @@ const getPoll = async (name) => { }); const responseData = await response.json(); + if (responseData?.message?.includes('POLL_NO_EXISTS')) { throw new Error('POLL_NO_EXISTS'); } else if (responseData?.pollName) { @@ -65,7 +63,7 @@ export const Embed = ({ embedLink }) => { const [parsedData, setParsedData] = useState(null); const setBlobs = useSetAtom(blobControllerAtom); const [selectedGroupId] = useAtom(selectedGroupIdAtom); - + const { t } = useTranslation(['auth', 'core', 'group']); const resourceData = useMemo(() => { const parsedDataOnTheFly = parseQortalLink(embedLink); if ( @@ -108,11 +106,20 @@ export const Embed = ({ embedLink }) => { setErrorMsg(''); setType('POLL'); if (!parsedData?.name) - throw new Error('Invalid poll embed link. Missing name.'); + throw new Error( + t('core:message.error.invalid_embed_link_name', { + postProcess: 'capitalizeFirst', + }) + ); const pollRes = await getPoll(parsedData.name); setPoll(pollRes); } catch (error) { - setErrorMsg(error?.message || 'Invalid embed link'); + setErrorMsg( + error?.message || + t('core:message.error.invalid_embed_link', { + postProcess: 'capitalizeFirst', + }) + ); } finally { setIsLoading(false); } @@ -147,14 +154,15 @@ export const Embed = ({ embedLink }) => { 'Content-Type': 'application/json', }, }); + const data = await responseData.text(); + if (data) { let decryptedData; try { if (key && encryptionType === 'private') { decryptedData = await window.sendMessage( 'DECRYPT_DATA_WITH_SHARING_KEY', - { encryptedData: data, key: decodeURIComponent(key), @@ -164,7 +172,6 @@ export const Embed = ({ embedLink }) => { if (encryptionType === 'group') { decryptedData = await window.sendMessage( 'DECRYPT_QORTAL_GROUP_DATA', - { data64: data, groupId: selectedGroupId, @@ -172,11 +179,19 @@ export const Embed = ({ embedLink }) => { ); } } catch (error) { - throw new Error('Unable to decrypt'); + throw new Error( + t('auth:message.error.unable_decrypt', { + postProcess: 'capitalizeFirst', + }) + ); } if (!decryptedData || decryptedData?.error) - throw new Error('Could not decrypt data'); + throw new Error( + t('auth:message.error.decrypt_data', { + postProcess: 'capitalizeFirst', + }) + ); imageFinalUrl = base64ToBlobUrl( decryptedData, parsedData?.mimeType @@ -193,11 +208,14 @@ export const Embed = ({ embedLink }) => { }; }); } else { - throw new Error('No data for image'); + throw new Error( + t('core:message.generic.no_data_image', { + postProcess: 'capitalizeFirst', + }) + ); } } else { imageFinalUrl = `${getBaseApiReact()}/arbitrary/${service}/${name}/${identifier}?async=true`; - // If parsedData is used here, it must be defined somewhere } } @@ -219,6 +237,7 @@ export const Embed = ({ embedLink }) => { if (imageFinalUrl) { return imageFinalUrl; } else { + //TODO translate setErrorMsg( 'Unable to download IMAGE. Please try again later by clicking the refresh button' ); diff --git a/src/i18n/locales/en/core.json b/src/i18n/locales/en/core.json index ff3c051..8edaa73 100644 --- a/src/i18n/locales/en/core.json +++ b/src/i18n/locales/en/core.json @@ -136,6 +136,8 @@ "app_need_name": "your app needs a name", "file_too_large": "file {{ filename }} is too large. Max size allowed is {{ size }} MB.", "generic": "an error occurred", + "invalid_embed_link": "invalid embed link", + "invalid_embed_link_name": "invalid poll embed link. Missing name.", "invalid_signature": "invalid signature", "invalid_zip": "invalid zip", "message_loading": "error loading message.", @@ -181,6 +183,7 @@ "name_rate": "you need a name to rate.", "name_registration": "your balance is {{ balance }} QORT. A name registration requires a {{ fee }} QORT fee", "name_unavailable": "{{ name }} is unavailable", + "no_data_image": "no data for image", "no_description": "no description", "no_minting_details": "cannot view minting details on the gateway", "no_notifications": "no new notifications", From 49a01151df4b2ed756429345d842a6f49bb4429e Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sat, 17 May 2025 15:40:22 +0200 Subject: [PATCH 05/16] Add translations --- src/components/Group/Group.tsx | 17 +++++++++++++---- src/i18n/locales/en/core.json | 2 ++ src/i18n/locales/en/group.json | 1 + 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index 10e39a4..9c6e2aa 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -1750,9 +1750,9 @@ export const Group = ({ > @@ -1766,12 +1766,18 @@ export const Group = ({ {(direct?.name || direct?.address)?.charAt(0)} + ))} +
- New Chat + {t('core:action.new.chat', { + postProcess: 'capitalizeFirst', + })}
diff --git a/src/i18n/locales/en/core.json b/src/i18n/locales/en/core.json index 8edaa73..18cffb2 100644 --- a/src/i18n/locales/en/core.json +++ b/src/i18n/locales/en/core.json @@ -44,6 +44,7 @@ "login": "login", "logout": "logout", "new": { + "chat": "chat", "post": "new post", "thread": "new thread" }, @@ -185,6 +186,7 @@ "name_unavailable": "{{ name }} is unavailable", "no_data_image": "no data for image", "no_description": "no description", + "no_messages": "no messages", "no_minting_details": "cannot view minting details on the gateway", "no_notifications": "no new notifications", "no_pinned_changes": "you currently do not have any changes to your pinned apps", diff --git a/src/i18n/locales/en/group.json b/src/i18n/locales/en/group.json index d70309b..45be215 100644 --- a/src/i18n/locales/en/group.json +++ b/src/i18n/locales/en/group.json @@ -59,6 +59,7 @@ "join_link": "join group link", "join_requests": "join requests", "last_message": "last message", + "last_message_date": "last message: {{date }}", "latest_mails": "latest Q-Mails", "message": { "generic": { From 5a5d68ab79c2fe4a34453c0769bf2a237b60e82b Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sun, 18 May 2025 14:49:10 +0200 Subject: [PATCH 06/16] Move processors in their own file --- src/i18n/i18n.ts | 13 +------------ src/i18n/processors.ts | 11 +++++++++++ 2 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 src/i18n/processors.ts diff --git a/src/i18n/i18n.ts b/src/i18n/i18n.ts index 23a76a3..614f814 100644 --- a/src/i18n/i18n.ts +++ b/src/i18n/i18n.ts @@ -1,18 +1,7 @@ import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; import LanguageDetector from 'i18next-browser-languagedetector'; - -const capitalizeAll = { - type: 'postProcessor', - name: 'capitalizeAll', - process: (value: string) => value.toUpperCase(), -}; - -const capitalizeFirst = { - type: 'postProcessor', - name: 'capitalizeFirst', - process: (value: string) => value.charAt(0).toUpperCase() + value.slice(1), -}; +import { capitalizeAll, capitalizeFirst } from './processors'; export const supportedLanguages = { de: { name: 'Deutsch', flag: '🇩🇪' }, diff --git a/src/i18n/processors.ts b/src/i18n/processors.ts new file mode 100644 index 0000000..cb2f8e4 --- /dev/null +++ b/src/i18n/processors.ts @@ -0,0 +1,11 @@ +export const capitalizeAll = { + type: 'postProcessor', + name: 'capitalizeAll', + process: (value: string) => value.toUpperCase(), +}; + +export const capitalizeFirst = { + type: 'postProcessor', + name: 'capitalizeFirst', + process: (value: string) => value.charAt(0).toUpperCase() + value.slice(1), +}; From 42cc8ad2473f33fe3442a60ce57cedf81babc2e2 Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sun, 18 May 2025 18:53:08 +0200 Subject: [PATCH 07/16] Change location --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 34cfbbb..b6ba339 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,6 @@ Many additional details and a fully featured wiki will be created over time. Rea Qortal-Hub supports internationalization (i18n) using [i18next](https://www.i18next.com/), allowing seamless translation of UI text into multiple languages. The setup includes modularized translation files, language detection, context and runtime language switching. -Files with translation are in `public/locales/` folder. +Files with translation are in `src/i18n/locales/` folder. See [guidelines](./docs/i18n_languages.md). From 10bbf420c34cd96e6b064a1abb5e4625b5672ea5 Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sun, 18 May 2025 19:14:03 +0200 Subject: [PATCH 08/16] Update all useTranslation references with all namespaces --- src/Wallets.tsx | 4 +-- src/components/Apps/AppInfo.tsx | 2 +- src/components/Apps/AppInfoSnippet.tsx | 2 +- src/components/Apps/AppPublish.tsx | 2 +- src/components/Apps/AppRating.tsx | 2 +- src/components/Apps/AppsDesktop.tsx | 17 ++++++++--- src/components/Apps/AppsDevMode.tsx | 30 ++++++++++++------- src/components/Apps/AppsDevModeHome.tsx | 2 +- src/components/Apps/AppsHomeDesktop.tsx | 2 +- src/components/Apps/AppsLibraryDesktop.tsx | 2 +- src/components/Apps/AppsNavBarDesktop.tsx | 2 +- src/components/Apps/AppsPrivate.tsx | 19 ++++++++---- src/components/Chat/AdminSpace.tsx | 2 +- src/components/CoreSyncStatus.tsx | 2 +- src/components/DesktopSideBar.tsx | 8 +++-- src/components/GeneralNotifications.tsx | 2 +- src/components/GlobalActions/JoinGroup.tsx | 2 +- src/components/Group/AddGroup.tsx | 2 +- src/components/Group/AddGroupList.tsx | 2 +- src/components/Group/Forum/GroupMail.tsx | 2 +- src/components/Group/Forum/NewThread.tsx | 2 +- src/components/Group/Forum/Thread.tsx | 2 +- src/components/Group/Group.tsx | 2 +- src/components/Group/GroupInvites.tsx | 2 +- src/components/Group/GroupJoinRequests.tsx | 2 +- src/components/Group/HomeDesktop.tsx | 2 +- src/components/Group/InviteMember.tsx | 2 +- src/components/Group/ListOfBans.tsx | 2 +- .../Group/ListOfGroupPromotions.tsx | 2 +- src/components/Group/ListOfInvites.tsx | 2 +- src/components/Group/ListOfJoinRequests.tsx | 2 +- src/components/Group/ListOfMembers.tsx | 2 +- .../Group/ListOfThreadPostsWatched.tsx | 2 +- src/components/Group/ManageMembers.tsx | 2 +- src/components/Group/QMailMessages.tsx | 2 +- src/components/Group/Settings.tsx | 4 +-- src/components/Group/UserListOfInvites.tsx | 2 +- src/components/Home/NewUsersCTA.tsx | 2 +- src/components/Minting/Minting.tsx | 2 +- src/components/QMailStatus.tsx | 2 +- src/components/RegisterName.tsx | 2 +- src/components/Save/Save.tsx | 2 +- src/components/Theme/ThemeSelector.tsx | 2 +- src/i18n/locales/en/core.json | 6 +++- src/i18n/locales/en/group.json | 1 + src/i18n/locales/it/core.json | 5 +++- 46 files changed, 102 insertions(+), 66 deletions(-) diff --git a/src/Wallets.tsx b/src/Wallets.tsx index 5d4cfc6..135ff26 100644 --- a/src/Wallets.tsx +++ b/src/Wallets.tsx @@ -49,7 +49,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { const [isOpenSeedModal, setIsOpenSeedModal] = useState(false); const [isLoadingEncryptSeed, setIsLoadingEncryptSeed] = useState(false); const theme = useTheme(); - const { t } = useTranslation(['core', 'auth']); + const { t } = useTranslation(['auth', 'core', 'group']); const { isShow, onCancel, onOk, show } = useModal(); const { getRootProps, getInputProps } = useDropzone({ @@ -453,7 +453,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => { const [note, setNote] = useState(''); const [isEdit, setIsEdit] = useState(false); const theme = useTheme(); - const { t } = useTranslation(['core', 'auth']); + const { t } = useTranslation(['auth', 'core', 'group']); useEffect(() => { if (wallet?.name) { diff --git a/src/components/Apps/AppInfo.tsx b/src/components/Apps/AppInfo.tsx index 6e8e274..93d807d 100644 --- a/src/components/Apps/AppInfo.tsx +++ b/src/components/Apps/AppInfo.tsx @@ -37,7 +37,7 @@ export const AppInfo = ({ app, myName }) => { ); const theme = useTheme(); - const { t } = useTranslation(['core', 'auth', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const isSelectedAppPinned = !!sortablePinnedApps?.find( (item) => item?.name === app?.name && item?.service === app?.service diff --git a/src/components/Apps/AppInfoSnippet.tsx b/src/components/Apps/AppInfoSnippet.tsx index 1629b5e..ea949d0 100644 --- a/src/components/Apps/AppInfoSnippet.tsx +++ b/src/components/Apps/AppInfoSnippet.tsx @@ -42,7 +42,7 @@ export const AppInfoSnippet = ({ ); const theme = useTheme(); - const { t } = useTranslation(['core', 'auth', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); return ( { const [file, setFile] = useState(null); const { show } = useContext(MyContext); const theme = useTheme(); - const { t } = useTranslation(['core', 'auth', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const [tag1, setTag1] = useState(''); const [tag2, setTag2] = useState(''); const [tag3, setTag3] = useState(''); diff --git a/src/components/Apps/AppRating.tsx b/src/components/Apps/AppRating.tsx index 860dfc4..7889a36 100644 --- a/src/components/Apps/AppRating.tsx +++ b/src/components/Apps/AppRating.tsx @@ -20,7 +20,7 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { const [openSnack, setOpenSnack] = useState(false); const [infoSnack, setInfoSnack] = useState(null); const hasCalledRef = useRef(false); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const getRating = useCallback(async (name, service) => { try { diff --git a/src/components/Apps/AppsDesktop.tsx b/src/components/Apps/AppsDesktop.tsx index a976534..9a66da3 100644 --- a/src/components/Apps/AppsDesktop.tsx +++ b/src/components/Apps/AppsDesktop.tsx @@ -50,7 +50,7 @@ export const AppsDesktop = ({ const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom); const { showTutorial } = useContext(MyContext); const theme = useTheme(); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const myApp = useMemo(() => { return availableQapps.find( @@ -381,7 +381,12 @@ export const AppsDesktop = ({ setDesktopViewMode('apps'); }} > - +
@@ -399,7 +404,9 @@ export const AppsDesktop = ({ ? theme.palette.text.primary : theme.palette.text.secondary } - label="Chat" + label={t('core:chat', { + postProcess: 'capitalizeFirst', + })} disableWidth > { setTimeout(() => { @@ -108,7 +110,6 @@ export const AppsDevMode = ({ setTabs((prev) => [...prev, newTab]); setSelectedTab(newTab); setMode('viewer'); - setIsNewTabWindow(false); }; @@ -215,25 +216,25 @@ export const AppsDevMode = ({ @@ -241,8 +242,8 @@ export const AppsDevMode = ({ { goToHome(); @@ -267,7 +268,9 @@ export const AppsDevMode = ({ color={ isApps ? theme.palette.text.primary : theme.palette.text.secondary } - label="Apps" + label={t('core:app_other', { + postProcess: 'capitalizeFirst', + })} disableWidth > + {mode !== 'home' && } @@ -382,10 +390,10 @@ export const AppsDevMode = ({ diff --git a/src/components/Apps/AppsDevModeHome.tsx b/src/components/Apps/AppsDevModeHome.tsx index a02136e..a95e329 100644 --- a/src/components/Apps/AppsDevModeHome.tsx +++ b/src/components/Apps/AppsDevModeHome.tsx @@ -41,7 +41,7 @@ export const AppsDevModeHome = ({ const [domain, setDomain] = useState('127.0.0.1'); const [port, setPort] = useState(''); const [selectedPreviewFile, setSelectedPreviewFile] = useState(null); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const { isShow, onCancel, onOk, show, message } = useModal(); const { openSnackGlobal, diff --git a/src/components/Apps/AppsHomeDesktop.tsx b/src/components/Apps/AppsHomeDesktop.tsx index b2c67cf..42afb74 100644 --- a/src/components/Apps/AppsHomeDesktop.tsx +++ b/src/components/Apps/AppsHomeDesktop.tsx @@ -27,7 +27,7 @@ export const AppsHomeDesktop = ({ }) => { const [qortalUrl, setQortalUrl] = useState(''); const theme = useTheme(); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const openQortalUrl = () => { try { diff --git a/src/components/Apps/AppsLibraryDesktop.tsx b/src/components/Apps/AppsLibraryDesktop.tsx index ebe0ddd..53ef843 100644 --- a/src/components/Apps/AppsLibraryDesktop.tsx +++ b/src/components/Apps/AppsLibraryDesktop.tsx @@ -105,7 +105,7 @@ export const AppsLibraryDesktop = ({ const [searchValue, setSearchValue] = useState(''); const virtuosoRef = useRef(null); const theme = useTheme(); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const officialApps = useMemo(() => { return availableQapps.filter( diff --git a/src/components/Apps/AppsNavBarDesktop.tsx b/src/components/Apps/AppsNavBarDesktop.tsx index f294834..80f8f03 100644 --- a/src/components/Apps/AppsNavBarDesktop.tsx +++ b/src/components/Apps/AppsNavBarDesktop.tsx @@ -76,7 +76,7 @@ export const AppsNavBarDesktop = ({ disableBack }) => { ); const theme = useTheme(); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const [isNewTabWindow, setIsNewTabWindow] = useState(false); const tabsRef = useRef(null); const [anchorEl, setAnchorEl] = useState(null); diff --git a/src/components/Apps/AppsPrivate.tsx b/src/components/Apps/AppsPrivate.tsx index de2c744..dae28a8 100644 --- a/src/components/Apps/AppsPrivate.tsx +++ b/src/components/Apps/AppsPrivate.tsx @@ -63,7 +63,7 @@ export const AppsPrivate = ({ myName }) => { const [memberGroups] = useAtom(memberGroupsAtom); const theme = useTheme(); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const myGroupsPrivate = useMemo(() => { return memberGroups?.filter( @@ -321,7 +321,9 @@ export const AppsPrivate = ({ myName }) => { }} > { }} /> { labelId="demo-simple-select-label" id="demo-simple-select" value={privateAppValues?.groupId} - label="Groups" + label={t('group:group.group_other', { + postProcess: 'capitalizeFirst', + })} onChange={(e) => { setPrivateAppValues((prev) => { return { @@ -552,7 +558,9 @@ export const AppsPrivate = ({ myName }) => { labelId="demo-simple-select-label" id="demo-simple-select" value={selectedGroup} - label="Groups where you are an admin" + label={t('group:group.groups_admin', { + postProcess: 'capitalizeFirst', + })} onChange={(e) => setSelectedGroup(e.target.value)} > @@ -560,6 +568,7 @@ export const AppsPrivate = ({ myName }) => { postProcess: 'capitalizeFirst', })} + {myGroupsWhereIAmAdmin ?.filter((item) => !item?.isOpen) .map((group) => { diff --git a/src/components/Chat/AdminSpace.tsx b/src/components/Chat/AdminSpace.tsx index ca080d8..b9d4a81 100644 --- a/src/components/Chat/AdminSpace.tsx +++ b/src/components/Chat/AdminSpace.tsx @@ -19,7 +19,7 @@ export const AdminSpace = ({ isOwner, }) => { const [isMoved, setIsMoved] = useState(false); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); useEffect(() => { if (hide) { diff --git a/src/components/CoreSyncStatus.tsx b/src/components/CoreSyncStatus.tsx index 3e782c4..768a4b6 100644 --- a/src/components/CoreSyncStatus.tsx +++ b/src/components/CoreSyncStatus.tsx @@ -13,7 +13,7 @@ export const CoreSyncStatus = () => { const [coreInfos, setCoreInfos] = useState({}); const [isUsingGateway, setIsUsingGateway] = useState(false); - const { t } = useTranslation(['auth', 'core']); + const { t } = useTranslation(['auth', 'core', 'group']); const theme = useTheme(); useEffect(() => { diff --git a/src/components/DesktopSideBar.tsx b/src/components/DesktopSideBar.tsx index e2774a7..800c528 100644 --- a/src/components/DesktopSideBar.tsx +++ b/src/components/DesktopSideBar.tsx @@ -9,6 +9,7 @@ import { CoreSyncStatus } from './CoreSyncStatus'; import LanguageSelector from './Language/LanguageSelector'; import { MessagingIconFilled } from '../assets/Icons/MessagingIconFilled'; import { useAtom } from 'jotai'; +import { useTranslation } from 'react-i18next'; export const DesktopSideBar = ({ goToHome, @@ -27,6 +28,7 @@ export const DesktopSideBar = ({ const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom); const theme = useTheme(); + const { t } = useTranslation(['auth', 'core', 'group']); return ( @@ -105,7 +107,7 @@ export const DesktopSideBar = ({ ? theme.palette.text.primary : theme.palette.text.secondary } - label="Chat" + label={t('core:chat', { postProcess: 'capitalizeFirst' })} disableWidth > diff --git a/src/components/GeneralNotifications.tsx b/src/components/GeneralNotifications.tsx index b88000e..3e23637 100644 --- a/src/components/GeneralNotifications.tsx +++ b/src/components/GeneralNotifications.tsx @@ -32,7 +32,7 @@ export const GeneralNotifications = ({ address }) => { setAnchorEl(event.currentTarget); }; - const { t } = useTranslation(['core']); + const { t } = useTranslation(['auth', 'core', 'group']); const theme = useTheme(); return ( diff --git a/src/components/GlobalActions/JoinGroup.tsx b/src/components/GlobalActions/JoinGroup.tsx index 6b63257..dd83b06 100644 --- a/src/components/GlobalActions/JoinGroup.tsx +++ b/src/components/GlobalActions/JoinGroup.tsx @@ -29,7 +29,7 @@ export const JoinGroup = () => { const [isLoadingInfo, setIsLoadingInfo] = useState(false); const [isOpen, setIsOpen] = useState(false); const theme = useTheme(); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const [isLoadingJoinGroup, setIsLoadingJoinGroup] = useState(false); const handleJoinGroup = async (e) => { diff --git a/src/components/Group/AddGroup.tsx b/src/components/Group/AddGroup.tsx index dc12ed3..97cede9 100644 --- a/src/components/Group/AddGroup.tsx +++ b/src/components/Group/AddGroup.tsx @@ -97,7 +97,7 @@ export const AddGroup = ({ address, open, setOpen }) => { setMaxBlock(event.target.value as string); }; - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const theme = useTheme(); const handleCreateGroup = async () => { diff --git a/src/components/Group/AddGroupList.tsx b/src/components/Group/AddGroupList.tsx index daf509c..fb4d87c 100644 --- a/src/components/Group/AddGroupList.tsx +++ b/src/components/Group/AddGroupList.tsx @@ -44,7 +44,7 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { const setTxList = useSetAtom(txListAtom); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const [groups, setGroups] = useState([]); const [popoverAnchor, setPopoverAnchor] = useState(null); // Track which list item the popover is anchored to const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open diff --git a/src/components/Group/Forum/GroupMail.tsx b/src/components/Group/Forum/GroupMail.tsx index c1718a5..ecaca52 100644 --- a/src/components/Group/Forum/GroupMail.tsx +++ b/src/components/Group/Forum/GroupMail.tsx @@ -73,7 +73,7 @@ export const GroupMail = ({ const anchorElInstanceFilter = useRef(null); const [tempPublishedList, setTempPublishedList] = useState([]); const dataPublishes = useRef({}); - const { t } = useTranslation(['core']); + const { t } = useTranslation(['auth', 'core', 'group']); const theme = useTheme(); const [isLoading, setIsLoading] = useState(false); const groupIdRef = useRef(null); diff --git a/src/components/Group/Forum/NewThread.tsx b/src/components/Group/Forum/NewThread.tsx index d37eedd..9da431e 100644 --- a/src/components/Group/Forum/NewThread.tsx +++ b/src/components/Group/Forum/NewThread.tsx @@ -141,7 +141,7 @@ export const NewThread = ({ setPostReply, isPrivate, }: NewMessageProps) => { - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const { show } = useContext(MyContext); const [isOpen, setIsOpen] = useState(false); const [value, setValue] = useState(''); diff --git a/src/components/Group/Forum/Thread.tsx b/src/components/Group/Forum/Thread.tsx index 3ab2862..82ed71f 100644 --- a/src/components/Group/Forum/Thread.tsx +++ b/src/components/Group/Forum/Thread.tsx @@ -115,7 +115,7 @@ export const Thread = ({ const [isLoading, setIsLoading] = useState(true); const [postReply, setPostReply] = useState(null); const [hasLastPage, setHasLastPage] = useState(false); - const { t } = useTranslation(['core']); + const { t } = useTranslation(['auth', 'core', 'group']); const theme = useTheme(); // Update: Use a new ref for the scrollable container const threadContainerRef = useRef(null); diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index 9c6e2aa..be36d56 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -444,7 +444,7 @@ export const Group = ({ const [isForceShowCreationKeyPopup, setIsForceShowCreationKeyPopup] = useState(false); const groupsOwnerNamesRef = useRef({}); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const [groupsProperties, setGroupsProperties] = useAtom(groupsPropertiesAtom); const setGroupsOwnerNames = useSetAtom(groupsOwnerNamesAtom); diff --git a/src/components/Group/GroupInvites.tsx b/src/components/Group/GroupInvites.tsx index f3da8a0..d896786 100644 --- a/src/components/Group/GroupInvites.tsx +++ b/src/components/Group/GroupInvites.tsx @@ -37,7 +37,7 @@ export const GroupInvites = ({ myAddress, setOpenAddGroup }) => { } }; - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const theme = useTheme(); useEffect(() => { diff --git a/src/components/Group/GroupJoinRequests.tsx b/src/components/Group/GroupJoinRequests.tsx index 0991edb..bceff37 100644 --- a/src/components/Group/GroupJoinRequests.tsx +++ b/src/components/Group/GroupJoinRequests.tsx @@ -28,7 +28,7 @@ export const GroupJoinRequests = ({ setDesktopViewMode, }) => { const [isExpanded, setIsExpanded] = React.useState(false); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const [groupsWithJoinRequests, setGroupsWithJoinRequests] = React.useState( [] ); diff --git a/src/components/Group/HomeDesktop.tsx b/src/components/Group/HomeDesktop.tsx index c270df0..cd3e273 100644 --- a/src/components/Group/HomeDesktop.tsx +++ b/src/components/Group/HomeDesktop.tsx @@ -31,7 +31,7 @@ export const HomeDesktop = ({ const [checked1, setChecked1] = React.useState(false); const [checked2, setChecked2] = React.useState(false); - const { t } = useTranslation(['core']); + const { t } = useTranslation(['auth', 'core', 'group']); const theme = useTheme(); React.useEffect(() => { diff --git a/src/components/Group/InviteMember.tsx b/src/components/Group/InviteMember.tsx index ad027e4..82fc6e5 100644 --- a/src/components/Group/InviteMember.tsx +++ b/src/components/Group/InviteMember.tsx @@ -10,7 +10,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => { const [value, setValue] = useState(''); const [expiryTime, setExpiryTime] = useState('259200'); const [isLoadingInvite, setIsLoadingInvite] = useState(false); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const inviteMember = async () => { try { diff --git a/src/components/Group/ListOfBans.tsx b/src/components/Group/ListOfBans.tsx index dda3760..5ffa37b 100644 --- a/src/components/Group/ListOfBans.tsx +++ b/src/components/Group/ListOfBans.tsx @@ -56,7 +56,7 @@ export const ListOfBans = ({ groupId, setInfoSnack, setOpenSnack, show }) => { const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open const listRef = useRef(null); const [isLoadingUnban, setIsLoadingUnban] = useState(false); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const getInvites = async (groupId) => { try { diff --git a/src/components/Group/ListOfGroupPromotions.tsx b/src/components/Group/ListOfGroupPromotions.tsx index 8ca13d4..428372b 100644 --- a/src/components/Group/ListOfGroupPromotions.tsx +++ b/src/components/Group/ListOfGroupPromotions.tsx @@ -97,7 +97,7 @@ export const ListOfGroupPromotions = () => { const { show } = useContext(MyContext); const setTxList = useSetAtom(txListAtom); const theme = useTheme(); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const listRef = useRef(null); const rowVirtualizer = useVirtualizer({ count: promotions.length, diff --git a/src/components/Group/ListOfInvites.tsx b/src/components/Group/ListOfInvites.tsx index 574a9d1..f2368d4 100644 --- a/src/components/Group/ListOfInvites.tsx +++ b/src/components/Group/ListOfInvites.tsx @@ -60,7 +60,7 @@ export const ListOfInvites = ({ const [popoverAnchor, setPopoverAnchor] = useState(null); // Track which list item the popover is anchored to const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open const [isLoadingCancelInvite, setIsLoadingCancelInvite] = useState(false); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const listRef = useRef(null); const getInvites = async (groupId) => { diff --git a/src/components/Group/ListOfJoinRequests.tsx b/src/components/Group/ListOfJoinRequests.tsx index 3b2f740..4b0d7e8 100644 --- a/src/components/Group/ListOfJoinRequests.tsx +++ b/src/components/Group/ListOfJoinRequests.tsx @@ -64,7 +64,7 @@ export const ListOfJoinRequests = ({ const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open const listRef = useRef(null); const [isLoadingAccept, setIsLoadingAccept] = useState(false); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const getInvites = async (groupId) => { try { diff --git a/src/components/Group/ListOfMembers.tsx b/src/components/Group/ListOfMembers.tsx index 783c18c..5b71a25 100644 --- a/src/components/Group/ListOfMembers.tsx +++ b/src/components/Group/ListOfMembers.tsx @@ -42,7 +42,7 @@ const ListOfMembers = ({ const [isLoadingMakeAdmin, setIsLoadingMakeAdmin] = useState(false); const [isLoadingRemoveAdmin, setIsLoadingRemoveAdmin] = useState(false); const theme = useTheme(); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const listRef = useRef(null); const handlePopoverOpen = (event, index) => { diff --git a/src/components/Group/ListOfThreadPostsWatched.tsx b/src/components/Group/ListOfThreadPostsWatched.tsx index af9e1f0..bd3e885 100644 --- a/src/components/Group/ListOfThreadPostsWatched.tsx +++ b/src/components/Group/ListOfThreadPostsWatched.tsx @@ -14,7 +14,7 @@ import { useTranslation } from 'react-i18next'; export const ListOfThreadPostsWatched = () => { const [posts, setPosts] = useState([]); const [loading, setLoading] = useState(true); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const getPosts = async () => { try { diff --git a/src/components/Group/ManageMembers.tsx b/src/components/Group/ManageMembers.tsx index 30a2ef2..195aa34 100644 --- a/src/components/Group/ManageMembers.tsx +++ b/src/components/Group/ManageMembers.tsx @@ -71,7 +71,7 @@ export const ManageMembers = ({ setValue(newValue); }; const theme = useTheme(); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const { show } = useContext(MyContext); const setTxList = useSetAtom(txListAtom); diff --git a/src/components/Group/QMailMessages.tsx b/src/components/Group/QMailMessages.tsx index e2e4ce5..5765f09 100644 --- a/src/components/Group/QMailMessages.tsx +++ b/src/components/Group/QMailMessages.tsx @@ -54,7 +54,7 @@ export const QMailMessages = ({ userName, userAddress }) => { const [loading, setLoading] = useState(true); const theme = useTheme(); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const getMails = useCallback(async () => { try { diff --git a/src/components/Group/Settings.tsx b/src/components/Group/Settings.tsx index 6ba7e84..cea8e45 100644 --- a/src/components/Group/Settings.tsx +++ b/src/components/Group/Settings.tsx @@ -87,7 +87,7 @@ export const Settings = ({ open, setOpen, rawWallet }) => { const [checked, setChecked] = useState(false); const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom); const theme = useTheme(); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const handleChange = (event: ChangeEvent) => { setChecked(event.target.checked); @@ -231,7 +231,7 @@ const ExportPrivateKey = ({ rawWallet }) => { const [privateKey, setPrivateKey] = useState(''); const [isOpen, setIsOpen] = useState(false); const { setOpenSnackGlobal, setInfoSnackCustom } = useContext(MyContext); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const exportPrivateKeyFunc = async () => { try { diff --git a/src/components/Group/UserListOfInvites.tsx b/src/components/Group/UserListOfInvites.tsx index 1e348d2..4850256 100644 --- a/src/components/Group/UserListOfInvites.tsx +++ b/src/components/Group/UserListOfInvites.tsx @@ -61,7 +61,7 @@ export const UserListOfInvites = ({ const [invites, setInvites] = useState([]); const [isLoading, setIsLoading] = useState(false); const theme = useTheme(); - const { t } = useTranslation(['core', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const [popoverAnchor, setPopoverAnchor] = useState(null); // Track which list item the popover is anchored to const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open const listRef = useRef(null); diff --git a/src/components/Home/NewUsersCTA.tsx b/src/components/Home/NewUsersCTA.tsx index b5d330b..ee80ff2 100644 --- a/src/components/Home/NewUsersCTA.tsx +++ b/src/components/Home/NewUsersCTA.tsx @@ -3,7 +3,7 @@ import { Spacer } from '../../common/Spacer'; import { useTranslation } from 'react-i18next'; export const NewUsersCTA = ({ balance }) => { - const { t } = useTranslation(['core']); + const { t } = useTranslation(['auth', 'core', 'group']); if (balance === undefined || +balance > 0) return null; diff --git a/src/components/Minting/Minting.tsx b/src/components/Minting/Minting.tsx index 5869f34..6004e69 100644 --- a/src/components/Minting/Minting.tsx +++ b/src/components/Minting/Minting.tsx @@ -45,7 +45,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => { const { show: showKey, message } = useModal(); const { isShow: isShowNext, onOk, show: showNext } = useModal(); const theme = useTheme(); - const { t } = useTranslation(['core', 'auth', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const [info, setInfo] = useState(null); const [names, setNames] = useState({}); const [accountInfos, setAccountInfos] = useState({}); diff --git a/src/components/QMailStatus.tsx b/src/components/QMailStatus.tsx index 62e7311..0bad117 100644 --- a/src/components/QMailStatus.tsx +++ b/src/components/QMailStatus.tsx @@ -8,7 +8,7 @@ import { useTranslation } from 'react-i18next'; import { useAtom } from 'jotai'; export const QMailStatus = () => { - const { t } = useTranslation(['core']); + const { t } = useTranslation(['auth', 'core', 'group']); const theme = useTheme(); const [lastEnteredTimestamp, setLastEnteredTimestamp] = useAtom( diff --git a/src/components/RegisterName.tsx b/src/components/RegisterName.tsx index e9a4116..5c367a3 100644 --- a/src/components/RegisterName.tsx +++ b/src/components/RegisterName.tsx @@ -51,7 +51,7 @@ export const RegisterName = ({ ); const [nameFee, setNameFee] = useState(null); const theme = useTheme(); - const { t } = useTranslation(['core', 'auth', 'group']); + const { t } = useTranslation(['auth', 'core', 'group']); const checkIfNameExisits = async (name) => { if (!name?.trim()) { setIsNameAvailable(Availability.NULL); diff --git a/src/components/Save/Save.tsx b/src/components/Save/Save.tsx index 38e328b..354b531 100644 --- a/src/components/Save/Save.tsx +++ b/src/components/Save/Save.tsx @@ -84,7 +84,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { const [anchorEl, setAnchorEl] = useState(null); const { show } = useContext(MyContext); const theme = useTheme(); - const { t } = useTranslation(['core']); + const { t } = useTranslation(['auth', 'core', 'group']); const hasChanged = useMemo(() => { const newChanges = { diff --git a/src/components/Theme/ThemeSelector.tsx b/src/components/Theme/ThemeSelector.tsx index 305b4ab..9ed7d84 100644 --- a/src/components/Theme/ThemeSelector.tsx +++ b/src/components/Theme/ThemeSelector.tsx @@ -5,7 +5,7 @@ import DarkModeIcon from '@mui/icons-material/DarkMode'; import { useTranslation } from 'react-i18next'; const ThemeSelector = () => { - const { t } = useTranslation(['core']); + const { t } = useTranslation(['auth', 'core', 'group']); const { themeMode, toggleTheme } = useThemeContext(); diff --git a/src/i18n/locales/en/core.json b/src/i18n/locales/en/core.json index 18cffb2..3b0db29 100644 --- a/src/i18n/locales/en/core.json +++ b/src/i18n/locales/en/core.json @@ -5,6 +5,7 @@ "add_reaction": "add reaction", "accept": "accept", "access": "access", + "access_app": "access app", "backup_account": "backup account", "backup_wallet": "backup wallet", "cancel": "cancel", @@ -44,7 +45,7 @@ "login": "login", "logout": "logout", "new": { - "chat": "chat", + "chat": "new chat", "post": "new post", "thread": "new thread" }, @@ -83,6 +84,7 @@ "all": "all", "api": "API", "app": "app", + "app_other": "apps", "app_name": "app name", "app_service_type": "app service type", "apps_dashboard": "apps Dashboard", @@ -90,12 +92,14 @@ "attachment": "attachment", "category": "category", "category_other": "categories", + "chat": "chat", "core": { "block_height": "block height", "information": "core information", "peers": "connected peers", "version": "core version" }, + "dev": "dev", "domain": "domain", "ui": { "version": "UI version" diff --git a/src/i18n/locales/en/group.json b/src/i18n/locales/en/group.json index 45be215..c4042bf 100644 --- a/src/i18n/locales/en/group.json +++ b/src/i18n/locales/en/group.json @@ -44,6 +44,7 @@ "invites": "group invites", "group": "group", "group_other": "groups", + "groups_admin": "groups where you are an admin", "management": "group management", "member_number": "number of members", "messaging": "messaging", diff --git a/src/i18n/locales/it/core.json b/src/i18n/locales/it/core.json index 8bf930d..ee4e4fc 100644 --- a/src/i18n/locales/it/core.json +++ b/src/i18n/locales/it/core.json @@ -60,7 +60,7 @@ "remove": "remove", "remove_reaction": "remove reaction", "return_apps_dashboard": "return to Apps Dashboard", - "save": "save", + "save": "salva", "search": "search", "search_apps": "search for apps", "select_app_type": "select App Type", @@ -80,18 +80,21 @@ "all": "all", "api": "API", "app": "app", + "app_other": "apps", "app_name": "app name", "app_service_type": "app service type", "apps_dashboard": "apps Dashboard", "apps_official": "official Apps", "category": "category", "category_other": "categories", + "chat": "chat", "core": { "block_height": "altezza blocco", "information": "informazioni core", "peers": "peer connessi", "version": "versione core" }, + "dev": "dev", "domain": "domain", "ui": { "version": "versione UI" From 7a076a9f1f7f84be5b52824c135a88b3ec3df6b5 Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sun, 18 May 2025 19:22:27 +0200 Subject: [PATCH 09/16] Move all hooks into src/hooks/ folder --- src/App.tsx | 10 +++++----- src/components/Apps/AppViewer.tsx | 2 +- src/components/Apps/AppsPrivate.tsx | 2 +- src/components/Apps/SortablePinnedApps.tsx | 2 +- src/{ => hooks}/useAppFullscreen.tsx | 0 src/{components/Group => hooks}/useBlockUsers.tsx | 0 .../Apps => hooks}/useHandlePrivateApps.tsx | 14 +++++++------- .../Tutorials => hooks}/useHandleTutorials.tsx | 2 +- .../Group => hooks}/useHandleUserInfo.tsx | 2 +- src/{ => hooks}/useQortalGetSaveSettings.tsx | 8 ++++---- .../Apps => hooks}/useQortalMessageListener.tsx | 10 +++++----- src/{ => hooks}/useRetrieveDataLocalStorage.tsx | 2 +- src/qortalRequests.ts | 2 +- src/qortalRequests/get.ts | 2 +- src/utils/indexedDB.ts | 2 +- 15 files changed, 30 insertions(+), 30 deletions(-) rename src/{ => hooks}/useAppFullscreen.tsx (100%) rename src/{components/Group => hooks}/useBlockUsers.tsx (100%) rename src/{components/Apps => hooks}/useHandlePrivateApps.tsx (94%) rename src/{components/Tutorials => hooks}/useHandleTutorials.tsx (98%) rename src/{components/Group => hooks}/useHandleUserInfo.tsx (94%) rename src/{ => hooks}/useQortalGetSaveSettings.tsx (94%) rename src/{components/Apps => hooks}/useQortalMessageListener.tsx (98%) rename src/{ => hooks}/useRetrieveDataLocalStorage.tsx (98%) diff --git a/src/App.tsx b/src/App.tsx index 3f7dcca..9272fa7 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -91,8 +91,8 @@ import { DrawerComponent } from './components/Drawer/Drawer'; import { AddressQRCode } from './components/AddressQRCode'; import { Settings } from './components/Group/Settings'; import { MainAvatar } from './components/MainAvatar'; -import { useRetrieveDataLocalStorage } from './useRetrieveDataLocalStorage'; -import { useQortalGetSaveSettings } from './useQortalGetSaveSettings'; +import { useRetrieveDataLocalStorage } from './hooks/useRetrieveDataLocalStorage.tsx'; +import { useQortalGetSaveSettings } from './hooks/useQortalGetSaveSettings.tsx'; import { canSaveSettingToQdnAtom, enabledDevModeAtom, @@ -121,13 +121,13 @@ import { handleGetFileFromIndexedDB } from './utils/indexedDB'; import { Wallets } from './Wallets'; import { useFetchResources } from './common/useFetchResources'; import { Tutorials } from './components/Tutorials/Tutorials'; -import { useHandleTutorials } from './components/Tutorials/useHandleTutorials'; -import { useHandleUserInfo } from './components/Group/useHandleUserInfo'; +import { useHandleTutorials } from './hooks/useHandleTutorials.tsx'; +import { useHandleUserInfo } from './hooks/useHandleUserInfo.tsx'; import { Minting } from './components/Minting/Minting'; import { isRunningGateway } from './qortalRequests'; import { QMailStatus } from './components/QMailStatus'; import { GlobalActions } from './components/GlobalActions/GlobalActions'; -import { useBlockedAddresses } from './components/Group/useBlockUsers'; +import { useBlockedAddresses } from './hooks/useBlockUsers.tsx'; import { WalletIcon } from './assets/Icons/WalletIcon'; import { UserLookup } from './components/UserLookup.tsx/UserLookup'; import { RegisterName } from './components/RegisterName'; diff --git a/src/components/Apps/AppViewer.tsx b/src/components/Apps/AppViewer.tsx index 640d062..3ca83ea 100644 --- a/src/components/Apps/AppViewer.tsx +++ b/src/components/Apps/AppViewer.tsx @@ -3,7 +3,7 @@ import { Box } from '@mui/material'; import { getBaseApiReact } from '../../App'; import { subscribeToEvent, unsubscribeFromEvent } from '../../utils/events'; import { useFrame } from 'react-frame-component'; -import { useQortalMessageListener } from './useQortalMessageListener'; +import { useQortalMessageListener } from '../../hooks/useQortalMessageListener'; import { useThemeContext } from '../Theme/ThemeContext'; import { useTranslation } from 'react-i18next'; diff --git a/src/components/Apps/AppsPrivate.tsx b/src/components/Apps/AppsPrivate.tsx index dae28a8..54c1cba 100644 --- a/src/components/Apps/AppsPrivate.tsx +++ b/src/components/Apps/AppsPrivate.tsx @@ -14,7 +14,7 @@ import { useTheme, } from '@mui/material'; import { useDropzone } from 'react-dropzone'; -import { useHandlePrivateApps } from './useHandlePrivateApps'; +import { useHandlePrivateApps } from '../../hooks/useHandlePrivateApps'; import { groupsPropertiesAtom, memberGroupsAtom, diff --git a/src/components/Apps/SortablePinnedApps.tsx b/src/components/Apps/SortablePinnedApps.tsx index 72e42df..aef692d 100644 --- a/src/components/Apps/SortablePinnedApps.tsx +++ b/src/components/Apps/SortablePinnedApps.tsx @@ -25,7 +25,7 @@ import { import { saveToLocalStorage } from './AppsNavBarDesktop'; import { ContextMenuPinnedApps } from '../ContextMenuPinnedApps'; import LockIcon from '@mui/icons-material/Lock'; -import { useHandlePrivateApps } from './useHandlePrivateApps'; +import { useHandlePrivateApps } from '../../hooks/useHandlePrivateApps'; import { useAtom, useSetAtom } from 'jotai'; const SortableItem = ({ id, name, app, isDesktop }) => { diff --git a/src/useAppFullscreen.tsx b/src/hooks/useAppFullscreen.tsx similarity index 100% rename from src/useAppFullscreen.tsx rename to src/hooks/useAppFullscreen.tsx diff --git a/src/components/Group/useBlockUsers.tsx b/src/hooks/useBlockUsers.tsx similarity index 100% rename from src/components/Group/useBlockUsers.tsx rename to src/hooks/useBlockUsers.tsx diff --git a/src/components/Apps/useHandlePrivateApps.tsx b/src/hooks/useHandlePrivateApps.tsx similarity index 94% rename from src/components/Apps/useHandlePrivateApps.tsx rename to src/hooks/useHandlePrivateApps.tsx index f8dd2a1..be79d41 100644 --- a/src/components/Apps/useHandlePrivateApps.tsx +++ b/src/hooks/useHandlePrivateApps.tsx @@ -1,14 +1,14 @@ import { useContext, useState } from 'react'; -import { executeEvent } from '../../utils/events'; -import { getBaseApiReact, MyContext } from '../../App'; -import { createEndpoint } from '../../background'; +import { executeEvent } from '../utils/events'; +import { getBaseApiReact, MyContext } from '../App'; +import { createEndpoint } from '../background'; import { settingsLocalLastUpdatedAtom, sortablePinnedAppsAtom, -} from '../../atoms/global'; -import { saveToLocalStorage } from './AppsNavBarDesktop'; -import { base64ToUint8Array } from '../../qdn/encryption/group-encryption'; -import { uint8ArrayToObject } from '../../backgroundFunctions/encryption'; +} from '../atoms/global'; +import { saveToLocalStorage } from '../components/Apps/AppsNavBarDesktop'; +import { base64ToUint8Array } from '../qdn/encryption/group-encryption'; +import { uint8ArrayToObject } from '../backgroundFunctions/encryption'; import { useSetAtom } from 'jotai'; export const useHandlePrivateApps = () => { diff --git a/src/components/Tutorials/useHandleTutorials.tsx b/src/hooks/useHandleTutorials.tsx similarity index 98% rename from src/components/Tutorials/useHandleTutorials.tsx rename to src/hooks/useHandleTutorials.tsx index 1f5ac33..8da8d4b 100644 --- a/src/components/Tutorials/useHandleTutorials.tsx +++ b/src/hooks/useHandleTutorials.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; -import { saveToLocalStorage } from '../Apps/AppsNavBarDesktop'; +import { saveToLocalStorage } from '../components/Apps/AppsNavBarDesktop'; import creationImg from './img/creation.webp'; import dashboardImg from './img/dashboard.webp'; import groupsImg from './img/groups.webp'; diff --git a/src/components/Group/useHandleUserInfo.tsx b/src/hooks/useHandleUserInfo.tsx similarity index 94% rename from src/components/Group/useHandleUserInfo.tsx rename to src/hooks/useHandleUserInfo.tsx index 8b8796f..8faf7d1 100644 --- a/src/components/Group/useHandleUserInfo.tsx +++ b/src/hooks/useHandleUserInfo.tsx @@ -1,5 +1,5 @@ import { useCallback, useRef } from 'react'; -import { getBaseApiReact } from '../../App'; +import { getBaseApiReact } from '../App'; export const useHandleUserInfo = () => { const userInfoRef = useRef({}); diff --git a/src/useQortalGetSaveSettings.tsx b/src/hooks/useQortalGetSaveSettings.tsx similarity index 94% rename from src/useQortalGetSaveSettings.tsx rename to src/hooks/useQortalGetSaveSettings.tsx index 66691b7..dc307eb 100644 --- a/src/useQortalGetSaveSettings.tsx +++ b/src/hooks/useQortalGetSaveSettings.tsx @@ -6,13 +6,13 @@ import { settingsLocalLastUpdatedAtom, settingsQDNLastUpdatedAtom, sortablePinnedAppsAtom, -} from './atoms/global'; -import { getArbitraryEndpointReact, getBaseApiReact } from './App'; -import { decryptResource } from './components/Group/Group'; +} from '../atoms/global'; +import { getArbitraryEndpointReact, getBaseApiReact } from '../App'; +import { decryptResource } from '../components/Group/Group'; import { base64ToUint8Array, uint8ArrayToObject, -} from './backgroundFunctions/encryption'; +} from '../backgroundFunctions/encryption'; import { useAtom, useSetAtom } from 'jotai'; function fetchFromLocalStorage(key) { diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/hooks/useQortalMessageListener.tsx similarity index 98% rename from src/components/Apps/useQortalMessageListener.tsx rename to src/hooks/useQortalMessageListener.tsx index e2bb3c6..a297e63 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/hooks/useQortalMessageListener.tsx @@ -1,10 +1,10 @@ import { useCallback, useContext, useEffect, useState } from 'react'; -import { executeEvent } from '../../utils/events'; -import { navigationControllerAtom } from '../../atoms/global'; +import { executeEvent } from '../utils/events'; +import { navigationControllerAtom } from '../atoms/global'; import { Filesystem, Directory } from '@capacitor/filesystem'; -import { saveFile } from '../../qortalRequests/get'; -import { mimeToExtensionMap } from '../../utils/memeTypes'; -import { MyContext } from '../../App'; +import { saveFile } from '../qortalRequests/get'; +import { mimeToExtensionMap } from '../utils/memeTypes'; +import { MyContext } from '../App'; import FileSaver from 'file-saver'; import { useSetAtom } from 'jotai'; diff --git a/src/useRetrieveDataLocalStorage.tsx b/src/hooks/useRetrieveDataLocalStorage.tsx similarity index 98% rename from src/useRetrieveDataLocalStorage.tsx rename to src/hooks/useRetrieveDataLocalStorage.tsx index 6ddc673..4b7479c 100644 --- a/src/useRetrieveDataLocalStorage.tsx +++ b/src/hooks/useRetrieveDataLocalStorage.tsx @@ -5,7 +5,7 @@ import { settingsLocalLastUpdatedAtom, settingsQDNLastUpdatedAtom, sortablePinnedAppsAtom, -} from './atoms/global'; +} from '../atoms/global'; import { useSetAtom } from 'jotai'; function fetchFromLocalStorage(key) { diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index 2466d3d..af3c0d1 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -1,5 +1,5 @@ import { gateways, getApiKeyFromStorage } from './background'; -import { listOfAllQortalRequests } from './components/Apps/useQortalMessageListener'; +import { listOfAllQortalRequests } from './hooks/useQortalMessageListener'; import { addForeignServer, addGroupAdminRequest, diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index 3f71405..6ad9709 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -42,7 +42,7 @@ import { getNameInfo, uint8ArrayToObject, } from '../backgroundFunctions/encryption'; -import { showSaveFilePicker } from '../components/Apps/useQortalMessageListener'; +import { showSaveFilePicker } from '../hooks/useQortalMessageListener'; import { getPublishesFromAdminsAdminSpace } from '../components/Chat/AdminSpaceInner'; import { extractComponents } from '../components/Chat/MessageDisplay'; import { diff --git a/src/utils/indexedDB.ts b/src/utils/indexedDB.ts index 3066b6b..ea29e3f 100644 --- a/src/utils/indexedDB.ts +++ b/src/utils/indexedDB.ts @@ -1,4 +1,4 @@ -import { openIndexedDB } from '../components/Apps/useQortalMessageListener'; +import { openIndexedDB } from '../hooks/useQortalMessageListener'; import { fileToBase64 } from './fileReading'; export async function handleGetFileFromIndexedDB(event) { From 6723aadf8b8abb86daa7011366df55c5d764f61a Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sun, 18 May 2025 19:26:36 +0200 Subject: [PATCH 10/16] Move css into styles folder --- src/components/ReactionPicker.css | 26 -------------------------- src/components/ReactionPicker.tsx | 2 +- 2 files changed, 1 insertion(+), 27 deletions(-) delete mode 100644 src/components/ReactionPicker.css diff --git a/src/components/ReactionPicker.css b/src/components/ReactionPicker.css deleted file mode 100644 index 6d0a354..0000000 --- a/src/components/ReactionPicker.css +++ /dev/null @@ -1,26 +0,0 @@ -.reaction-container { - position: relative; /* Parent must be positioned relatively */ -} - -.emoji-picker { - position: absolute; /* Picker positioned absolutely relative to the parent */ - right: 0; - z-index: 9000000000; /* Ensure picker appears above other content */ -} - -.message-container { - overflow: visible; /* Ensure the message container doesn't cut off the picker */ -} - -.reaction-container { - position: relative; -} - -.emoji-picker { - overflow: hidden; - width: auto; -} - -.EmojiPickerReact.epr-dark-theme { - --epr-emoji-size: 18px; /* Adjust emoji size for dark mode */ -} diff --git a/src/components/ReactionPicker.tsx b/src/components/ReactionPicker.tsx index 911a396..0bba748 100644 --- a/src/components/ReactionPicker.tsx +++ b/src/components/ReactionPicker.tsx @@ -1,7 +1,7 @@ import { useState, useRef, useEffect } from 'react'; import ReactDOM from 'react-dom'; import Picker, { EmojiStyle, Theme } from 'emoji-picker-react'; -import './ReactionPicker.css'; +import '../styles/ReactionPicker.css'; import { ButtonBase } from '@mui/material'; export const ReactionPicker = ({ onReaction }) => { From e331c90d11f2a7db3e27fb0601e793b13691b53e Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sun, 18 May 2025 19:27:00 +0200 Subject: [PATCH 11/16] Move css into styles folder --- src/styles/ReactionPicker.css | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/styles/ReactionPicker.css diff --git a/src/styles/ReactionPicker.css b/src/styles/ReactionPicker.css new file mode 100644 index 0000000..6d0a354 --- /dev/null +++ b/src/styles/ReactionPicker.css @@ -0,0 +1,26 @@ +.reaction-container { + position: relative; /* Parent must be positioned relatively */ +} + +.emoji-picker { + position: absolute; /* Picker positioned absolutely relative to the parent */ + right: 0; + z-index: 9000000000; /* Ensure picker appears above other content */ +} + +.message-container { + overflow: visible; /* Ensure the message container doesn't cut off the picker */ +} + +.reaction-container { + position: relative; +} + +.emoji-picker { + overflow: hidden; + width: auto; +} + +.EmojiPickerReact.epr-dark-theme { + --epr-emoji-size: 18px; /* Adjust emoji size for dark mode */ +} From 04828bc203e7a7ba49150324daea45587fc7777a Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sun, 18 May 2025 19:27:20 +0200 Subject: [PATCH 12/16] Move files --- src/App.tsx | 2 +- src/Wallets.tsx | 2 +- src/components/CoreSyncStatus.tsx | 2 +- src/components/{ => Desktop}/DesktopSideBar.tsx | 0 src/components/Group/HomeDesktop.tsx | 4 ++-- src/components/{Home => }/NewUsersCTA.tsx | 2 +- src/{ExtStates => components}/NotAuthenticated.tsx | 6 +++--- src/components/{Home => }/QortPrice.tsx | 6 +++--- 8 files changed, 12 insertions(+), 12 deletions(-) rename src/components/{ => Desktop}/DesktopSideBar.tsx (100%) rename src/components/{Home => }/NewUsersCTA.tsx (98%) rename src/{ExtStates => components}/NotAuthenticated.tsx (99%) rename src/components/{Home => }/QortPrice.tsx (97%) diff --git a/src/App.tsx b/src/App.tsx index 9272fa7..aaf3797 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -116,7 +116,7 @@ import { timestampEnterDataAtom, txListAtom, } from './atoms/global'; -import { NotAuthenticated } from './ExtStates/NotAuthenticated'; +import { NotAuthenticated } from './components/NotAuthenticated.tsx'; import { handleGetFileFromIndexedDB } from './utils/indexedDB'; import { Wallets } from './Wallets'; import { useFetchResources } from './common/useFetchResources'; diff --git a/src/Wallets.tsx b/src/Wallets.tsx index 135ff26..bcbc196 100644 --- a/src/Wallets.tsx +++ b/src/Wallets.tsx @@ -30,7 +30,7 @@ import { decryptStoredWalletFromSeedPhrase } from './utils/decryptWallet'; import { crypto } from './constants/decryptWallet'; import { LoadingButton } from '@mui/lab'; import { PasswordField } from './components'; -import { HtmlTooltip } from './ExtStates/NotAuthenticated'; +import { HtmlTooltip } from './components/NotAuthenticated'; import { MyContext } from './App'; import { useTranslation } from 'react-i18next'; diff --git a/src/components/CoreSyncStatus.tsx b/src/components/CoreSyncStatus.tsx index 768a4b6..3f7ff79 100644 --- a/src/components/CoreSyncStatus.tsx +++ b/src/components/CoreSyncStatus.tsx @@ -6,7 +6,7 @@ import { getBaseApiReact } from '../App'; import '../styles/CoreSyncStatus.css'; import { useTheme } from '@mui/material'; import { useTranslation } from 'react-i18next'; -import { manifestData } from '../ExtStates/NotAuthenticated'; +import { manifestData } from './NotAuthenticated'; export const CoreSyncStatus = () => { const [nodeInfos, setNodeInfos] = useState({}); diff --git a/src/components/DesktopSideBar.tsx b/src/components/Desktop/DesktopSideBar.tsx similarity index 100% rename from src/components/DesktopSideBar.tsx rename to src/components/Desktop/DesktopSideBar.tsx diff --git a/src/components/Group/HomeDesktop.tsx b/src/components/Group/HomeDesktop.tsx index cd3e273..aec12f3 100644 --- a/src/components/Group/HomeDesktop.tsx +++ b/src/components/Group/HomeDesktop.tsx @@ -5,10 +5,10 @@ import { ThingsToDoInitial } from './ThingsToDoInitial'; import { GroupJoinRequests } from './GroupJoinRequests'; import { GroupInvites } from './GroupInvites'; import { ListOfGroupPromotions } from './ListOfGroupPromotions'; -import { QortPrice } from '../Home/QortPrice'; +import { QortPrice } from '../QortPrice'; import ExploreIcon from '@mui/icons-material/Explore'; import { Explore } from '../Explore/Explore'; -import { NewUsersCTA } from '../Home/NewUsersCTA'; +import { NewUsersCTA } from '../NewUsersCTA'; import { useTranslation } from 'react-i18next'; export const HomeDesktop = ({ diff --git a/src/components/Home/NewUsersCTA.tsx b/src/components/NewUsersCTA.tsx similarity index 98% rename from src/components/Home/NewUsersCTA.tsx rename to src/components/NewUsersCTA.tsx index ee80ff2..4cc278e 100644 --- a/src/components/Home/NewUsersCTA.tsx +++ b/src/components/NewUsersCTA.tsx @@ -1,5 +1,5 @@ import { Box, ButtonBase, Typography } from '@mui/material'; -import { Spacer } from '../../common/Spacer'; +import { Spacer } from '../common/Spacer'; import { useTranslation } from 'react-i18next'; export const NewUsersCTA = ({ balance }) => { diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/components/NotAuthenticated.tsx similarity index 99% rename from src/ExtStates/NotAuthenticated.tsx rename to src/components/NotAuthenticated.tsx index c2f6e74..1276c90 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/components/NotAuthenticated.tsx @@ -25,12 +25,12 @@ import { } from '@mui/material'; import Logo1Dark from '../assets/svgs/Logo1Dark.svg'; import HelpIcon from '@mui/icons-material/Help'; -import { CustomizedSnackbars } from '../components/Snackbar/Snackbar'; +import { CustomizedSnackbars } from './Snackbar/Snackbar'; import { cleanUrl, gateways } from '../background'; import Tooltip, { TooltipProps, tooltipClasses } from '@mui/material/Tooltip'; -import ThemeSelector from '../components/Theme/ThemeSelector'; +import ThemeSelector from './Theme/ThemeSelector'; import { useTranslation } from 'react-i18next'; -import LanguageSelector from '../components/Language/LanguageSelector'; +import LanguageSelector from './Language/LanguageSelector'; import { MyContext } from '../App'; export const manifestData = { diff --git a/src/components/Home/QortPrice.tsx b/src/components/QortPrice.tsx similarity index 97% rename from src/components/Home/QortPrice.tsx rename to src/components/QortPrice.tsx index 7f0d3ee..4d185b0 100644 --- a/src/components/Home/QortPrice.tsx +++ b/src/components/QortPrice.tsx @@ -1,8 +1,8 @@ import { useCallback, useEffect, useState } from 'react'; -import { getBaseApiReact } from '../../App'; +import { getBaseApiReact } from '../App'; import { Box, Tooltip, Typography, useTheme } from '@mui/material'; -import { BarSpinner } from '../../common/Spinners/BarSpinner/BarSpinner'; -import { formatDate } from '../../utils/time'; +import { BarSpinner } from '../common/Spinners/BarSpinner/BarSpinner'; +import { formatDate } from '../utils/time'; import { useTranslation } from 'react-i18next'; function getAverageLtcPerQort(trades) { From ac6e46bce00189c09360edf6edf7a5b0029c29df Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sun, 18 May 2025 19:40:11 +0200 Subject: [PATCH 13/16] Fix paths --- src/components/Desktop/DesktopSideBar.tsx | 18 ++++++------ src/components/Group/Group.tsx | 2 +- src/components/NotAuthenticated.tsx | 34 ++++++++++------------- src/hooks/useHandleTutorials.tsx | 16 +++++------ 4 files changed, 33 insertions(+), 37 deletions(-) diff --git a/src/components/Desktop/DesktopSideBar.tsx b/src/components/Desktop/DesktopSideBar.tsx index 800c528..416a3a6 100644 --- a/src/components/Desktop/DesktopSideBar.tsx +++ b/src/components/Desktop/DesktopSideBar.tsx @@ -1,13 +1,13 @@ import { Box, ButtonBase, useTheme } from '@mui/material'; -import { HomeIcon } from '../assets/Icons/HomeIcon'; -import { Save } from './Save/Save'; -import { IconWrapper } from './Desktop/DesktopFooter'; -import { enabledDevModeAtom } from '../atoms/global'; -import { AppsIcon } from '../assets/Icons/AppsIcon'; -import ThemeSelector from './Theme/ThemeSelector'; -import { CoreSyncStatus } from './CoreSyncStatus'; -import LanguageSelector from './Language/LanguageSelector'; -import { MessagingIconFilled } from '../assets/Icons/MessagingIconFilled'; +import { HomeIcon } from '../../assets/Icons/HomeIcon'; +import { Save } from '../Save/Save'; +import { IconWrapper } from '../Desktop/DesktopFooter'; +import { enabledDevModeAtom } from '../../atoms/global'; +import { AppsIcon } from '../../assets/Icons/AppsIcon'; +import ThemeSelector from '../Theme/ThemeSelector'; +import { CoreSyncStatus } from '../CoreSyncStatus'; +import LanguageSelector from '../Language/LanguageSelector'; +import { MessagingIconFilled } from '../../assets/Icons/MessagingIconFilled'; import { useAtom } from 'jotai'; import { useTranslation } from 'react-i18next'; diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index be36d56..c38b091 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -49,7 +49,7 @@ import { IconWrapper } from '../Desktop/DesktopFooter'; import { DesktopHeader } from '../Desktop/DesktopHeader'; import { AppsDesktop } from '../Apps/AppsDesktop'; import { AppsDevMode } from '../Apps/AppsDevMode'; -import { DesktopSideBar } from '../DesktopSideBar'; +import { DesktopSideBar } from '../Desktop/DesktopSideBar'; import { HubsIcon } from '../../assets/Icons/HubsIcon'; import { MessagingIcon } from '../../assets/Icons/MessagingIcon'; import { formatEmailDate } from './QMailMessages'; diff --git a/src/components/NotAuthenticated.tsx b/src/components/NotAuthenticated.tsx index 1276c90..1fa171f 100644 --- a/src/components/NotAuthenticated.tsx +++ b/src/components/NotAuthenticated.tsx @@ -1,4 +1,5 @@ -import React, { +import { + Fragment, useCallback, useContext, useEffect, @@ -68,23 +69,18 @@ export const NotAuthenticated = ({ }) => { const [isValidApiKey, setIsValidApiKey] = useState(null); const [hasLocalNode, setHasLocalNode] = useState(null); - // const [useLocalNode, setUseLocalNode] = useState(false); - const [openSnack, setOpenSnack] = React.useState(false); - const [infoSnack, setInfoSnack] = React.useState(null); - const [show, setShow] = React.useState(false); - const [mode, setMode] = React.useState('list'); - const [customNodes, setCustomNodes] = React.useState(null); - // const [currentNode, setCurrentNode] = React.useState({ - // url: "http://127.0.0.1:12391", - // }); - const [importedApiKey, setImportedApiKey] = React.useState(null); + const [openSnack, setOpenSnack] = useState(false); + const [infoSnack, setInfoSnack] = useState(null); + const [show, setShow] = useState(false); + const [mode, setMode] = useState('list'); + const [customNodes, setCustomNodes] = useState(null); + const [importedApiKey, setImportedApiKey] = useState(null); //add and edit states - const [url, setUrl] = React.useState('https://'); - const [customApikey, setCustomApiKey] = React.useState(''); + const [url, setUrl] = useState('https://'); + const [customApikey, setCustomApiKey] = useState(''); const [showSelectApiKey, setShowSelectApiKey] = useState(false); const [enteredApiKey, setEnteredApiKey] = useState(''); - const [customNodeToSaveIndex, setCustomNodeToSaveIndex] = - React.useState(null); + const [customNodeToSaveIndex, setCustomNodeToSaveIndex] = useState(null); const { showTutorial, hasSeenGettingStarted } = useContext(MyContext); const theme = useTheme(); const { t } = useTranslation(['auth', 'core']); @@ -505,7 +501,7 @@ export const NotAuthenticated = ({ disableHoverListener={hasSeenGettingStarted === true} placement="left" title={ - + {t('auth:tips.digital_id', { postProcess: 'capitalizeFirst' })} - + } > setExtstate('wallets')}> @@ -535,7 +531,7 @@ export const NotAuthenticated = ({ disableHoverListener={hasSeenGettingStarted === true} placement="right" title={ - + {t('auth:tips.new_account', { postProcess: 'capitalizeFirst' })} - + } > { From e8db9887be9cebd3354284cc68ba618b81bae006 Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sun, 18 May 2025 19:50:05 +0200 Subject: [PATCH 14/16] Unify constants in a unique file --- src/background-cases.ts | 2 +- src/background.ts | 4 +- src/components/Chat/ChatGroup.tsx | 4 +- src/constants/codes.ts | 1 - src/constants/constants.ts | 4 ++ src/constants/general.ts | 5 -- src/constants/resourceTypes.ts | 1 - .../generateWallet/publicKeyToAddress.ts | 52 ++++++++++--------- 8 files changed, 36 insertions(+), 37 deletions(-) delete mode 100644 src/constants/codes.ts delete mode 100644 src/constants/general.ts delete mode 100644 src/constants/resourceTypes.ts diff --git a/src/background-cases.ts b/src/background-cases.ts index 831c032..beea2c1 100644 --- a/src/background-cases.ts +++ b/src/background-cases.ts @@ -63,7 +63,7 @@ import { publishGroupEncryptedResource, publishOnQDN, } from './backgroundFunctions/encryption'; -import { PUBLIC_NOTIFICATION_CODE_FIRST_SECRET_KEY } from './constants/codes'; +import { PUBLIC_NOTIFICATION_CODE_FIRST_SECRET_KEY } from './constants/constants'; import Base58 from './deps/Base58'; import { encryptSingle } from './qdn/encryption/group-encryption'; import { _createPoll, _voteOnPoll } from './qortalRequests/get'; diff --git a/src/background.ts b/src/background.ts index b34a01b..c30488c 100644 --- a/src/background.ts +++ b/src/background.ts @@ -8,7 +8,7 @@ import { publishOnQDN, uint8ArrayToObject, } from './backgroundFunctions/encryption'; -import { PUBLIC_NOTIFICATION_CODE_FIRST_SECRET_KEY } from './constants/codes'; +import { PUBLIC_NOTIFICATION_CODE_FIRST_SECRET_KEY } from './constants/constants'; import Base58 from './deps/Base58'; import axios from 'axios'; import { @@ -29,7 +29,7 @@ import { RequestQueueWithPromise } from './utils/queue/queue'; import { validateAddress } from './utils/validateAddress'; import { Sha256 } from 'asmcrypto.js'; import { TradeBotRespondMultipleRequest } from './transactions/TradeBotRespondMultipleRequest'; -import { RESOURCE_TYPE_NUMBER_GROUP_CHAT_REACTIONS } from './constants/resourceTypes'; +import { RESOURCE_TYPE_NUMBER_GROUP_CHAT_REACTIONS } from './constants/constants'; import { addDataPublishesCase, addEnteredQmailTimestampCase, diff --git a/src/components/Chat/ChatGroup.tsx b/src/components/Chat/ChatGroup.tsx index 5b9c660..3715ed5 100644 --- a/src/components/Chat/ChatGroup.tsx +++ b/src/components/Chat/ChatGroup.tsx @@ -24,7 +24,7 @@ import { resumeAllQueues, } from '../../App'; import { CustomizedSnackbars } from '../Snackbar/Snackbar'; -import { PUBLIC_NOTIFICATION_CODE_FIRST_SECRET_KEY } from '../../constants/codes'; +import { PUBLIC_NOTIFICATION_CODE_FIRST_SECRET_KEY } from '../../constants/constants'; import { useMessageQueue } from '../../MessageQueueContext'; import { executeEvent, @@ -43,7 +43,7 @@ import { import ShortUniqueId from 'short-unique-id'; import { ReplyPreview } from './MessageItem'; import { ExitIcon } from '../../assets/Icons/ExitIcon'; -import { RESOURCE_TYPE_NUMBER_GROUP_CHAT_REACTIONS } from '../../constants/resourceTypes'; +import { RESOURCE_TYPE_NUMBER_GROUP_CHAT_REACTIONS } from '../../constants/constants'; import { getFee, isExtMsg } from '../../background'; import AppViewerContainer from '../Apps/AppViewerContainer'; import CloseIcon from '@mui/icons-material/Close'; diff --git a/src/constants/codes.ts b/src/constants/codes.ts deleted file mode 100644 index 9b9224b..0000000 --- a/src/constants/codes.ts +++ /dev/null @@ -1 +0,0 @@ -export const PUBLIC_NOTIFICATION_CODE_FIRST_SECRET_KEY = "4001" \ No newline at end of file diff --git a/src/constants/constants.ts b/src/constants/constants.ts index ee96c68..0e85894 100644 --- a/src/constants/constants.ts +++ b/src/constants/constants.ts @@ -184,3 +184,7 @@ export { CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP, DYNAMIC_FEE_TIMESTAMP, }; + +export const RESOURCE_TYPE_NUMBER_GROUP_CHAT_REACTIONS = 102; + +export const PUBLIC_NOTIFICATION_CODE_FIRST_SECRET_KEY = '4001'; // Q for Qortal diff --git a/src/constants/general.ts b/src/constants/general.ts deleted file mode 100644 index f6a150a..0000000 --- a/src/constants/general.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Qortal 8 decimals -export const QORT_DECIMALS = 1e8 - -// Q for Qortal -export const ADDRESS_VERSION = 58 \ No newline at end of file diff --git a/src/constants/resourceTypes.ts b/src/constants/resourceTypes.ts deleted file mode 100644 index aa7a758..0000000 --- a/src/constants/resourceTypes.ts +++ /dev/null @@ -1 +0,0 @@ -export const RESOURCE_TYPE_NUMBER_GROUP_CHAT_REACTIONS = 102 \ No newline at end of file diff --git a/src/utils/generateWallet/publicKeyToAddress.ts b/src/utils/generateWallet/publicKeyToAddress.ts index b2efad6..ef91420 100644 --- a/src/utils/generateWallet/publicKeyToAddress.ts +++ b/src/utils/generateWallet/publicKeyToAddress.ts @@ -1,36 +1,38 @@ // @ts-nocheck -import Base58 from '../../deps/Base58' -import BROKEN_RIPEMD160 from '../../deps/broken-ripemd160' -import RIPEMD160 from '../../deps/ripemd160' -import utils from '../../utils/utils' -import {Buffer} from 'buffer' -import {Sha256} from 'asmcrypto.js' -import { ADDRESS_VERSION } from '../../constants/general.js' +import Base58 from '../../deps/Base58'; +import BROKEN_RIPEMD160 from '../../deps/broken-ripemd160'; +import RIPEMD160 from '../../deps/ripemd160'; +import utils from '../../utils/utils'; +import { Buffer } from 'buffer'; +import { Sha256 } from 'asmcrypto.js'; +import { ADDRESS_VERSION } from '../../constants/constants.js'; const repeatSHA256 = (passphrase, hashes) => { - let hash = passphrase - for (let i = 0; i < hashes; i++) { - hash = new Sha256().process(hash).finish().result - } - return hash -} + let hash = passphrase; + for (let i = 0; i < hashes; i++) { + hash = new Sha256().process(hash).finish().result; + } + return hash; +}; const publicKeyToAddress = (publicKey, qora = false) => { - const publicKeySha256 = new Sha256().process(publicKey).finish().result - const _publicKeyHash = qora ? new BROKEN_RIPEMD160().digest(publicKeySha256) : new RIPEMD160().update(Buffer.from(publicKeySha256)).digest('hex') - const publicKeyHash = qora ? _publicKeyHash : _publicKeyHash + const publicKeySha256 = new Sha256().process(publicKey).finish().result; + const _publicKeyHash = qora + ? new BROKEN_RIPEMD160().digest(publicKeySha256) + : new RIPEMD160().update(Buffer.from(publicKeySha256)).digest('hex'); + const publicKeyHash = qora ? _publicKeyHash : _publicKeyHash; - let address = new Uint8Array() + let address = new Uint8Array(); - address = utils.appendBuffer(address, [ADDRESS_VERSION]) - address = utils.appendBuffer(address, publicKeyHash) + address = utils.appendBuffer(address, [ADDRESS_VERSION]); + address = utils.appendBuffer(address, publicKeyHash); - const checkSum = repeatSHA256(address, 2) - address = utils.appendBuffer(address, checkSum.subarray(0, 4)) + const checkSum = repeatSHA256(address, 2); + address = utils.appendBuffer(address, checkSum.subarray(0, 4)); - address = Base58.encode(address) + address = Base58.encode(address); - return address -} + return address; +}; -export default publicKeyToAddress +export default publicKeyToAddress; From 33b9820db39a2301c1583c6f340822c4a32c48b4 Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Sun, 18 May 2025 20:06:09 +0200 Subject: [PATCH 15/16] Add translations --- src/components/Chat/ChatOptions.tsx | 4 ++- src/components/Desktop/DesktopHeader.tsx | 17 +++++---- src/components/Embeds/Embed.tsx | 36 ++++++++++++++----- .../Group/ListOfGroupPromotions.tsx | 4 ++- src/i18n/locales/en/core.json | 14 ++++++-- 5 files changed, 57 insertions(+), 18 deletions(-) diff --git a/src/components/Chat/ChatOptions.tsx b/src/components/Chat/ChatOptions.tsx index 9afd134..a2a3b86 100644 --- a/src/components/Chat/ChatOptions.tsx +++ b/src/components/Chat/ChatOptions.tsx @@ -454,7 +454,9 @@ export const ChatOptions = ({ > {t('auth:action.authenticate', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2624,7 +2640,7 @@ function App() { }} > {t('auth:action.create_account', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2729,7 +2745,7 @@ function App() { }} > {t('auth:action.authenticate', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2738,7 +2754,9 @@ function App() { <> - {t('auth:wallet.password', { postProcess: 'capitalizeFirst' })} + {t('auth:wallet.password', { + postProcess: 'capitalizeFirstChar', + })} @@ -2763,8 +2781,10 @@ function App() { fontSize: '12px', }} > - {t('auth:node.using', { postProcess: 'capitalizeFirst' })}:{' '} - {currentNode?.url} + {t('auth:node.using', { + postProcess: 'capitalizeFirstChar', + })} + : {currentNode?.url} ) : ( @@ -2777,7 +2797,7 @@ function App() { }} > {t('auth:node.using_public', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2787,7 +2807,7 @@ function App() { {t('auth:action.authenticate', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2864,7 +2884,7 @@ function App() { }} > {t('auth:action.setup_qortal_account', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2921,7 +2941,7 @@ function App() { }} > {t('auth:tips.view_seedphrase', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2958,7 +2978,9 @@ function App() { setCreationStep(2); }} > - {t('core:page.next', { postProcess: 'capitalizeFirst' })} + {t('core:page.next', { + postProcess: 'capitalizeFirstChar', + })} @@ -2994,7 +3016,7 @@ function App() { }} > {t('auth:seed_your', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3018,7 +3040,7 @@ function App() { onClick={exportSeedphrase} > {t('auth:action.export_seedphrase', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })}
@@ -3030,7 +3052,7 @@ function App() { onClick={() => setShowSeed(false)} > {t('core:action.close', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3048,7 +3070,7 @@ function App() { {t('auth:wallet.password', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3066,7 +3088,7 @@ function App() { {t('auth:wallet.password_confirmation', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3083,7 +3105,7 @@ function App() { {t('auth:message.generic.no_minimum_length', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3091,7 +3113,7 @@ function App() { {t('auth:action.create_account', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })}
@@ -3115,7 +3137,7 @@ function App() { }} > {t('auth:message.generic.congrats_setup', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3133,7 +3155,7 @@ function App() { {t('auth:tips.safe_place', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })}
@@ -3146,13 +3168,13 @@ function App() { returnToMain(); await showInfo({ message: t('auth:tips.wallet_secure', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); }} > {t('core:action.backup_account', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3186,7 +3208,7 @@ function App() { }} > {t('core:message.success.transfer', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3199,7 +3221,9 @@ function App() { }} > - {t('core:action.continue', { postProcess: 'capitalizeFirst' })} + {t('core:action.continue', { + postProcess: 'capitalizeFirstChar', + })} @@ -3220,7 +3244,7 @@ function App() { }} > {t('core:message.success.transfer', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3231,7 +3255,9 @@ function App() { window.close(); }} > - {t('core:action.continue', { postProcess: 'capitalizeFirst' })} + {t('core:action.continue', { + postProcess: 'capitalizeFirstChar', + })} )} @@ -3251,7 +3277,7 @@ function App() { }} > {t('core:message.success.order_submitted', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3262,7 +3288,7 @@ function App() { window.close(); }} > - {t('core:action.close', { postProcess: 'capitalizeFirst' })} + {t('core:action.close', { postProcess: 'capitalizeFirstChar' })} )} @@ -3312,7 +3338,7 @@ function App() { {message?.paymentFee && ( {t('core:fee.payment', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} : {message.paymentFee} @@ -3320,7 +3346,7 @@ function App() { {message?.publishFee && ( {t('core:fee.publish', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} : {message.publishFee} @@ -3345,7 +3371,7 @@ function App() { autoFocus > {t('core:action.accept', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3365,7 +3391,7 @@ function App() { onClick={onCancel} > {t('core:action.decline', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3391,7 +3417,7 @@ function App() { @@ -3417,7 +3443,7 @@ function App() { @@ -3427,7 +3453,7 @@ function App() { autoFocus > {t('core:action.continue_logout', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3627,7 +3653,7 @@ function App() { > {t('core:message.generic.fee_qort', { message: messageQortalRequestExtension?.appFee, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3650,7 +3676,7 @@ function App() { > {t('core:message.generic.foreign_fee', { message: messageQortalRequestExtension?.foreignFee, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3721,7 +3747,7 @@ function App() { {t('core:message.success.request_read', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3772,7 +3798,7 @@ function App() { }} > {t('core:action.accept', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -3785,7 +3811,7 @@ function App() { onClick={() => onCancelQortalRequestExtension()} > {t('core:action.decline', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} diff --git a/src/Wallets.tsx b/src/Wallets.tsx index bcbc196..298cb26 100644 --- a/src/Wallets.tsx +++ b/src/Wallets.tsx @@ -152,7 +152,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { } else { setSeedError( t('auth:message.error.account_creation', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); } @@ -160,7 +160,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { setSeedError( error?.message || t('auth:message.error.account_creation', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); } finally { @@ -202,7 +202,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { <> {t('auth:message.generic.no_account', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -212,7 +212,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { <> {t('auth:message.generic.your_accounts', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -224,7 +224,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { {t('auth:account.selected', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} : @@ -283,7 +283,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { }} > {t('auth:tips.existing_account', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -297,7 +297,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { }} > {t('auth:action.add.seed_phrase', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -313,7 +313,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { }} > {t('auth:tips.additional_wallet', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -327,7 +327,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { > {t('auth:action.add.account', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -345,7 +345,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { > {t('auth:message.generic.type_seed', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -358,7 +358,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { > { { { }} > {t('core:action.close', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} { autoFocus > {t('core:action.add', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} { }} > {t('core:action.login', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -550,7 +550,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => { > { { onClick={() => setIsEdit(false)} > {t('core:action.close', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} diff --git a/src/components/Apps/AppInfo.tsx b/src/components/Apps/AppInfo.tsx index 93d807d..1c77d25 100644 --- a/src/components/Apps/AppInfo.tsx +++ b/src/components/Apps/AppInfo.tsx @@ -174,10 +174,10 @@ export const AppInfo = ({ app, myName }) => { {isSelectedAppPinned ? t('core:action.unpin_from_dashboard', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) : t('core:action.pin_from_dashboard', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -200,10 +200,10 @@ export const AppInfo = ({ app, myName }) => { {isInstalled ? t('core:action.open', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) : t('core:action.download', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -229,7 +229,7 @@ export const AppInfo = ({ app, myName }) => { {t('core:category', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} : @@ -239,7 +239,7 @@ export const AppInfo = ({ app, myName }) => { {app?.metadata?.categoryName || t('core:none', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -249,7 +249,7 @@ export const AppInfo = ({ app, myName }) => { {t('core:q_apps.about', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -259,7 +259,7 @@ export const AppInfo = ({ app, myName }) => { {app?.metadata?.description || t('core:message.generic.no_description', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} diff --git a/src/components/Apps/AppInfoSnippet.tsx b/src/components/Apps/AppInfoSnippet.tsx index ea949d0..a0b8f72 100644 --- a/src/components/Apps/AppInfoSnippet.tsx +++ b/src/components/Apps/AppInfoSnippet.tsx @@ -173,10 +173,10 @@ export const AppInfoSnippet = ({ {isSelectedAppPinned ? t('core:action.unpin', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) : t('core:action.pin', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -196,10 +196,10 @@ export const AppInfoSnippet = ({ {isInstalled ? t('core:action.open', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) : t('core:action.download', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} diff --git a/src/components/Apps/AppPublish.tsx b/src/components/Apps/AppPublish.tsx index 51a8a97..d81bde3 100644 --- a/src/components/Apps/AppPublish.tsx +++ b/src/components/Apps/AppPublish.tsx @@ -96,7 +96,7 @@ export const AppPublish = ({ names, categories }) => { t('core:message.error.file_too_large', { filename: file.name, size: maxFileSize / (1024 * 1024), - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); } @@ -171,7 +171,7 @@ export const AppPublish = ({ names, categories }) => { const missingFieldsString = missingFields.join(', '); const errorMsg = t('core:message.error.missing_fields', { fields: missingFieldsString, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }); throw new Error(errorMsg); } @@ -179,13 +179,13 @@ export const AppPublish = ({ names, categories }) => { await show({ message: t('core:message.question.publish_app', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), publishFee: fee.fee + ' QORT', }); setIsLoading( t('core:message.generic.publishing', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); const fileBase64 = await fileToBase64(file); @@ -215,7 +215,7 @@ export const AppPublish = ({ names, categories }) => { rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -223,7 +223,7 @@ export const AppPublish = ({ names, categories }) => { setInfoSnack({ type: 'success', message: t('core:message.success.published', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnack(true); @@ -246,7 +246,7 @@ export const AppPublish = ({ names, categories }) => { message: error?.message || t('core:message.error.publish_app', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnack(true); @@ -270,7 +270,7 @@ export const AppPublish = ({ names, categories }) => { > {t('core:action.create_apps', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} ! @@ -279,7 +279,7 @@ export const AppPublish = ({ names, categories }) => { {t('core:message.generic.one_app_per_name', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -287,7 +287,7 @@ export const AppPublish = ({ names, categories }) => { {t('core:name_app', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -304,7 +304,7 @@ export const AppPublish = ({ names, categories }) => { }} > {t('core:action.select_name_app', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} {/* This is the placeholder item */} @@ -318,7 +318,7 @@ export const AppPublish = ({ names, categories }) => { {t('core:app_service_type', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -335,18 +335,18 @@ export const AppPublish = ({ names, categories }) => { }} > {t('core:action.select_app_type', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} {t('core:app', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} {t('core:website', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -355,7 +355,7 @@ export const AppPublish = ({ names, categories }) => { {t('core:title', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -382,7 +382,7 @@ export const AppPublish = ({ names, categories }) => { {t('core:description', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -409,7 +409,7 @@ export const AppPublish = ({ names, categories }) => { {t('core:category', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -426,7 +426,7 @@ export const AppPublish = ({ names, categories }) => { }} > {t('core:action.select_category', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -443,7 +443,7 @@ export const AppPublish = ({ names, categories }) => { {t('core:tags', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -539,7 +539,7 @@ export const AppPublish = ({ names, categories }) => { {t('core:message.generic.select_zip', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -560,7 +560,7 @@ export const AppPublish = ({ names, categories }) => { {' '} - {t('core:action.choose_file', { postProcess: 'capitalizeFirst' })} + {t('core:action.choose_file', { postProcess: 'capitalizeFirstChar' })} @@ -571,7 +571,7 @@ export const AppPublish = ({ names, categories }) => { }} onClick={publishApp} > - {t('core:action.publish', { postProcess: 'capitalizeFirst' })} + {t('core:action.publish', { postProcess: 'capitalizeFirstChar' })} diff --git a/src/components/Apps/AppRating.tsx b/src/components/Apps/AppRating.tsx index 7889a36..d7b75f5 100644 --- a/src/components/Apps/AppRating.tsx +++ b/src/components/Apps/AppRating.tsx @@ -106,7 +106,7 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { if (!myName) throw new Error( t('core:message.generic.name_rate', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); if (!app?.name) return; @@ -115,7 +115,7 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { await show({ message: t('core:message.question.rate_app', { rate: newValue, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), publishFee: fee.fee + ' QORT', }); @@ -126,7 +126,7 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { const pollDescription = t('core:message.error.generic', { name: app.name, service: app.service, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }); await new Promise((res, rej) => { @@ -150,7 +150,7 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { setInfoSnack({ type: 'success', message: t('core:message.success.rated_app', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnack(true); @@ -169,7 +169,7 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { if (isNaN(optionIndex) || optionIndex === -1) throw new Error( t('core:message.error.rating_option', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); await new Promise((res, rej) => { @@ -191,7 +191,7 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { setInfoSnack({ type: 'success', message: t('core:message.success.rated_app', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnack(true); @@ -209,7 +209,7 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => { message: error?.message || t('core:message.error.unable_rate', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnack(true); diff --git a/src/components/Apps/AppViewer.tsx b/src/components/Apps/AppViewer.tsx index 3ca83ea..d035feb 100644 --- a/src/components/Apps/AppViewer.tsx +++ b/src/components/Apps/AppViewer.tsx @@ -187,7 +187,7 @@ export const AppViewer = forwardRef( reject( new Error( t('core:message.error.navigation_timeout', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ) ); diff --git a/src/components/Apps/AppsDesktop.tsx b/src/components/Apps/AppsDesktop.tsx index 9a66da3..216f5e7 100644 --- a/src/components/Apps/AppsDesktop.tsx +++ b/src/components/Apps/AppsDesktop.tsx @@ -383,7 +383,7 @@ export const AppsDesktop = ({ > @@ -405,7 +405,7 @@ export const AppsDesktop = ({ : theme.palette.text.secondary } label={t('core:chat', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} disableWidth > @@ -436,7 +436,7 @@ export const AppsDesktop = ({ : theme.palette.text.secondary } label={t('core:dev', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} disableWidth > diff --git a/src/components/Apps/AppsDevMode.tsx b/src/components/Apps/AppsDevMode.tsx index f5f4673..89358f5 100644 --- a/src/components/Apps/AppsDevMode.tsx +++ b/src/components/Apps/AppsDevMode.tsx @@ -269,7 +269,7 @@ export const AppsDevMode = ({ isApps ? theme.palette.text.primary : theme.palette.text.secondary } label={t('core:app_other', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} disableWidth > @@ -298,7 +298,7 @@ export const AppsDevMode = ({ : theme.palette.text.secondary } label={t('core:chat', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} disableWidth > @@ -329,7 +329,7 @@ export const AppsDevMode = ({ : theme.palette.text.secondary } label={t('core:dev', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} disableWidth > diff --git a/src/components/Apps/AppsDevModeHome.tsx b/src/components/Apps/AppsDevModeHome.tsx index a95e329..74bce21 100644 --- a/src/components/Apps/AppsDevModeHome.tsx +++ b/src/components/Apps/AppsDevModeHome.tsx @@ -116,7 +116,7 @@ export const AppsDevModeHome = ({ setInfoSnackCustom({ type: 'error', message: t('core:message.generic.devmode_local_node', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); return; @@ -126,7 +126,7 @@ export const AppsDevModeHome = ({ setInfoSnackCustom({ type: 'error', message: t('core:message.generic.name_preview', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); return; @@ -139,7 +139,7 @@ export const AppsDevModeHome = ({ setInfoSnackCustom({ type: 'error', message: t('core:message.generic.select_file', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); return; @@ -196,7 +196,7 @@ export const AppsDevModeHome = ({ setInfoSnackCustom({ type: 'error', message: t('core:message.generic.devmode_local_node', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); return; @@ -206,7 +206,7 @@ export const AppsDevModeHome = ({ setInfoSnackCustom({ type: 'error', message: t('core:message.generic.name_preview', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); return; @@ -219,7 +219,7 @@ export const AppsDevModeHome = ({ setInfoSnackCustom({ type: 'error', message: t('core:message.generic.select_file', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); return; @@ -240,7 +240,7 @@ export const AppsDevModeHome = ({ if (!response?.ok) throw new Error( t('core:message.error.invalid_zip', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); const previewPath = await response.text(); @@ -286,7 +286,7 @@ export const AppsDevModeHome = ({ fontSize: '30px', }} > - {t('core:devmode_apps', { postProcess: 'capitalizeFirst' })} + {t('core:devmode_apps', { postProcess: 'capitalizeFirstChar' })} @@ -312,7 +312,7 @@ export const AppsDevModeHome = ({ + - {t('core:server', { postProcess: 'capitalizeFirst' })} + {t('core:server', { postProcess: 'capitalizeFirstChar' })} @@ -332,7 +332,7 @@ export const AppsDevModeHome = ({ - {t('core:zip', { postProcess: 'capitalizeFirst' })} + {t('core:zip', { postProcess: 'capitalizeFirstChar' })} @@ -351,7 +351,7 @@ export const AppsDevModeHome = ({ + - {t('core:directory', { postProcess: 'capitalizeFirst' })} + {t('core:directory', { postProcess: 'capitalizeFirstChar' })} @@ -382,7 +382,7 @@ export const AppsDevModeHome = ({ }, }} alt={t('core:q_apps.q_sandbox', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} src={`${getBaseApiReact()}/arbitrary/THUMBNAIL/Q-Sandbox/qortal_avatar?async=true`} > @@ -398,7 +398,7 @@ export const AppsDevModeHome = ({ {t('core:q_apps.q_sandbox', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -466,7 +466,7 @@ export const AppsDevModeHome = ({ > {t('core:action.add_custom_framework', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -480,12 +480,12 @@ export const AppsDevModeHome = ({ > setDomain(e.target.value)} @@ -502,12 +502,12 @@ export const AppsDevModeHome = ({ > setPort(e.target.value)} @@ -518,7 +518,7 @@ export const AppsDevModeHome = ({ @@ -529,7 +529,7 @@ export const AppsDevModeHome = ({ autoFocus > {t('core:action.add', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} diff --git a/src/components/Apps/AppsHomeDesktop.tsx b/src/components/Apps/AppsHomeDesktop.tsx index 42afb74..b1378f6 100644 --- a/src/components/Apps/AppsHomeDesktop.tsx +++ b/src/components/Apps/AppsHomeDesktop.tsx @@ -56,7 +56,7 @@ export const AppsHomeDesktop = ({ fontSize: '30px', }} > - {t('core:apps_dashboard', { postProcess: 'capitalizeFirst' })} + {t('core:apps_dashboard', { postProcess: 'capitalizeFirstChar' })} @@ -147,7 +147,7 @@ export const AppsHomeDesktop = ({ - {t('core:library', { postProcess: 'capitalizeFirst' })} + {t('core:library', { postProcess: 'capitalizeFirstChar' })} diff --git a/src/components/Apps/AppsLibraryDesktop.tsx b/src/components/Apps/AppsLibraryDesktop.tsx index 53ef843..d953bff 100644 --- a/src/components/Apps/AppsLibraryDesktop.tsx +++ b/src/components/Apps/AppsLibraryDesktop.tsx @@ -213,11 +213,11 @@ export const AppsLibraryDesktop = ({ paddingLeft: '12px', }} placeholder={t('core:action.search_apps', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} inputProps={{ 'aria-label': t('core:action.search_apps', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), fontSize: '16px', fontWeight: 400, @@ -284,7 +284,7 @@ export const AppsLibraryDesktop = ({ {t('core:action.return_apps_dashboard', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -314,7 +314,7 @@ export const AppsLibraryDesktop = ({ {t('core:message.generic.no_results', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -325,7 +325,9 @@ export const AppsLibraryDesktop = ({ fontSize: '30px', }} > - {t('core:apps_official', { postProcess: 'capitalizeFirst' })} + {t('core:apps_official', { + postProcess: 'capitalizeFirstChar', + })} @@ -412,10 +414,10 @@ export const AppsLibraryDesktop = ({ > {hasPublishApp ? t('core:action.update_app', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) : t('core:action.publish_app', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -444,10 +446,10 @@ export const AppsLibraryDesktop = ({ {hasPublishApp ? t('core:action.update', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) : t('core:action.publish', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -468,7 +470,7 @@ export const AppsLibraryDesktop = ({ }} > {t('core:category_other', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -508,7 +510,7 @@ export const AppsLibraryDesktop = ({ }, }} > - {t('core:all', { postProcess: 'capitalizeFirst' })} + {t('core:all', { postProcess: 'capitalizeFirstChar' })} diff --git a/src/components/Apps/AppsNavBarDesktop.tsx b/src/components/Apps/AppsNavBarDesktop.tsx index 80f8f03..1cfe097 100644 --- a/src/components/Apps/AppsNavBarDesktop.tsx +++ b/src/components/Apps/AppsNavBarDesktop.tsx @@ -380,10 +380,10 @@ export const AppsNavBarDesktop = ({ disableBack }) => { primary={`${ isSelectedAppPinned ? t('core:action.unpin_app', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) : t('core:action.pin_app', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) }}`} /> @@ -460,7 +460,7 @@ export const AppsNavBarDesktop = ({ disableBack }) => { }, }} primary={t('core:action.copy_link', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} /> diff --git a/src/components/Apps/AppsPrivate.tsx b/src/components/Apps/AppsPrivate.tsx index 54c1cba..8a64713 100644 --- a/src/components/Apps/AppsPrivate.tsx +++ b/src/components/Apps/AppsPrivate.tsx @@ -103,7 +103,7 @@ export const AppsPrivate = ({ myName }) => { t('core:message.error.file_too_large', { filename: file.name, size: maxFileSize / (1024 * 1024), - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); } @@ -146,21 +146,21 @@ export const AppsPrivate = ({ myName }) => { if (!logo) throw new Error( t('core:message.generic.select_image', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); if (!myName) throw new Error( t('core:message.generic.name_publish', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); if (!newPrivateAppValues?.name) throw new Error( t('core:message.error.app_need_name', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); @@ -184,7 +184,7 @@ export const AppsPrivate = ({ myName }) => { throw new Error( decryptedData?.error || t('core:message.error.unable_encrypt_app', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); } @@ -193,7 +193,7 @@ export const AppsPrivate = ({ myName }) => { await show({ message: t('core:message.question.publish_app', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), publishFee: fee.fee + ' QORT', }); @@ -216,7 +216,7 @@ export const AppsPrivate = ({ myName }) => { rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -239,7 +239,7 @@ export const AppsPrivate = ({ myName }) => { message: error?.message || t('core:message.error.unable_publish_app', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); } @@ -322,7 +322,7 @@ export const AppsPrivate = ({ myName }) => { > { /> { > @@ -372,7 +372,7 @@ export const AppsPrivate = ({ myName }) => { id="demo-simple-select" value={privateAppValues?.groupId} label={t('group:group.group_other', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} onChange={(e) => { setPrivateAppValues((prev) => { @@ -385,7 +385,7 @@ export const AppsPrivate = ({ myName }) => { > {t('group:message.generic.no_selection', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -412,7 +412,7 @@ export const AppsPrivate = ({ myName }) => { }} > { }} > @@ -464,7 +466,9 @@ export const AppsPrivate = ({ myName }) => { setIsOpenPrivateModal(false); }} > - {t('core:action.close', { postProcess: 'capitalizeFirst' })} + {t('core:action.close', { + postProcess: 'capitalizeFirstChar', + })} @@ -492,7 +498,7 @@ export const AppsPrivate = ({ myName }) => { }} > {t('core:message.generic.select_zip', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -526,10 +532,10 @@ export const AppsPrivate = ({ myName }) => { {file ? t('core:action.change_file', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) : t('core:action.choose_file', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -544,13 +550,13 @@ export const AppsPrivate = ({ myName }) => { > @@ -559,13 +565,13 @@ export const AppsPrivate = ({ myName }) => { id="demo-simple-select" value={selectedGroup} label={t('group:group.groups_admin', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} onChange={(e) => setSelectedGroup(e.target.value)} > {t('group:message.generic.no_selection', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -592,11 +598,13 @@ export const AppsPrivate = ({ myName }) => { }} > @@ -621,12 +629,12 @@ export const AppsPrivate = ({ myName }) => { }} > @@ -645,7 +653,7 @@ export const AppsPrivate = ({ myName }) => { setLogo(file)}> @@ -663,7 +671,9 @@ export const AppsPrivate = ({ myName }) => { clearFields(); }} > - {t('core:action.close', { postProcess: 'capitalizeFirst' })} + {t('core:action.close', { + postProcess: 'capitalizeFirstChar', + })} diff --git a/src/components/Auth/DownloadWallet.tsx b/src/components/Auth/DownloadWallet.tsx index 9683b02..909ad37 100644 --- a/src/components/Auth/DownloadWallet.tsx +++ b/src/components/Auth/DownloadWallet.tsx @@ -76,7 +76,7 @@ export const DownloadWallet = ({ if (!keepCurrentPassword && !newPassword) { setWalletToBeDownloadedError( t('auth:wallet.error.missing_new_password', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); return; @@ -84,7 +84,7 @@ export const DownloadWallet = ({ if (!walletToBeDownloadedPassword) { setWalletToBeDownloadedError( t('auth:wallet.error.missing_password', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); return; @@ -160,7 +160,7 @@ export const DownloadWallet = ({ }} > {t('auth:action.download_account', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -171,7 +171,7 @@ export const DownloadWallet = ({ <> {t('auth:wallet.password_confirmation', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -210,7 +210,7 @@ export const DownloadWallet = ({ {t('auth:wallet.keep_password', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -223,7 +223,7 @@ export const DownloadWallet = ({ <> {t('auth:wallet.new_password', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -241,7 +241,7 @@ export const DownloadWallet = ({ {t('auth:password_confirmation', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -256,13 +256,13 @@ export const DownloadWallet = ({ await saveFileToDiskFunc(); await showInfo({ message: t('auth:message.generic.keep_secure', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); }} > {t('auth:action.download_account', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} diff --git a/src/components/Chat/AdminSpace.tsx b/src/components/Chat/AdminSpace.tsx index b9d4a81..276369a 100644 --- a/src/components/Chat/AdminSpace.tsx +++ b/src/components/Chat/AdminSpace.tsx @@ -54,7 +54,7 @@ export const AdminSpace = ({ > {t('core:message.generic.space_for_admins', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} diff --git a/src/components/Chat/AdminSpaceInner.tsx b/src/components/Chat/AdminSpaceInner.tsx index f70e813..1dae3af 100644 --- a/src/components/Chat/AdminSpaceInner.tsx +++ b/src/components/Chat/AdminSpaceInner.tsx @@ -99,7 +99,7 @@ export const AdminSpaceInner = ({ if (!validateSecretKey(decryptedKeyToObject)) throw new Error( t('auth:message.error.invalid_secret_key', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); setAdminGroupSecretKey(decryptedKeyToObject); @@ -134,7 +134,7 @@ export const AdminSpaceInner = ({ await show({ message: t('core:message.question.perform_transaction', { action: 'ARBITRARY', - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), publishFee: fee.fee + ' QORT', }); @@ -152,7 +152,7 @@ export const AdminSpaceInner = ({ setInfoSnackCustom({ type: 'success', message: t('auth:message.success.reencrypted_secret_key', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnackGlobal(true); @@ -163,7 +163,7 @@ export const AdminSpaceInner = ({ message: response?.error || t('auth:message.error.unable_reencrypt_secret_key', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnackGlobal(true); @@ -174,7 +174,7 @@ export const AdminSpaceInner = ({ message: error?.message || t('auth:message.error.unable_reencrypt_secret_key', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnackGlobal(true); @@ -204,7 +204,7 @@ export const AdminSpaceInner = ({ }} > {t('auth:message.error.publishing_key', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -225,7 +225,7 @@ export const AdminSpaceInner = ({ {isFetchingGroupSecretKey && ( {t('auth:message.generic.fetching_group_secret_key', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} )} @@ -234,7 +234,7 @@ export const AdminSpaceInner = ({ groupSecretKeyPublishDetails === false && ( {t('auth:message.generic.no_secret_key_published', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} )} @@ -247,7 +247,7 @@ export const AdminSpaceInner = ({ groupSecretKeyPublishDetails?.created ), name: groupSecretKeyPublishDetails?.name, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} )} @@ -258,7 +258,7 @@ export const AdminSpaceInner = ({ variant="contained" > {t('auth:action.publish_group_secret_key', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -270,7 +270,7 @@ export const AdminSpaceInner = ({ }} > {t('auth:tips.key_encrypt_group', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -292,7 +292,7 @@ export const AdminSpaceInner = ({ {isFetchingAdminGroupSecretKey && ( {t('auth:message.generic.fetching_admin_secret_key', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} )} @@ -300,7 +300,7 @@ export const AdminSpaceInner = ({ {!isFetchingAdminGroupSecretKey && !adminGroupSecretKey && ( {t('auth:message.generic.no_secret_key_published', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} )} @@ -312,7 +312,7 @@ export const AdminSpaceInner = ({ adminGroupSecretKeyPublishDetails?.updated || adminGroupSecretKeyPublishDetails?.created ), - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} )} @@ -323,7 +323,7 @@ export const AdminSpaceInner = ({ variant="contained" > {t('auth:action.publish_admin_secret_key', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -335,7 +335,7 @@ export const AdminSpaceInner = ({ }} > {t('auth:tips.key_encrypt_admin', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -358,7 +358,7 @@ export const AdminSpaceInner = ({ > {t('group:group.avatar', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} diff --git a/src/components/Chat/AnnouncementDiscussion.tsx b/src/components/Chat/AnnouncementDiscussion.tsx index e101246..8959a9f 100644 --- a/src/components/Chat/AnnouncementDiscussion.tsx +++ b/src/components/Chat/AnnouncementDiscussion.tsx @@ -104,7 +104,7 @@ export const AnnouncementDiscussion = ({ rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -139,7 +139,7 @@ export const AnnouncementDiscussion = ({ await show({ message: t('core:message.question.perform_transaction', { action: 'ARBITRARY', - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), publishFee: fee.fee + ' QORT', }); @@ -382,7 +382,7 @@ export const AnnouncementDiscussion = ({ padding: '5px', }} > - {t('core:action.close', { postProcess: 'capitalizeFirst' })} + {t('core:action.close', { postProcess: 'capitalizeFirstChar' })} )} )} {t('core:action.publish_comment', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -424,7 +424,7 @@ export const AnnouncementDiscussion = ({ open={isLoading} info={{ message: t('core:loading.comments', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }} /> diff --git a/src/components/Chat/AnnouncementItem.tsx b/src/components/Chat/AnnouncementItem.tsx index e8d8ced..98ebe11 100644 --- a/src/components/Chat/AnnouncementItem.tsx +++ b/src/components/Chat/AnnouncementItem.tsx @@ -194,7 +194,7 @@ export const AnnouncementItem = ({ }} > {t('core:action.leave_comment', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} )} diff --git a/src/components/Chat/AnnouncementList.tsx b/src/components/Chat/AnnouncementList.tsx index 1fb0f19..ba2892e 100644 --- a/src/components/Chat/AnnouncementList.tsx +++ b/src/components/Chat/AnnouncementList.tsx @@ -82,7 +82,7 @@ export const AnnouncementList = ({ {showLoadMore && ( {t('core:action.load_announcements', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} )} diff --git a/src/components/Chat/ChatDirect.tsx b/src/components/Chat/ChatDirect.tsx index a3c12a9..3e57f93 100644 --- a/src/components/Chat/ChatDirect.tsx +++ b/src/components/Chat/ChatDirect.tsx @@ -219,7 +219,7 @@ export const ChatDirect = ({ rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -392,7 +392,7 @@ export const ChatDirect = ({ rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -438,7 +438,7 @@ export const ChatDirect = ({ throw new Error( t('group:message.error.qortals_required', { quantity: 4, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); if (isSending) return; @@ -509,7 +509,7 @@ export const ChatDirect = ({ errorMsg === 'invalid signature' ? t('group:message.error.qortals_required', { quantity: 4, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) : errorMsg, }); @@ -576,7 +576,7 @@ export const ChatDirect = ({ fontSize: '14px', }} > - {t('core:action.close_chat', { postProcess: 'capitalizeFirst' })} + {t('core:action.close_chat', { postProcess: 'capitalizeFirstChar' })} @@ -707,7 +707,7 @@ export const ChatDirect = ({ {t('core:message.error.message_size', { maximum: 4000, size: messageSize, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -763,7 +763,9 @@ export const ChatDirect = ({ diff --git a/src/components/Chat/ChatGroup.tsx b/src/components/Chat/ChatGroup.tsx index 3715ed5..4538773 100644 --- a/src/components/Chat/ChatGroup.tsx +++ b/src/components/Chat/ChatGroup.tsx @@ -134,7 +134,7 @@ export const ChatGroup = ({ rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -297,7 +297,7 @@ export const ChatGroup = ({ const message = (

{t('group:message.generic.group_key_created', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })}

); @@ -371,7 +371,7 @@ export const ChatGroup = ({ ) { console.warn( t('group:message.generic.invalid_content', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), item ); @@ -448,7 +448,7 @@ export const ChatGroup = ({ const message = (

{t('group:message.generic.group_key_created', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })}

); @@ -528,7 +528,7 @@ export const ChatGroup = ({ ) { console.warn( t('group:message.generic.invalid_content', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), item ); @@ -605,7 +605,7 @@ export const ChatGroup = ({ rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -737,7 +737,7 @@ export const ChatGroup = ({ rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -777,7 +777,7 @@ export const ChatGroup = ({ rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -799,7 +799,7 @@ export const ChatGroup = ({ if (isPrivate === null) throw new Error( t('group:message.error.unable_determine_group_private', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); if (isSending) return; @@ -808,7 +808,7 @@ export const ChatGroup = ({ throw new Error( t('group:message.error.qortals_required', { quantity: 4, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); pauseAllQueues(); @@ -852,7 +852,7 @@ export const ChatGroup = ({ await show({ publishFee: fee.fee + ' QORT', message: t('core:message.question.delete_chat_image', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); @@ -891,7 +891,7 @@ export const ChatGroup = ({ if (res !== true) throw new Error( t('core:message.error.unable_publish_image', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); } @@ -1052,7 +1052,7 @@ export const ChatGroup = ({ throw new Error( t('group:message.error.qortals_required', { quantity: 4, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); @@ -1133,7 +1133,7 @@ export const ChatGroup = ({ setInfoSnack({ type: 'error', message: t('core:message.generic.message_with_image', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnack(true); @@ -1401,7 +1401,7 @@ export const ChatGroup = ({ {t('core:message.error.message_size', { maximum: 4000, size: messageSize, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -1527,7 +1527,9 @@ export const ChatGroup = ({ diff --git a/src/components/Chat/ChatList.tsx b/src/components/Chat/ChatList.tsx index 0589832..96abf7a 100644 --- a/src/components/Chat/ChatList.tsx +++ b/src/components/Chat/ChatList.tsx @@ -340,7 +340,7 @@ export const ChatList = ({ > {t('core:message.error.message_loading', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -370,7 +370,7 @@ export const ChatList = ({ fallback={ {t('group:message.generic.invalid_data', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} } @@ -418,7 +418,7 @@ export const ChatList = ({ }} > {t('group:action.scroll_unread_messages', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} )} @@ -444,7 +444,7 @@ export const ChatList = ({ }} > {t('group:action.scroll_unread_messages', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} )} diff --git a/src/components/Chat/ChatOptions.tsx b/src/components/Chat/ChatOptions.tsx index a2a3b86..de14177 100644 --- a/src/components/Chat/ChatOptions.tsx +++ b/src/components/Chat/ChatOptions.tsx @@ -107,7 +107,7 @@ export const ChatOptions = ({ rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -280,7 +280,7 @@ export const ChatOptions = ({ }} > {t('core:message.generic.no_results', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} )} @@ -455,7 +455,7 @@ export const ChatOptions = ({ setName(e.target.value)} @@ -352,13 +354,13 @@ export const AddGroup = ({ address, open, setOpen }) => { > setDescription(e.target.value)} @@ -374,7 +376,7 @@ export const AddGroup = ({ address, open, setOpen }) => { > @@ -387,12 +389,12 @@ export const AddGroup = ({ address, open, setOpen }) => { > {t('group:group.open', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} {t('group:group.closed', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -409,7 +411,7 @@ export const AddGroup = ({ address, open, setOpen }) => { > {t('group:advanced_options', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -426,7 +428,7 @@ export const AddGroup = ({ address, open, setOpen }) => { > @@ -439,12 +441,12 @@ export const AddGroup = ({ address, open, setOpen }) => { > {t('core:count.none', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} {t('core:count.one', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} 20% @@ -464,7 +466,7 @@ export const AddGroup = ({ address, open, setOpen }) => { > @@ -523,7 +525,7 @@ export const AddGroup = ({ address, open, setOpen }) => { > @@ -584,7 +586,7 @@ export const AddGroup = ({ address, open, setOpen }) => { onClick={handleCreateGroup} > {t('group:action.create_group', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} diff --git a/src/components/Group/AddGroupList.tsx b/src/components/Group/AddGroupList.tsx index fb4d87c..5c44733 100644 --- a/src/components/Group/AddGroupList.tsx +++ b/src/components/Group/AddGroupList.tsx @@ -115,7 +115,7 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { await show({ message: t('core:message.question.perform_transaction', { action: 'JOIN_GROUP', - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), publishFee: fee.fee + ' QORT', }); @@ -131,7 +131,7 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { setInfoSnack({ type: 'success', message: t('group:message.success.join_group', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); @@ -142,11 +142,11 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { type: 'joined-group', label: t('group:message.success.group_join_label', { group_name: group?.groupName, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), labelDone: t('group:message.success.group_join_label', { group_name: group?.groupName, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), done: false, groupId, @@ -160,11 +160,11 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { type: 'joined-group-request', label: t('group:message.success.group_join_request', { group_name: group?.groupName, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), labelDone: t('group:message.success.group_join_outcome', { group_name: group?.groupName, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), done: false, groupId, @@ -243,7 +243,9 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { }} > - {t('core:action.join', { postProcess: 'capitalizeFirst' })}{' '} + {t('core:action.join', { + postProcess: 'capitalizeFirstChar', + })}{' '} {group?.groupName} @@ -257,7 +259,7 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { onClick={() => handleJoinGroup(group, group?.isOpen)} > {t('group:action.join_group', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} diff --git a/src/components/Group/Forum/GroupMail.tsx b/src/components/Group/Forum/GroupMail.tsx index ecaca52..3e0783c 100644 --- a/src/components/Group/Forum/GroupMail.tsx +++ b/src/components/Group/Forum/GroupMail.tsx @@ -171,7 +171,7 @@ export const GroupMail = ({ rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -756,7 +756,7 @@ export const GroupMail = ({ {t('group:last_message', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} :{' '} @@ -793,7 +793,7 @@ export const GroupMail = ({ }} > {t('core:page.last', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} diff --git a/src/components/Group/Forum/NewThread.tsx b/src/components/Group/Forum/NewThread.tsx index 9da431e..bd28f6e 100644 --- a/src/components/Group/Forum/NewThread.tsx +++ b/src/components/Group/Forum/NewThread.tsx @@ -183,19 +183,19 @@ export const NewThread = ({ if (!isMessage && !threadTitle) { errorMsg = t('core:message.question.provide_thread', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }); } if (!name) { errorMsg = t('group:message.error.access_name', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }); } if (!groupInfo) { errorMsg = t('group:message.error.group_info', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }); } @@ -204,7 +204,7 @@ export const NewThread = ({ const missingFieldsString = missingFields.join(', '); const errMsg = t('core:message.error.missing_fields', { field: missingFieldsString, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }); errorMsg = errMsg; } @@ -217,7 +217,7 @@ export const NewThread = ({ if (!htmlContent?.trim() || htmlContent?.trim() === '

') { const errMsg = t('group:message.generic.provide_message', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }); throw new Error(errMsg); } @@ -231,7 +231,7 @@ export const NewThread = ({ await show({ message: t('core:message.question.perform_transaction', { action: 'ARBITRARY', - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), publishFee: feeToShow + ' QORT', }); @@ -257,7 +257,7 @@ export const NewThread = ({ isPrivate === false ? null : await getSecretKey(false, true); if (!secretKey && isPrivate) { const errMsg = t('group:message.error.group_secret_key', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }); throw new Error(errMsg); } @@ -320,7 +320,7 @@ export const NewThread = ({ setInfoSnack({ type: 'success', message: t('group:message.success.thread_creation', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnack(true); @@ -332,7 +332,7 @@ export const NewThread = ({ } else { if (!currentThread) { const errMsg = t('group:message.error.thread_id', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }); throw new Error(errMsg); } @@ -360,7 +360,7 @@ export const NewThread = ({ setInfoSnack({ type: 'success', message: t('group:message.success.post_creation', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnack(true); @@ -404,10 +404,10 @@ export const NewThread = ({ {currentThread ? t('core:action.new.post', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) : t('core:action.new.thread', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -437,10 +437,10 @@ export const NewThread = ({ {isMessage ? t('core:action.post_message', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) : t('core:action.new.thread', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -562,10 +562,10 @@ export const NewThread = ({ {isMessage ? t('core:action.post', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) : t('core:action.create_thread', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} diff --git a/src/components/Group/Forum/Thread.tsx b/src/components/Group/Forum/Thread.tsx index 82ed71f..697e217 100644 --- a/src/components/Group/Forum/Thread.tsx +++ b/src/components/Group/Forum/Thread.tsx @@ -609,7 +609,7 @@ export const Thread = ({ {t('group:action.return_to_thread', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -688,7 +688,7 @@ export const Thread = ({ disabled={!hasFirstPage} variant="contained" > - {t('core:page.first', { postProcess: 'capitalizeFirst' })} + {t('core:page.first', { postProcess: 'capitalizeFirstChar' })} @@ -930,7 +930,7 @@ export const Thread = ({ }} > {t('core:downloading_qdn', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -963,7 +963,7 @@ export const Thread = ({ }} > {t('group:action.refetch_page', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -1002,7 +1002,7 @@ export const Thread = ({ disabled={!hasFirstPage} variant="contained" > - {t('core:page.first', { postProcess: 'capitalizeFirst' })} + {t('core:page.first', { postProcess: 'capitalizeFirstChar' })} @@ -1073,7 +1075,9 @@ export const Thread = ({ diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index c38b091..6e8b56c 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -511,7 +511,7 @@ export const Group = ({ rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -542,7 +542,7 @@ export const Group = ({ rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -576,7 +576,7 @@ export const Group = ({ rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -1101,7 +1101,7 @@ export const Group = ({ rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -1772,11 +1772,11 @@ export const Group = ({ secondary={ !direct?.timestamp ? t('core:message.generic.no_messages', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) : t('group:last_message_date', { date: formatEmailDate(direct?.timestamp), - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) } primaryTypographyProps={{ @@ -1843,7 +1843,7 @@ export const Group = ({ }} /> {t('core:action.new.chat', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2008,7 +2008,7 @@ export const Group = ({ }} > {t('group:message.generic.no_selection', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2107,7 +2107,7 @@ export const Group = ({ {' '} {t('group:message.generic.encryption_key', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2133,21 +2133,21 @@ export const Group = ({ {' '} {t('group:message.generic.not_part_group', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} {t('group:message.generic.only_encrypted', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} {t('group:message.generic.notify_admins', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2169,7 +2169,7 @@ export const Group = ({ onClick={() => notifyAdmin(admin)} > {t('core:action.notify', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2394,7 +2394,7 @@ export const Group = ({ message: isLoadingGroupMessage || t('group:message.generic.setting_group', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }} /> @@ -2403,7 +2403,7 @@ export const Group = ({ open={isLoadingGroups} info={{ message: t('group:message.generic.setting_group', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }} /> diff --git a/src/components/Group/GroupInvites.tsx b/src/components/Group/GroupInvites.tsx index d896786..360f155 100644 --- a/src/components/Group/GroupInvites.tsx +++ b/src/components/Group/GroupInvites.tsx @@ -71,7 +71,7 @@ export const GroupInvites = ({ myAddress, setOpenAddGroup }) => { fontSize: '1rem', }} > - {t('group:group.invites', { postProcess: 'capitalizeFirst' })}{' '} + {t('group:group.invites', { postProcess: 'capitalizeFirstChar' })}{' '} {groupsWithJoinRequests?.length > 0 && ` (${groupsWithJoinRequests?.length})`} @@ -131,7 +131,7 @@ export const GroupInvites = ({ myAddress, setOpenAddGroup }) => { }} > {t('group:message.generic.no_display', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -181,7 +181,7 @@ export const GroupInvites = ({ myAddress, setOpenAddGroup }) => { }} primary={t('group:message.generic.group_invited_you', { group: group?.groupName, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} /> diff --git a/src/components/Group/GroupJoinRequests.tsx b/src/components/Group/GroupJoinRequests.tsx index bceff37..5057a87 100644 --- a/src/components/Group/GroupJoinRequests.tsx +++ b/src/components/Group/GroupJoinRequests.tsx @@ -144,7 +144,7 @@ export const GroupJoinRequests = ({ fontSize: '1rem', }} > - {t('group:join_requests', { postProcess: 'capitalizeFirst' })}{' '} + {t('group:join_requests', { postProcess: 'capitalizeFirstChar' })}{' '} {filteredJoinRequests?.filter((group) => group?.data?.length > 0) ?.length > 0 && ` (${filteredJoinRequests?.filter((group) => group?.data?.length > 0)?.length})`} @@ -207,7 +207,7 @@ export const GroupJoinRequests = ({ }} > {t('group:message.generic.no_display', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} diff --git a/src/components/Group/GroupList.tsx b/src/components/Group/GroupList.tsx index 2c2e844..b9b0433 100644 --- a/src/components/Group/GroupList.tsx +++ b/src/components/Group/GroupList.tsx @@ -89,7 +89,7 @@ export const GroupList = ({ : theme.palette.text.secondary } label={t('group:group.group_other', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} selected={desktopSideView === 'groups'} customWidth="75px" @@ -122,7 +122,7 @@ export const GroupList = ({ : theme.palette.text.secondary } label={t('group:group.messaging', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} selected={desktopSideView === 'directs'} > @@ -193,7 +193,7 @@ export const GroupList = ({ color: theme.palette.text.primary, }} /> - {t('group:group.group', { postProcess: 'capitalizeFirst' })} + {t('group:group.group', { postProcess: 'capitalizeFirstChar' })} {!isRunningPublicNode && ( diff --git a/src/components/Group/HomeDesktop.tsx b/src/components/Group/HomeDesktop.tsx index aec12f3..e5e0d4e 100644 --- a/src/components/Group/HomeDesktop.tsx +++ b/src/components/Group/HomeDesktop.tsx @@ -85,7 +85,7 @@ export const HomeDesktop = ({ padding: '10px', }} > - {t('core:welcome', { postProcess: 'capitalizeFirst' })} + {t('core:welcome', { postProcess: 'capitalizeFirstChar' })} {userInfo?.name ? ( {t('tutorial:initial.explore', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} {' '} diff --git a/src/components/Group/InviteMember.tsx b/src/components/Group/InviteMember.tsx index 82fc6e5..cc6e431 100644 --- a/src/components/Group/InviteMember.tsx +++ b/src/components/Group/InviteMember.tsx @@ -19,7 +19,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => { await show({ message: t('core:message.question.perform_transaction', { action: 'GROUP_INVITE', - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), publishFee: fee.fee + ' QORT', }); @@ -40,7 +40,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => { type: 'success', message: t('group:message.success.group_invite', { value: value, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnack(true); @@ -61,7 +61,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => { message: error?.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnack(true); @@ -86,7 +86,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => { flexDirection: 'column', }} > - {t('group:action.invite_member', { postProcess: 'capitalizeFirst' })} + {t('group:action.invite_member', { postProcess: 'capitalizeFirstChar' })} @@ -99,14 +99,16 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => { - {t('core:save', { postProcess: 'capitalizeFirst' })} + {t('core:save', { postProcess: 'capitalizeFirstChar' })} diff --git a/src/components/QMailStatus.tsx b/src/components/QMailStatus.tsx index 0bad117..45e51c8 100644 --- a/src/components/QMailStatus.tsx +++ b/src/components/QMailStatus.tsx @@ -66,7 +66,7 @@ export const QMailStatus = () => { }} > {t('core:q_apps.q_mail', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} } diff --git a/src/components/QortPrice.tsx b/src/components/QortPrice.tsx index 4d185b0..65dd958 100644 --- a/src/components/QortPrice.tsx +++ b/src/components/QortPrice.tsx @@ -152,7 +152,7 @@ export const QortPrice = () => { fontWeight: 'bold', }} > - {t('core:price', { postProcess: 'capitalizeFirst' })} + {t('core:price', { postProcess: 'capitalizeFirstChar' })} {!ltcPerQort ? ( @@ -184,7 +184,7 @@ export const QortPrice = () => { fontWeight: 'bold', }} > - {t('core:supply', { postProcess: 'capitalizeFirst' })} + {t('core:supply', { postProcess: 'capitalizeFirstChar' })} {!supply ? ( @@ -238,7 +238,7 @@ export const QortPrice = () => { fontWeight: 'bold', }} > - {t('core:last_height', { postProcess: 'capitalizeFirst' })} + {t('core:last_height', { postProcess: 'capitalizeFirstChar' })} {!lastBlock?.height ? ( diff --git a/src/components/RegisterName.tsx b/src/components/RegisterName.tsx index 5c367a3..966cb71 100644 --- a/src/components/RegisterName.tsx +++ b/src/components/RegisterName.tsx @@ -115,20 +115,20 @@ export const RegisterName = ({ if (!userInfo?.address) throw new Error( t('core:message.error.address_not_found', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); if (!registerNameValue) throw new Error( t('core:action.enter_name', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); const fee = await getFee('REGISTER_NAME'); await show({ message: t('core:message.question.register_name', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), publishFee: fee.fee + ' QORT', }); @@ -145,7 +145,7 @@ export const RegisterName = ({ setInfoSnack({ type: 'success', message: t('group:message.success.registered_name', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setIsOpen(false); @@ -156,12 +156,12 @@ export const RegisterName = ({ ...response, type: 'register-name', label: t('group:message.success.registered_name_label', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), labelDone: t( 'group:message.success.registered_name_success', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', } ), done: false, @@ -183,7 +183,7 @@ export const RegisterName = ({ message: error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnack(true); @@ -226,7 +226,9 @@ export const RegisterName = ({ }} > @@ -282,7 +284,7 @@ export const RegisterName = ({ {t('core:message.generic.name_available', { name: registerNameValue, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -304,7 +306,7 @@ export const RegisterName = ({ {t('core:message.generic.name_unavailable', { name: registerNameValue, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -322,7 +324,7 @@ export const RegisterName = ({ {t('core:message.generic.name_checking', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -336,7 +338,7 @@ export const RegisterName = ({ }} > {t('core:message.generic.name_benefits', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -354,7 +356,7 @@ export const RegisterName = ({ @@ -369,7 +371,7 @@ export const RegisterName = ({ @@ -386,7 +388,7 @@ export const RegisterName = ({ setRegisterNameValue(''); }} > - {t('core:action.close', { postProcess: 'capitalizeFirst' })} + {t('core:action.close', { postProcess: 'capitalizeFirstChar' })} diff --git a/src/components/Save/Save.tsx b/src/components/Save/Save.tsx index 354b531..c89b625 100644 --- a/src/components/Save/Save.tsx +++ b/src/components/Save/Save.tsx @@ -156,7 +156,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { await show({ message: t('core:message.generic.publish_qnd', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), publishFee: fee.fee + ' QORT', }); @@ -178,7 +178,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { rej( error.message || t('core:message.error.generic', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); }); @@ -189,7 +189,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { setInfoSnack({ type: 'success', message: t('core:message.success.published_qdn', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnack(true); @@ -202,7 +202,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { message: error?.message || t('core:message.error.save_qdn', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); setOpenSnack(true); @@ -236,7 +236,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { { }} > {t('core:message.generic.settings', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} {' '} @@ -336,7 +336,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { }} > {t('core:message.generic.qdn', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -367,7 +367,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { }} > {t('core:message.generic.register_name', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -388,7 +388,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { }} > {t('core:message.generic.unsaved_changes', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -412,7 +412,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { variant="contained" > {t('core:action.save_qdn', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -425,7 +425,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { }} > {t('core:message.question.reset_qdn', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -447,7 +447,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { }} > {t('core:message.generic.revert_qdn', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -462,7 +462,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { > {' '} {t('core:message.question.reset_pinned', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -472,7 +472,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { variant="contained" > {t('core:message.generic.revert_default', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -496,7 +496,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { }} > {t('core:message.question.overwrite_changes', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -518,7 +518,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { }} > {t('core:message.generic.overwrite_qdn', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -538,7 +538,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { }} > {t('core:message.generic.no_pinned_changes', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -595,7 +595,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { }} > {t('core:action.import', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -620,7 +620,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { }} > {t('core:action.export', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} diff --git a/src/components/Theme/ThemeSelector.tsx b/src/components/Theme/ThemeSelector.tsx index 9ed7d84..97aa06d 100644 --- a/src/components/Theme/ThemeSelector.tsx +++ b/src/components/Theme/ThemeSelector.tsx @@ -23,10 +23,10 @@ const ThemeSelector = () => { title={ themeMode === 'dark' ? t('core:theme.light', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) : t('core:theme.light', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) } > diff --git a/src/components/Tutorials/Tutorials.tsx b/src/components/Tutorials/Tutorials.tsx index f6d3b3b..e8b6794 100644 --- a/src/components/Tutorials/Tutorials.tsx +++ b/src/components/Tutorials/Tutorials.tsx @@ -91,7 +91,7 @@ export const Tutorials = () => { @@ -138,7 +138,7 @@ export const Tutorials = () => { diff --git a/src/hooks/useHandleTutorials.tsx b/src/hooks/useHandleTutorials.tsx index e0b858f..fa4aeb4 100644 --- a/src/hooks/useHandleTutorials.tsx +++ b/src/hooks/useHandleTutorials.tsx @@ -108,7 +108,7 @@ export const useHandleTutorials = () => { multi: [ { title: t('tutorial:1_getting_started', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), resource: { name: 'a-test', @@ -119,7 +119,7 @@ export const useHandleTutorials = () => { }, { title: t('tutorial:2_overview', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), resource: { name: 'a-test', @@ -130,7 +130,7 @@ export const useHandleTutorials = () => { }, { title: t('tutorial:3_groups', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), resource: { name: 'a-test', @@ -141,7 +141,7 @@ export const useHandleTutorials = () => { }, { title: t('tutorial:4_obtain_qort', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), resource: { name: 'a-test', @@ -163,7 +163,7 @@ export const useHandleTutorials = () => { multi: [ { title: t('tutorial:apps.dashboard', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), resource: { name: 'a-test', @@ -174,7 +174,7 @@ export const useHandleTutorials = () => { }, { title: t('tutorial:apps.navigation', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), resource: { name: 'a-test', diff --git a/src/i18n/i18n.ts b/src/i18n/i18n.ts index 614f814..06be586 100644 --- a/src/i18n/i18n.ts +++ b/src/i18n/i18n.ts @@ -1,7 +1,11 @@ import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; import LanguageDetector from 'i18next-browser-languagedetector'; -import { capitalizeAll, capitalizeFirst } from './processors'; +import { + capitalizeAll, + capitalizeFirstChar, + capitalizeFirstWord, +} from './processors'; export const supportedLanguages = { de: { name: 'Deutsch', flag: '🇩🇪' }, @@ -34,7 +38,8 @@ i18n .use(initReactI18next) .use(LanguageDetector) .use(capitalizeAll as any) - .use(capitalizeFirst as any) + .use(capitalizeFirstChar as any) + .use(capitalizeFirstWord as any) .init({ resources, fallbackLng: 'en', diff --git a/src/i18n/locales/en/core.json b/src/i18n/locales/en/core.json index 91c3ad9..ba9d509 100644 --- a/src/i18n/locales/en/core.json +++ b/src/i18n/locales/en/core.json @@ -71,6 +71,8 @@ "select_category": "select Category", "select_name_app": "select Name/App", "set_avatar": "set avatar", + "show": "show", + "show_poll": "show poll", "start_minting": "start minting", "start_typing": "start typing here...", "transfer_qort": "Transfer QORT", @@ -78,7 +80,8 @@ "unpin_app": "unpin app", "unpin_from_dashboard": "unpin from dashboard", "update": "update", - "update_app": "update your app" + "update_app": "update your app", + "vote": "vote" }, "admin": "admin", "admin_other": "admins", @@ -123,6 +126,7 @@ "general": "general", "general_settings": "general settings", "identifier": "identifier", + "image_embed": "image embed", "last_height": "last height", "level": "level", "library": "library", @@ -170,9 +174,11 @@ "unable_publish_app": "unable to publish app", "unable_publish_image": "unable to publish image", "unable_rate": "unable to rate", + "unable_vote": "unable to vote", "update_failed": "failed to update" }, "generic": { + "already_voted": "you've already voted.", "avatar_size": "{{ size }} KB max. for GIFS", "building": "building", "created_by": "created by {{ owner }}", @@ -209,6 +215,7 @@ "password_enter": "please enter a password", "payment_request": "the Application
{{hostname}}
is requesting a payment", "people_reaction": "people who reacted with {{ reaction }}", + "processing_transaction": "is processing transaction, please wait...", "publish_data": "publish data to Qortal: anything from apps to videos. Fully decentralized!", "publishing": "publishing... Please wait.", "qdn": "use QDN saving", @@ -230,6 +237,7 @@ "updating": "updating" }, "question": { + "accept_vote_on_poll": "do you accept this VOTE_ON_POLL transaction? POLLS are public!", "logout": "are you sure you would like to logout?", "new_user": "are you a new user?", "delete_chat_image": "would you like to delete your previous chat image?", @@ -256,13 +264,16 @@ "published_qdn": "successfully published to QDN", "rated_app": "successfully rated. Please wait a couple minutes for the network to propogate the changes.", "request_read": "I have read this request", - "transfer": "the transfer was succesful!" + "transfer": "the transfer was succesful!", + "voted": "successfully voted. Please wait a couple minutes for the network to propogate the changes." } }, "minting_status": "minting status", "name": "name", "name_app": "name/App", "none": "none", + "option": "option", + "option_other": "options", "page": { "last": "last", "first": "first", @@ -270,6 +281,7 @@ "previous": "previous" }, "payment_notification": "payment notification", + "poll_embed": "poll embed", "port": "port", "price": "price", "q_apps": { @@ -302,6 +314,8 @@ "title": "title", "tutorial": "tutorial", "user_lookup": "user lookup", + "vote": "vote", + "vote_other": "{{ count }} votes", "zip": "zip", "wallet": { "litecoin": "litecoin wallet", diff --git a/src/i18n/processors.ts b/src/i18n/processors.ts index cb2f8e4..16afecd 100644 --- a/src/i18n/processors.ts +++ b/src/i18n/processors.ts @@ -4,8 +4,29 @@ export const capitalizeAll = { process: (value: string) => value.toUpperCase(), }; -export const capitalizeFirst = { +export const capitalizeFirstChar = { type: 'postProcessor', - name: 'capitalizeFirst', + name: 'capitalizeFirstChar', process: (value: string) => value.charAt(0).toUpperCase() + value.slice(1), }; + +export const capitalizeFirstWord = { + type: 'postProcessor', + name: 'capitalizeFirstWord', + process: (value: string) => { + if (!value?.trim()) return value; + + const trimmed = value.trimStart(); + const firstSpaceIndex = trimmed.indexOf(' '); + + if (firstSpaceIndex === -1) { + return trimmed.charAt(0).toUpperCase() + trimmed.slice(1); + } + + const firstWord = trimmed.slice(0, firstSpaceIndex); + const restOfString = trimmed.slice(firstSpaceIndex); + const trailingSpaces = value.slice(trimmed.length); + + return firstWord.toUpperCase() + restOfString + trailingSpaces; + }, +};