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>
)}

View File

@ -67,6 +67,8 @@
"error": {
"generic": "an error occurred",
"incorrect_password": "incorrect password",
"minting_account_add": "unable to add minting account",
"minting_account_remove": "unable to remove minting account",
"missing_field": "missing: {{ field }}",
"save_qdn": "unable to save to QDN"
},

View File

@ -62,6 +62,7 @@
"latest_promotion": "only the latest promotion from the week will be shown for your group.",
"loading_members": "loading member list with names... please wait.",
"max_chars": " Max 200 characters. Publish Fee",
"manage_minting": "manage your minting",
"no_display": "nothing to display",
"no_selection": "no group selected",
"not_part_group": "you are not part of the encrypted group of members. Wait until an admin re-encrypts the keys.",
@ -80,7 +81,9 @@
"group_secret_key": "cannot get group secret key",
"name_required": "please provide a name",
"notify_admins": "try notifying an admin from the list of admins below:",
"thread_id": "unable to locate thread Id"
"timeout_reward": "timeout waiting for reward share confirmation",
"thread_id": "unable to locate thread Id",
"unable_minting": "unable to start minting"
},
"success": {
"group_ban": "successfully banned member from group. It may take a couple of minutes for the changes to propagate",
@ -104,6 +107,10 @@
"invitation_request": "accepted join request: awaiting confirmation",
"loading_threads": "loading threads... please wait.",
"post_creation": "successfully created post. It may take some time for the publish to propagate",
"rewardshare_add": "add rewardshare: awaiting confirmation",
"rewardshare_add_label": "add rewardshare: success!",
"rewardshare_remove": "remove rewardshare: awaiting confirmation",
"rewardshare_remove_label": "remove rewardshare: success!",
"thread_creation": "successfully created thread. It may take some time for the publish to propagate",
"unbanned_user": "successfully unbanned user. It may take a couple of minutes for the changes to propagate",
"user_joined": "user successfully joined!"