mirror of
https://github.com/Qortal/Qortal-Hub.git
synced 2025-05-20 08:36:58 +00:00
Merge pull request #53 from nbenaglia/feature/i18n-embeds-other
i18n: Add translations for Embeds & others
This commit is contained in:
commit
a49e82277e
@ -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/<locale>` folder.
|
||||
Files with translation are in `src/i18n/locales/<locale>` folder.
|
||||
|
||||
See [guidelines](./docs/i18n_languages.md).
|
||||
|
154
src/App.tsx
154
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',
|
||||
})}
|
||||
</CustomButton>
|
||||
<AddressQRCode targetAddress={rawWallet?.address0} />
|
||||
@ -1560,7 +1560,7 @@ function App() {
|
||||
executeEvent('open-apps-mode', {});
|
||||
}}
|
||||
>
|
||||
{t('core:action.get_qort', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.get_qort', { postProcess: 'capitalizeFirstChar' })}
|
||||
</TextP>
|
||||
</AuthenticatedContainerInnerLeft>
|
||||
);
|
||||
@ -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',
|
||||
})}
|
||||
</TextP>
|
||||
|
||||
@ -2292,7 +2292,9 @@ function App() {
|
||||
}}
|
||||
onClick={() => onOkQortalRequest('accepted')}
|
||||
>
|
||||
{t('core:action.accept', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.accept', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
<CustomButton
|
||||
sx={{
|
||||
@ -2300,7 +2302,9 @@ function App() {
|
||||
}}
|
||||
onClick={() => onCancelQortalRequest()}
|
||||
>
|
||||
{t('core:action.decline', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.decline', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</Box>
|
||||
|
||||
@ -2399,7 +2403,9 @@ function App() {
|
||||
}}
|
||||
onClick={() => confirmBuyOrder(false)}
|
||||
>
|
||||
{t('core:action.accept', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.accept', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
|
||||
<CustomButton
|
||||
@ -2408,7 +2414,9 @@ function App() {
|
||||
}}
|
||||
onClick={() => confirmBuyOrder(true)}
|
||||
>
|
||||
{t('core:action.decline', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.decline', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</Box>
|
||||
|
||||
@ -2485,7 +2493,9 @@ function App() {
|
||||
}}
|
||||
onClick={() => confirmPayment(false)}
|
||||
>
|
||||
{t('core:action.accept', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.accept', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
|
||||
<CustomButton
|
||||
@ -2494,7 +2504,9 @@ function App() {
|
||||
}}
|
||||
onClick={() => confirmPayment(true)}
|
||||
>
|
||||
{t('core:action.decline', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.decline', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</Box>
|
||||
|
||||
@ -2550,7 +2562,9 @@ function App() {
|
||||
)
|
||||
}
|
||||
>
|
||||
{t('core:action.accept', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.accept', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
<CustomButton
|
||||
sx={{
|
||||
@ -2564,7 +2578,9 @@ function App() {
|
||||
)
|
||||
}
|
||||
>
|
||||
{t('core:action.decline', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.decline', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</Box>
|
||||
</>
|
||||
@ -2612,7 +2628,7 @@ function App() {
|
||||
<CustomButton {...getRootProps()}>
|
||||
<input {...getInputProps()} />
|
||||
{t('auth:action.authenticate', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
|
||||
@ -2624,7 +2640,7 @@ function App() {
|
||||
}}
|
||||
>
|
||||
{t('auth:action.create_account', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</>
|
||||
@ -2729,7 +2745,7 @@ function App() {
|
||||
}}
|
||||
>
|
||||
{t('auth:action.authenticate', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</TextP>
|
||||
</Box>
|
||||
@ -2738,7 +2754,9 @@ function App() {
|
||||
|
||||
<>
|
||||
<CustomLabel htmlFor="standard-adornment-password">
|
||||
{t('auth:wallet.password', { postProcess: 'capitalizeFirst' })}
|
||||
{t('auth:wallet.password', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomLabel>
|
||||
|
||||
<Spacer height="10px" />
|
||||
@ -2763,8 +2781,10 @@ function App() {
|
||||
fontSize: '12px',
|
||||
}}
|
||||
>
|
||||
{t('auth:node.using', { postProcess: 'capitalizeFirst' })}:{' '}
|
||||
{currentNode?.url}
|
||||
{t('auth:node.using', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
: {currentNode?.url}
|
||||
</Typography>
|
||||
</>
|
||||
) : (
|
||||
@ -2777,7 +2797,7 @@ function App() {
|
||||
}}
|
||||
>
|
||||
{t('auth:node.using_public', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</>
|
||||
@ -2787,7 +2807,7 @@ function App() {
|
||||
|
||||
<CustomButton onClick={authenticateWallet}>
|
||||
{t('auth:action.authenticate', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
|
||||
@ -2864,7 +2884,7 @@ function App() {
|
||||
}}
|
||||
>
|
||||
{t('auth:action.setup_qortal_account', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</TextP>
|
||||
|
||||
@ -2921,7 +2941,7 @@ function App() {
|
||||
}}
|
||||
>
|
||||
{t('auth:tips.view_seedphrase', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -2958,7 +2978,9 @@ function App() {
|
||||
setCreationStep(2);
|
||||
}}
|
||||
>
|
||||
{t('core:page.next', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:page.next', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</Box>
|
||||
|
||||
@ -2994,7 +3016,7 @@ function App() {
|
||||
}}
|
||||
>
|
||||
{t('auth:seed_your', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -3018,7 +3040,7 @@ function App() {
|
||||
onClick={exportSeedphrase}
|
||||
>
|
||||
{t('auth:action.export_seedphrase', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</Box>
|
||||
@ -3030,7 +3052,7 @@ function App() {
|
||||
onClick={() => setShowSeed(false)}
|
||||
>
|
||||
{t('core:action.close', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
@ -3048,7 +3070,7 @@ function App() {
|
||||
|
||||
<CustomLabel htmlFor="standard-adornment-password">
|
||||
{t('auth:wallet.password', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomLabel>
|
||||
|
||||
@ -3066,7 +3088,7 @@ function App() {
|
||||
|
||||
<CustomLabel htmlFor="standard-adornment-password">
|
||||
{t('auth:wallet.password_confirmation', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomLabel>
|
||||
|
||||
@ -3083,7 +3105,7 @@ function App() {
|
||||
|
||||
<Typography variant="body2">
|
||||
{t('auth:message.generic.no_minimum_length', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -3091,7 +3113,7 @@ function App() {
|
||||
|
||||
<CustomButton onClick={createAccountFunc}>
|
||||
{t('auth:action.create_account', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</Box>
|
||||
@ -3115,7 +3137,7 @@ function App() {
|
||||
}}
|
||||
>
|
||||
{t('auth:message.generic.congrats_setup', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</TextP>
|
||||
|
||||
@ -3133,7 +3155,7 @@ function App() {
|
||||
|
||||
<Typography>
|
||||
{t('auth:tips.safe_place', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -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',
|
||||
})}
|
||||
</CustomButton>
|
||||
</>
|
||||
@ -3186,7 +3208,7 @@ function App() {
|
||||
}}
|
||||
>
|
||||
{t('core:message.success.transfer', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</TextP>
|
||||
|
||||
@ -3199,7 +3221,9 @@ function App() {
|
||||
}}
|
||||
>
|
||||
<CustomButton>
|
||||
{t('core:action.continue', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.continue', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</ButtonBase>
|
||||
</Box>
|
||||
@ -3220,7 +3244,7 @@ function App() {
|
||||
}}
|
||||
>
|
||||
{t('core:message.success.transfer', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</TextP>
|
||||
|
||||
@ -3231,7 +3255,9 @@ function App() {
|
||||
window.close();
|
||||
}}
|
||||
>
|
||||
{t('core:action.continue', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.continue', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</>
|
||||
)}
|
||||
@ -3251,7 +3277,7 @@ function App() {
|
||||
}}
|
||||
>
|
||||
{t('core:message.success.order_submitted', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</TextP>
|
||||
|
||||
@ -3262,7 +3288,7 @@ function App() {
|
||||
window.close();
|
||||
}}
|
||||
>
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirstChar' })}
|
||||
</CustomButton>
|
||||
</>
|
||||
)}
|
||||
@ -3312,7 +3338,7 @@ function App() {
|
||||
{message?.paymentFee && (
|
||||
<DialogContentText id="alert-dialog-description2">
|
||||
{t('core:fee.payment', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
: {message.paymentFee}
|
||||
</DialogContentText>
|
||||
@ -3320,7 +3346,7 @@ function App() {
|
||||
{message?.publishFee && (
|
||||
<DialogContentText id="alert-dialog-description2">
|
||||
{t('core:fee.publish', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
: {message.publishFee}
|
||||
</DialogContentText>
|
||||
@ -3345,7 +3371,7 @@ function App() {
|
||||
autoFocus
|
||||
>
|
||||
{t('core:action.accept', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
@ -3365,7 +3391,7 @@ function App() {
|
||||
onClick={onCancel}
|
||||
>
|
||||
{t('core:action.decline', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
@ -3391,7 +3417,7 @@ function App() {
|
||||
<DialogActions>
|
||||
<Button variant="contained" onClick={onOkInfo} autoFocus>
|
||||
{t('core:action.close', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
@ -3417,7 +3443,7 @@ function App() {
|
||||
<DialogActions>
|
||||
<Button variant="contained" onClick={onCancelUnsavedChanges}>
|
||||
{t('core:action.cancel', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
@ -3427,7 +3453,7 @@ function App() {
|
||||
autoFocus
|
||||
>
|
||||
{t('core:action.continue_logout', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
@ -3627,7 +3653,7 @@ function App() {
|
||||
>
|
||||
{t('core:message.generic.fee_qort', {
|
||||
message: messageQortalRequestExtension?.appFee,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</TextP>
|
||||
|
||||
@ -3650,7 +3676,7 @@ function App() {
|
||||
>
|
||||
{t('core:message.generic.foreign_fee', {
|
||||
message: messageQortalRequestExtension?.foreignFee,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</TextP>
|
||||
|
||||
@ -3721,7 +3747,7 @@ function App() {
|
||||
<Box sx={{ display: 'flex', alignItems: 'center' }}>
|
||||
<Typography sx={{ fontSize: '14px' }}>
|
||||
{t('core:message.success.request_read', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
<PriorityHighIcon color="warning" />
|
||||
@ -3772,7 +3798,7 @@ function App() {
|
||||
}}
|
||||
>
|
||||
{t('core:action.accept', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButtonAccept>
|
||||
|
||||
@ -3785,7 +3811,7 @@ function App() {
|
||||
onClick={() => onCancelQortalRequestExtension()}
|
||||
>
|
||||
{t('core:action.decline', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButtonAccept>
|
||||
</Box>
|
||||
|
@ -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 }) => {
|
||||
<>
|
||||
<Typography>
|
||||
{t('auth:message.generic.no_account', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -212,7 +212,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
|
||||
<>
|
||||
<Typography>
|
||||
{t('auth:message.generic.your_accounts', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -224,7 +224,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
|
||||
<Box>
|
||||
<Typography>
|
||||
{t('auth:account.selected', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
:
|
||||
</Typography>
|
||||
@ -283,7 +283,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
|
||||
}}
|
||||
>
|
||||
{t('auth:tips.existing_account', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Fragment>
|
||||
@ -297,7 +297,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
|
||||
}}
|
||||
>
|
||||
{t('auth:action.add.seed_phrase', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</HtmlTooltip>
|
||||
@ -313,7 +313,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
|
||||
}}
|
||||
>
|
||||
{t('auth:tips.additional_wallet', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Fragment>
|
||||
@ -327,7 +327,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
|
||||
>
|
||||
<input {...getInputProps()} />
|
||||
{t('auth:action.add.account', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</HtmlTooltip>
|
||||
@ -345,7 +345,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
|
||||
>
|
||||
<DialogTitle id="alert-dialog-title">
|
||||
{t('auth:message.generic.type_seed', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</DialogTitle>
|
||||
|
||||
@ -358,7 +358,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
|
||||
>
|
||||
<Label>
|
||||
{t('core:name', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
<Input
|
||||
@ -371,7 +371,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
|
||||
|
||||
<Label>
|
||||
{t('auth:seed', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
<PasswordField
|
||||
@ -389,7 +389,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
|
||||
|
||||
<Label>
|
||||
{t('auth:action.choose_password', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
<PasswordField
|
||||
@ -417,7 +417,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:action.close', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
<LoadingButton
|
||||
@ -431,7 +431,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
|
||||
autoFocus
|
||||
>
|
||||
{t('core:action.add', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
<Typography
|
||||
@ -453,7 +453,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => {
|
||||
const [note, setNote] = useState('');
|
||||
const [isEdit, setIsEdit] = useState(false);
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['core', 'auth']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
useEffect(() => {
|
||||
if (wallet?.name) {
|
||||
@ -520,7 +520,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:action.login', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -550,7 +550,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => {
|
||||
>
|
||||
<Label>
|
||||
{t('core:name', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
<Input
|
||||
@ -566,7 +566,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => {
|
||||
|
||||
<Label>
|
||||
{t('auth:note', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
<Input
|
||||
@ -597,7 +597,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => {
|
||||
onClick={() => setIsEdit(false)}
|
||||
>
|
||||
{t('core:action.close', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
<Button
|
||||
@ -615,7 +615,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => {
|
||||
onClick={() => updateWalletItem(idx, null)}
|
||||
>
|
||||
{t('core:action.remove', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
<Button
|
||||
@ -640,7 +640,7 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:action.save', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</Box>
|
||||
|
@ -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';
|
||||
|
@ -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,
|
||||
|
@ -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 }) => {
|
||||
<AppDownloadButtonText>
|
||||
{isSelectedAppPinned
|
||||
? t('core:action.unpin_from_dashboard', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('core:action.pin_from_dashboard', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</AppDownloadButtonText>
|
||||
</AppDownloadButton>
|
||||
@ -200,10 +200,10 @@ export const AppInfo = ({ app, myName }) => {
|
||||
<AppDownloadButtonText>
|
||||
{isInstalled
|
||||
? t('core:action.open', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('core:action.download', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</AppDownloadButtonText>
|
||||
</AppDownloadButton>
|
||||
@ -229,7 +229,7 @@ export const AppInfo = ({ app, myName }) => {
|
||||
<AppsCategoryInfoSub>
|
||||
<AppsCategoryInfoLabel>
|
||||
{t('core:category', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
:
|
||||
</AppsCategoryInfoLabel>
|
||||
@ -239,7 +239,7 @@ export const AppInfo = ({ app, myName }) => {
|
||||
<AppsCategoryInfoValue>
|
||||
{app?.metadata?.categoryName ||
|
||||
t('core:none', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</AppsCategoryInfoValue>
|
||||
</AppsCategoryInfoSub>
|
||||
@ -249,7 +249,7 @@ export const AppInfo = ({ app, myName }) => {
|
||||
|
||||
<AppInfoAppName>
|
||||
{t('core:q_apps.about', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</AppInfoAppName>
|
||||
</AppsWidthLimiter>
|
||||
@ -259,7 +259,7 @@ export const AppInfo = ({ app, myName }) => {
|
||||
<AppsInfoDescription>
|
||||
{app?.metadata?.description ||
|
||||
t('core:message.generic.no_description', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</AppsInfoDescription>
|
||||
</Box>
|
||||
|
@ -42,7 +42,7 @@ export const AppInfoSnippet = ({
|
||||
);
|
||||
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['core', 'auth', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
return (
|
||||
<AppInfoSnippetContainer
|
||||
@ -173,10 +173,10 @@ export const AppInfoSnippet = ({
|
||||
<AppDownloadButtonText>
|
||||
{isSelectedAppPinned
|
||||
? t('core:action.unpin', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('core:action.pin', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</AppDownloadButtonText>
|
||||
</AppDownloadButton>
|
||||
@ -196,10 +196,10 @@ export const AppInfoSnippet = ({
|
||||
<AppDownloadButtonText>
|
||||
{isInstalled
|
||||
? t('core:action.open', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('core:action.download', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</AppDownloadButtonText>
|
||||
</AppDownloadButton>
|
||||
|
@ -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 }) => {
|
||||
>
|
||||
<AppLibrarySubTitle>
|
||||
{t('core:action.create_apps', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
!
|
||||
</AppLibrarySubTitle>
|
||||
@ -279,7 +279,7 @@ export const AppPublish = ({ names, categories }) => {
|
||||
|
||||
<PublishQAppInfo>
|
||||
{t('core:message.generic.one_app_per_name', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</PublishQAppInfo>
|
||||
|
||||
@ -287,7 +287,7 @@ export const AppPublish = ({ names, categories }) => {
|
||||
|
||||
<InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}>
|
||||
{t('core:name_app', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</InputLabel>
|
||||
|
||||
@ -304,7 +304,7 @@ export const AppPublish = ({ names, categories }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:action.select_name_app', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</em>
|
||||
{/* This is the placeholder item */}
|
||||
@ -318,7 +318,7 @@ export const AppPublish = ({ names, categories }) => {
|
||||
|
||||
<InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}>
|
||||
{t('core:app_service_type', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</InputLabel>
|
||||
|
||||
@ -335,18 +335,18 @@ export const AppPublish = ({ names, categories }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:action.select_app_type', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</em>
|
||||
</CustomMenuItem>
|
||||
<CustomMenuItem value={'APP'}>
|
||||
{t('core:app', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomMenuItem>
|
||||
<CustomMenuItem value={'WEBSITE'}>
|
||||
{t('core:website', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomMenuItem>
|
||||
</CustomSelect>
|
||||
@ -355,7 +355,7 @@ export const AppPublish = ({ names, categories }) => {
|
||||
|
||||
<InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}>
|
||||
{t('core:title', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</InputLabel>
|
||||
|
||||
@ -382,7 +382,7 @@ export const AppPublish = ({ names, categories }) => {
|
||||
|
||||
<InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}>
|
||||
{t('core:description', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</InputLabel>
|
||||
|
||||
@ -409,7 +409,7 @@ export const AppPublish = ({ names, categories }) => {
|
||||
|
||||
<InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}>
|
||||
{t('core:category', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</InputLabel>
|
||||
|
||||
@ -426,7 +426,7 @@ export const AppPublish = ({ names, categories }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:action.select_category', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</em>
|
||||
</CustomMenuItem>
|
||||
@ -443,7 +443,7 @@ export const AppPublish = ({ names, categories }) => {
|
||||
|
||||
<InputLabel sx={{ fontSize: '14px', marginBottom: '2px' }}>
|
||||
{t('core:tags', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</InputLabel>
|
||||
|
||||
@ -539,7 +539,7 @@ export const AppPublish = ({ names, categories }) => {
|
||||
|
||||
<PublishQAppInfo>
|
||||
{t('core:message.generic.select_zip', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</PublishQAppInfo>
|
||||
|
||||
@ -560,7 +560,7 @@ export const AppPublish = ({ names, categories }) => {
|
||||
<PublishQAppChoseFile {...getRootProps()}>
|
||||
{' '}
|
||||
<input {...getInputProps()} />
|
||||
{t('core:action.choose_file', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.choose_file', { postProcess: 'capitalizeFirstChar' })}
|
||||
</PublishQAppChoseFile>
|
||||
|
||||
<Spacer height="35px" />
|
||||
@ -571,7 +571,7 @@ export const AppPublish = ({ names, categories }) => {
|
||||
}}
|
||||
onClick={publishApp}
|
||||
>
|
||||
{t('core:action.publish', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.publish', { postProcess: 'capitalizeFirstChar' })}
|
||||
</PublishQAppCTAButton>
|
||||
</AppsWidthLimiter>
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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',
|
||||
})
|
||||
)
|
||||
);
|
||||
|
@ -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');
|
||||
}}
|
||||
>
|
||||
<IconWrapper label="Apps" disableWidth>
|
||||
<IconWrapper
|
||||
label={t('core:app_other', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
disableWidth
|
||||
>
|
||||
<AppsIcon height={30} color={theme.palette.text.primary} />
|
||||
</IconWrapper>
|
||||
</ButtonBase>
|
||||
@ -399,7 +404,9 @@ export const AppsDesktop = ({
|
||||
? theme.palette.text.primary
|
||||
: theme.palette.text.secondary
|
||||
}
|
||||
label="Chat"
|
||||
label={t('core:chat', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
disableWidth
|
||||
>
|
||||
<MessagingIconFilled
|
||||
@ -428,7 +435,9 @@ export const AppsDesktop = ({
|
||||
? theme.palette.text.primary
|
||||
: theme.palette.text.secondary
|
||||
}
|
||||
label="Dev"
|
||||
label={t('core:dev', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
disableWidth
|
||||
>
|
||||
<AppsIcon
|
||||
|
@ -17,6 +17,7 @@ import { AppsIcon } from '../../assets/Icons/AppsIcon';
|
||||
import { IconWrapper } from '../Desktop/DesktopFooter';
|
||||
import { CoreSyncStatus } from '../CoreSyncStatus';
|
||||
import { MessagingIconFilled } from '../../assets/Icons/MessagingIconFilled';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
const uid = new ShortUniqueId({ length: 8 });
|
||||
|
||||
@ -46,6 +47,7 @@ export const AppsDevMode = ({
|
||||
const [categories, setCategories] = useState([]);
|
||||
const iframeRefs = useRef({});
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
useEffect(() => {
|
||||
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 = ({
|
||||
<AppsParent
|
||||
sx={{
|
||||
flexDirection: 'row',
|
||||
position: !show && 'fixed',
|
||||
left: !show && '-200vw',
|
||||
position: !show && 'fixed',
|
||||
}}
|
||||
>
|
||||
<Box
|
||||
sx={{
|
||||
width: '60px',
|
||||
flexDirection: 'column',
|
||||
height: '100vh',
|
||||
alignItems: 'center',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
gap: '25px',
|
||||
height: '100vh',
|
||||
width: '60px',
|
||||
}}
|
||||
>
|
||||
<ButtonBase
|
||||
sx={{
|
||||
width: '70px',
|
||||
height: '70px',
|
||||
paddingTop: '23px',
|
||||
width: '70px',
|
||||
}}
|
||||
>
|
||||
<CoreSyncStatus />
|
||||
@ -241,8 +242,8 @@ export const AppsDevMode = ({
|
||||
|
||||
<ButtonBase
|
||||
sx={{
|
||||
width: '60px',
|
||||
height: '60px',
|
||||
width: '60px',
|
||||
}}
|
||||
onClick={() => {
|
||||
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
|
||||
>
|
||||
<AppsIcon
|
||||
@ -294,7 +297,9 @@ export const AppsDevMode = ({
|
||||
? theme.palette.text.primary
|
||||
: theme.palette.text.secondary
|
||||
}
|
||||
label="Chat"
|
||||
label={t('core:chat', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
disableWidth
|
||||
>
|
||||
<MessagingIconFilled
|
||||
@ -323,7 +328,9 @@ export const AppsDevMode = ({
|
||||
? theme.palette.text.primary
|
||||
: theme.palette.text.secondary
|
||||
}
|
||||
label="Dev"
|
||||
label={t('core:dev', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
disableWidth
|
||||
>
|
||||
<AppsIcon
|
||||
@ -336,6 +343,7 @@ export const AppsDevMode = ({
|
||||
/>
|
||||
</IconWrapper>
|
||||
</ButtonBase>
|
||||
|
||||
{mode !== 'home' && <AppsDevModeNavBar />}
|
||||
</Box>
|
||||
|
||||
@ -382,10 +390,10 @@ export const AppsDevMode = ({
|
||||
<Box
|
||||
sx={{
|
||||
display: 'flex',
|
||||
width: '100%',
|
||||
flexDirection: 'column',
|
||||
height: '100vh',
|
||||
overflow: 'auto',
|
||||
width: '100%',
|
||||
}}
|
||||
>
|
||||
<Spacer height="30px" />
|
||||
|
@ -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' })}
|
||||
</AppLibrarySubTitle>
|
||||
</AppsContainer>
|
||||
|
||||
@ -312,7 +312,7 @@ export const AppsDevModeHome = ({
|
||||
<Add>+</Add>
|
||||
</AppCircle>
|
||||
<AppCircleLabel>
|
||||
{t('core:server', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:server', { postProcess: 'capitalizeFirstChar' })}
|
||||
</AppCircleLabel>
|
||||
</AppCircleContainer>
|
||||
</ButtonBase>
|
||||
@ -332,7 +332,7 @@ export const AppsDevModeHome = ({
|
||||
</AppCircle>
|
||||
|
||||
<AppCircleLabel>
|
||||
{t('core:zip', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:zip', { postProcess: 'capitalizeFirstChar' })}
|
||||
</AppCircleLabel>
|
||||
</AppCircleContainer>
|
||||
</ButtonBase>
|
||||
@ -351,7 +351,7 @@ export const AppsDevModeHome = ({
|
||||
<Add>+</Add>
|
||||
</AppCircle>
|
||||
<AppCircleLabel>
|
||||
{t('core:directory', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:directory', { postProcess: 'capitalizeFirstChar' })}
|
||||
</AppCircleLabel>
|
||||
</AppCircleContainer>
|
||||
</ButtonBase>
|
||||
@ -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 = ({
|
||||
|
||||
<AppCircleLabel>
|
||||
{t('core:q_apps.q_sandbox', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</AppCircleLabel>
|
||||
</AppCircleContainer>
|
||||
@ -466,7 +466,7 @@ export const AppsDevModeHome = ({
|
||||
>
|
||||
<DialogTitle id="alert-dialog-title">
|
||||
{t('core:action.add_custom_framework', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</DialogTitle>
|
||||
|
||||
@ -480,12 +480,12 @@ export const AppsDevModeHome = ({
|
||||
>
|
||||
<Label>
|
||||
{t('core:domain', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
<Input
|
||||
placeholder={t('core:domain', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
value={domain}
|
||||
onChange={(e) => setDomain(e.target.value)}
|
||||
@ -502,12 +502,12 @@ export const AppsDevModeHome = ({
|
||||
>
|
||||
<Label>
|
||||
{t('core:port', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
<Input
|
||||
placeholder={t('core:port', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
value={port}
|
||||
onChange={(e) => setPort(e.target.value)}
|
||||
@ -518,7 +518,7 @@ export const AppsDevModeHome = ({
|
||||
<DialogActions>
|
||||
<Button variant="contained" onClick={onCancel}>
|
||||
{t('core:action.close', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
@ -529,7 +529,7 @@ export const AppsDevModeHome = ({
|
||||
autoFocus
|
||||
>
|
||||
{t('core:action.add', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
|
@ -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' })}
|
||||
</AppLibrarySubTitle>
|
||||
</AppsContainer>
|
||||
|
||||
@ -147,7 +147,7 @@ export const AppsHomeDesktop = ({
|
||||
</AppCircle>
|
||||
|
||||
<AppCircleLabel>
|
||||
{t('core:library', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:library', { postProcess: 'capitalizeFirstChar' })}
|
||||
</AppCircleLabel>
|
||||
</AppCircleContainer>
|
||||
</ButtonBase>
|
||||
|
@ -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 = ({
|
||||
<ReturnIcon />
|
||||
<ComposeP>
|
||||
{t('core:action.return_apps_dashboard', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</ComposeP>
|
||||
</ShowMessageReturnButton>
|
||||
@ -314,7 +314,7 @@ export const AppsLibraryDesktop = ({
|
||||
<AppsWidthLimiter>
|
||||
<Typography>
|
||||
{t('core:message.generic.no_results', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</AppsWidthLimiter>
|
||||
@ -325,7 +325,9 @@ export const AppsLibraryDesktop = ({
|
||||
fontSize: '30px',
|
||||
}}
|
||||
>
|
||||
{t('core:apps_official', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:apps_official', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</AppLibrarySubTitle>
|
||||
|
||||
<Spacer height="45px" />
|
||||
@ -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',
|
||||
})}
|
||||
</AppLibrarySubTitle>
|
||||
|
||||
@ -444,10 +446,10 @@ export const AppsLibraryDesktop = ({
|
||||
<PublishQAppCTAButton>
|
||||
{hasPublishApp
|
||||
? t('core:action.update', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('core:action.publish', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</PublishQAppCTAButton>
|
||||
|
||||
@ -468,7 +470,7 @@ export const AppsLibraryDesktop = ({
|
||||
}}
|
||||
>
|
||||
{t('core:category_other', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</AppLibrarySubTitle>
|
||||
|
||||
@ -508,7 +510,7 @@ export const AppsLibraryDesktop = ({
|
||||
},
|
||||
}}
|
||||
>
|
||||
{t('core:all', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:all', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Box>
|
||||
</ButtonBase>
|
||||
|
||||
|
@ -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',
|
||||
})}
|
||||
/>
|
||||
</MenuItem>
|
||||
|
@ -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 }) => {
|
||||
}}
|
||||
>
|
||||
<Tab
|
||||
label="Access app"
|
||||
label={t('core:action.access_app', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
{...a11yProps(0)}
|
||||
sx={{
|
||||
'&.Mui-selected': {
|
||||
@ -331,7 +333,9 @@ export const AppsPrivate = ({ myName }) => {
|
||||
}}
|
||||
/>
|
||||
<Tab
|
||||
label="Publish app"
|
||||
label={t('core:action.publish_app', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
{...a11yProps(1)}
|
||||
sx={{
|
||||
'&.Mui-selected': {
|
||||
@ -354,12 +358,12 @@ export const AppsPrivate = ({ myName }) => {
|
||||
>
|
||||
<Label>
|
||||
{t('group:action.select_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
<Label>
|
||||
{t('group:message.generic.only_private_groups', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
|
||||
@ -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 }) => {
|
||||
>
|
||||
<MenuItem value={0}>
|
||||
{t('group:message.generic.no_selection', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</MenuItem>
|
||||
|
||||
@ -406,7 +412,7 @@ export const AppsPrivate = ({ myName }) => {
|
||||
}}
|
||||
>
|
||||
<Label>
|
||||
{t('core:name', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:name', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Label>
|
||||
<Input
|
||||
placeholder="name"
|
||||
@ -431,12 +437,14 @@ export const AppsPrivate = ({ myName }) => {
|
||||
}}
|
||||
>
|
||||
<Label>
|
||||
{t('core:identifier', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:identifier', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
|
||||
<Input
|
||||
placeholder={t('core:identifier', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
value={privateAppValues?.identifier}
|
||||
onChange={(e) =>
|
||||
@ -458,7 +466,9 @@ export const AppsPrivate = ({ myName }) => {
|
||||
setIsOpenPrivateModal(false);
|
||||
}}
|
||||
>
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.close', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
<Button
|
||||
disabled={
|
||||
@ -471,7 +481,9 @@ export const AppsPrivate = ({ myName }) => {
|
||||
onClick={() => addPrivateApp()}
|
||||
autoFocus
|
||||
>
|
||||
{t('core:action.access', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.access', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
</>
|
||||
@ -486,7 +498,7 @@ export const AppsPrivate = ({ myName }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:message.generic.select_zip', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</PublishQAppInfo>
|
||||
|
||||
@ -520,10 +532,10 @@ export const AppsPrivate = ({ myName }) => {
|
||||
<input {...getInputProps()} />
|
||||
{file
|
||||
? t('core:action.change_file', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('core:action.choose_file', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</PublishQAppChoseFile>
|
||||
|
||||
@ -538,13 +550,13 @@ export const AppsPrivate = ({ myName }) => {
|
||||
>
|
||||
<Label>
|
||||
{t('group:action.select_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
|
||||
<Label>
|
||||
{t('group:amessage.generic.admin_only', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
|
||||
@ -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)}
|
||||
>
|
||||
<MenuItem value={0}>
|
||||
{t('group:message.generic.no_selection', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</MenuItem>
|
||||
|
||||
{myGroupsWhereIAmAdmin
|
||||
?.filter((item) => !item?.isOpen)
|
||||
.map((group) => {
|
||||
@ -583,11 +598,13 @@ export const AppsPrivate = ({ myName }) => {
|
||||
}}
|
||||
>
|
||||
<Label>
|
||||
{t('core:identifier', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:identifier', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
<Input
|
||||
placeholder={t('core:identifier', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
value={newPrivateAppValues?.identifier}
|
||||
onChange={(e) =>
|
||||
@ -612,12 +629,12 @@ export const AppsPrivate = ({ myName }) => {
|
||||
}}
|
||||
>
|
||||
<Label>
|
||||
{t('core:app_name', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:app_name', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Label>
|
||||
|
||||
<Input
|
||||
placeholder={t('core:app_name', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
value={newPrivateAppValues?.name}
|
||||
onChange={(e) =>
|
||||
@ -636,7 +653,7 @@ export const AppsPrivate = ({ myName }) => {
|
||||
<ImageUploader onPick={(file) => setLogo(file)}>
|
||||
<Button variant="contained">
|
||||
{t('core:action.choose_logo', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</ImageUploader>
|
||||
@ -654,7 +671,9 @@ export const AppsPrivate = ({ myName }) => {
|
||||
clearFields();
|
||||
}}
|
||||
>
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.close', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
@ -668,7 +687,9 @@ export const AppsPrivate = ({ myName }) => {
|
||||
onClick={() => publishPrivateApp()}
|
||||
autoFocus
|
||||
>
|
||||
{t('core:action.publish', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.publish', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
</>
|
||||
|
@ -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 }) => {
|
||||
|
@ -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',
|
||||
})}
|
||||
</TextP>
|
||||
</Box>
|
||||
@ -171,7 +171,7 @@ export const DownloadWallet = ({
|
||||
<>
|
||||
<CustomLabel htmlFor="standard-adornment-password">
|
||||
{t('auth:wallet.password_confirmation', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomLabel>
|
||||
|
||||
@ -210,7 +210,7 @@ export const DownloadWallet = ({
|
||||
<Box sx={{ display: 'flex', alignItems: 'center' }}>
|
||||
<Typography sx={{ fontSize: '14px' }}>
|
||||
{t('auth:wallet.keep_password', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -223,7 +223,7 @@ export const DownloadWallet = ({
|
||||
<>
|
||||
<CustomLabel htmlFor="standard-adornment-password">
|
||||
{t('auth:wallet.new_password', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomLabel>
|
||||
|
||||
@ -241,7 +241,7 @@ export const DownloadWallet = ({
|
||||
|
||||
<CustomButton onClick={confirmPasswordToDownload}>
|
||||
{t('auth:password_confirmation', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
|
||||
@ -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',
|
||||
})}
|
||||
</CustomButton>
|
||||
</>
|
||||
|
@ -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 = ({
|
||||
>
|
||||
<Typography>
|
||||
{t('core:message.generic.space_for_admins', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
@ -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',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -225,7 +225,7 @@ export const AdminSpaceInner = ({
|
||||
{isFetchingGroupSecretKey && (
|
||||
<Typography>
|
||||
{t('auth:message.generic.fetching_group_secret_key', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -234,7 +234,7 @@ export const AdminSpaceInner = ({
|
||||
groupSecretKeyPublishDetails === false && (
|
||||
<Typography>
|
||||
{t('auth:message.generic.no_secret_key_published', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -247,7 +247,7 @@ export const AdminSpaceInner = ({
|
||||
groupSecretKeyPublishDetails?.created
|
||||
),
|
||||
name: groupSecretKeyPublishDetails?.name,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -258,7 +258,7 @@ export const AdminSpaceInner = ({
|
||||
variant="contained"
|
||||
>
|
||||
{t('auth:action.publish_group_secret_key', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
@ -270,7 +270,7 @@ export const AdminSpaceInner = ({
|
||||
}}
|
||||
>
|
||||
{t('auth:tips.key_encrypt_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -292,7 +292,7 @@ export const AdminSpaceInner = ({
|
||||
{isFetchingAdminGroupSecretKey && (
|
||||
<Typography>
|
||||
{t('auth:message.generic.fetching_admin_secret_key', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -300,7 +300,7 @@ export const AdminSpaceInner = ({
|
||||
{!isFetchingAdminGroupSecretKey && !adminGroupSecretKey && (
|
||||
<Typography>
|
||||
{t('auth:message.generic.no_secret_key_published', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -312,7 +312,7 @@ export const AdminSpaceInner = ({
|
||||
adminGroupSecretKeyPublishDetails?.updated ||
|
||||
adminGroupSecretKeyPublishDetails?.created
|
||||
),
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -323,7 +323,7 @@ export const AdminSpaceInner = ({
|
||||
variant="contained"
|
||||
>
|
||||
{t('auth:action.publish_admin_secret_key', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
@ -335,7 +335,7 @@ export const AdminSpaceInner = ({
|
||||
}}
|
||||
>
|
||||
{t('auth:tips.key_encrypt_admin', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -358,7 +358,7 @@ export const AdminSpaceInner = ({
|
||||
>
|
||||
<Typography>
|
||||
{t('group:group.avatar', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
|
@ -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' })}
|
||||
</CustomButton>
|
||||
)}
|
||||
<CustomButton
|
||||
@ -414,7 +414,7 @@ export const AnnouncementDiscussion = ({
|
||||
/>
|
||||
)}
|
||||
{t('core:action.publish_comment', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</Box>
|
||||
@ -424,7 +424,7 @@ export const AnnouncementDiscussion = ({
|
||||
open={isLoading}
|
||||
info={{
|
||||
message: t('core:loading.comments', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
|
@ -194,7 +194,7 @@ export const AnnouncementItem = ({
|
||||
}}
|
||||
>
|
||||
{t('core:action.leave_comment', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
|
@ -82,7 +82,7 @@ export const AnnouncementList = ({
|
||||
{showLoadMore && (
|
||||
<CustomButton onClick={loadMore}>
|
||||
{t('core:action.load_announcements', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
)}
|
||||
|
@ -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' })}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
||||
@ -707,7 +707,7 @@ export const ChatDirect = ({
|
||||
{t('core:message.error.message_size', {
|
||||
maximum: 4000,
|
||||
size: messageSize,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -763,7 +763,9 @@ export const ChatDirect = ({
|
||||
<LoadingSnackbar
|
||||
open={isLoading}
|
||||
info={{
|
||||
message: t('core:loading.chat', { postProcess: 'capitalizeFirst' }),
|
||||
message: t('core:loading.chat', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
|
||||
|
@ -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 = (
|
||||
<p>
|
||||
{t('group:message.generic.group_key_created', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</p>
|
||||
);
|
||||
@ -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 = (
|
||||
<p>
|
||||
{t('group:message.generic.group_key_created', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</p>
|
||||
);
|
||||
@ -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',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -1527,7 +1527,9 @@ export const ChatGroup = ({
|
||||
<LoadingSnackbar
|
||||
open={isLoading}
|
||||
info={{
|
||||
message: t('core:loading.chat', { postProcess: 'capitalizeFirst' }),
|
||||
message: t('core:loading.chat', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
|
||||
|
@ -340,7 +340,7 @@ export const ChatList = ({
|
||||
>
|
||||
<Typography>
|
||||
{t('core:message.error.message_loading', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</div>
|
||||
@ -370,7 +370,7 @@ export const ChatList = ({
|
||||
fallback={
|
||||
<Typography>
|
||||
{t('group:message.generic.invalid_data', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
}
|
||||
@ -418,7 +418,7 @@ export const ChatList = ({
|
||||
}}
|
||||
>
|
||||
{t('group:action.scroll_unread_messages', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</button>
|
||||
)}
|
||||
@ -444,7 +444,7 @@ export const ChatList = ({
|
||||
}}
|
||||
>
|
||||
{t('group:action.scroll_unread_messages', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
)}
|
||||
|
@ -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',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -454,7 +454,9 @@ export const ChatOptions = ({
|
||||
>
|
||||
<Select
|
||||
id="demo-simple-select"
|
||||
label="By member"
|
||||
label={t('core:sort.by_member', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
labelId="demo-simple-select-label"
|
||||
onChange={(e) => setSelectedMember(e.target.value)}
|
||||
size="small"
|
||||
@ -462,7 +464,9 @@ export const ChatOptions = ({
|
||||
>
|
||||
<MenuItem value={0}>
|
||||
<em>
|
||||
{t('core:sort.by_member', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:sort.by_member', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</em>
|
||||
</MenuItem>
|
||||
|
||||
@ -497,7 +501,7 @@ export const ChatOptions = ({
|
||||
}}
|
||||
>
|
||||
{t('core:message.generic.no_results', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -569,7 +573,7 @@ export const ChatOptions = ({
|
||||
fallback={
|
||||
<Typography>
|
||||
{t('group:message.generic.invalid_data', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
}
|
||||
|
@ -85,7 +85,7 @@ export const CreateCommonSecret = ({
|
||||
if (!names.length) {
|
||||
throw new Error(
|
||||
t('core:message.error.network_generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
}
|
||||
@ -109,7 +109,7 @@ export const CreateCommonSecret = ({
|
||||
if (!validateSecretKey(decryptedKeyToObject))
|
||||
throw new Error(
|
||||
t('auth:message.error.invalid_secret_key', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
|
||||
@ -128,7 +128,7 @@ export const CreateCommonSecret = ({
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
action: 'ARBITRARY',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -139,14 +139,14 @@ export const CreateCommonSecret = ({
|
||||
if (!secretKey2 && secretKey2 !== false)
|
||||
throw new Error(
|
||||
t('auth:message.error.invalid_secret_key', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
|
||||
if (secretKey2 && !validateSecretKey(secretKey2))
|
||||
throw new Error(
|
||||
t('auth:message.error.invalid_secret_key', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
|
||||
@ -162,7 +162,7 @@ export const CreateCommonSecret = ({
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message: t('auth:message.success.reencrypted_secret_key', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -172,13 +172,13 @@ export const CreateCommonSecret = ({
|
||||
type: 'created-common-secret',
|
||||
label: t('group:message.success.published_secret_key', {
|
||||
group_id: groupId,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
labelDone: t(
|
||||
'group:message.success.published_secret_key_label',
|
||||
{
|
||||
group_id: groupId,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}
|
||||
),
|
||||
done: false,
|
||||
@ -222,14 +222,14 @@ export const CreateCommonSecret = ({
|
||||
variant="contained"
|
||||
onClick={createCommonSecret}
|
||||
>
|
||||
{t('auth:action.reencrypt_key', { postProcess: 'capitalizeFirst' })}
|
||||
{t('auth:action.reencrypt_key', { postProcess: 'capitalizeFirstChar' })}
|
||||
</LoadingButton>
|
||||
|
||||
{noSecretKey ? (
|
||||
<Box>
|
||||
<Typography>
|
||||
{t('group:message.generic.group_no_secret_key', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -240,7 +240,7 @@ export const CreateCommonSecret = ({
|
||||
<Box>
|
||||
<Typography>
|
||||
{t('group:message.generic.group_secret_key_no_owner', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -248,7 +248,7 @@ export const CreateCommonSecret = ({
|
||||
<Box>
|
||||
<Typography>
|
||||
{t('group:message.generic.group_member_list_changed', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -268,7 +268,7 @@ export const CreateCommonSecret = ({
|
||||
}}
|
||||
size="small"
|
||||
>
|
||||
{t('core:action.hide', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.hide', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
</Box>
|
||||
|
||||
|
@ -237,7 +237,7 @@ export const GroupAnnouncements = ({
|
||||
rej(
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
});
|
||||
@ -265,7 +265,7 @@ export const GroupAnnouncements = ({
|
||||
rej(
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
});
|
||||
@ -304,7 +304,7 @@ export const GroupAnnouncements = ({
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
action: 'ARBITRARY',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -597,7 +597,7 @@ export const GroupAnnouncements = ({
|
||||
}}
|
||||
/>
|
||||
{t('group:message.generic.group_announcement', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Box>
|
||||
|
||||
@ -618,7 +618,7 @@ export const GroupAnnouncements = ({
|
||||
}}
|
||||
>
|
||||
{t('group:message.generic.no_announcement', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -704,7 +704,7 @@ export const GroupAnnouncements = ({
|
||||
padding: '5px',
|
||||
}}
|
||||
>
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirstChar' })}
|
||||
</CustomButton>
|
||||
)}
|
||||
|
||||
@ -739,7 +739,7 @@ export const GroupAnnouncements = ({
|
||||
/>
|
||||
)}
|
||||
{t('group:action.publish_announcement', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</Box>
|
||||
@ -757,7 +757,7 @@ export const GroupAnnouncements = ({
|
||||
open={isLoading}
|
||||
info={{
|
||||
message: t('core:loading.announcements', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
|
@ -84,13 +84,13 @@ export const GroupAvatar = ({
|
||||
throw new Error(
|
||||
t('core:message.generic.avatar_publish_fee', {
|
||||
fee: fee.fee,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
|
||||
await show({
|
||||
message: t('core:message.question.publish_avatar', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -115,7 +115,7 @@ export const GroupAvatar = ({
|
||||
rej(
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
});
|
||||
@ -157,7 +157,9 @@ export const GroupAvatar = ({
|
||||
opacity: 0.5,
|
||||
}}
|
||||
>
|
||||
{t('core:action.change_avatar', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.change_avatar', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</ButtonBase>
|
||||
|
||||
@ -197,7 +199,9 @@ export const GroupAvatar = ({
|
||||
opacity: 0.5,
|
||||
}}
|
||||
>
|
||||
{t('core:action.change_avatar', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.change_avatar', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</ButtonBase>
|
||||
|
||||
@ -226,7 +230,7 @@ export const GroupAvatar = ({
|
||||
opacity: 0.5,
|
||||
}}
|
||||
>
|
||||
{t('core:action.set_avatar', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.set_avatar', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Typography>
|
||||
</ButtonBase>
|
||||
|
||||
@ -282,13 +286,15 @@ const PopoverComp = ({
|
||||
>
|
||||
{t('core:message.generic.avatar_size', {
|
||||
size: 500, // TODO magic number
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
<ImageUploader onPick={(file) => setAvatarFile(file)}>
|
||||
<Button variant="contained">
|
||||
{t('core:action.choose_image', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.choose_image', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</ImageUploader>
|
||||
|
||||
@ -311,7 +317,7 @@ const PopoverComp = ({
|
||||
/>
|
||||
<Typography>
|
||||
{t('core:message.generic.avatar_registered_name', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -325,7 +331,9 @@ const PopoverComp = ({
|
||||
onClick={publishAvatar}
|
||||
variant="contained"
|
||||
>
|
||||
{t('group:action.publish_avatar', { postProcess: 'capitalizeFirst' })}
|
||||
{t('group:action.publish_avatar', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
</Box>
|
||||
</Popover>
|
||||
|
@ -66,7 +66,7 @@ export default forwardRef((props, ref) => {
|
||||
) : (
|
||||
<div className="item">
|
||||
{t('core:message.generic.no_results', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</div>
|
||||
)}
|
||||
|
@ -177,7 +177,7 @@ export const MessageItem = memo(
|
||||
{message?.divide && (
|
||||
<div className="unread-divider" id="unread-divider-id">
|
||||
{t('core:message.generic.unread_messages', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</div>
|
||||
)}
|
||||
@ -355,7 +355,7 @@ export const MessageItem = memo(
|
||||
>
|
||||
{t('core:message.generic.replied_to', {
|
||||
person: reply?.senderName || reply?.senderAddress,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -471,7 +471,7 @@ export const MessageItem = memo(
|
||||
<Typography variant="subtitle1" sx={{ marginBottom: 1 }}>
|
||||
{t('core:message.generic.people_reaction', {
|
||||
reaction: selectedReaction,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -515,10 +515,10 @@ export const MessageItem = memo(
|
||||
(item) => item?.sender === myAddress
|
||||
)
|
||||
? t('core:action.remove_reaction', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('core:action.add_reaction', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</Box>
|
||||
@ -551,10 +551,10 @@ export const MessageItem = memo(
|
||||
>
|
||||
{message?.status === 'failed-permanent'
|
||||
? t('core:message.error.update_failed', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('core:message.generic.updating', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
) : isTemp ? (
|
||||
@ -567,10 +567,10 @@ export const MessageItem = memo(
|
||||
>
|
||||
{message?.status === 'failed-permanent'
|
||||
? t('core:message.error.send_failed', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('core:message.generic.sending', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
) : (
|
||||
@ -585,7 +585,7 @@ export const MessageItem = memo(
|
||||
}}
|
||||
>
|
||||
{t('core:message.generic.edited', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -649,7 +649,7 @@ export const ReplyPreview = ({ message, isEdit = false }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:message.generic.editing_message', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
) : (
|
||||
@ -661,7 +661,7 @@ export const ReplyPreview = ({ message, isEdit = false }) => {
|
||||
>
|
||||
{t('core:message.generic.replied_to', {
|
||||
person: message?.senderName || message?.senderAddress,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
|
@ -321,7 +321,7 @@ const MenuBar = memo(
|
||||
}}
|
||||
>
|
||||
{t('core:action.disable_enter', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
@ -6,14 +6,14 @@ import { getBaseApiReact } from '../App';
|
||||
import '../styles/CoreSyncStatus.css';
|
||||
import { useTheme } from '@mui/material';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { manifestData } from '../ExtStates/NotAuthenticated';
|
||||
import { manifestData } from './NotAuthenticated';
|
||||
|
||||
export const CoreSyncStatus = () => {
|
||||
const [nodeInfos, setNodeInfos] = useState({});
|
||||
const [coreInfos, setCoreInfos] = useState({});
|
||||
const [isUsingGateway, setIsUsingGateway] = useState(false);
|
||||
|
||||
const { t } = useTranslation(['auth', 'core']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
const theme = useTheme();
|
||||
|
||||
useEffect(() => {
|
||||
@ -77,26 +77,26 @@ export const CoreSyncStatus = () => {
|
||||
|
||||
let imagePath = syncingImg;
|
||||
let message = t('core:message.status.synchronizing', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
});
|
||||
|
||||
if (isMintingPossible && !isUsingGateway) {
|
||||
imagePath = syncedMintingImg;
|
||||
message = `${t(`core:message.status.${isSynchronizing ? 'synchronizing' : 'synchronized'}`, { postProcess: 'capitalizeFirst' })} ${t('core:message.status.minting')}`;
|
||||
message = `${t(`core:message.status.${isSynchronizing ? 'synchronizing' : 'synchronized'}`, { postProcess: 'capitalizeFirstChar' })} ${t('core:message.status.minting')}`;
|
||||
} else if (isSynchronizing === true && syncPercent === 99) {
|
||||
imagePath = syncingImg;
|
||||
} else if (isSynchronizing && !isMintingPossible && syncPercent === 100) {
|
||||
imagePath = syncingImg;
|
||||
message = `${t('core:message.status.synchronizing', { postProcess: 'capitalizeFirst' })} ${!isUsingGateway ? t('core:message.status.not_minting') : ''}`;
|
||||
message = `${t('core:message.status.synchronizing', { postProcess: 'capitalizeFirstChar' })} ${!isUsingGateway ? t('core:message.status.not_minting') : ''}`;
|
||||
} else if (!isSynchronizing && !isMintingPossible && syncPercent === 100) {
|
||||
imagePath = syncedImg;
|
||||
message = `${t('core:message.status.synchronized', { postProcess: 'capitalizeFirst' })} ${!isUsingGateway ? t('core:message.status.not_minting') : ''}`;
|
||||
message = `${t('core:message.status.synchronized', { postProcess: 'capitalizeFirstChar' })} ${!isUsingGateway ? t('core:message.status.not_minting') : ''}`;
|
||||
} else if (isSynchronizing && isMintingPossible && syncPercent === 100) {
|
||||
imagePath = syncingImg;
|
||||
message = `${t('core:message.status.synchronizing', { postProcess: 'capitalizeFirst' })} ${!isUsingGateway ? t('core:message.status.minting') : ''}`;
|
||||
message = `${t('core:message.status.synchronizing', { postProcess: 'capitalizeFirstChar' })} ${!isUsingGateway ? t('core:message.status.minting') : ''}`;
|
||||
} else if (!isSynchronizing && isMintingPossible && syncPercent === 100) {
|
||||
imagePath = syncedMintingImg;
|
||||
message = `${t('core:message.status.synchronized', { postProcess: 'capitalizeFirst' })} ${!isUsingGateway ? t('core:message.status.minting') : ''}`;
|
||||
message = `${t('core:message.status.synchronized', { postProcess: 'capitalizeFirstChar' })} ${!isUsingGateway ? t('core:message.status.minting') : ''}`;
|
||||
}
|
||||
|
||||
return (
|
||||
@ -122,37 +122,42 @@ export const CoreSyncStatus = () => {
|
||||
}}
|
||||
>
|
||||
<h3>
|
||||
{t('core:core.information', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:core.information', { postProcess: 'capitalizeFirstChar' })}
|
||||
</h3>
|
||||
|
||||
<h4 className="lineHeight">
|
||||
{t('core:core.version', { postProcess: 'capitalizeFirst' })}:{' '}
|
||||
{t('core:core.version', { postProcess: 'capitalizeFirstChar' })}:{' '}
|
||||
<span style={{ color: '#03a9f4' }}>{buildVersion}</span>
|
||||
</h4>
|
||||
|
||||
<h4 className="lineHeight">{message}</h4>
|
||||
|
||||
<h4 className="lineHeight">
|
||||
{t('core:core.block_height', { postProcess: 'capitalizeFirst' })}:{' '}
|
||||
<span style={{ color: '#03a9f4' }}>{height || ''}</span>
|
||||
{t('core:core.block_height', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
: <span style={{ color: '#03a9f4' }}>{height || ''}</span>
|
||||
</h4>
|
||||
|
||||
<h4 className="lineHeight">
|
||||
{t('core:core.peers', { postProcess: 'capitalizeFirst' })}:{' '}
|
||||
{t('core:core.peers', { postProcess: 'capitalizeFirstChar' })}:{' '}
|
||||
<span style={{ color: '#03a9f4' }}>
|
||||
{numberOfConnections || ''}
|
||||
</span>
|
||||
</h4>
|
||||
|
||||
<h4 className="lineHeight">
|
||||
{t('auth:node.using_public', { postProcess: 'capitalizeFirst' })}:{' '}
|
||||
{t('auth:node.using_public', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
:{' '}
|
||||
<span style={{ color: '#03a9f4' }}>
|
||||
{isUsingGateway?.toString()}
|
||||
</span>
|
||||
</h4>
|
||||
|
||||
<h4 className="lineHeight">
|
||||
{t('core:ui.version', { postProcess: 'capitalizeFirst' })}:{' '}
|
||||
{t('core:ui.version', { postProcess: 'capitalizeFirstChar' })}:{' '}
|
||||
<span style={{ color: '#03a9f4' }}>{manifestData.version}</span>
|
||||
</h4>
|
||||
</div>
|
||||
|
@ -8,6 +8,7 @@ import { MembersIcon } from '../../assets/Icons/MembersIcon';
|
||||
import { AdminsIcon } from '../../assets/Icons/AdminsIcon';
|
||||
import LockIcon from '@mui/icons-material/Lock';
|
||||
import NoEncryptionGmailerrorredIcon from '@mui/icons-material/NoEncryptionGmailerrorred';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
const IconWrapper = ({
|
||||
children,
|
||||
@ -83,6 +84,8 @@ export const DesktopHeader = ({
|
||||
}) => {
|
||||
const [value, setValue] = useState(0);
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
return (
|
||||
<Box
|
||||
sx={{
|
||||
@ -108,6 +111,7 @@ export const DesktopHeader = ({
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
|
||||
{isPrivate === false && (
|
||||
<NoEncryptionGmailerrorredIcon
|
||||
sx={{
|
||||
@ -115,6 +119,7 @@ export const DesktopHeader = ({
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
|
||||
<Typography
|
||||
sx={{
|
||||
fontSize: '16px',
|
||||
@ -122,7 +127,7 @@ export const DesktopHeader = ({
|
||||
}}
|
||||
>
|
||||
{selectedGroup?.groupId === '0'
|
||||
? 'General'
|
||||
? t('core:general', { postProcess: 'capitalizeFirstChar' })
|
||||
: selectedGroup?.groupName}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -146,7 +151,9 @@ export const DesktopHeader = ({
|
||||
? theme.palette.text.primary
|
||||
: theme.palette.text.secondary
|
||||
}
|
||||
label="ANN"
|
||||
label={t('core:announcement', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
selected={isAnnouncement}
|
||||
selectColor={theme.palette.action.selected}
|
||||
customHeight="55px"
|
||||
@ -174,7 +181,7 @@ export const DesktopHeader = ({
|
||||
color={
|
||||
isChat ? theme.palette.text.primary : theme.palette.text.secondary
|
||||
}
|
||||
label="Chat"
|
||||
label={t('core:chat', { postProcess: 'capitalizeFirstChar' })}
|
||||
selected={isChat}
|
||||
selectColor={theme.palette.action.selected}
|
||||
customHeight="55px"
|
||||
@ -204,7 +211,9 @@ export const DesktopHeader = ({
|
||||
? theme.palette.text.primary
|
||||
: theme.palette.text.secondary
|
||||
}
|
||||
label="Threads"
|
||||
label={t('core:thread_other', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
selected={isForum}
|
||||
selectColor={theme.palette.action.selected}
|
||||
customHeight="55px"
|
||||
@ -229,7 +238,9 @@ export const DesktopHeader = ({
|
||||
<IconWrapper
|
||||
color={theme.palette.text.secondary}
|
||||
customHeight="55px"
|
||||
label="Members"
|
||||
label={t('core:member_other', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
selected={false}
|
||||
>
|
||||
<MembersIcon
|
||||
@ -251,7 +262,9 @@ export const DesktopHeader = ({
|
||||
? theme.palette.text.primary
|
||||
: theme.palette.text.secondary
|
||||
}
|
||||
label="Admins"
|
||||
label={t('core:admin_other', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
selected={groupSection === 'adminSpace'}
|
||||
customHeight="55px"
|
||||
selectColor={theme.palette.action.selected}
|
||||
|
@ -1,14 +1,15 @@
|
||||
import { Box, ButtonBase, useTheme } from '@mui/material';
|
||||
import { HomeIcon } from '../assets/Icons/HomeIcon';
|
||||
import { Save } from './Save/Save';
|
||||
import { IconWrapper } from './Desktop/DesktopFooter';
|
||||
import { enabledDevModeAtom } from '../atoms/global';
|
||||
import { AppsIcon } from '../assets/Icons/AppsIcon';
|
||||
import ThemeSelector from './Theme/ThemeSelector';
|
||||
import { CoreSyncStatus } from './CoreSyncStatus';
|
||||
import LanguageSelector from './Language/LanguageSelector';
|
||||
import { MessagingIconFilled } from '../assets/Icons/MessagingIconFilled';
|
||||
import { HomeIcon } from '../../assets/Icons/HomeIcon';
|
||||
import { Save } from '../Save/Save';
|
||||
import { IconWrapper } from '../Desktop/DesktopFooter';
|
||||
import { enabledDevModeAtom } from '../../atoms/global';
|
||||
import { AppsIcon } from '../../assets/Icons/AppsIcon';
|
||||
import ThemeSelector from '../Theme/ThemeSelector';
|
||||
import { CoreSyncStatus } from '../CoreSyncStatus';
|
||||
import LanguageSelector from '../Language/LanguageSelector';
|
||||
import { MessagingIconFilled } from '../../assets/Icons/MessagingIconFilled';
|
||||
import { useAtom } from 'jotai';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
export const DesktopSideBar = ({
|
||||
goToHome,
|
||||
@ -27,6 +28,7 @@ export const DesktopSideBar = ({
|
||||
const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom);
|
||||
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
return (
|
||||
<Box
|
||||
@ -79,7 +81,7 @@ export const DesktopSideBar = ({
|
||||
color={
|
||||
isApps ? theme.palette.text.primary : theme.palette.text.secondary
|
||||
}
|
||||
label="Apps"
|
||||
label={t('core:app_other', { postProcess: 'capitalizeFirstChar' })}
|
||||
selected={isApps}
|
||||
disableWidth
|
||||
>
|
||||
@ -105,7 +107,7 @@ export const DesktopSideBar = ({
|
||||
? theme.palette.text.primary
|
||||
: theme.palette.text.secondary
|
||||
}
|
||||
label="Chat"
|
||||
label={t('core:chat', { postProcess: 'capitalizeFirstChar' })}
|
||||
disableWidth
|
||||
>
|
||||
<MessagingIconFilled
|
||||
@ -135,7 +137,7 @@ export const DesktopSideBar = ({
|
||||
? theme.palette.text.primary
|
||||
: theme.palette.text.secondary
|
||||
}
|
||||
label="Dev"
|
||||
label={t('core:dev', { postProcess: 'capitalizeFirstChar' })}
|
||||
disableWidth
|
||||
>
|
||||
<AppsIcon height={30} color={theme.palette.text.secondary} />
|
@ -1,19 +1,12 @@
|
||||
import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { useContext, useState } from 'react';
|
||||
import { MyContext, getBaseApiReact } from '../../App';
|
||||
import {
|
||||
Card,
|
||||
CardContent,
|
||||
CardHeader,
|
||||
Typography,
|
||||
RadioGroup,
|
||||
Radio,
|
||||
FormControlLabel,
|
||||
Button,
|
||||
Box,
|
||||
ButtonBase,
|
||||
Divider,
|
||||
Dialog,
|
||||
IconButton,
|
||||
CircularProgress,
|
||||
useTheme,
|
||||
} from '@mui/material';
|
||||
@ -27,8 +20,8 @@ import { Spacer } from '../../common/Spacer';
|
||||
import { FileAttachmentContainer, FileAttachmentFont } from './Embed-styles';
|
||||
import DownloadIcon from '@mui/icons-material/Download';
|
||||
import SaveIcon from '@mui/icons-material/Save';
|
||||
|
||||
import { decodeIfEncoded } from '../../utils/decode';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
export const AttachmentCard = ({
|
||||
resourceData,
|
||||
@ -45,6 +38,7 @@ export const AttachmentCard = ({
|
||||
const [isOpen, setIsOpen] = useState(true);
|
||||
const { downloadResource } = useContext(MyContext);
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
const saveToDisk = async () => {
|
||||
const { name, service, identifier } = resourceData;
|
||||
@ -64,16 +58,15 @@ export const AttachmentCard = ({
|
||||
let blobUrl;
|
||||
try {
|
||||
const { name, service, identifier, key } = resourceData;
|
||||
|
||||
const url = `${getBaseApiReact()}/arbitrary/${service}/${name}/${identifier}?encoding=base64`;
|
||||
const res = await fetch(url);
|
||||
const data = await res.text();
|
||||
let decryptedData;
|
||||
|
||||
try {
|
||||
if (key && encryptionType === 'private') {
|
||||
decryptedData = await window.sendMessage(
|
||||
'DECRYPT_DATA_WITH_SHARING_KEY',
|
||||
|
||||
{
|
||||
encryptedData: data,
|
||||
key: decodeURIComponent(key),
|
||||
@ -91,11 +84,19 @@ export const AttachmentCard = ({
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
throw new Error('Unable to decrypt');
|
||||
throw new Error(
|
||||
t('auth:message.error.unable_decrypt', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
if (!decryptedData || decryptedData?.error)
|
||||
throw new Error('Could not decrypt data');
|
||||
throw new Error(
|
||||
t('auth:message.error.decrypt_data', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
blobUrl = base64ToBlobUrl(decryptedData, resourceData?.mimeType);
|
||||
const response = await fetch(blobUrl);
|
||||
const blob = await response.blob();
|
||||
@ -108,18 +109,18 @@ export const AttachmentCard = ({
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<Card
|
||||
sx={{
|
||||
backgroundColor: theme.palette.background.default,
|
||||
height: '250px',
|
||||
// height: isOpen ? "auto" : "150px",
|
||||
}}
|
||||
>
|
||||
<Box
|
||||
sx={{
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
display: 'flex',
|
||||
justifyContent: 'space-between',
|
||||
padding: '16px 16px 0px 16px',
|
||||
}}
|
||||
@ -136,12 +137,15 @@ export const AttachmentCard = ({
|
||||
color: theme.palette.text.primary,
|
||||
}}
|
||||
/>
|
||||
<Typography>ATTACHMENT embed</Typography>
|
||||
<Typography>
|
||||
{t('core:attachment', { postProcess: 'capitalizeAll' })}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
display: 'flex',
|
||||
gap: '10px',
|
||||
}}
|
||||
>
|
||||
@ -154,6 +158,7 @@ export const AttachmentCard = ({
|
||||
}}
|
||||
/>
|
||||
</ButtonBase>
|
||||
|
||||
{external && (
|
||||
<ButtonBase>
|
||||
<OpenInNewIcon
|
||||
@ -167,6 +172,7 @@ export const AttachmentCard = ({
|
||||
)}
|
||||
</Box>
|
||||
</Box>
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
padding: '8px 16px 8px 16px',
|
||||
@ -177,35 +183,47 @@ export const AttachmentCard = ({
|
||||
fontSize: '12px',
|
||||
}}
|
||||
>
|
||||
Created by {decodeIfEncoded(owner)}
|
||||
{t('core:message.generic.created_by', {
|
||||
owner: decodeIfEncoded(owner),
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
<Typography
|
||||
sx={{
|
||||
fontSize: '12px',
|
||||
}}
|
||||
>
|
||||
{encryptionType === 'private'
|
||||
? 'ENCRYPTED'
|
||||
? t('core:message.generic.encrypted', {
|
||||
postProcess: 'capitalizeAll',
|
||||
})
|
||||
: encryptionType === 'group'
|
||||
? 'GROUP ENCRYPTED'
|
||||
: 'Not encrypted'}
|
||||
? t('group:message.generic.group_encrypted', {
|
||||
postProcess: 'capitalizeAll',
|
||||
})
|
||||
: t('core:message.generic.encrypted_not', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
||||
<Divider sx={{ borderColor: 'rgb(255 255 255 / 10%)' }} />
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
alignItems: 'center',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
width: '100%',
|
||||
alignItems: 'center',
|
||||
}}
|
||||
>
|
||||
{isLoadingParent && isOpen && (
|
||||
<Box
|
||||
sx={{
|
||||
width: '100%',
|
||||
display: 'flex',
|
||||
justifyContent: 'center',
|
||||
width: '100%',
|
||||
}}
|
||||
>
|
||||
{' '}
|
||||
@ -215,9 +233,9 @@ export const AttachmentCard = ({
|
||||
{errorMsg && (
|
||||
<Box
|
||||
sx={{
|
||||
width: '100%',
|
||||
display: 'flex',
|
||||
justifyContent: 'center',
|
||||
width: '100%',
|
||||
}}
|
||||
>
|
||||
{' '}
|
||||
@ -249,8 +267,8 @@ export const AttachmentCard = ({
|
||||
)}
|
||||
<ButtonBase
|
||||
sx={{
|
||||
width: '90%',
|
||||
maxWidth: '400px',
|
||||
width: '90%',
|
||||
}}
|
||||
onClick={() => {
|
||||
if (resourceDetails?.status?.status === 'READY') {
|
||||
@ -267,15 +285,23 @@ export const AttachmentCard = ({
|
||||
<FileAttachmentContainer>
|
||||
<Typography>
|
||||
{resourceDetails?.status?.status === 'DOWNLOADED'
|
||||
? 'BUILDING'
|
||||
? t('core:message.error.generic.building', {
|
||||
postProcess: 'capitalizeAll',
|
||||
})
|
||||
: resourceDetails?.status?.status}
|
||||
</Typography>
|
||||
|
||||
{!resourceDetails && (
|
||||
<>
|
||||
<DownloadIcon />
|
||||
<FileAttachmentFont>Download File</FileAttachmentFont>
|
||||
<FileAttachmentFont>
|
||||
{t('core:action.download_file', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</FileAttachmentFont>
|
||||
</>
|
||||
)}
|
||||
|
||||
{resourceDetails &&
|
||||
resourceDetails?.status?.status !== 'READY' &&
|
||||
resourceDetails?.status?.status !== 'FAILED_TO_DOWNLOAD' && (
|
||||
@ -287,16 +313,23 @@ export const AttachmentCard = ({
|
||||
}}
|
||||
/>
|
||||
<FileAttachmentFont>
|
||||
Downloading:{' '}
|
||||
{resourceDetails?.status?.percentLoaded || '0'}%
|
||||
{t('core:message.generic.downloading', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
: {resourceDetails?.status?.percentLoaded || '0'}%
|
||||
</FileAttachmentFont>
|
||||
</>
|
||||
)}
|
||||
|
||||
{resourceDetails &&
|
||||
resourceDetails?.status?.status === 'READY' && (
|
||||
<>
|
||||
<SaveIcon />
|
||||
<FileAttachmentFont>Save to Disk</FileAttachmentFont>
|
||||
<FileAttachmentFont>
|
||||
{t('core:action.save_disk', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</FileAttachmentFont>
|
||||
</>
|
||||
)}
|
||||
</FileAttachmentContainer>
|
||||
|
@ -1,18 +1,18 @@
|
||||
import { Box, Typography, styled } from "@mui/material";
|
||||
import { Box, Typography, styled } from '@mui/material';
|
||||
|
||||
export const FileAttachmentContainer = styled(Box)(({ theme }) => ({
|
||||
display: "flex",
|
||||
alignItems: "center",
|
||||
padding: "5px 10px",
|
||||
alignItems: 'center',
|
||||
border: `1px solid ${theme.palette.text.primary}`,
|
||||
width: "100%",
|
||||
gap: '20px'
|
||||
display: 'flex',
|
||||
gap: '20px',
|
||||
padding: '5px 10px',
|
||||
width: '100%',
|
||||
}));
|
||||
|
||||
export const FileAttachmentFont = styled(Typography)(({ theme }) => ({
|
||||
fontSize: "20px",
|
||||
letterSpacing: 0,
|
||||
fontSize: '20px',
|
||||
fontWeight: 400,
|
||||
userSelect: "none",
|
||||
whiteSpace: "nowrap",
|
||||
letterSpacing: 0,
|
||||
userSelect: 'none',
|
||||
whiteSpace: 'nowrap',
|
||||
}));
|
@ -1,11 +1,8 @@
|
||||
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { getBaseApiReact } from '../../App';
|
||||
|
||||
import { CustomizedSnackbars } from '../Snackbar/Snackbar';
|
||||
|
||||
import { extractComponents } from '../Chat/MessageDisplay';
|
||||
import { executeEvent } from '../../utils/events';
|
||||
|
||||
import { base64ToBlobUrl } from '../../utils/fileReading';
|
||||
import {
|
||||
blobControllerAtom,
|
||||
@ -17,8 +14,8 @@ import { parseQortalLink } from './embed-utils';
|
||||
import { PollCard } from './PollEmbed';
|
||||
import { ImageCard } from './ImageEmbed';
|
||||
import { AttachmentCard } from './AttachmentEmbed';
|
||||
import { decodeIfEncoded } from '../../utils/decode';
|
||||
import { useAtom, useAtomValue, useSetAtom } from 'jotai';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
const getPoll = async (name) => {
|
||||
const pollName = name;
|
||||
@ -32,6 +29,7 @@ const getPoll = async (name) => {
|
||||
});
|
||||
|
||||
const responseData = await response.json();
|
||||
|
||||
if (responseData?.message?.includes('POLL_NO_EXISTS')) {
|
||||
throw new Error('POLL_NO_EXISTS');
|
||||
} else if (responseData?.pollName) {
|
||||
@ -65,7 +63,7 @@ export const Embed = ({ embedLink }) => {
|
||||
const [parsedData, setParsedData] = useState(null);
|
||||
const setBlobs = useSetAtom(blobControllerAtom);
|
||||
const [selectedGroupId] = useAtom(selectedGroupIdAtom);
|
||||
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
const resourceData = useMemo(() => {
|
||||
const parsedDataOnTheFly = parseQortalLink(embedLink);
|
||||
if (
|
||||
@ -108,11 +106,20 @@ export const Embed = ({ embedLink }) => {
|
||||
setErrorMsg('');
|
||||
setType('POLL');
|
||||
if (!parsedData?.name)
|
||||
throw new Error('Invalid poll embed link. Missing name.');
|
||||
throw new Error(
|
||||
t('core:message.error.invalid_poll_embed_link_name', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
const pollRes = await getPoll(parsedData.name);
|
||||
setPoll(pollRes);
|
||||
} catch (error) {
|
||||
setErrorMsg(error?.message || 'Invalid embed link');
|
||||
setErrorMsg(
|
||||
error?.message ||
|
||||
t('core:message.error.invalid_embed_link', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
@ -147,14 +154,15 @@ export const Embed = ({ embedLink }) => {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
const data = await responseData.text();
|
||||
|
||||
if (data) {
|
||||
let decryptedData;
|
||||
try {
|
||||
if (key && encryptionType === 'private') {
|
||||
decryptedData = await window.sendMessage(
|
||||
'DECRYPT_DATA_WITH_SHARING_KEY',
|
||||
|
||||
{
|
||||
encryptedData: data,
|
||||
key: decodeURIComponent(key),
|
||||
@ -164,7 +172,6 @@ export const Embed = ({ embedLink }) => {
|
||||
if (encryptionType === 'group') {
|
||||
decryptedData = await window.sendMessage(
|
||||
'DECRYPT_QORTAL_GROUP_DATA',
|
||||
|
||||
{
|
||||
data64: data,
|
||||
groupId: selectedGroupId,
|
||||
@ -172,11 +179,19 @@ export const Embed = ({ embedLink }) => {
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
throw new Error('Unable to decrypt');
|
||||
throw new Error(
|
||||
t('auth:message.error.unable_decrypt', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
if (!decryptedData || decryptedData?.error)
|
||||
throw new Error('Could not decrypt data');
|
||||
throw new Error(
|
||||
t('auth:message.error.decrypt_data', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
imageFinalUrl = base64ToBlobUrl(
|
||||
decryptedData,
|
||||
parsedData?.mimeType
|
||||
@ -193,11 +208,14 @@ export const Embed = ({ embedLink }) => {
|
||||
};
|
||||
});
|
||||
} else {
|
||||
throw new Error('No data for image');
|
||||
throw new Error(
|
||||
t('core:message.generic.no_data_image', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
}
|
||||
} else {
|
||||
imageFinalUrl = `${getBaseApiReact()}/arbitrary/${service}/${name}/${identifier}?async=true`;
|
||||
|
||||
// If parsedData is used here, it must be defined somewhere
|
||||
}
|
||||
}
|
||||
@ -220,7 +238,9 @@ export const Embed = ({ embedLink }) => {
|
||||
return imageFinalUrl;
|
||||
} else {
|
||||
setErrorMsg(
|
||||
'Unable to download IMAGE. Please try again later by clicking the refresh button'
|
||||
t('core:message.error.unable_download_image', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
return null;
|
||||
}
|
||||
@ -229,7 +249,9 @@ export const Embed = ({ embedLink }) => {
|
||||
setErrorMsg(
|
||||
error?.error ||
|
||||
error?.message ||
|
||||
'An unexpected error occurred while trying to download the image'
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
return null;
|
||||
}
|
||||
@ -240,7 +262,11 @@ export const Embed = ({ embedLink }) => {
|
||||
setIsLoading(true);
|
||||
setErrorMsg('');
|
||||
if (!parsedData?.name || !parsedData?.service || !parsedData?.identifier)
|
||||
throw new Error('Invalid image embed link. Missing param.');
|
||||
throw new Error(
|
||||
t('core:message.error.invalid_image_embed_link_name', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
let image = await getImage(
|
||||
{
|
||||
name: parsedData.name,
|
||||
@ -253,7 +279,12 @@ export const Embed = ({ embedLink }) => {
|
||||
|
||||
setImageUrl(image);
|
||||
} catch (error) {
|
||||
setErrorMsg(error?.message || 'Invalid embed link');
|
||||
setErrorMsg(
|
||||
error?.message ||
|
||||
t('core:message.error.invalid_embed_link', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
@ -290,7 +321,12 @@ export const Embed = ({ embedLink }) => {
|
||||
break;
|
||||
}
|
||||
} catch (error) {
|
||||
setErrorMsg(error?.message || 'Invalid embed link');
|
||||
setErrorMsg(
|
||||
error?.message ||
|
||||
t('core:message.error.invalid_embed_link', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@ -299,7 +335,12 @@ export const Embed = ({ embedLink }) => {
|
||||
const parsedData = parseQortalLink(embedLink);
|
||||
handleImage(parsedData);
|
||||
} catch (error) {
|
||||
setErrorMsg(error?.message || 'Invalid embed link');
|
||||
setErrorMsg(
|
||||
error?.message ||
|
||||
t('core:message.error.invalid_embed_link', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { useEffect, useState } from 'react';
|
||||
import {
|
||||
Card,
|
||||
CardContent,
|
||||
@ -10,13 +10,13 @@ import {
|
||||
IconButton,
|
||||
useTheme,
|
||||
} from '@mui/material';
|
||||
|
||||
import RefreshIcon from '@mui/icons-material/Refresh';
|
||||
import OpenInNewIcon from '@mui/icons-material/OpenInNew';
|
||||
import { CustomLoader } from '../../common/CustomLoader';
|
||||
import ImageIcon from '@mui/icons-material/Image';
|
||||
import CloseIcon from '@mui/icons-material/Close';
|
||||
import { decodeIfEncoded } from '../../utils/decode';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
export const ImageCard = ({
|
||||
image,
|
||||
@ -30,20 +30,16 @@ export const ImageCard = ({
|
||||
encryptionType,
|
||||
}) => {
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
const [isOpen, setIsOpen] = useState(true);
|
||||
const [height, setHeight] = useState('400px');
|
||||
|
||||
useEffect(() => {
|
||||
if (isOpen) {
|
||||
fetchImage();
|
||||
}
|
||||
}, [isOpen]);
|
||||
|
||||
// useEffect(()=> {
|
||||
// if(errorMsg){
|
||||
// setHeight('300px')
|
||||
// }
|
||||
// }, [errorMsg])
|
||||
|
||||
return (
|
||||
<Card
|
||||
sx={{
|
||||
@ -72,12 +68,15 @@ export const ImageCard = ({
|
||||
color: theme.palette.text.primary,
|
||||
}}
|
||||
/>
|
||||
<Typography>IMAGE embed</Typography>
|
||||
<Typography>
|
||||
{t('core:image_embed', { postProcess: 'capitalizeFirstWord' })}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
display: 'flex',
|
||||
gap: '10px',
|
||||
}}
|
||||
>
|
||||
@ -90,6 +89,7 @@ export const ImageCard = ({
|
||||
}}
|
||||
/>
|
||||
</ButtonBase>
|
||||
|
||||
{external && (
|
||||
<ButtonBase>
|
||||
<OpenInNewIcon
|
||||
@ -103,6 +103,7 @@ export const ImageCard = ({
|
||||
)}
|
||||
</Box>
|
||||
</Box>
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
padding: '8px 16px 8px 16px',
|
||||
@ -113,27 +114,39 @@ export const ImageCard = ({
|
||||
fontSize: '12px',
|
||||
}}
|
||||
>
|
||||
Created by {decodeIfEncoded(owner)}
|
||||
{t('core:message.error.created_by', {
|
||||
owner: decodeIfEncoded(owner),
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
<Typography
|
||||
sx={{
|
||||
fontSize: '12px',
|
||||
}}
|
||||
>
|
||||
{encryptionType === 'private'
|
||||
? 'ENCRYPTED'
|
||||
? t('core:message.generic.encrypted', {
|
||||
postProcess: 'capitalizeAll',
|
||||
})
|
||||
: encryptionType === 'group'
|
||||
? 'GROUP ENCRYPTED'
|
||||
: 'Not encrypted'}
|
||||
? t('group:message.generic.group_encrypted', {
|
||||
postProcess: 'capitalizeAll',
|
||||
})
|
||||
: t('core:message.generic.encrypted_not', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
||||
<Divider sx={{ borderColor: 'rgb(255 255 255 / 10%)' }} />
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
alignItems: 'center',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
width: '100%',
|
||||
alignItems: 'center',
|
||||
}}
|
||||
>
|
||||
{isLoadingParent && isOpen && (
|
||||
@ -144,10 +157,10 @@ export const ImageCard = ({
|
||||
justifyContent: 'center',
|
||||
}}
|
||||
>
|
||||
{' '}
|
||||
<CustomLoader />{' '}
|
||||
<CustomLoader />
|
||||
</Box>
|
||||
)}
|
||||
|
||||
{errorMsg && (
|
||||
<Box
|
||||
sx={{
|
||||
@ -164,7 +177,7 @@ export const ImageCard = ({
|
||||
}}
|
||||
>
|
||||
{errorMsg}
|
||||
</Typography>{' '}
|
||||
</Typography>
|
||||
</Box>
|
||||
)}
|
||||
</Box>
|
||||
@ -189,10 +202,10 @@ export function ImageViewer({ src, alt = '' }) {
|
||||
{/* Image in container */}
|
||||
<Box
|
||||
sx={{
|
||||
maxWidth: '100%', // Prevent horizontal overflow
|
||||
cursor: 'pointer',
|
||||
display: 'flex',
|
||||
justifyContent: 'center',
|
||||
cursor: 'pointer',
|
||||
maxWidth: '100%', // Prevent horizontal overflow
|
||||
}}
|
||||
onClick={handleOpenFullscreen}
|
||||
>
|
||||
@ -226,13 +239,13 @@ export function ImageViewer({ src, alt = '' }) {
|
||||
>
|
||||
<Box
|
||||
sx={{
|
||||
position: 'relative',
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
display: 'flex',
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
backgroundColor: theme.palette.background.paper, // Optional: dark background for fullscreen mode
|
||||
display: 'flex',
|
||||
height: '100%',
|
||||
justifyContent: 'center',
|
||||
position: 'relative',
|
||||
width: '100%',
|
||||
}}
|
||||
>
|
||||
{/* Close Button */}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import React, { useContext, useEffect, useState } from 'react';
|
||||
import { useContext, useEffect, useState } from 'react';
|
||||
import { MyContext } from '../../App';
|
||||
import {
|
||||
Card,
|
||||
@ -21,6 +21,7 @@ import RefreshIcon from '@mui/icons-material/Refresh';
|
||||
import { Spacer } from '../../common/Spacer';
|
||||
import OpenInNewIcon from '@mui/icons-material/OpenInNew';
|
||||
import { CustomLoader } from '../../common/CustomLoader';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
export const PollCard = ({
|
||||
poll,
|
||||
@ -39,11 +40,15 @@ export const PollCard = ({
|
||||
const { show, userInfo } = useContext(MyContext);
|
||||
const [isLoadingSubmit, setIsLoadingSubmit] = useState(false);
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
const handleVote = async () => {
|
||||
const fee = await getFee('VOTE_ON_POLL');
|
||||
|
||||
await show({
|
||||
message: `Do you accept this VOTE_ON_POLL transaction? POLLS are public!`,
|
||||
message: t('core:question.accept_vote_on_poll', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
setIsLoadingSubmit(true);
|
||||
@ -62,15 +67,20 @@ export const PollCard = ({
|
||||
if (response.error) {
|
||||
setInfoSnack({
|
||||
type: 'error',
|
||||
message: response?.error || 'Unable to vote.',
|
||||
message:
|
||||
response?.error ||
|
||||
t('core:message.error.unable_vote', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
return;
|
||||
} else {
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message:
|
||||
'Successfully voted. Please wait a couple minutes for the network to propogate the changes.',
|
||||
message: t('core:message.success.voted', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
}
|
||||
@ -79,7 +89,11 @@ export const PollCard = ({
|
||||
setIsLoadingSubmit(false);
|
||||
setInfoSnack({
|
||||
type: 'error',
|
||||
message: error?.message || 'Unable to vote.',
|
||||
message:
|
||||
error?.message ||
|
||||
t('core:message.error.unable_vote', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
});
|
||||
@ -111,16 +125,16 @@ export const PollCard = ({
|
||||
>
|
||||
<Box
|
||||
sx={{
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
display: 'flex',
|
||||
justifyContent: 'space-between',
|
||||
padding: '16px 16px 0px 16px',
|
||||
}}
|
||||
>
|
||||
<Box
|
||||
sx={{
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
display: 'flex',
|
||||
gap: '10px',
|
||||
}}
|
||||
>
|
||||
@ -129,8 +143,11 @@ export const PollCard = ({
|
||||
color: theme.palette.text.primary,
|
||||
}}
|
||||
/>
|
||||
<Typography>POLL embed</Typography>
|
||||
<Typography>
|
||||
{t('core:poll_embed', { postProcess: 'capitalizeFirstWord' })}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
display: 'flex',
|
||||
@ -147,6 +164,7 @@ export const PollCard = ({
|
||||
}}
|
||||
/>
|
||||
</ButtonBase>
|
||||
|
||||
{external && (
|
||||
<ButtonBase>
|
||||
<OpenInNewIcon
|
||||
@ -170,16 +188,21 @@ export const PollCard = ({
|
||||
fontSize: '12px',
|
||||
}}
|
||||
>
|
||||
Created by {ownerName || poll?.info?.owner}
|
||||
{t('core:message.error.created_by', {
|
||||
owner: poll?.info?.owner,
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
||||
<Divider sx={{ borderColor: 'rgb(255 255 255 / 10%)' }} />
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
alignItems: 'center',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
width: '100%',
|
||||
alignItems: 'center',
|
||||
}}
|
||||
>
|
||||
{!isOpen && !errorMsg && (
|
||||
@ -192,31 +215,31 @@ export const PollCard = ({
|
||||
setIsOpen(true);
|
||||
}}
|
||||
>
|
||||
Show poll
|
||||
{t('core:action.show_poll', { postProcess: 'capitalizeFirst' })}
|
||||
</Button>
|
||||
</>
|
||||
)}
|
||||
|
||||
{isLoadingParent && isOpen && (
|
||||
<Box
|
||||
sx={{
|
||||
width: '100%',
|
||||
display: 'flex',
|
||||
justifyContent: 'center',
|
||||
width: '100%',
|
||||
}}
|
||||
>
|
||||
{' '}
|
||||
<CustomLoader />{' '}
|
||||
<CustomLoader />
|
||||
</Box>
|
||||
)}
|
||||
|
||||
{errorMsg && (
|
||||
<Box
|
||||
sx={{
|
||||
width: '100%',
|
||||
display: 'flex',
|
||||
justifyContent: 'center',
|
||||
width: '100%',
|
||||
}}
|
||||
>
|
||||
{' '}
|
||||
<Typography
|
||||
sx={{
|
||||
fontSize: '14px',
|
||||
@ -224,7 +247,7 @@ export const PollCard = ({
|
||||
}}
|
||||
>
|
||||
{errorMsg}
|
||||
</Typography>{' '}
|
||||
</Typography>
|
||||
</Box>
|
||||
)}
|
||||
</Box>
|
||||
@ -243,14 +266,16 @@ export const PollCard = ({
|
||||
},
|
||||
}}
|
||||
/>
|
||||
|
||||
<CardContent>
|
||||
<Typography
|
||||
sx={{
|
||||
fontSize: '18px',
|
||||
}}
|
||||
>
|
||||
Options
|
||||
{t('core:option_other', { postProcess: 'capitalizeFirst' })}
|
||||
</Typography>
|
||||
|
||||
<RadioGroup
|
||||
value={selectedOption}
|
||||
onChange={(e) => setSelectedOption(e.target.value)}
|
||||
@ -269,6 +294,7 @@ export const PollCard = ({
|
||||
/>
|
||||
))}
|
||||
</RadioGroup>
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
display: 'flex',
|
||||
@ -282,8 +308,9 @@ export const PollCard = ({
|
||||
disabled={!selectedOption || isLoadingSubmit}
|
||||
onClick={handleVote}
|
||||
>
|
||||
Vote
|
||||
{t('core:action.vote', { postProcess: 'capitalizeFirst' })}
|
||||
</Button>
|
||||
|
||||
<Typography
|
||||
sx={{
|
||||
fontSize: '14px',
|
||||
@ -298,6 +325,7 @@ export const PollCard = ({
|
||||
</Box>
|
||||
|
||||
<Spacer height="10px" />
|
||||
|
||||
<Typography
|
||||
sx={{
|
||||
fontSize: '14px',
|
||||
@ -308,26 +336,36 @@ export const PollCard = ({
|
||||
: 'hidden',
|
||||
}}
|
||||
>
|
||||
You've already voted.
|
||||
{t('core:message.generic.already_voted', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
<Spacer height="10px" />
|
||||
|
||||
{isLoadingSubmit && (
|
||||
<Typography
|
||||
sx={{
|
||||
fontSize: '12px',
|
||||
}}
|
||||
>
|
||||
Is processing transaction, please wait...
|
||||
{t('core:message.generic.processing_transaction', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
|
||||
<ButtonBase
|
||||
onClick={() => {
|
||||
setShowResults((prev) => !prev);
|
||||
}}
|
||||
>
|
||||
{showResults ? 'hide ' : 'show '} results
|
||||
{showResults
|
||||
? t('core:action.hide', { postProcess: 'capitalizeFirst' })
|
||||
: t('core:action.close', { postProcess: 'capitalizeFirst' })}
|
||||
</ButtonBase>
|
||||
</CardContent>
|
||||
|
||||
{showResults && <PollResults votes={poll?.votes} />}
|
||||
</Box>
|
||||
</Card>
|
||||
@ -339,6 +377,8 @@ const PollResults = ({ votes }) => {
|
||||
...votes?.voteCounts?.map((option) => option.voteCount)
|
||||
);
|
||||
const options = votes?.voteCounts;
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
return (
|
||||
<Box sx={{ width: '100%', p: 2 }}>
|
||||
{options
|
||||
@ -355,6 +395,7 @@ const PollResults = ({ votes }) => {
|
||||
>
|
||||
{`${index + 1}. ${option.optionName}`}
|
||||
</Typography>
|
||||
|
||||
<Typography
|
||||
variant="body1"
|
||||
sx={{
|
||||
@ -362,24 +403,25 @@ const PollResults = ({ votes }) => {
|
||||
fontSize: '14px',
|
||||
}}
|
||||
>
|
||||
{option.voteCount} votes
|
||||
{t('core:vote', { count: option.voteCount })}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
mt: 1,
|
||||
height: 10,
|
||||
backgroundColor: '#e0e0e0',
|
||||
borderRadius: 5,
|
||||
height: 10,
|
||||
mt: 1,
|
||||
overflow: 'hidden',
|
||||
}}
|
||||
>
|
||||
<Box
|
||||
sx={{
|
||||
width: `${(option.voteCount / maxVotes) * 100}%`,
|
||||
height: '100%',
|
||||
backgroundColor: index === 0 ? '#3f51b5' : '#f50057',
|
||||
height: '100%',
|
||||
transition: 'width 0.3s ease-in-out',
|
||||
width: `${(option.voteCount / maxVotes) * 100}%`,
|
||||
}}
|
||||
/>
|
||||
</Box>
|
||||
|
@ -1,4 +1,12 @@
|
||||
import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import {
|
||||
FC,
|
||||
KeyboardEvent,
|
||||
useContext,
|
||||
useEffect,
|
||||
useMemo,
|
||||
useRef,
|
||||
useState,
|
||||
} from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import { Box, IconButton, Slider } from '@mui/material';
|
||||
import { CircularProgress, Typography } from '@mui/material';
|
||||
@ -8,48 +16,43 @@ import {
|
||||
Pause,
|
||||
VolumeUp,
|
||||
Fullscreen,
|
||||
PictureInPicture,
|
||||
VolumeOff,
|
||||
Calculate,
|
||||
} from '@mui/icons-material';
|
||||
import { styled } from '@mui/system';
|
||||
import { Refresh } from '@mui/icons-material';
|
||||
|
||||
import { Menu, MenuItem } from '@mui/material';
|
||||
import { MoreVert as MoreIcon } from '@mui/icons-material';
|
||||
import { MyContext, getBaseApiReact } from '../../App';
|
||||
import { resourceKeySelector } from '../../atoms/global';
|
||||
|
||||
import { useAtomValue } from 'jotai';
|
||||
const VideoContainer = styled(Box)`
|
||||
position: relative;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
`;
|
||||
|
||||
const VideoElement = styled('video')`
|
||||
width: 100%;
|
||||
background: rgb(33, 33, 33);
|
||||
height: auto;
|
||||
max-height: calc(100vh - 150px);
|
||||
background: rgb(33, 33, 33);
|
||||
width: 100%;
|
||||
`;
|
||||
|
||||
const ControlsContainer = styled(Box)`
|
||||
position: absolute;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
padding: 8px;
|
||||
background-color: rgba(0, 0, 0, 0.6);
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
left: 0;
|
||||
padding: 8px;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
`;
|
||||
|
||||
interface VideoPlayerProps {
|
||||
@ -64,7 +67,8 @@ interface VideoPlayerProps {
|
||||
user?: string;
|
||||
}
|
||||
|
||||
export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
// TODO translate and theme? Is it worth?
|
||||
export const VideoPlayer: FC<VideoPlayerProps> = ({
|
||||
poster,
|
||||
name,
|
||||
identifier,
|
||||
@ -83,9 +87,7 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
}, [service, name, identifier]);
|
||||
|
||||
const download = useAtomValue(resourceKeySelector(keyIdentifier));
|
||||
|
||||
const { downloadResource } = useContext(MyContext);
|
||||
|
||||
const videoRef = useRef<HTMLVideoElement | null>(null);
|
||||
const [playing, setPlaying] = useState(false);
|
||||
const [volume, setVolume] = useState(1);
|
||||
@ -242,7 +244,7 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
setCanPlay(true);
|
||||
};
|
||||
|
||||
const getSrc = React.useCallback(async () => {
|
||||
const getSrc = useCallback(async () => {
|
||||
if (!name || !identifier || !service) return;
|
||||
try {
|
||||
downloadResource({
|
||||
@ -317,12 +319,14 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
const progress = (current / total) * 100;
|
||||
return Number.isNaN(progress) ? '' : progress.toFixed(0) + '%';
|
||||
};
|
||||
|
||||
const mute = () => {
|
||||
setIsMuted(true);
|
||||
setMutedVolume(volume);
|
||||
setVolume(0);
|
||||
if (videoRef.current) videoRef.current.volume = 0;
|
||||
};
|
||||
|
||||
const unMute = () => {
|
||||
setIsMuted(false);
|
||||
setVolume(mutedVolume);
|
||||
@ -349,6 +353,7 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
setVolume(newVolume);
|
||||
}
|
||||
};
|
||||
|
||||
const setProgressRelative = (secondsChange: number) => {
|
||||
if (videoRef.current) {
|
||||
const currentTime = videoRef.current?.currentTime;
|
||||
@ -373,7 +378,7 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
}
|
||||
};
|
||||
|
||||
const keyboardShortcutsDown = (e: React.KeyboardEvent<HTMLDivElement>) => {
|
||||
const keyboardShortcutsDown = (e: KeyboardEvent<HTMLDivElement>) => {
|
||||
e.preventDefault();
|
||||
|
||||
switch (e.key) {
|
||||
@ -424,7 +429,7 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
}
|
||||
};
|
||||
|
||||
const keyboardShortcutsUp = (e: React.KeyboardEvent<HTMLDivElement>) => {
|
||||
const keyboardShortcutsUp = (e: KeyboardEvent<HTMLDivElement>) => {
|
||||
e.preventDefault();
|
||||
|
||||
switch (e.key) {
|
||||
@ -569,6 +574,7 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
/>
|
||||
</Box>
|
||||
)}
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
display: 'flex',
|
||||
@ -586,7 +592,6 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
autoPlay={autoplay}
|
||||
onClick={togglePlay}
|
||||
onEnded={handleEnded}
|
||||
// onLoadedMetadata={handleLoadedMetadata}
|
||||
onCanPlay={handleCanPlay}
|
||||
preload="metadata"
|
||||
style={{
|
||||
@ -596,6 +601,7 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
}}
|
||||
/>
|
||||
</Box>
|
||||
|
||||
<ControlsContainer
|
||||
sx={{
|
||||
position: 'relative',
|
||||
@ -623,6 +629,7 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
>
|
||||
<Refresh />
|
||||
</IconButton>
|
||||
|
||||
<Slider
|
||||
value={progress}
|
||||
onChange={onProgressChange}
|
||||
@ -630,6 +637,7 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
max={videoRef.current?.duration || 100}
|
||||
sx={{ flexGrow: 1, mx: 2, color: 'var(--Mail-Background)' }}
|
||||
/>
|
||||
|
||||
<Typography
|
||||
sx={{
|
||||
fontSize: '14px',
|
||||
@ -647,6 +655,7 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
videoRef.current?.duration &&
|
||||
formatTime(videoRef.current?.duration)}
|
||||
</Typography>
|
||||
|
||||
<IconButton
|
||||
sx={{
|
||||
color: 'rgba(255, 255, 255, 0.7)',
|
||||
@ -656,6 +665,7 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
>
|
||||
{isMuted ? <VolumeOff /> : <VolumeUp />}
|
||||
</IconButton>
|
||||
|
||||
<Slider
|
||||
value={volume}
|
||||
onChange={onVolumeChange}
|
||||
@ -677,6 +687,7 @@ export const VideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
>
|
||||
Speed: {playbackRate}x
|
||||
</IconButton>
|
||||
|
||||
<IconButton
|
||||
sx={{
|
||||
color: 'rgba(255, 255, 255, 0.7)',
|
||||
|
@ -8,7 +8,7 @@ import { useTranslation } from 'react-i18next';
|
||||
|
||||
export const Explore = ({ setDesktopViewMode }) => {
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['core', 'tutorial']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group', 'tutorial']);
|
||||
|
||||
return (
|
||||
<Box
|
||||
@ -46,7 +46,9 @@ export const Explore = ({ setDesktopViewMode }) => {
|
||||
fontSize: '1rem',
|
||||
}}
|
||||
>
|
||||
{t('tutorial:initial.trade_qort', { postProcess: 'capitalizeFirst' })}
|
||||
{t('tutorial:initial.trade_qort', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</ButtonBase>
|
||||
|
||||
@ -73,7 +75,9 @@ export const Explore = ({ setDesktopViewMode }) => {
|
||||
fontSize: '1rem',
|
||||
}}
|
||||
>
|
||||
{t('tutorial:initial.see_apps', { postProcess: 'capitalizeFirst' })}
|
||||
{t('tutorial:initial.see_apps', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</ButtonBase>
|
||||
|
||||
@ -103,7 +107,7 @@ export const Explore = ({ setDesktopViewMode }) => {
|
||||
}}
|
||||
>
|
||||
{t('tutorial:initial.general_chat', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</ButtonBase>
|
||||
@ -131,7 +135,9 @@ export const Explore = ({ setDesktopViewMode }) => {
|
||||
fontSize: '1rem',
|
||||
}}
|
||||
>
|
||||
{t('core:wallet.wallet_other', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:wallet.wallet_other', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</ButtonBase>
|
||||
</Box>
|
||||
|
@ -32,7 +32,7 @@ export const GeneralNotifications = ({ address }) => {
|
||||
setAnchorEl(event.currentTarget);
|
||||
};
|
||||
|
||||
const { t } = useTranslation(['core']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
const theme = useTheme();
|
||||
|
||||
return (
|
||||
|
@ -29,7 +29,7 @@ export const JoinGroup = () => {
|
||||
const [isLoadingInfo, setIsLoadingInfo] = useState(false);
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['core', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
const [isLoadingJoinGroup, setIsLoadingJoinGroup] = useState(false);
|
||||
|
||||
const handleJoinGroup = async (e) => {
|
||||
@ -72,7 +72,7 @@ export const JoinGroup = () => {
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
action: 'JOIN_GROUP',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -89,7 +89,7 @@ export const JoinGroup = () => {
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message: t('group:message.success.group_join', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
|
||||
@ -100,11 +100,11 @@ export const JoinGroup = () => {
|
||||
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,
|
||||
@ -118,11 +118,11 @@ export const JoinGroup = () => {
|
||||
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,
|
||||
@ -148,7 +148,7 @@ export const JoinGroup = () => {
|
||||
message:
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -207,7 +207,7 @@ export const JoinGroup = () => {
|
||||
fontWeight: 600,
|
||||
}}
|
||||
>
|
||||
{t('group:group.name', { postProcess: 'capitalizeFirst' })}:{' '}
|
||||
{t('group:group.name', { postProcess: 'capitalizeFirstChar' })}:{' '}
|
||||
{` ${groupInfo?.groupName}`}
|
||||
</Typography>
|
||||
|
||||
@ -218,7 +218,7 @@ export const JoinGroup = () => {
|
||||
}}
|
||||
>
|
||||
{t('group:group.member_number', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
: {` ${groupInfo?.memberCount}`}
|
||||
</Typography>
|
||||
@ -241,7 +241,7 @@ export const JoinGroup = () => {
|
||||
}}
|
||||
>
|
||||
{t('group:message.generic.already_in_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -253,7 +253,7 @@ export const JoinGroup = () => {
|
||||
}}
|
||||
>
|
||||
{t('group:message.generic.closed_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -280,7 +280,7 @@ export const JoinGroup = () => {
|
||||
}}
|
||||
>
|
||||
{t('core:action.join', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButtonAccept>
|
||||
</ButtonBase>
|
||||
@ -295,7 +295,7 @@ export const JoinGroup = () => {
|
||||
onClick={() => setIsOpen(false)}
|
||||
>
|
||||
{t('core:action.close', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButtonAccept>
|
||||
</DialogActions>
|
||||
|
@ -97,7 +97,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
setMaxBlock(event.target.value as string);
|
||||
};
|
||||
|
||||
const { t } = useTranslation(['core', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
const theme = useTheme();
|
||||
|
||||
const handleCreateGroup = async () => {
|
||||
@ -105,13 +105,13 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
if (!name)
|
||||
throw new Error(
|
||||
t('group:message.error.name_required', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
if (!description)
|
||||
throw new Error(
|
||||
t('group:message.error.description_required', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
|
||||
@ -120,7 +120,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
action: 'CREATE_GROUP',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -140,7 +140,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message: t('group:message.success.group_creation', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -150,11 +150,11 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
type: 'created-group',
|
||||
label: t('group:message.success.group_creation_name', {
|
||||
group_name: name,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
labelDone: t('group:message.success.group_creation_label', {
|
||||
group_name: name,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
done: false,
|
||||
},
|
||||
@ -173,7 +173,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
message:
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
});
|
||||
@ -227,7 +227,9 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
>
|
||||
<Toolbar>
|
||||
<Typography sx={{ ml: 2, flex: 1 }} variant="h4" component="div">
|
||||
{t('group:group.management', { postProcess: 'capitalizeFirst' })}
|
||||
{t('group:group.management', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
<IconButton
|
||||
@ -269,7 +271,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
>
|
||||
<Tab
|
||||
label={t('group:action.create_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
{...a11yProps(0)}
|
||||
sx={{
|
||||
@ -281,7 +283,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
/>
|
||||
<Tab
|
||||
label={t('group:action.find_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
{...a11yProps(1)}
|
||||
sx={{
|
||||
@ -293,7 +295,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
/>
|
||||
<Tab
|
||||
label={t('group:group.invites', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
{...a11yProps(2)}
|
||||
sx={{
|
||||
@ -330,13 +332,13 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
>
|
||||
<Label>
|
||||
{t('group:group.name', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
|
||||
<Input
|
||||
placeholder={t('group:group.name', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
value={name}
|
||||
onChange={(e) => setName(e.target.value)}
|
||||
@ -352,13 +354,13 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
>
|
||||
<Label>
|
||||
{t('group:group.description', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
|
||||
<Input
|
||||
placeholder={t('group:group.description', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
value={description}
|
||||
onChange={(e) => setDescription(e.target.value)}
|
||||
@ -374,7 +376,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
>
|
||||
<Label>
|
||||
{t('group:group.type', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
|
||||
@ -387,12 +389,12 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
>
|
||||
<MenuItem value={1}>
|
||||
{t('group:group.open', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</MenuItem>
|
||||
<MenuItem value={0}>
|
||||
{t('group:group.closed', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</MenuItem>
|
||||
</Select>
|
||||
@ -409,7 +411,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
>
|
||||
<Typography>
|
||||
{t('group:advanced_options', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -426,7 +428,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
>
|
||||
<Label>
|
||||
{t('group:approval_threshold', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
|
||||
@ -439,12 +441,12 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
>
|
||||
<MenuItem value={0}>
|
||||
{t('core:count.none', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</MenuItem>
|
||||
<MenuItem value={1}>
|
||||
{t('core:count.one', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</MenuItem>
|
||||
<MenuItem value={20}>20%</MenuItem>
|
||||
@ -464,7 +466,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
>
|
||||
<Label>
|
||||
{t('group:block_delay.minimum', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
|
||||
@ -523,7 +525,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
>
|
||||
<Label>
|
||||
{t('group:block_delay.maximum', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
|
||||
@ -584,7 +586,7 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
||||
onClick={handleCreateGroup}
|
||||
>
|
||||
{t('group:action.create_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</Box>
|
||||
|
@ -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 }) => {
|
||||
}}
|
||||
>
|
||||
<Typography>
|
||||
{t('core:action.join', { postProcess: 'capitalizeFirst' })}{' '}
|
||||
{t('core:action.join', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}{' '}
|
||||
{group?.groupName}
|
||||
</Typography>
|
||||
<Typography>
|
||||
@ -257,7 +259,7 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => {
|
||||
onClick={() => handleJoinGroup(group, group?.isOpen)}
|
||||
>
|
||||
{t('group:action.join_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
</Box>
|
||||
|
@ -73,7 +73,7 @@ export const GroupMail = ({
|
||||
const anchorElInstanceFilter = useRef<any>(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<any>(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 = ({
|
||||
<ThreadSingleLastMessageP>
|
||||
<ThreadSingleLastMessageSpanP>
|
||||
{t('group:last_message', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
:{' '}
|
||||
</ThreadSingleLastMessageSpanP>
|
||||
@ -793,7 +793,7 @@ export const GroupMail = ({
|
||||
}}
|
||||
>
|
||||
{t('core:page.last', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
<ArrowForwardIosIcon
|
||||
@ -827,7 +827,7 @@ export const GroupMail = ({
|
||||
open={isLoading}
|
||||
info={{
|
||||
message: t('group:message.success.loading_threads', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
|
@ -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<boolean>(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() === '<p></p>') {
|
||||
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 = ({
|
||||
<ComposeP>
|
||||
{currentThread
|
||||
? t('core:action.new.post', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('core:action.new.thread', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</ComposeP>
|
||||
</ComposeContainer>
|
||||
@ -437,10 +437,10 @@ export const NewThread = ({
|
||||
<NewMessageHeaderP>
|
||||
{isMessage
|
||||
? t('core:action.post_message', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('core:action.new.thread', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</NewMessageHeaderP>
|
||||
|
||||
@ -562,10 +562,10 @@ export const NewThread = ({
|
||||
<NewMessageSendP>
|
||||
{isMessage
|
||||
? t('core:action.post', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('core:action.create_thread', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</NewMessageSendP>
|
||||
|
||||
|
@ -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 = ({
|
||||
<ReturnIcon />
|
||||
<ComposeP>
|
||||
{t('group:action.return_to_thread', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</ComposeP>
|
||||
</ShowMessageReturnButton>
|
||||
@ -688,7 +688,7 @@ export const Thread = ({
|
||||
disabled={!hasFirstPage}
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:page.first', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:page.first', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
@ -707,7 +707,7 @@ export const Thread = ({
|
||||
disabled={!hasPreviousPage}
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:page.previous', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:page.previous', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
@ -726,7 +726,7 @@ export const Thread = ({
|
||||
disabled={!hasNextPage}
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:page.next', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:page.next', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
@ -745,7 +745,7 @@ export const Thread = ({
|
||||
disabled={!hasLastPage}
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:page.last', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:page.last', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
</Box>
|
||||
|
||||
@ -930,7 +930,7 @@ export const Thread = ({
|
||||
}}
|
||||
>
|
||||
{t('core:downloading_qdn', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -963,7 +963,7 @@ export const Thread = ({
|
||||
}}
|
||||
>
|
||||
{t('group:action.refetch_page', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</Box>
|
||||
@ -1002,7 +1002,7 @@ export const Thread = ({
|
||||
disabled={!hasFirstPage}
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:page.first', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:page.first', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
@ -1021,7 +1021,9 @@ export const Thread = ({
|
||||
disabled={!hasPreviousPage}
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:page.previous', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:page.previous', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
@ -1040,7 +1042,7 @@ export const Thread = ({
|
||||
disabled={!hasNextPage}
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:page.next', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:page.next', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
@ -1059,7 +1061,7 @@ export const Thread = ({
|
||||
disabled={!hasLastPage}
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:page.last', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:page.last', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
</Box>
|
||||
|
||||
@ -1073,7 +1075,9 @@ export const Thread = ({
|
||||
<LoadingSnackbar
|
||||
open={isLoading}
|
||||
info={{
|
||||
message: t('core:loading.posts', { postProcess: 'capitalizeFirst' }),
|
||||
message: t('core:loading.posts', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
</GroupContainer>
|
||||
|
@ -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 = ({
|
||||
>
|
||||
<Box
|
||||
sx={{
|
||||
alignItems: 'center',
|
||||
display: 'flex',
|
||||
width: '100%',
|
||||
alignItems: 'center',
|
||||
}}
|
||||
>
|
||||
<ListItemAvatar>
|
||||
@ -1766,12 +1766,18 @@ export const Group = ({
|
||||
{(direct?.name || direct?.address)?.charAt(0)}
|
||||
</Avatar>
|
||||
</ListItemAvatar>
|
||||
|
||||
<ListItemText
|
||||
primary={direct?.name || direct?.address}
|
||||
secondary={
|
||||
!direct?.timestamp
|
||||
? 'no messages'
|
||||
: `last message: ${formatEmailDate(direct?.timestamp)}`
|
||||
? t('core:message.generic.no_messages', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('group:last_message_date', {
|
||||
date: formatEmailDate(direct?.timestamp),
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
}
|
||||
primaryTypographyProps={{
|
||||
style: {
|
||||
@ -1815,6 +1821,7 @@ export const Group = ({
|
||||
</List>
|
||||
))}
|
||||
</div>
|
||||
|
||||
<div
|
||||
style={{
|
||||
display: 'flex',
|
||||
@ -1835,7 +1842,9 @@ export const Group = ({
|
||||
color: theme.palette.text.primary,
|
||||
}}
|
||||
/>
|
||||
New Chat
|
||||
{t('core:action.new.chat', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</div>
|
||||
</div>
|
||||
@ -1999,7 +2008,7 @@ export const Group = ({
|
||||
}}
|
||||
>
|
||||
{t('group:message.generic.no_selection', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -2098,7 +2107,7 @@ export const Group = ({
|
||||
{' '}
|
||||
<Typography>
|
||||
{t('group:message.generic.encryption_key', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</div>
|
||||
@ -2124,21 +2133,21 @@ export const Group = ({
|
||||
{' '}
|
||||
<Typography>
|
||||
{t('group:message.generic.not_part_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
<Spacer height="25px" />
|
||||
<Typography>
|
||||
<strong>
|
||||
{t('group:message.generic.only_encrypted', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</strong>
|
||||
</Typography>
|
||||
<Spacer height="25px" />
|
||||
<Typography>
|
||||
{t('group:message.generic.notify_admins', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
<Spacer height="25px" />
|
||||
@ -2160,7 +2169,7 @@ export const Group = ({
|
||||
onClick={() => notifyAdmin(admin)}
|
||||
>
|
||||
{t('core:action.notify', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
</Box>
|
||||
@ -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',
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
|
@ -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})`}
|
||||
</Typography>
|
||||
@ -131,7 +131,7 @@ export const GroupInvites = ({ myAddress, setOpenAddGroup }) => {
|
||||
}}
|
||||
>
|
||||
{t('group:message.generic.no_display', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -181,7 +181,7 @@ export const GroupInvites = ({ myAddress, setOpenAddGroup }) => {
|
||||
}}
|
||||
primary={t('group:message.generic.group_invited_you', {
|
||||
group: group?.groupName,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
/>
|
||||
</ListItemButton>
|
||||
|
@ -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',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
@ -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' })}
|
||||
</CustomButton>
|
||||
|
||||
{!isRunningPublicNode && (
|
||||
|
@ -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 ? (
|
||||
<span
|
||||
style={{
|
||||
@ -218,7 +218,7 @@ export const HomeDesktop = ({
|
||||
}}
|
||||
>
|
||||
{t('tutorial:initial.explore', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>{' '}
|
||||
</Box>
|
||||
|
@ -10,7 +10,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
||||
const [value, setValue] = useState('');
|
||||
const [expiryTime, setExpiryTime] = useState<string>('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' })}
|
||||
|
||||
<Spacer height="20px" />
|
||||
|
||||
@ -99,14 +99,16 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
||||
<Spacer height="20px" />
|
||||
|
||||
<Label>
|
||||
{t('group:invitation_expiry', { postProcess: 'capitalizeFirst' })}
|
||||
{t('group:invitation_expiry', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Label>
|
||||
|
||||
<Select
|
||||
labelId="demo-simple-select-label"
|
||||
id="demo-simple-select"
|
||||
value={expiryTime}
|
||||
label={t('group:invitation_expiry', { postProcess: 'capitalizeFirst' })}
|
||||
label={t('group:invitation_expiry', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
onChange={handleChange}
|
||||
>
|
||||
<MenuItem value={10800}>{t('core:time.hour', { count: 3 })}</MenuItem>
|
||||
@ -129,7 +131,7 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
||||
loading={isLoadingInvite}
|
||||
onClick={inviteMember}
|
||||
>
|
||||
{t('core:action.invite', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.invite', { postProcess: 'capitalizeFirstChar' })}
|
||||
</LoadingButton>
|
||||
</Box>
|
||||
);
|
||||
|
@ -56,7 +56,7 @@ export const ListOfBans = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
||||
const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open
|
||||
const listRef = useRef(null);
|
||||
const [isLoadingUnban, setIsLoadingUnban] = useState(false);
|
||||
const { t } = useTranslation(['core', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
const getInvites = async (groupId) => {
|
||||
try {
|
||||
@ -90,7 +90,7 @@ export const ListOfBans = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
action: 'CANCEL_GROUP_BAN',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -108,7 +108,7 @@ export const ListOfBans = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message: t('group:message.success.unbanned_user', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
handlePopoverClose();
|
||||
@ -184,7 +184,7 @@ export const ListOfBans = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
||||
onClick={() => handleCancelBan(member?.offender)}
|
||||
>
|
||||
{t('group:action.cancel_ban', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
</Box>
|
||||
@ -214,7 +214,7 @@ export const ListOfBans = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
||||
|
||||
return (
|
||||
<div>
|
||||
<p>{t('group:ban_list', { postProcess: 'capitalizeFirst' })}</p>
|
||||
<p>{t('group:ban_list', { postProcess: 'capitalizeFirstChar' })}</p>
|
||||
<div
|
||||
style={{
|
||||
display: 'flex',
|
||||
|
@ -97,7 +97,7 @@ export const ListOfGroupPromotions = () => {
|
||||
const { show } = useContext(MyContext);
|
||||
const setTxList = useSetAtom(txListAtom);
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['core', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
const listRef = useRef(null);
|
||||
const rowVirtualizer = useVirtualizer({
|
||||
count: promotions.length,
|
||||
@ -241,7 +241,7 @@ export const ListOfGroupPromotions = () => {
|
||||
rej(
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
});
|
||||
@ -249,7 +249,7 @@ export const ListOfGroupPromotions = () => {
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message: t('group:message.success.group_promotion', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -262,7 +262,7 @@ export const ListOfGroupPromotions = () => {
|
||||
message:
|
||||
error?.message ||
|
||||
t('group:message.error.group_promotion', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -278,7 +278,7 @@ export const ListOfGroupPromotions = () => {
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
action: 'JOIN_GROUP',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -293,7 +293,7 @@ export const ListOfGroupPromotions = () => {
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message: t('group:message.success.group_join', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
|
||||
@ -304,11 +304,11 @@ export const ListOfGroupPromotions = () => {
|
||||
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,
|
||||
@ -322,11 +322,11 @@ export const ListOfGroupPromotions = () => {
|
||||
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,
|
||||
@ -353,7 +353,7 @@ export const ListOfGroupPromotions = () => {
|
||||
message:
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -403,7 +403,9 @@ export const ListOfGroupPromotions = () => {
|
||||
fontSize: '1rem',
|
||||
}}
|
||||
>
|
||||
{t('group:group.promotions', { postProcess: 'capitalizeFirst' })}{' '}
|
||||
{t('group:group.promotions', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}{' '}
|
||||
{promotions.length > 0 && ` (${promotions.length})`}
|
||||
</Typography>
|
||||
|
||||
@ -463,7 +465,7 @@ export const ListOfGroupPromotions = () => {
|
||||
}}
|
||||
>
|
||||
{t('group.action.add_promotion', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</Box>
|
||||
@ -511,7 +513,7 @@ export const ListOfGroupPromotions = () => {
|
||||
}}
|
||||
>
|
||||
{t('group.message.generic.no_display', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -576,7 +578,7 @@ export const ListOfGroupPromotions = () => {
|
||||
fallback={
|
||||
<Typography>
|
||||
{t('group:message.generic.invalid_data', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
}
|
||||
@ -628,7 +630,7 @@ export const ListOfGroupPromotions = () => {
|
||||
}}
|
||||
>
|
||||
{t('group:group.name', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
: {` ${promotion?.groupName}`}
|
||||
</Typography>
|
||||
@ -640,7 +642,7 @@ export const ListOfGroupPromotions = () => {
|
||||
}}
|
||||
>
|
||||
{t('group:group.member_number', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
: {` ${promotion?.memberCount}`}
|
||||
</Typography>
|
||||
@ -664,7 +666,7 @@ export const ListOfGroupPromotions = () => {
|
||||
}}
|
||||
>
|
||||
{t('group:message.generic.closed_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -687,7 +689,7 @@ export const ListOfGroupPromotions = () => {
|
||||
onClick={handlePopoverClose}
|
||||
>
|
||||
{t('core:action.close', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
|
||||
@ -703,7 +705,7 @@ export const ListOfGroupPromotions = () => {
|
||||
}
|
||||
>
|
||||
{t('core:action.join', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
</Box>
|
||||
@ -789,10 +791,10 @@ export const ListOfGroupPromotions = () => {
|
||||
>
|
||||
{promotion?.isOpen
|
||||
? t('group:group.public', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('group:group.private', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -828,7 +830,7 @@ export const ListOfGroupPromotions = () => {
|
||||
}}
|
||||
>
|
||||
{t('group:action.join_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
: {` ${promotion?.groupName}`}
|
||||
</Button>
|
||||
@ -856,19 +858,21 @@ export const ListOfGroupPromotions = () => {
|
||||
aria-describedby="alert-dialog-description"
|
||||
>
|
||||
<DialogTitle id="alert-dialog-title">
|
||||
{t('group:action.promote_group', { postProcess: 'capitalizeFirst' })}
|
||||
{t('group:action.promote_group', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</DialogTitle>
|
||||
|
||||
<DialogContent>
|
||||
<DialogContentText id="alert-dialog-description">
|
||||
{t('group:message.generic.latest_promotion', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</DialogContentText>
|
||||
|
||||
<DialogContentText id="alert-dialog-description2">
|
||||
{t('group:message.generic.max_chars', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
: {fee && fee} {' QORT'}
|
||||
</DialogContentText>
|
||||
@ -884,13 +888,13 @@ export const ListOfGroupPromotions = () => {
|
||||
>
|
||||
<Label>
|
||||
{t('group:action.select_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
|
||||
<Label>
|
||||
{t('group:message.generic.admin_only', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
|
||||
@ -898,7 +902,9 @@ export const ListOfGroupPromotions = () => {
|
||||
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)}
|
||||
variant="outlined"
|
||||
>
|
||||
@ -942,7 +948,7 @@ export const ListOfGroupPromotions = () => {
|
||||
onClick={() => setIsShowModal(false)}
|
||||
>
|
||||
{t('core:action.close', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
<Button
|
||||
@ -952,7 +958,7 @@ export const ListOfGroupPromotions = () => {
|
||||
autoFocus
|
||||
>
|
||||
{t('core:action.publish', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
|
@ -60,7 +60,7 @@ export const ListOfInvites = ({
|
||||
const [popoverAnchor, setPopoverAnchor] = useState(null); // Track which list item the popover is anchored to
|
||||
const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open
|
||||
const [isLoadingCancelInvite, setIsLoadingCancelInvite] = useState(false);
|
||||
const { t } = useTranslation(['core', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
const listRef = useRef(null);
|
||||
|
||||
const getInvites = async (groupId) => {
|
||||
@ -96,7 +96,7 @@ export const ListOfInvites = ({
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
action: 'CANCEL_GROUP_INVITE',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -114,7 +114,7 @@ export const ListOfInvites = ({
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message: t('group:message.success.invitation_cancellation', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -136,7 +136,7 @@ export const ListOfInvites = ({
|
||||
message:
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -196,7 +196,7 @@ export const ListOfInvites = ({
|
||||
onClick={() => handleCancelInvitation(member?.invitee)}
|
||||
>
|
||||
{t('core:action.cancel_invitation', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
</Box>
|
||||
@ -229,7 +229,7 @@ export const ListOfInvites = ({
|
||||
<div>
|
||||
<p>
|
||||
{t('group:invitees_list', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</p>
|
||||
<div
|
||||
|
@ -64,7 +64,7 @@ export const ListOfJoinRequests = ({
|
||||
const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open
|
||||
const listRef = useRef(null);
|
||||
const [isLoadingAccept, setIsLoadingAccept] = useState(false);
|
||||
const { t } = useTranslation(['core', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
const getInvites = async (groupId) => {
|
||||
try {
|
||||
@ -99,7 +99,7 @@ export const ListOfJoinRequests = ({
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
action: 'GROUP_INVITE',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -119,7 +119,7 @@ export const ListOfJoinRequests = ({
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message: t('group:message.success,group_join', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -130,10 +130,10 @@ export const ListOfJoinRequests = ({
|
||||
...response,
|
||||
type: 'join-request-accept',
|
||||
label: t('group:message.success,invitation_request', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
labelDone: t('group:message.success,user_joined', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
done: false,
|
||||
groupId,
|
||||
@ -158,7 +158,7 @@ export const ListOfJoinRequests = ({
|
||||
message:
|
||||
error?.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -226,7 +226,7 @@ export const ListOfJoinRequests = ({
|
||||
onClick={() => handleAcceptJoinRequest(member?.joiner)}
|
||||
>
|
||||
{t('core:action.accept', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
</Box>
|
||||
@ -256,7 +256,9 @@ export const ListOfJoinRequests = ({
|
||||
|
||||
return (
|
||||
<div>
|
||||
<p>{t('core:list.join_request', { postProcess: 'capitalizeFirst' })}</p>
|
||||
<p>
|
||||
{t('core:list.join_request', { postProcess: 'capitalizeFirstChar' })}
|
||||
</p>
|
||||
<div
|
||||
style={{
|
||||
position: 'relative',
|
||||
|
@ -42,7 +42,7 @@ const ListOfMembers = ({
|
||||
const [isLoadingMakeAdmin, setIsLoadingMakeAdmin] = useState(false);
|
||||
const [isLoadingRemoveAdmin, setIsLoadingRemoveAdmin] = useState(false);
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['core', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
const listRef = useRef(null);
|
||||
|
||||
const handlePopoverOpen = (event, index) => {
|
||||
@ -61,7 +61,7 @@ const ListOfMembers = ({
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
action: 'GROUP_KICK',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -78,7 +78,7 @@ const ListOfMembers = ({
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message: t('group:message.success.group_kick', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -99,7 +99,7 @@ const ListOfMembers = ({
|
||||
message:
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -119,7 +119,7 @@ const ListOfMembers = ({
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
action: 'GROUP_BAN',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -138,7 +138,7 @@ const ListOfMembers = ({
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message: t('group:message.success.group_ban', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -159,7 +159,7 @@ const ListOfMembers = ({
|
||||
message:
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -179,7 +179,7 @@ const ListOfMembers = ({
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
action: 'ADD_GROUP_ADMIN',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -195,7 +195,7 @@ const ListOfMembers = ({
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message: t('group:message.success.group_member_admin', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -216,7 +216,7 @@ const ListOfMembers = ({
|
||||
message:
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -236,7 +236,7 @@ const ListOfMembers = ({
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
action: 'REMOVE_GROUP_ADMIN',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -252,7 +252,7 @@ const ListOfMembers = ({
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message: t('group:message.success.group_remove_member', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -273,7 +273,7 @@ const ListOfMembers = ({
|
||||
message:
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -334,7 +334,7 @@ const ListOfMembers = ({
|
||||
onClick={() => handleKick(member?.member)}
|
||||
>
|
||||
{t('group:action.kick_member', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
|
||||
@ -345,7 +345,7 @@ const ListOfMembers = ({
|
||||
onClick={() => handleBan(member?.member)}
|
||||
>
|
||||
{t('group:action.ban', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
|
||||
@ -356,7 +356,7 @@ const ListOfMembers = ({
|
||||
onClick={() => makeAdmin(member?.member)}
|
||||
>
|
||||
{t('group:action.make_admin', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
|
||||
@ -367,7 +367,7 @@ const ListOfMembers = ({
|
||||
onClick={() => removeAdmin(member?.member)}
|
||||
>
|
||||
{t('group:action.remove_admin', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
</>
|
||||
@ -402,7 +402,7 @@ const ListOfMembers = ({
|
||||
}}
|
||||
>
|
||||
{t('core:admin', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -418,7 +418,7 @@ const ListOfMembers = ({
|
||||
<div>
|
||||
<p>
|
||||
{t('core:list.member', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</p>
|
||||
<div
|
||||
|
@ -14,7 +14,7 @@ import { useTranslation } from 'react-i18next';
|
||||
export const ListOfThreadPostsWatched = () => {
|
||||
const [posts, setPosts] = useState([]);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const { t } = useTranslation(['core', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
const getPosts = async () => {
|
||||
try {
|
||||
@ -47,7 +47,7 @@ export const ListOfThreadPostsWatched = () => {
|
||||
rej(
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
});
|
||||
@ -87,7 +87,7 @@ export const ListOfThreadPostsWatched = () => {
|
||||
}}
|
||||
>
|
||||
{t('group:thread_posts', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
:
|
||||
</Typography>
|
||||
@ -135,7 +135,7 @@ export const ListOfThreadPostsWatched = () => {
|
||||
}}
|
||||
>
|
||||
{t('group:message.generic.no_display', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
@ -71,7 +71,7 @@ export const ManageMembers = ({
|
||||
setValue(newValue);
|
||||
};
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['core', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
const { show } = useContext(MyContext);
|
||||
const setTxList = useSetAtom(txListAtom);
|
||||
|
||||
@ -86,7 +86,7 @@ export const ManageMembers = ({
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
action: 'LEAVE_GROUP',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -104,11 +104,11 @@ export const ManageMembers = ({
|
||||
type: 'leave-group',
|
||||
label: t('group:message.success.group_leave_name', {
|
||||
group_name: selectedGroup?.groupName,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
labelDone: t('group:message.success.group_leave_label', {
|
||||
group_name: selectedGroup?.groupName,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
done: false,
|
||||
groupId: selectedGroup?.groupId,
|
||||
@ -119,7 +119,7 @@ export const ManageMembers = ({
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message: t('group:message.success.group_leave', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -131,7 +131,7 @@ export const ManageMembers = ({
|
||||
rej(
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
});
|
||||
@ -210,7 +210,7 @@ export const ManageMembers = ({
|
||||
<Toolbar>
|
||||
<Typography sx={{ ml: 2, flex: 1 }} variant="h4" component="div">
|
||||
{t('group:action.manage_members', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -314,18 +314,18 @@ export const ManageMembers = ({
|
||||
>
|
||||
<Box>
|
||||
<Typography>
|
||||
{t('group:group.id', { postProcess: 'capitalizeFirst' })}:{' '}
|
||||
{t('group:group.id', { postProcess: 'capitalizeFirstChar' })}:{' '}
|
||||
{groupInfo?.groupId}
|
||||
</Typography>
|
||||
|
||||
<Typography>
|
||||
{t('group:group.name', { postProcess: 'capitalizeFirst' })}:{' '}
|
||||
{t('group:group.name', { postProcess: 'capitalizeFirstChar' })}:{' '}
|
||||
{groupInfo?.groupName}
|
||||
</Typography>
|
||||
|
||||
<Typography>
|
||||
{t('group:group.member_number', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
: {groupInfo?.memberCount}
|
||||
</Typography>
|
||||
@ -342,7 +342,7 @@ export const ManageMembers = ({
|
||||
<InsertLinkIcon />
|
||||
|
||||
<Typography>
|
||||
{t('group:join_link', { postProcess: 'capitalizeFirst' })}
|
||||
{t('group:join_link', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Typography>
|
||||
</ButtonBase>
|
||||
</Box>
|
||||
@ -358,7 +358,7 @@ export const ManageMembers = ({
|
||||
onClick={handleLeaveGroup}
|
||||
>
|
||||
{t('group:action.leave_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
)}
|
||||
@ -377,7 +377,7 @@ export const ManageMembers = ({
|
||||
onClick={() => getMembersWithNames(selectedGroup?.groupId)}
|
||||
>
|
||||
{t('group:action.load_members', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
@ -475,7 +475,7 @@ export const ManageMembers = ({
|
||||
open={isLoadingMembers}
|
||||
info={{
|
||||
message: t('group:message.generic.loading_members', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
|
@ -54,7 +54,7 @@ export const QMailMessages = ({ userName, userAddress }) => {
|
||||
|
||||
const [loading, setLoading] = useState(true);
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['core', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
const getMails = useCallback(async () => {
|
||||
try {
|
||||
@ -93,7 +93,7 @@ export const QMailMessages = ({ userName, userAddress }) => {
|
||||
rej(
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
});
|
||||
@ -157,7 +157,7 @@ export const QMailMessages = ({ userName, userAddress }) => {
|
||||
fontSize: '1rem',
|
||||
}}
|
||||
>
|
||||
{t('group:latest_mails', { postProcess: 'capitalizeFirst' })}
|
||||
{t('group:latest_mails', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Typography>
|
||||
|
||||
<MarkEmailUnreadIcon
|
||||
@ -228,7 +228,7 @@ export const QMailMessages = ({ userName, userAddress }) => {
|
||||
}}
|
||||
>
|
||||
{t('group:message.generic.no_display', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
|
@ -87,7 +87,7 @@ export const Settings = ({ open, setOpen, rawWallet }) => {
|
||||
const [checked, setChecked] = useState(false);
|
||||
const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom);
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['core', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
|
||||
setChecked(event.target.checked);
|
||||
@ -136,7 +136,7 @@ export const Settings = ({ open, setOpen, rawWallet }) => {
|
||||
rej(
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
});
|
||||
@ -162,7 +162,7 @@ export const Settings = ({ open, setOpen, rawWallet }) => {
|
||||
<Toolbar>
|
||||
<Typography sx={{ ml: 2, flex: 1 }} variant="h4" component="div">
|
||||
{t('core:general_settings', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -196,7 +196,7 @@ export const Settings = ({ open, setOpen, rawWallet }) => {
|
||||
<LocalNodeSwitch checked={checked} onChange={handleChange} />
|
||||
}
|
||||
label={t('group:action.disable_push_notifications', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
/>
|
||||
{window?.electronAPI && (
|
||||
@ -214,7 +214,7 @@ export const Settings = ({ open, setOpen, rawWallet }) => {
|
||||
/>
|
||||
}
|
||||
label={t('group:action.enable_dev_mode', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
/>
|
||||
)}
|
||||
@ -231,14 +231,14 @@ const ExportPrivateKey = ({ rawWallet }) => {
|
||||
const [privateKey, setPrivateKey] = useState('');
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
const { setOpenSnackGlobal, setInfoSnackCustom } = useContext(MyContext);
|
||||
const { t } = useTranslation(['core', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
const exportPrivateKeyFunc = async () => {
|
||||
try {
|
||||
setInfoSnackCustom({
|
||||
type: 'info',
|
||||
message: t('group:message.generic.descrypt_wallet', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
|
||||
@ -262,10 +262,10 @@ const ExportPrivateKey = ({ rawWallet }) => {
|
||||
message: error?.message
|
||||
? t('group:message.error.decrypt_wallet', {
|
||||
errorMessage: error?.message,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('group:message.error.descrypt_wallet', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
|
||||
@ -283,7 +283,7 @@ const ExportPrivateKey = ({ rawWallet }) => {
|
||||
onClick={() => setIsOpen(true)}
|
||||
>
|
||||
{t('group:action.export_private_key', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
@ -294,7 +294,7 @@ const ExportPrivateKey = ({ rawWallet }) => {
|
||||
>
|
||||
<DialogTitle id="alert-dialog-title">
|
||||
{t('group:action.export_password', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</DialogTitle>
|
||||
|
||||
@ -307,7 +307,7 @@ const ExportPrivateKey = ({ rawWallet }) => {
|
||||
>
|
||||
<DialogContentText id="alert-dialog-description">
|
||||
{t('group:message.generic.secure_place', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</DialogContentText>
|
||||
|
||||
@ -328,7 +328,7 @@ const ExportPrivateKey = ({ rawWallet }) => {
|
||||
setInfoSnackCustom({
|
||||
type: 'success',
|
||||
message: t('group:message.generic.private_key_copied', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
|
||||
@ -336,7 +336,7 @@ const ExportPrivateKey = ({ rawWallet }) => {
|
||||
}}
|
||||
>
|
||||
{t('group:action.copy_private_key', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}{' '}
|
||||
<ContentCopyIcon color="primary" />
|
||||
</Button>
|
||||
@ -353,13 +353,13 @@ const ExportPrivateKey = ({ rawWallet }) => {
|
||||
}}
|
||||
>
|
||||
{t('group:action.cancel', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
<Button variant="contained" onClick={exportPrivateKeyFunc}>
|
||||
{t('group:action.decrypt', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
|
@ -76,9 +76,9 @@ export const ThingsToDoInitial = ({
|
||||
}}
|
||||
>
|
||||
{!isLoaded
|
||||
? t('core:loading.generic', { postProcess: 'capitalizeFirst' })
|
||||
? t('core:loading.generic', { postProcess: 'capitalizeFirstChar' })
|
||||
: t('tutorial:initial.getting_started', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -122,7 +122,7 @@ export const ThingsToDoInitial = ({
|
||||
},
|
||||
}}
|
||||
primary={t('tutorial:initial.6_qort', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
/>
|
||||
|
||||
@ -171,7 +171,7 @@ export const ThingsToDoInitial = ({
|
||||
},
|
||||
}}
|
||||
primary={t('tutorial:initial.register_name', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
/>
|
||||
<ListItemIcon
|
||||
|
@ -61,7 +61,7 @@ export const UserListOfInvites = ({
|
||||
const [invites, setInvites] = useState<any[]>([]);
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['core', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
const [popoverAnchor, setPopoverAnchor] = useState(null); // Track which list item the popover is anchored to
|
||||
const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open
|
||||
const listRef = useRef(null);
|
||||
@ -101,7 +101,7 @@ export const UserListOfInvites = ({
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
action: 'JOIN_GROUP',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -130,7 +130,7 @@ export const UserListOfInvites = ({
|
||||
setInfoSnack({
|
||||
type: 'success',
|
||||
message: t('group:message.success.group_join', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -150,7 +150,7 @@ export const UserListOfInvites = ({
|
||||
message:
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -205,7 +205,7 @@ export const UserListOfInvites = ({
|
||||
>
|
||||
<Typography>
|
||||
{t('core:action.join', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}{' '}
|
||||
{invite?.groupName}
|
||||
</Typography>
|
||||
@ -219,7 +219,7 @@ export const UserListOfInvites = ({
|
||||
}
|
||||
>
|
||||
{t('group:action.join_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
</Box>
|
||||
@ -267,7 +267,7 @@ export const UserListOfInvites = ({
|
||||
>
|
||||
<p>
|
||||
{t('core:list.invite', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</p>
|
||||
|
||||
|
@ -40,7 +40,7 @@ const LanguageSelector = () => {
|
||||
<Tooltip
|
||||
key={currentLang}
|
||||
title={t('core:action.change_language', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
>
|
||||
<button
|
||||
|
@ -45,7 +45,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
const { show: showKey, message } = useModal();
|
||||
const { isShow: isShowNext, onOk, show: showNext } = useModal();
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['core', 'auth', 'group']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
const [info, setInfo] = useState(null);
|
||||
const [names, setNames] = useState({});
|
||||
const [accountInfos, setAccountInfos] = useState({});
|
||||
@ -228,7 +228,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
message:
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
});
|
||||
@ -239,7 +239,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
message:
|
||||
error?.message ||
|
||||
t('core:message.error.minting_account_add', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -278,7 +278,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
message:
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
});
|
||||
@ -289,7 +289,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
message:
|
||||
error?.message ||
|
||||
t('core:message.error.minting_account_remove', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -302,9 +302,8 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
const fee = await getFee('REWARD_SHARE');
|
||||
await show({
|
||||
message: t('core:message.question.perform_transaction', {
|
||||
// TODO move from group into core namespace
|
||||
action: 'REWARD_SHARE',
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
publishFee: fee.fee + ' QORT',
|
||||
});
|
||||
@ -321,10 +320,10 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
...response,
|
||||
type: 'add-rewardShare',
|
||||
label: t('group:message.success.rewardshare_add', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
labelDone: t('group:message.success.rewardshare_add_label', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
done: false,
|
||||
},
|
||||
@ -340,7 +339,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
message:
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
});
|
||||
@ -365,7 +364,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
message:
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
});
|
||||
@ -393,7 +392,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
|
||||
throw new Error(
|
||||
t('group:message.error.timeout_reward', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
};
|
||||
@ -430,7 +429,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
message:
|
||||
error?.message ||
|
||||
t('group:message.error.unable_minting', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -470,10 +469,10 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
...response,
|
||||
type: 'remove-rewardShare',
|
||||
label: t('group:message.success.rewardshare_remove', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
labelDone: t('group:message.success.rewardshare_remove_label', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
done: false,
|
||||
},
|
||||
@ -488,64 +487,13 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
message:
|
||||
error.message ||
|
||||
t('core:message.error.generic', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
});
|
||||
});
|
||||
}, []);
|
||||
|
||||
// TODO unused functions. Remove??
|
||||
|
||||
// const handleRemoveRewardShare = async (rewardShare) => {
|
||||
// try {
|
||||
// setIsLoading(true);
|
||||
|
||||
// const privateRewardShare = await removeRewardShare(rewardShare);
|
||||
// } catch (error) {
|
||||
// setInfo({
|
||||
// type: 'error',
|
||||
// message: error?.message || 'Unable to remove reward share',
|
||||
// });
|
||||
// setOpenSnack(true);
|
||||
// } finally {
|
||||
// setIsLoading(false);
|
||||
// }
|
||||
// };
|
||||
|
||||
// const createRewardShareForPotentialMinter = async (receiver) => {
|
||||
// try {
|
||||
// setIsLoading(true);
|
||||
// const confirmReceiver = await getNameOrAddress(receiver);
|
||||
// if (confirmReceiver.error)
|
||||
// throw new Error('Invalid receiver address or name');
|
||||
// const isInMinterGroup = await checkIfMinterGroup(confirmReceiver);
|
||||
// if (!isInMinterGroup) throw new Error('Account not in Minter Group');
|
||||
// const publicKey = await getPublicKeyFromAddress(confirmReceiver);
|
||||
// const findRewardShare = rewardShares?.find(
|
||||
// (item) =>
|
||||
// item?.recipient === confirmReceiver &&
|
||||
// item?.mintingAccount === myAddress
|
||||
// );
|
||||
// if (findRewardShare) {
|
||||
// const privateRewardShare = await getRewardSharePrivateKey(publicKey);
|
||||
// setRewardsharekey(privateRewardShare);
|
||||
// } else {
|
||||
// await createRewardShare(publicKey, confirmReceiver);
|
||||
// const privateRewardShare = await getRewardSharePrivateKey(publicKey);
|
||||
// setRewardsharekey(privateRewardShare);
|
||||
// }
|
||||
// } catch (error) {
|
||||
// setInfo({
|
||||
// type: 'error',
|
||||
// message: error?.message || 'Unable to create reward share',
|
||||
// });
|
||||
// setOpenSnack(true);
|
||||
// } finally {
|
||||
// setIsLoading(false);
|
||||
// }
|
||||
// };
|
||||
|
||||
useEffect(() => {
|
||||
getNodeInfos();
|
||||
getMintingAccounts();
|
||||
@ -621,7 +569,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
>
|
||||
<DialogTitle id="alert-dialog-title">
|
||||
{t('group:message.generic.manage_minting', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</DialogTitle>
|
||||
|
||||
@ -674,28 +622,28 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
>
|
||||
<Typography>
|
||||
{t('auth:account.account_one', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
: {handleNames(accountInfo?.address)}
|
||||
</Typography>
|
||||
|
||||
<Typography>
|
||||
{t('core:level', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
: {accountInfo?.level}
|
||||
</Typography>
|
||||
|
||||
<Typography>
|
||||
{t('group:message.generic.next_level', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}{' '}
|
||||
{_levelUpBlocks()}
|
||||
</Typography>
|
||||
|
||||
<Typography>
|
||||
{t('group:message.generic.node_minting', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}{' '}
|
||||
{nodeInfos?.isMintingPossible?.toString()}
|
||||
</Typography>
|
||||
@ -735,14 +683,14 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:action.start_minting', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
{mintingAccounts?.length > 1 && (
|
||||
<Typography>
|
||||
{t('group:message.generic.minting_keys_per_node', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -754,7 +702,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
{mintingAccounts?.length > 0 && (
|
||||
<Typography>
|
||||
{t('group:message.generic.node_minting_account', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -774,7 +722,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
>
|
||||
<Typography>
|
||||
{t('group:message.generic.node_minting_key', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -793,7 +741,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
>
|
||||
<Typography>
|
||||
{t('group:message.generic.minting_account', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}{' '}
|
||||
{handleNames(acct?.mintingAccount)}
|
||||
</Typography>
|
||||
@ -819,7 +767,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
variant="contained"
|
||||
>
|
||||
{t('group:action.remove_minting_account', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
@ -832,7 +780,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
{mintingAccounts?.length > 1 && (
|
||||
<Typography>
|
||||
{t('group:message.generic.minting_keys_per_node_different', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -858,13 +806,13 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
>
|
||||
<Typography>
|
||||
{t('group:message.generic.minter_group', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
<Typography>
|
||||
{t('group:message.generic.mintership_app', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -894,7 +842,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
variant="contained"
|
||||
>
|
||||
{t('group:action.visit_q_mintership', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</Box>
|
||||
@ -915,14 +863,14 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
{!isShowNext && (
|
||||
<Typography>
|
||||
{t('group:message.success.rewardshare_creation', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
{isShowNext && (
|
||||
<Typography>
|
||||
{t('group:message.success.rewardshare_confirmed', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
)}
|
||||
@ -935,7 +883,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
onClick={onOk}
|
||||
autoFocus
|
||||
>
|
||||
{t('core:page.next', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:page.next', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
</Dialog>
|
||||
@ -948,7 +896,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
||||
variant="contained"
|
||||
onClick={() => setIsOpenMinting(false)}
|
||||
>
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { Box, ButtonBase, Typography } from '@mui/material';
|
||||
import { Spacer } from '../../common/Spacer';
|
||||
import { Spacer } from '../common/Spacer';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
export const NewUsersCTA = ({ balance }) => {
|
||||
const { t } = useTranslation(['core']);
|
||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
||||
|
||||
if (balance === undefined || +balance > 0) return null;
|
||||
|
||||
@ -37,14 +37,14 @@ export const NewUsersCTA = ({ balance }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:message.question.new_user', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
<Spacer height="20px" />
|
||||
|
||||
<Typography>
|
||||
{t('core:message_us', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:message_us', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Typography>
|
||||
|
||||
<Spacer height="20px" />
|
@ -1,4 +1,5 @@
|
||||
import React, {
|
||||
import {
|
||||
Fragment,
|
||||
useCallback,
|
||||
useContext,
|
||||
useEffect,
|
||||
@ -25,12 +26,12 @@ import {
|
||||
} from '@mui/material';
|
||||
import Logo1Dark from '../assets/svgs/Logo1Dark.svg';
|
||||
import HelpIcon from '@mui/icons-material/Help';
|
||||
import { CustomizedSnackbars } from '../components/Snackbar/Snackbar';
|
||||
import { CustomizedSnackbars } from './Snackbar/Snackbar';
|
||||
import { cleanUrl, gateways } from '../background';
|
||||
import Tooltip, { TooltipProps, tooltipClasses } from '@mui/material/Tooltip';
|
||||
import ThemeSelector from '../components/Theme/ThemeSelector';
|
||||
import ThemeSelector from './Theme/ThemeSelector';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import LanguageSelector from '../components/Language/LanguageSelector';
|
||||
import LanguageSelector from './Language/LanguageSelector';
|
||||
import { MyContext } from '../App';
|
||||
|
||||
export const manifestData = {
|
||||
@ -68,23 +69,18 @@ export const NotAuthenticated = ({
|
||||
}) => {
|
||||
const [isValidApiKey, setIsValidApiKey] = useState<boolean | null>(null);
|
||||
const [hasLocalNode, setHasLocalNode] = useState<boolean | null>(null);
|
||||
// const [useLocalNode, setUseLocalNode] = useState(false);
|
||||
const [openSnack, setOpenSnack] = React.useState(false);
|
||||
const [infoSnack, setInfoSnack] = React.useState(null);
|
||||
const [show, setShow] = React.useState(false);
|
||||
const [mode, setMode] = React.useState('list');
|
||||
const [customNodes, setCustomNodes] = React.useState(null);
|
||||
// const [currentNode, setCurrentNode] = React.useState({
|
||||
// url: "http://127.0.0.1:12391",
|
||||
// });
|
||||
const [importedApiKey, setImportedApiKey] = React.useState(null);
|
||||
const [openSnack, setOpenSnack] = useState(false);
|
||||
const [infoSnack, setInfoSnack] = useState(null);
|
||||
const [show, setShow] = useState(false);
|
||||
const [mode, setMode] = useState('list');
|
||||
const [customNodes, setCustomNodes] = useState(null);
|
||||
const [importedApiKey, setImportedApiKey] = useState(null);
|
||||
//add and edit states
|
||||
const [url, setUrl] = React.useState('https://');
|
||||
const [customApikey, setCustomApiKey] = React.useState('');
|
||||
const [url, setUrl] = useState('https://');
|
||||
const [customApikey, setCustomApiKey] = useState('');
|
||||
const [showSelectApiKey, setShowSelectApiKey] = useState(false);
|
||||
const [enteredApiKey, setEnteredApiKey] = useState('');
|
||||
const [customNodeToSaveIndex, setCustomNodeToSaveIndex] =
|
||||
React.useState(null);
|
||||
const [customNodeToSaveIndex, setCustomNodeToSaveIndex] = useState(null);
|
||||
const { showTutorial, hasSeenGettingStarted } = useContext(MyContext);
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation(['auth', 'core']);
|
||||
@ -352,7 +348,7 @@ export const NotAuthenticated = ({
|
||||
console.error(
|
||||
'Failed to set API key:',
|
||||
error.message ||
|
||||
t('core:error', { postProcess: 'capitalizeFirst' })
|
||||
t('core:error', { postProcess: 'capitalizeFirstChar' })
|
||||
);
|
||||
});
|
||||
} else {
|
||||
@ -362,7 +358,7 @@ export const NotAuthenticated = ({
|
||||
setInfoSnack({
|
||||
type: 'error',
|
||||
message: t('auth:apikey.select_valid', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -388,7 +384,7 @@ export const NotAuthenticated = ({
|
||||
'Failed to set API key:',
|
||||
error.message ||
|
||||
t('core:error', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
);
|
||||
});
|
||||
@ -400,7 +396,7 @@ export const NotAuthenticated = ({
|
||||
message:
|
||||
error?.message ||
|
||||
t('auth:apikey.select_valid', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
}),
|
||||
});
|
||||
setOpenSnack(true);
|
||||
@ -482,7 +478,7 @@ export const NotAuthenticated = ({
|
||||
fontSize: '18px',
|
||||
}}
|
||||
>
|
||||
{t('auth:welcome', { postProcess: 'capitalizeFirst' })}
|
||||
{t('auth:welcome', { postProcess: 'capitalizeFirstChar' })}
|
||||
<TextSpan
|
||||
sx={{
|
||||
fontSize: '18px',
|
||||
@ -505,20 +501,24 @@ export const NotAuthenticated = ({
|
||||
disableHoverListener={hasSeenGettingStarted === true}
|
||||
placement="left"
|
||||
title={
|
||||
<React.Fragment>
|
||||
<Fragment>
|
||||
<Typography
|
||||
color="inherit"
|
||||
sx={{
|
||||
fontSize: '16px',
|
||||
}}
|
||||
>
|
||||
{t('auth:tips.digital_id', { postProcess: 'capitalizeFirst' })}
|
||||
{t('auth:tips.digital_id', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</React.Fragment>
|
||||
</Fragment>
|
||||
}
|
||||
>
|
||||
<CustomButton onClick={() => setExtstate('wallets')}>
|
||||
{t('auth:account.account_many', { postProcess: 'capitalizeFirst' })}
|
||||
{t('auth:account.account_many', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</HtmlTooltip>
|
||||
</Box>
|
||||
@ -535,7 +535,7 @@ export const NotAuthenticated = ({
|
||||
disableHoverListener={hasSeenGettingStarted === true}
|
||||
placement="right"
|
||||
title={
|
||||
<React.Fragment>
|
||||
<Fragment>
|
||||
<Typography
|
||||
color="inherit"
|
||||
sx={{
|
||||
@ -543,7 +543,9 @@ export const NotAuthenticated = ({
|
||||
fontSize: '18px',
|
||||
}}
|
||||
>
|
||||
{t('auth:tips.new_users', { postProcess: 'capitalizeFirst' })}
|
||||
{t('auth:tips.new_users', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
<Spacer height="10px" />
|
||||
<Typography
|
||||
@ -552,9 +554,11 @@ export const NotAuthenticated = ({
|
||||
fontSize: '16px',
|
||||
}}
|
||||
>
|
||||
{t('auth:tips.new_account', { postProcess: 'capitalizeFirst' })}
|
||||
{t('auth:tips.new_account', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</React.Fragment>
|
||||
</Fragment>
|
||||
}
|
||||
>
|
||||
<CustomButton
|
||||
@ -574,7 +578,7 @@ export const NotAuthenticated = ({
|
||||
}}
|
||||
>
|
||||
{t('auth:action.create_account', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</CustomButton>
|
||||
</HtmlTooltip>
|
||||
@ -588,7 +592,7 @@ export const NotAuthenticated = ({
|
||||
visibility: !useLocalNode && 'hidden',
|
||||
}}
|
||||
>
|
||||
{t('auth:node.using', { postProcess: 'capitalizeFirst' })}:{' '}
|
||||
{t('auth:node.using', { postProcess: 'capitalizeFirstChar' })}:{' '}
|
||||
{currentNode?.url}
|
||||
</Typography>
|
||||
|
||||
@ -616,7 +620,7 @@ export const NotAuthenticated = ({
|
||||
textDecoration: 'underline',
|
||||
}}
|
||||
>
|
||||
{t('auth:advanced_users', { postProcess: 'capitalizeFirst' })}
|
||||
{t('auth:advanced_users', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Typography>
|
||||
<Box
|
||||
sx={{
|
||||
@ -666,10 +670,10 @@ export const NotAuthenticated = ({
|
||||
label={
|
||||
isLocal
|
||||
? t('auth:node.use_local', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('auth:node.use_custom', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
}
|
||||
/>
|
||||
@ -684,10 +688,10 @@ export const NotAuthenticated = ({
|
||||
>
|
||||
{apiKey
|
||||
? t('auth:node.use_local', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})
|
||||
: t('auth:apikey.import', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
<Typography
|
||||
@ -696,8 +700,8 @@ export const NotAuthenticated = ({
|
||||
visibility: importedApiKey ? 'visible' : 'hidden',
|
||||
}}
|
||||
>
|
||||
{t('auth:apikey.key', { postProcess: 'capitalizeFirst' })}:{' '}
|
||||
{importedApiKey}
|
||||
{t('auth:apikey.key', { postProcess: 'capitalizeFirstChar' })}
|
||||
: {importedApiKey}
|
||||
</Typography>
|
||||
</>
|
||||
)}
|
||||
@ -709,7 +713,7 @@ export const NotAuthenticated = ({
|
||||
variant="contained"
|
||||
component="label"
|
||||
>
|
||||
{t('auth:node.choose', { postProcess: 'capitalizeFirst' })}
|
||||
{t('auth:node.choose', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
</>
|
||||
<Typography
|
||||
@ -718,7 +722,7 @@ export const NotAuthenticated = ({
|
||||
fontSize: '12px',
|
||||
}}
|
||||
>
|
||||
{t('auth:build_version', { postProcess: 'capitalizeFirst' })}:
|
||||
{t('auth:build_version', { postProcess: 'capitalizeFirstChar' })}:
|
||||
{manifestData?.version}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -739,7 +743,8 @@ export const NotAuthenticated = ({
|
||||
>
|
||||
<DialogTitle id="alert-dialog-title">
|
||||
{' '}
|
||||
{t('auth:node.custom_many', { postProcess: 'capitalizeFirst' })}:
|
||||
{t('auth:node.custom_many', { postProcess: 'capitalizeFirstChar' })}
|
||||
:
|
||||
</DialogTitle>
|
||||
<DialogContent>
|
||||
<Box
|
||||
@ -810,7 +815,7 @@ export const NotAuthenticated = ({
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:action.choose', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</Box>
|
||||
@ -871,7 +876,7 @@ export const NotAuthenticated = ({
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:action.choose', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
@ -886,7 +891,7 @@ export const NotAuthenticated = ({
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:action.edit', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
@ -901,7 +906,7 @@ export const NotAuthenticated = ({
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:remove', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</Box>
|
||||
@ -941,7 +946,7 @@ export const NotAuthenticated = ({
|
||||
<DialogActions>
|
||||
{mode === 'list' && (
|
||||
<Button variant="contained" onClick={addCustomNode}>
|
||||
{t('core:action.add', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.add', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
)}
|
||||
|
||||
@ -954,7 +959,9 @@ export const NotAuthenticated = ({
|
||||
}}
|
||||
autoFocus
|
||||
>
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.close', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</>
|
||||
)}
|
||||
@ -969,7 +976,7 @@ export const NotAuthenticated = ({
|
||||
}}
|
||||
>
|
||||
{t('auth:action.return_to_list', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
|
||||
@ -979,7 +986,7 @@ export const NotAuthenticated = ({
|
||||
onClick={() => saveCustomNodes(customNodes)}
|
||||
autoFocus
|
||||
>
|
||||
{t('core:save', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:save', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
</>
|
||||
)}
|
||||
@ -994,7 +1001,7 @@ export const NotAuthenticated = ({
|
||||
aria-describedby="alert-dialog-description"
|
||||
>
|
||||
<DialogTitle id="alert-dialog-title">
|
||||
{t('auth:apikey.enter', { postProcess: 'capitalizeFirst' })}
|
||||
{t('auth:apikey.enter', { postProcess: 'capitalizeFirstChar' })}
|
||||
</DialogTitle>
|
||||
<DialogContent>
|
||||
<Box
|
||||
@ -1014,7 +1021,7 @@ export const NotAuthenticated = ({
|
||||
component="label"
|
||||
>
|
||||
{t('auth:apikey.alternative', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
<input
|
||||
type="file"
|
||||
@ -1070,7 +1077,7 @@ export const NotAuthenticated = ({
|
||||
}}
|
||||
autoFocus
|
||||
>
|
||||
{t('core:save', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:save', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
@ -1080,7 +1087,7 @@ export const NotAuthenticated = ({
|
||||
setShowSelectApiKey(false);
|
||||
}}
|
||||
>
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
</Dialog>
|
@ -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',
|
||||
})}
|
||||
</span>
|
||||
}
|
||||
|
@ -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' })}
|
||||
</Typography>
|
||||
|
||||
{!ltcPerQort ? (
|
||||
@ -184,7 +184,7 @@ export const QortPrice = () => {
|
||||
fontWeight: 'bold',
|
||||
}}
|
||||
>
|
||||
{t('core:supply', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:supply', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Typography>
|
||||
|
||||
{!supply ? (
|
||||
@ -238,7 +238,7 @@ export const QortPrice = () => {
|
||||
fontWeight: 'bold',
|
||||
}}
|
||||
>
|
||||
{t('core:last_height', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:last_height', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Typography>
|
||||
|
||||
{!lastBlock?.height ? (
|
@ -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 }) => {
|
||||
|
@ -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 = ({
|
||||
}}
|
||||
>
|
||||
<Label>
|
||||
{t('core:action.choose_name', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.choose_name', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Label>
|
||||
<TextField
|
||||
autoComplete="off"
|
||||
@ -255,7 +257,7 @@ export const RegisterName = ({
|
||||
{t('core:message.generic.name_registration', {
|
||||
balance: balance ?? 0,
|
||||
fee: { nameFee },
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -282,7 +284,7 @@ export const RegisterName = ({
|
||||
<Typography>
|
||||
{t('core:message.generic.name_available', {
|
||||
name: registerNameValue,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -304,7 +306,7 @@ export const RegisterName = ({
|
||||
<Typography>
|
||||
{t('core:message.generic.name_unavailable', {
|
||||
name: registerNameValue,
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -322,7 +324,7 @@ export const RegisterName = ({
|
||||
|
||||
<Typography>
|
||||
{t('core:message.generic.name_checking', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -336,7 +338,7 @@ export const RegisterName = ({
|
||||
}}
|
||||
>
|
||||
{t('core:message.generic.name_benefits', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -354,7 +356,7 @@ export const RegisterName = ({
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={t('core:message.generic.publish_data', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
/>
|
||||
</ListItem>
|
||||
@ -369,7 +371,7 @@ export const RegisterName = ({
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={t('core:message.generic.secure_ownership', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
/>
|
||||
</ListItem>
|
||||
@ -386,7 +388,7 @@ export const RegisterName = ({
|
||||
setRegisterNameValue('');
|
||||
}}
|
||||
>
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
@ -401,7 +403,9 @@ export const RegisterName = ({
|
||||
onClick={registerName}
|
||||
autoFocus
|
||||
>
|
||||
{t('core:action.register_name', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.register_name', {
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
</Dialog>
|
||||
|
@ -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 }) => {
|
||||
<IconWrapper
|
||||
disableWidth={disableWidth}
|
||||
label={t('core:action.save', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
selected={false}
|
||||
color={
|
||||
@ -307,7 +307,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:message.generic.settings', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>{' '}
|
||||
<Spacer height="40px" />
|
||||
@ -336,7 +336,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:message.generic.qdn', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Button>
|
||||
</Box>
|
||||
@ -367,7 +367,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:message.generic.register_name', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -388,7 +388,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:message.generic.unsaved_changes', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
|
||||
@ -412,7 +412,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:action.save_qdn', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
<Spacer height="20px" />
|
||||
@ -425,7 +425,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:message.question.reset_qdn', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
<Spacer height="10px" />
|
||||
@ -447,7 +447,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:message.generic.revert_qdn', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
</>
|
||||
@ -462,7 +462,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
||||
>
|
||||
{' '}
|
||||
{t('core:message.question.reset_pinned', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
<Spacer height="10px" />
|
||||
@ -472,7 +472,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
||||
variant="contained"
|
||||
>
|
||||
{t('core:message.generic.revert_default', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
</>
|
||||
@ -496,7 +496,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:message.question.overwrite_changes', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
<Spacer height="10px" />
|
||||
@ -518,7 +518,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:message.generic.overwrite_qdn', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</LoadingButton>
|
||||
</Box>
|
||||
@ -538,7 +538,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:message.generic.no_pinned_changes', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</Typography>
|
||||
</Box>
|
||||
@ -595,7 +595,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:action.import', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</ButtonBase>
|
||||
|
||||
@ -620,7 +620,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
||||
}}
|
||||
>
|
||||
{t('core:action.export', {
|
||||
postProcess: 'capitalizeFirst',
|
||||
postProcess: 'capitalizeFirstChar',
|
||||
})}
|
||||
</ButtonBase>
|
||||
</Box>
|
||||
|
@ -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',
|
||||
})
|
||||
}
|
||||
>
|
||||
|
@ -91,7 +91,7 @@ export const Tutorials = () => {
|
||||
</DialogContent>
|
||||
<DialogActions>
|
||||
<Button variant="contained" onClick={handleClose}>
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
</Dialog>
|
||||
@ -138,7 +138,7 @@ export const Tutorials = () => {
|
||||
|
||||
<DialogActions>
|
||||
<Button variant="contained" onClick={handleClose}>
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirst' })}
|
||||
{t('core:action.close', { postProcess: 'capitalizeFirstChar' })}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
</Dialog>
|
||||
|
@ -1 +0,0 @@
|
||||
export const PUBLIC_NOTIFICATION_CODE_FIRST_SECRET_KEY = "4001"
|
@ -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
|
||||
|
@ -1,5 +0,0 @@
|
||||
// Qortal 8 decimals
|
||||
export const QORT_DECIMALS = 1e8
|
||||
|
||||
// Q for Qortal
|
||||
export const ADDRESS_VERSION = 58
|
@ -1 +0,0 @@
|
||||
export const RESOURCE_TYPE_NUMBER_GROUP_CHAT_REACTIONS = 102
|
@ -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 = () => {
|
@ -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',
|
@ -1,5 +1,5 @@
|
||||
import { useCallback, useRef } from 'react';
|
||||
import { getBaseApiReact } from '../../App';
|
||||
import { getBaseApiReact } from '../App';
|
||||
|
||||
export const useHandleUserInfo = () => {
|
||||
const userInfoRef = useRef({});
|
@ -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) {
|
@ -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';
|
||||
|
@ -5,7 +5,7 @@ import {
|
||||
settingsLocalLastUpdatedAtom,
|
||||
settingsQDNLastUpdatedAtom,
|
||||
sortablePinnedAppsAtom,
|
||||
} from './atoms/global';
|
||||
} from '../atoms/global';
|
||||
import { useSetAtom } from 'jotai';
|
||||
|
||||
function fetchFromLocalStorage(key) {
|
@ -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',
|
||||
|
@ -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": {
|
||||
|
@ -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 <br/><italic>{{hostname}}</italic> <br/><span>is requesting {{count}} buy order</span>",
|
||||
"buy_order_request_other": "the Application <br/><italic>{{hostname}}</italic> <br/><span>is requesting {{count}} buy orders</span>",
|
||||
"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 <br/><italic>{{hostname}}</italic> <br/><span>is requesting a payment</span>",
|
||||
"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",
|
||||
|
@ -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.",
|
||||
|
@ -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"
|
||||
|
32
src/i18n/processors.ts
Normal file
32
src/i18n/processors.ts
Normal file
@ -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;
|
||||
},
|
||||
};
|
@ -1,5 +1,5 @@
|
||||
import { gateways, getApiKeyFromStorage } from './background';
|
||||
import { listOfAllQortalRequests } from './components/Apps/useQortalMessageListener';
|
||||
import { listOfAllQortalRequests } from './hooks/useQortalMessageListener';
|
||||
import {
|
||||
addForeignServer,
|
||||
addGroupAdminRequest,
|
||||
|
@ -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 {
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user