From 4d181d8da86526e6690b52079934485db0eb1875 Mon Sep 17 00:00:00 2001 From: Nicola Benaglia Date: Fri, 20 Jun 2025 19:19:35 +0200 Subject: [PATCH] Refactor function, add type --- src/components/Minting/Minting.tsx | 56 +++++----- src/components/Minting/MintingStats.tsx | 132 +++++++++--------------- src/i18n/locales/it/auth.json | 2 +- 3 files changed, 84 insertions(+), 106 deletions(-) diff --git a/src/components/Minting/Minting.tsx b/src/components/Minting/Minting.tsx index ac29454..4a6ef97 100644 --- a/src/components/Minting/Minting.tsx +++ b/src/components/Minting/Minting.tsx @@ -51,8 +51,14 @@ import { levelUpDays, mintingStatus, countMintersInLevel, + currentTier, } from './MintingStats.tsx'; +export type AddressLevelEntry = { + level: number; + count: number; +}; + export const Minting = ({ setIsOpenMinting, myAddress, show }) => { const setTxList = useSetAtom(txListAtom); const [groups] = useAtom(memberGroupsAtom); @@ -63,7 +69,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => { const [rewardShares, setRewardShares] = useState([]); const [adminInfo, setAdminInfo] = useState({}); const [nodeStatus, setNodeStatus] = useState({}); - const [addressLevel, setAddressLevel] = useState({}); + const [addressLevel, setAddressLevel] = useState([]); const [tier4Online, setTier4Online] = useState(0); const [openSnack, setOpenSnack] = useState(false); const [isLoading, setIsLoading] = useState(false); @@ -240,20 +246,23 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => { } }, [nodeStatus]); - const getAddressLevel = useCallback(async () => { + const getAddressLevel = async () => { try { const url = `${getBaseApiReact()}/addresses/online/levels`; const response = await fetch(url); - const data = await response.json(); - setAddressLevel(data); - setTier4Online( - parseFloat(data.addressLevel[7].count) + - parseFloat(data.addressLevel[8].count) - ); + const data: AddressLevelEntry[] = await response.json(); + if (Array.isArray(data)) { + setAddressLevel(data); + const level7 = data.find((entry) => entry.level === 7)?.count || 0; + const level8 = data.find((entry) => entry.level === 8)?.count || 0; + const tier4Count = + parseFloat(level7.toString()) + parseFloat(level8.toString()); + setTier4Online(tier4Count); + } } catch (error) { console.error('Request failed', error); } - }, []); + }; const getRewardShares = useCallback(async (address) => { try { @@ -669,7 +678,11 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => { @@ -730,29 +743,24 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => { - + {/* */} diff --git a/src/components/Minting/MintingStats.tsx b/src/components/Minting/MintingStats.tsx index 51e46ab..111c10e 100644 --- a/src/components/Minting/MintingStats.tsx +++ b/src/components/Minting/MintingStats.tsx @@ -1,4 +1,5 @@ import i18n from '../../i18n/i18n'; +import { AddressLevelEntry } from './Minting'; const accountTargetBlocks = (level: number): number | undefined => { if (level === 0) { @@ -82,18 +83,18 @@ export const blockReward = (nodeStatus): number => { } }; -export const currentTier = (accountInfo): string | undefined => { - if (accountInfo.level === 0) { +export const currentTier = (level): string | undefined => { + if (level === 0) { return 'Tier 0 (Level 0)'; - } else if (accountInfo.level === 1 || accountInfo.level === 2) { + } else if (level === 1 || level === 2) { return 'Tier 1 (Level 1 + 2)'; - } else if (accountInfo.level === 3 || accountInfo.level === 4) { + } else if (level === 3 || level === 4) { return 'Tier 2 (Level 3 + 4)'; - } else if (accountInfo.level === 5 || accountInfo.level === 6) { + } else if (level === 5 || level === 6) { return 'Tier 3 (Level 5 + 6)'; - } else if (accountInfo.level === 7 || accountInfo.level === 8) { + } else if (level === 7 || level === 8) { return 'Tier 4 (Level 7 + 8)'; - } else if (accountInfo.level === 9 || accountInfo.level === 10) { + } else if (level === 9 || level === 10) { return 'Tier 5 (Level 9 + 10)'; } else { return undefined; // fallback: should never reach this point @@ -140,87 +141,56 @@ export const tierPercent = (accountInfo, tier4Online): number | undefined => { } else if (accountInfo.level === 10) { return 32; } else { - return undefined; + return undefined; // fallback: should never reach this point } }; export const countMintersInLevel = ( - level, - addressLevel, - tier4Online -): number => { - if (level === 0) { - const countTier0 = addressLevel[0].count; - return countTier0; - } else if (level === 1) { - const countTier10 = addressLevel[1].count + addressLevel[2].count; - return countTier10; - } else if (level === 2) { - const countTier11 = addressLevel[1].count + addressLevel[2].count; - return countTier11; - } else if (level === 3) { - const countTier20 = addressLevel[3].count + addressLevel[4].count; - return countTier20; - } else if (level === 4) { - const countTier21 = addressLevel[3].count + addressLevel[4].count; - return countTier21; - } else if (level === 5) { - if (tier4Online < 30) { - const countTier30 = - addressLevel[5].count + - addressLevel[6].count + - addressLevel[7].count + - addressLevel[8].count; - return countTier30; - } else { - const countTier30 = addressLevel[5].count + addressLevel[6].count; - return countTier30; + level: number, + addressLevel: AddressLevelEntry[], + tier4Online: number +): number | undefined => { + if (addressLevel && addressLevel.length > 0) { + if (level === 0) { + const countTier0 = addressLevel[0].count; + return countTier0; + } else if (level === 1 || level === 2) { + const countTier1 = addressLevel[1].count + addressLevel[2].count; + return countTier1; + } else if (level === 3 || level === 4) { + const countTier2 = addressLevel[3].count + addressLevel[4].count; + return countTier2; + } else if (level === 5 || level === 6) { + if (tier4Online < 30) { + const countTier3 = + addressLevel[5].count + + addressLevel[6].count + + addressLevel[7].count + + addressLevel[8].count; + return countTier3; + } else { + const countTier3 = addressLevel[5].count + addressLevel[6].count; + return countTier3; + } + } else if (level === 7 || level === 8) { + if (tier4Online < 30) { + const countTier4 = + addressLevel[5].count + + addressLevel[6].count + + addressLevel[7].count + + addressLevel[8].count; + return countTier4; + } else { + const countTier4 = addressLevel[7].count + addressLevel[8].count; + return countTier4; + } + } else if (level === 9 || level === 10) { + const countTier5 = addressLevel[9].count + addressLevel[10].count; + return countTier5; } - } else if (level === 6) { - if (tier4Online < 30) { - const countTier31 = - addressLevel[5].count + - addressLevel[6].count + - addressLevel[7].count + - addressLevel[8].count; - return countTier31; - } else { - const countTier31 = addressLevel[5].count + addressLevel[6].count; - return countTier31; - } - } else if (level === 7) { - if (tier4Online < 30) { - const countTier40 = - addressLevel[5].count + - addressLevel[6].count + - addressLevel[7].count + - addressLevel[8].count; - return countTier40; - } else { - const countTier40 = addressLevel[7].count + addressLevel[8].count; - return countTier40; - } - } else if (level === 8) { - if (tier4Online < 30) { - const countTier40 = - addressLevel[5].count + - addressLevel[6].count + - addressLevel[7].count + - addressLevel[8].count; - return countTier40; - } else { - const countTier41 = addressLevel[7].count + addressLevel[8].count; - return countTier41; - } - } else if (level === 9) { - const countTier50 = addressLevel[9].count + addressLevel[10].count; - return countTier50; - } else if (level === 10) { - const countTier51 = addressLevel[9].count + addressLevel[10].count; - return countTier51; } - return 0; // should never reach this point + return undefined; // fallback: should never reach this point }; // _countReward() { diff --git a/src/i18n/locales/it/auth.json b/src/i18n/locales/it/auth.json index de4f857..e5b1f6e 100644 --- a/src/i18n/locales/it/auth.json +++ b/src/i18n/locales/it/auth.json @@ -92,7 +92,7 @@ "seedphrase_notice": "È stato generato una SEED PHRASE in background.", "turn_local_node": "si prega di attivare il nodo locale", "type_seed": "digita o incolla la seed phrase", - "your_accounts": "i tuoi conti salvati" + "your_accounts": "i tuoi account salvati" }, "success": { "reencrypted_secret_key": "chiave segreta recriptata con successo. Potrebbero essere necessari un paio di minuti per propagare le modifiche. Aggiorna il gruppo fra 5 minuti."