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). diff --git a/src/App.tsx b/src/App.tsx index 3f7dcca..90db808 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, @@ -116,18 +116,18 @@ 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'; 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'; @@ -678,7 +678,7 @@ function App() { throw new Error( t('auth:message.error.field_not_found_json', { field: field, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); } @@ -977,7 +977,7 @@ function App() { if (!walletToBeDownloadedPassword) { setWalletToBeDownloadedError( t('core:message.generic.password_enter', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); return; @@ -985,7 +985,7 @@ function App() { if (!walletToBeDownloadedPasswordConfirm) { setWalletToBeDownloadedError( t('core:message.generic.password_confirm', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); return; @@ -995,7 +995,7 @@ function App() { ) { setWalletToBeDownloadedError( t('core:message.error.password_not_matching', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); return; @@ -1062,7 +1062,7 @@ function App() { if (extState === 'authenticated') { await showUnsavedChanges({ message: t('core:message.question.logout', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }); } @@ -1199,7 +1199,7 @@ function App() { } catch (error) { setWalletToBeDecryptedError( t('core:message.error.password_wrong', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); } @@ -1536,7 +1536,7 @@ function App() { }} > {t('core:action.transfer_qort', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -1560,7 +1560,7 @@ function App() { executeEvent('open-apps-mode', {}); }} > - {t('core:action.get_qort', { postProcess: 'capitalizeFirst' })} + {t('core:action.get_qort', { postProcess: 'capitalizeFirstChar' })} ); @@ -1854,7 +1854,7 @@ function App() { if (res) throw new Error( t('core:message.generic.no_minting_details', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }) ); setIsOpenMinting(true); @@ -2231,7 +2231,7 @@ function App() { > {t('core:message.generic.fee_qort', { message: messageQortalRequest?.fee, - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2292,7 +2292,9 @@ function App() { }} onClick={() => onOkQortalRequest('accepted')} > - {t('core:action.accept', { postProcess: 'capitalizeFirst' })} + {t('core:action.accept', { + postProcess: 'capitalizeFirstChar', + })} onCancelQortalRequest()} > - {t('core:action.decline', { postProcess: 'capitalizeFirst' })} + {t('core:action.decline', { + postProcess: 'capitalizeFirstChar', + })} @@ -2399,7 +2403,9 @@ function App() { }} onClick={() => confirmBuyOrder(false)} > - {t('core:action.accept', { postProcess: 'capitalizeFirst' })} + {t('core:action.accept', { + postProcess: 'capitalizeFirstChar', + })} confirmBuyOrder(true)} > - {t('core:action.decline', { postProcess: 'capitalizeFirst' })} + {t('core:action.decline', { + postProcess: 'capitalizeFirstChar', + })} @@ -2485,7 +2493,9 @@ function App() { }} onClick={() => confirmPayment(false)} > - {t('core:action.accept', { postProcess: 'capitalizeFirst' })} + {t('core:action.accept', { + postProcess: 'capitalizeFirstChar', + })} confirmPayment(true)} > - {t('core:action.decline', { postProcess: 'capitalizeFirst' })} + {t('core:action.decline', { + postProcess: 'capitalizeFirstChar', + })} @@ -2550,7 +2562,9 @@ function App() { ) } > - {t('core:action.accept', { postProcess: 'capitalizeFirst' })} + {t('core:action.accept', { + postProcess: 'capitalizeFirstChar', + })} - {t('core:action.decline', { postProcess: 'capitalizeFirst' })} + {t('core:action.decline', { + postProcess: 'capitalizeFirstChar', + })} @@ -2612,7 +2628,7 @@ function App() { {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 5d4cfc6..298cb26 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'; @@ -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({ @@ -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', })} { 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) { @@ -520,7 +520,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => { }} > {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/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/Apps/AppInfo.tsx b/src/components/Apps/AppInfo.tsx index 6e8e274..1c77d25 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 @@ -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 1629b5e..a0b8f72 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 ( {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 163f619..d81bde3 100644 --- a/src/components/Apps/AppPublish.tsx +++ b/src/components/Apps/AppPublish.tsx @@ -67,7 +67,7 @@ export const AppPublish = ({ names, categories }) => { 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(''); @@ -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 860dfc4..d7b75f5 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 { @@ -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 640d062..d035feb 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'; @@ -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 a976534..216f5e7 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: 'capitalizeFirstChar', + })} 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: 'capitalizeFirstChar', + })} 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..74bce21 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, @@ -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 b2c67cf..b1378f6 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 { @@ -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 ebe0ddd..d953bff 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( @@ -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 f294834..1cfe097 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); @@ -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 de2c744..8a64713 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, @@ -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( @@ -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', }), }); } @@ -321,7 +321,9 @@ export const AppsPrivate = ({ myName }) => { }} > { }} /> { > @@ -367,7 +371,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: 'capitalizeFirstChar', + })} onChange={(e) => { setPrivateAppValues((prev) => { return { @@ -379,7 +385,7 @@ export const AppsPrivate = ({ myName }) => { > {t('group:message.generic.no_selection', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -406,7 +412,7 @@ export const AppsPrivate = ({ myName }) => { }} > { }} > @@ -458,7 +466,9 @@ export const AppsPrivate = ({ myName }) => { setIsOpenPrivateModal(false); }} > - {t('core:action.close', { postProcess: 'capitalizeFirst' })} + {t('core:action.close', { + postProcess: 'capitalizeFirstChar', + })} @@ -486,7 +498,7 @@ export const AppsPrivate = ({ myName }) => { }} > {t('core:message.generic.select_zip', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -520,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', })} @@ -538,13 +550,13 @@ export const AppsPrivate = ({ myName }) => { > @@ -552,14 +564,17 @@ 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: 'capitalizeFirstChar', + })} onChange={(e) => setSelectedGroup(e.target.value)} > {t('group:message.generic.no_selection', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} + {myGroupsWhereIAmAdmin ?.filter((item) => !item?.isOpen) .map((group) => { @@ -583,11 +598,13 @@ export const AppsPrivate = ({ myName }) => { }} > @@ -612,12 +629,12 @@ export const AppsPrivate = ({ myName }) => { }} > @@ -636,7 +653,7 @@ export const AppsPrivate = ({ myName }) => { setLogo(file)}> @@ -654,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/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/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 ca080d8..276369a 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) { @@ -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 4ab4771..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', }); @@ -185,7 +185,7 @@ export const AnnouncementDiscussion = ({ clearEditorContent(); } - // TODO send chat message + // send chat message } catch (error) { console.error(error); } finally { @@ -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 5b9c660..4538773 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'; @@ -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 9afd134..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', })} )} @@ -454,7 +454,9 @@ 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 daf509c..5c44733 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 @@ -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 c1718a5..3e0783c 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); @@ -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 d37eedd..bd28f6e 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(''); @@ -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 3ab2862..697e217 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); @@ -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 10e39a4..6e8b56c 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'; @@ -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); @@ -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', }) ); }); @@ -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: 'capitalizeFirstChar', + })}
@@ -1999,7 +2008,7 @@ export const Group = ({ }} > {t('group:message.generic.no_selection', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })}
@@ -2098,7 +2107,7 @@ export const Group = ({ {' '} {t('group:message.generic.encryption_key', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2124,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', })} @@ -2160,7 +2169,7 @@ export const Group = ({ onClick={() => notifyAdmin(admin)} > {t('core:action.notify', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} @@ -2385,7 +2394,7 @@ export const Group = ({ message: isLoadingGroupMessage || t('group:message.generic.setting_group', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', }), }} /> @@ -2394,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 f3da8a0..360f155 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(() => { @@ -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 0991edb..5057a87 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( [] ); @@ -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 c270df0..e5e0d4e 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 = ({ @@ -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(() => { @@ -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 ad027e4..cc6e431 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 { @@ -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 62e7311..45e51c8 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( @@ -66,7 +66,7 @@ export const QMailStatus = () => { }} > {t('core:q_apps.q_mail', { - postProcess: 'capitalizeFirst', + postProcess: 'capitalizeFirstChar', })} } diff --git a/src/components/Home/QortPrice.tsx b/src/components/QortPrice.tsx similarity index 95% rename from src/components/Home/QortPrice.tsx rename to src/components/QortPrice.tsx index 7f0d3ee..65dd958 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) { @@ -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/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 }) => { diff --git a/src/components/RegisterName.tsx b/src/components/RegisterName.tsx index e9a4116..966cb71 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); @@ -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 38e328b..c89b625 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 = { @@ -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 305b4ab..97aa06d 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(); @@ -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/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/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 85% rename from src/components/Tutorials/useHandleTutorials.tsx rename to src/hooks/useHandleTutorials.tsx index 1f5ac33..fa4aeb4 100644 --- a/src/components/Tutorials/useHandleTutorials.tsx +++ b/src/hooks/useHandleTutorials.tsx @@ -1,13 +1,13 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; -import { saveToLocalStorage } from '../Apps/AppsNavBarDesktop'; -import creationImg from './img/creation.webp'; -import dashboardImg from './img/dashboard.webp'; -import groupsImg from './img/groups.webp'; -import importantImg from './img/important.webp'; -import navigationImg from './img/navigation.webp'; -import overviewImg from './img/overview.webp'; -import startedImg from './img/started.webp'; -import obtainingImg from './img/obtaining-qort.jpg'; +import { saveToLocalStorage } from '../components/Apps/AppsNavBarDesktop'; +import creationImg from '../components/Tutorials/img/creation.webp'; +import dashboardImg from '../components/Tutorials/img/dashboard.webp'; +import groupsImg from '../components/Tutorials/img/groups.webp'; +import importantImg from '../components/Tutorials/img/important.webp'; +import navigationImg from '../components/Tutorials/img/navigation.webp'; +import overviewImg from '../components/Tutorials/img/overview.webp'; +import startedImg from '../components/Tutorials/img/started.webp'; +import obtainingImg from '../components/Tutorials/img/obtaining-qort.jpg'; import { useTranslation } from 'react-i18next'; const checkIfGatewayIsOnline = async () => { @@ -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/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/i18n/i18n.ts b/src/i18n/i18n.ts index 23a76a3..06be586 100644 --- a/src/i18n/i18n.ts +++ b/src/i18n/i18n.ts @@ -1,18 +1,11 @@ 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, + capitalizeFirstChar, + capitalizeFirstWord, +} from './processors'; export const supportedLanguages = { de: { name: 'Deutsch', flag: '🇩🇪' }, @@ -45,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/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..ba9d509 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", @@ -30,6 +31,7 @@ "decrypt": "decrypt", "disable_enter": "disable enter", "download": "download", + "download_file": "download file", "edit": "edit", "enter_name": "enter a name", "export": "export", @@ -43,6 +45,7 @@ "login": "login", "logout": "logout", "new": { + "chat": "new chat", "post": "new post", "thread": "new thread" }, @@ -61,12 +64,15 @@ "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", "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", @@ -74,24 +80,32 @@ "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", "all": "all", + "announcement": "announcement", + "announcement_other": "announcements", "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", + "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" @@ -109,8 +123,10 @@ "publish": "publish fee" }, "for": "for", + "general": "general", "general_settings": "general settings", "identifier": "identifier", + "image_embed": "image embed", "last_height": "last height", "level": "level", "library": "library", @@ -120,12 +136,14 @@ "member": "member list" }, "loading": { - "announcements": "announcements", + "announcements": "loading announcements", "generic": "loading...", "chat": "loading chat... please wait.", "comments": "loading comments... please wait.", "posts": "loading posts... please wait." }, + "member": "member", + "member_other": "members", "message_us": "please message us on Telegram or Discord if you need 4 QORT to start chatting without any limitations", "message": { "error": { @@ -133,6 +151,9 @@ "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_poll_embed_link_name": "invalid poll embed link. Missing name.", + "invalid_image_embed_link_name": "invalid image embed link. Missing param.", "invalid_signature": "invalid signature", "invalid_zip": "invalid zip", "message_loading": "error loading message.", @@ -148,19 +169,27 @@ "rating_option": "cannot find rating option", "save_qdn": "unable to save to QDN", "send_failed": "failed to send", + "unable_download_image": "unable to download IMAGE. Please try again later by clicking the refresh button", "unable_encrypt_app": "unable to encrypt app. App not published'", "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 }}", "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", @@ -173,7 +202,9 @@ "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_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", @@ -184,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", @@ -205,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?", @@ -231,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", @@ -245,6 +281,7 @@ "previous": "previous" }, "payment_notification": "payment notification", + "poll_embed": "poll embed", "port": "port", "price": "price", "q_apps": { @@ -264,6 +301,8 @@ "dark": "dark mode", "light": "light mode" }, + "thread": "thread", + "thread_other": "threads", "time": { "day_one": "{{count}} day", "day_other": "{{count}} days", @@ -275,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/locales/en/group.json b/src/i18n/locales/en/group.json index 5b14b7c..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", @@ -59,6 +60,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": { @@ -70,6 +72,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.", 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" diff --git a/src/i18n/processors.ts b/src/i18n/processors.ts new file mode 100644 index 0000000..16afecd --- /dev/null +++ b/src/i18n/processors.ts @@ -0,0 +1,32 @@ +export const capitalizeAll = { + type: 'postProcessor', + name: 'capitalizeAll', + process: (value: string) => value.toUpperCase(), +}; + +export const capitalizeFirstChar = { + type: 'postProcessor', + 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; + }, +}; 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/components/ReactionPicker.css b/src/styles/ReactionPicker.css similarity index 100% rename from src/components/ReactionPicker.css rename to src/styles/ReactionPicker.css 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; 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) {