({
padding: 8,
'& .MuiSwitch-track': {
@@ -51,11 +44,11 @@ const LocalNodeSwitch = styled(Switch)(({ theme }) => ({
},
}));
-const Transition = React.forwardRef(function Transition(
+const Transition = forwardRef(function Transition(
props: TransitionProps & {
- children: React.ReactElement;
+ children: ReactElement;
},
- ref: React.Ref
+ ref: Ref
) {
return ;
});
@@ -118,12 +111,12 @@ export const Settings = ({ address, open, setOpen }) => {
}
};
- React.useEffect(() => {
+ useEffect(() => {
getUserSettings();
}, []);
return (
-
+
-
+
);
};
diff --git a/src/components/Group/ThingsToDoInitial.tsx b/src/components/Group/ThingsToDoInitial.tsx
index 6c315cd..84c806b 100644
--- a/src/components/Group/ThingsToDoInitial.tsx
+++ b/src/components/Group/ThingsToDoInitial.tsx
@@ -141,21 +141,6 @@ export const ThingsToDoInitial = ({
outline: '1px solid rgba(9, 182, 232, 1)',
}}
/>
- {/* */}
@@ -163,15 +148,6 @@ export const ThingsToDoInitial = ({
sx={{
marginBottom: '20px',
}}
- // secondaryAction={
- //
- //
- //
- // }
disablePadding
>
- {/*
-
-
-
-
-
-
-
- */}
)}
diff --git a/src/components/Group/WalletsAppWrapper.tsx b/src/components/Group/WalletsAppWrapper.tsx
index 111e216..c569425 100644
--- a/src/components/Group/WalletsAppWrapper.tsx
+++ b/src/components/Group/WalletsAppWrapper.tsx
@@ -88,7 +88,7 @@ export const WalletsAppWrapper = () => {
justifyContent: 'space-between',
}}
>
- Q-Wallets // TODO translate
+ Q-Wallets
{
directs: sortedDirects,
})
.catch((error) => {
- // TODO translate
console.error(
'Failed to handle active group data from socket:',
error.message || 'An error occurred'
diff --git a/src/components/Group/useBlockUsers.tsx b/src/components/Group/useBlockUsers.tsx
index 178c358..4165260 100644
--- a/src/components/Group/useBlockUsers.tsx
+++ b/src/components/Group/useBlockUsers.tsx
@@ -17,7 +17,7 @@ export const useBlockedAddresses = () => {
if (userBlockedRef.current[address]) return true;
return false;
} catch (error) {
- //error
+ console.log(error);
}
}, []);
@@ -42,10 +42,13 @@ export const useBlockedAddresses = () => {
console.error('Failed qortalRequest', error);
});
});
+
const blockedUsers = {};
+
response?.forEach((item) => {
blockedUsers[item] = true;
});
+
userBlockedRef.current = blockedUsers;
const response2 = await new Promise((res, rej) => {
@@ -66,10 +69,13 @@ export const useBlockedAddresses = () => {
console.error('Failed qortalRequest', error);
});
});
+
const blockedUsers2 = {};
+
response2?.forEach((item) => {
blockedUsers2[item] = true;
});
+
userNamesBlockedRef.current = blockedUsers2;
} catch (error) {
console.error(error);
diff --git a/src/components/Group/useHandleUserInfo.tsx b/src/components/Group/useHandleUserInfo.tsx
index 622e737..da7ee13 100644
--- a/src/components/Group/useHandleUserInfo.tsx
+++ b/src/components/Group/useHandleUserInfo.tsx
@@ -22,7 +22,7 @@ export const useHandleUserInfo = () => {
};
return data?.level;
} catch (error) {
- //error
+ console.log(error);
}
}, []);
diff --git a/src/components/Home/NewUsersCTA.tsx b/src/components/Home/NewUsersCTA.tsx
index 30dea8a..44666d6 100644
--- a/src/components/Home/NewUsersCTA.tsx
+++ b/src/components/Home/NewUsersCTA.tsx
@@ -1,46 +1,52 @@
import { Box, ButtonBase, Typography } from '@mui/material';
import { Spacer } from '../../common/Spacer';
+import { useTranslation } from 'react-i18next';
export const NewUsersCTA = ({ balance }) => {
+ const { t } = useTranslation(['core']);
+
if (balance === undefined || +balance > 0) return null;
+
return (
- Are you a new user?
- {' '}
- // TODO translate
-
-
- Please message us on Telegram or Discord if you need 4 QORT to start
- chatting without any limitations
+ {t('core:new_user', { postProcess: 'capitalize' })}
+
+
+
+ {t('core:message_us', { postProcess: 'capitalize' })}
+
+
+
+
{
>
Telegram
+
{
+ const { i18n, t } = useTranslation(['core']);
+ const [showSelect, setShowSelect] = useState(false);
+ const theme = useTheme();
+ const selectorRef = useRef(null);
+
+ const handleChange = (e) => {
+ const newLang = e.target.value;
+ i18n.changeLanguage(newLang);
+ setShowSelect(false);
+ };
+
+ const currentLang = i18n.language;
+ const { name, flag } =
+ supportedLanguages[currentLang] || supportedLanguages['en'];
+
+ // Detect clicks outside the component
+ useEffect(() => {
+ const handleClickOutside = (event) => {
+ if (selectorRef.current && !selectorRef.current.contains(event.target)) {
+ setShowSelect(false);
+ }
+ };
+
+ document.addEventListener('mousedown', handleClickOutside);
+ return () => {
+ document.removeEventListener('mousedown', handleClickOutside);
+ };
+ }, []);
+
+ return (
+
+
+ {showSelect ? (
+
+ ) : (
+
+ )}
+
+
+ );
+};
+
+export default LanguageSelector;
diff --git a/src/components/Minting/Minting.tsx b/src/components/Minting/Minting.tsx
index 7187986..4c98fa1 100644
--- a/src/components/Minting/Minting.tsx
+++ b/src/components/Minting/Minting.tsx
@@ -265,7 +265,7 @@ export const Minting = ({
rej({ message: response.error });
})
.catch((error) => {
- rej({ message: error.message || 'An error occurred' }); //TODO translate
+ rej({ message: error.message || 'An error occurred' });
});
});
} catch (error) {
@@ -280,7 +280,7 @@ export const Minting = ({
}, []);
const createRewardShare = useCallback(async (publicKey, recipient) => {
- const fee = await getFee('REWARD_SHARE');
+ const fee = await getFee('REWARD_SHARE'); // TODO translate
await show({
message: 'Would you like to perform an REWARD_SHARE transaction?',
publishFee: fee.fee + ' QORT',
diff --git a/src/components/QMailStatus.tsx b/src/components/QMailStatus.tsx
index dd6f9be..b733261 100644
--- a/src/components/QMailStatus.tsx
+++ b/src/components/QMailStatus.tsx
@@ -62,6 +62,7 @@ export const QMailStatus = () => {
color: theme.palette.text.primary,
fontSize: '14px',
fontWeight: 700,
+ textTransform: 'uppercase',
}}
>
{t('core:q_mail', {
diff --git a/src/components/Save/Save.tsx b/src/components/Save/Save.tsx
index eef881e..413b9a5 100644
--- a/src/components/Save/Save.tsx
+++ b/src/components/Save/Save.tsx
@@ -176,7 +176,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
.catch((error) => {
rej(
error.message ||
- t('core:result.error.generic', { postProcess: 'capitalize' })
+ t('core:message.error.generic', { postProcess: 'capitalize' })
);
});
});
@@ -185,7 +185,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
setSettingsQdnLastUpdated(Date.now());
setInfoSnack({
type: 'success',
- message: t('core:result.success.publish_qdn', {
+ message: t('core:message.success.publish_qdn', {
postProcess: 'capitalize',
}),
});
@@ -198,7 +198,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
type: 'error',
message:
error?.message ||
- t('core:result.error.save_qdn', {
+ t('core:message.error.save_qdn', {
postProcess: 'capitalize',
}),
});
@@ -591,7 +591,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
}
}}
>
- {t('core:import', {
+ {t('core:action.import', {
postProcess: 'capitalize',
})}
@@ -616,7 +616,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
}
}}
>
- {t('core:export', {
+ {t('core:action.export', {
postProcess: 'capitalize',
})}
diff --git a/src/components/Theme/ThemeSelector.tsx b/src/components/Theme/ThemeSelector.tsx
index 42b75c0..bab403c 100644
--- a/src/components/Theme/ThemeSelector.tsx
+++ b/src/components/Theme/ThemeSelector.tsx
@@ -6,6 +6,7 @@ import { useTranslation } from 'react-i18next';
const ThemeSelector = () => {
const { t } = useTranslation(['core']);
+
const { themeMode, toggleTheme } = useThemeContext();
return (
@@ -14,7 +15,7 @@ const ThemeSelector = () => {
bottom: '1%',
display: 'flex',
gap: '12px',
- left: '1.5vh',
+ left: '1.2vh',
position: 'absolute',
}}
>
diff --git a/src/components/Tutorials/Tutorials.tsx b/src/components/Tutorials/Tutorials.tsx
index 06274e7..522324f 100644
--- a/src/components/Tutorials/Tutorials.tsx
+++ b/src/components/Tutorials/Tutorials.tsx
@@ -91,7 +91,7 @@ export const Tutorials = () => {
@@ -138,7 +138,7 @@ export const Tutorials = () => {
diff --git a/src/useQortalGetSaveSettings.tsx b/src/useQortalGetSaveSettings.tsx
index 9e31853..c74f1a2 100644
--- a/src/useQortalGetSaveSettings.tsx
+++ b/src/useQortalGetSaveSettings.tsx
@@ -1,4 +1,4 @@
-import React, { useCallback, useEffect } from 'react';
+import { useCallback, useEffect } from 'react';
import { useRecoilState, useSetRecoilState } from 'recoil';
import {
canSaveSettingToQdnAtom,
@@ -46,6 +46,7 @@ const getPublishRecord = async (myName) => {
return { hasPublishRecord: false };
};
+
const getPublish = async (myName) => {
try {
let data;
@@ -57,7 +58,6 @@ const getPublish = async (myName) => {
if (!data) throw new Error('Unable to fetch publish');
const decryptedKey: any = await decryptResource(data);
-
const dataint8Array = base64ToUint8Array(decryptedKey.data);
const decryptedKeyToObject = uint8ArrayToObject(dataint8Array);
return decryptedKeyToObject;
@@ -112,6 +112,7 @@ export const useQortalGetSaveSettings = (myName, isAuthenticated) => {
},
[]
);
+
useEffect(() => {
if (
!myName ||
diff --git a/src/useRetrieveDataLocalStorage.tsx b/src/useRetrieveDataLocalStorage.tsx
index fafcd5c..41c2b8e 100644
--- a/src/useRetrieveDataLocalStorage.tsx
+++ b/src/useRetrieveDataLocalStorage.tsx
@@ -1,55 +1,69 @@
-import React, { useCallback, useEffect } from 'react'
+import { useCallback, useEffect } from 'react';
import { useSetRecoilState } from 'recoil';
-import { isUsingImportExportSettingsAtom, oldPinnedAppsAtom, settingsLocalLastUpdatedAtom, settingsQDNLastUpdatedAtom, sortablePinnedAppsAtom } from './atoms/global';
+import {
+ isUsingImportExportSettingsAtom,
+ oldPinnedAppsAtom,
+ settingsLocalLastUpdatedAtom,
+ settingsQDNLastUpdatedAtom,
+ sortablePinnedAppsAtom,
+} from './atoms/global';
function fetchFromLocalStorage(key) {
- try {
- const serializedValue = localStorage.getItem(key);
- if (serializedValue === null) {
- return null;
- }
- return JSON.parse(serializedValue);
- } catch (error) {
- console.error('Error fetching from localStorage:', error);
- return null;
+ try {
+ const serializedValue = localStorage.getItem(key);
+ if (serializedValue === null) {
+ return null;
}
+ return JSON.parse(serializedValue);
+ } catch (error) {
+ console.error('Error fetching from localStorage:', error);
+ return null;
+ }
}
export const useRetrieveDataLocalStorage = (address) => {
- const setSortablePinnedApps = useSetRecoilState(sortablePinnedAppsAtom);
- const setSettingsLocalLastUpdated = useSetRecoilState(settingsLocalLastUpdatedAtom);
- const setIsUsingImportExportSettings = useSetRecoilState(isUsingImportExportSettingsAtom)
- const setSettingsQDNLastUpdated = useSetRecoilState(settingsQDNLastUpdatedAtom);
- const setOldPinnedApps = useSetRecoilState(oldPinnedAppsAtom)
+ const setSortablePinnedApps = useSetRecoilState(sortablePinnedAppsAtom);
- const getSortablePinnedApps = useCallback(()=> {
- const pinnedAppsLocal = fetchFromLocalStorage('ext_saved_settings')
- if(pinnedAppsLocal?.sortablePinnedApps){
- setSortablePinnedApps(pinnedAppsLocal?.sortablePinnedApps)
- setSettingsLocalLastUpdated(pinnedAppsLocal?.timestamp || -1)
- } else {
- setSettingsLocalLastUpdated(-1)
- }
-
- }, [])
- const getSortablePinnedAppsImportExport = useCallback(()=> {
- const pinnedAppsLocal = fetchFromLocalStorage('ext_saved_settings_import_export')
- if(pinnedAppsLocal?.sortablePinnedApps){
- setOldPinnedApps(pinnedAppsLocal?.sortablePinnedApps)
-
-
- setIsUsingImportExportSettings(true)
- setSettingsQDNLastUpdated(pinnedAppsLocal?.timestamp || 0)
-
- } else {
- setIsUsingImportExportSettings(false)
- }
-
- }, [])
- useEffect(()=> {
-
- getSortablePinnedApps()
- getSortablePinnedAppsImportExport()
- }, [getSortablePinnedApps, address])
-
-}
+ const setSettingsLocalLastUpdated = useSetRecoilState(
+ settingsLocalLastUpdatedAtom
+ );
+
+ const setIsUsingImportExportSettings = useSetRecoilState(
+ isUsingImportExportSettingsAtom
+ );
+
+ const setSettingsQDNLastUpdated = useSetRecoilState(
+ settingsQDNLastUpdatedAtom
+ );
+
+ const setOldPinnedApps = useSetRecoilState(oldPinnedAppsAtom);
+
+ const getSortablePinnedApps = useCallback(() => {
+ const pinnedAppsLocal = fetchFromLocalStorage('ext_saved_settings');
+
+ if (pinnedAppsLocal?.sortablePinnedApps) {
+ setSortablePinnedApps(pinnedAppsLocal?.sortablePinnedApps);
+ setSettingsLocalLastUpdated(pinnedAppsLocal?.timestamp || -1);
+ } else {
+ setSettingsLocalLastUpdated(-1);
+ }
+ }, []);
+
+ const getSortablePinnedAppsImportExport = useCallback(() => {
+ const pinnedAppsLocal = fetchFromLocalStorage(
+ 'ext_saved_settings_import_export'
+ );
+ if (pinnedAppsLocal?.sortablePinnedApps) {
+ setOldPinnedApps(pinnedAppsLocal?.sortablePinnedApps);
+ setIsUsingImportExportSettings(true);
+ setSettingsQDNLastUpdated(pinnedAppsLocal?.timestamp || 0);
+ } else {
+ setIsUsingImportExportSettings(false);
+ }
+ }, []);
+
+ useEffect(() => {
+ getSortablePinnedApps();
+ getSortablePinnedAppsImportExport();
+ }, [getSortablePinnedApps, address]);
+};