Add minting translations

This commit is contained in:
Nicola Benaglia
2025-05-13 06:39:29 +02:00
parent 452c3a0894
commit 9adddce9fc
3 changed files with 132 additions and 65 deletions

View File

@@ -27,6 +27,7 @@ import { FidgetSpinner } from 'react-loader-spinner';
import { useModal } from '../../common/useModal';
import { useAtom, useSetAtom } from 'jotai';
import { memberGroupsAtom, txListAtom } from '../../atoms/global';
import { useTranslation } from 'react-i18next';
export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
const setTxList = useSetAtom(txListAtom);
@@ -44,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 [info, setInfo] = useState(null);
const [names, setNames] = useState({});
const [accountInfos, setAccountInfos] = useState({});
@@ -223,13 +224,21 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
rej({ message: response.error });
})
.catch((error) => {
rej({ message: error.message || 'An error occurred' });
rej({
message:
error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }),
});
});
});
} catch (error) {
setInfo({
type: 'error',
message: error?.message || 'Unable to add minting account',
message:
error?.message ||
t('core:message.error.minting_account_add', {
postProcess: 'capitalize',
}),
});
setOpenSnack(true);
} finally {
@@ -263,13 +272,21 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
rej({ message: response.error });
})
.catch((error) => {
rej({ message: error.message || 'An error occurred' });
rej({
message:
error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }),
});
});
});
} catch (error) {
setInfo({
type: 'error',
message: error?.message || 'Unable to remove minting account',
message:
error?.message ||
t('core:message.error.minting_account_remove', {
postProcess: 'capitalize',
}),
});
setOpenSnack(true);
} finally {
@@ -278,9 +295,13 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
}, []);
const createRewardShare = useCallback(async (publicKey, recipient) => {
const fee = await getFee('REWARD_SHARE'); // TODO translate
const fee = await getFee('REWARD_SHARE');
await show({
message: 'Would you like to perform an REWARD_SHARE transaction?',
message: t('group:question.perform_transaction', {
// TODO move from group into core namespace
action: 'REWARD_SHARE',
postProcess: 'capitalize',
}),
publishFee: fee.fee + ' QORT',
});
return await new Promise((res, rej) => {
@@ -295,8 +316,12 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
recipient,
...response,
type: 'add-rewardShare',
label: `Add rewardshare: awaiting confirmation`,
labelDone: `Add rewardshare: success!`,
label: t('group:message.success.rewardshare_add', {
postProcess: 'capitalize',
}),
labelDone: t('group:message.success.rewardshare_add_label', {
postProcess: 'capitalize',
}),
done: false,
},
...prev,
@@ -307,7 +332,11 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
rej({ message: response.error });
})
.catch((error) => {
rej({ message: error.message || 'An error occurred' });
rej({
message:
error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }),
});
});
});
}, []);
@@ -326,7 +355,11 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
rej({ message: response.error });
})
.catch((error) => {
rej({ message: error.message || 'An error occurred' });
rej({
message:
error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }),
});
});
});
}, []);
@@ -350,7 +383,9 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
await sleep(pollingInterval); // Wait before the next poll
}
throw new Error('Timeout waiting for reward share confirmation');
throw new Error(
t('group:message.error.timeout_reward', { postProcess: 'capitalize' })
);
};
const startMinting = async () => {
@@ -382,7 +417,11 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
setShowWaitDialog(false);
setInfo({
type: 'error',
message: error?.message || 'Unable to start minting',
message:
error?.message ||
t('group:message.error.unable_minting', {
postProcess: 'capitalize',
}),
});
setOpenSnack(true);
} finally {
@@ -420,8 +459,12 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
...rewardShare,
...response,
type: 'remove-rewardShare',
label: `Remove rewardshare: awaiting confirmation`,
labelDone: `Remove rewardshare: success!`,
label: t('group:message.success.rewardshare_remove', {
postProcess: 'capitalize',
}),
labelDone: t('group:message.success.rewardshare_remove_label', {
postProcess: 'capitalize',
}),
done: false,
},
...prev,
@@ -431,59 +474,65 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
rej({ message: response.error });
})
.catch((error) => {
rej({ message: error.message || 'An error occurred' });
rej({
message:
error.message ||
t('core:message.error.generic', { postProcess: 'capitalize' }),
});
});
});
}, []);
const handleRemoveRewardShare = async (rewardShare) => {
try {
setIsLoading(true);
// TODO unused functions. Remove??
const privateRewardShare = await removeRewardShare(rewardShare);
} catch (error) {
setInfo({
type: 'error',
message: error?.message || 'Unable to remove reward share',
});
setOpenSnack(true);
} finally {
setIsLoading(false);
}
};
// const handleRemoveRewardShare = async (rewardShare) => {
// try {
// setIsLoading(true);
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);
}
};
// 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();
@@ -558,7 +607,12 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
},
}}
>
<DialogTitle id="alert-dialog-title">{'Manage your minting'}</DialogTitle>
<DialogTitle id="alert-dialog-title">
{t('group:message.generic.manage_minting', {
postProcess: 'capitalize',
})}
</DialogTitle>
<IconButton
sx={{
position: 'absolute',
@@ -604,7 +658,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
sx={{
backgroundColor: theme.palette.background.default,
padding: '10px',
}}
}} // TODO translate
>
<Typography>Account: {handleNames(accountInfo?.address)}</Typography>
@@ -618,7 +672,9 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
This node is minting: {nodeInfos?.isMintingPossible?.toString()}
</Typography>
</Card>
<Spacer height="10px" />
{isPartOfMintingGroup && !accountIsMinting && (
<Box
sx={{
@@ -660,7 +716,9 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
)}
</Box>
)}
<Spacer height="10px" />
{mintingAccounts?.length > 0 && (
<Typography>Node's minting accounts</Typography>
)}