Refactor function, add type

This commit is contained in:
Nicola Benaglia 2025-06-20 19:19:35 +02:00
parent ec851a8b2c
commit 4d181d8da8
3 changed files with 84 additions and 106 deletions

View File

@ -51,8 +51,14 @@ import {
levelUpDays, levelUpDays,
mintingStatus, mintingStatus,
countMintersInLevel, countMintersInLevel,
currentTier,
} from './MintingStats.tsx'; } from './MintingStats.tsx';
export type AddressLevelEntry = {
level: number;
count: number;
};
export const Minting = ({ setIsOpenMinting, myAddress, show }) => { export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
const setTxList = useSetAtom(txListAtom); const setTxList = useSetAtom(txListAtom);
const [groups] = useAtom(memberGroupsAtom); const [groups] = useAtom(memberGroupsAtom);
@ -63,7 +69,7 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
const [rewardShares, setRewardShares] = useState([]); const [rewardShares, setRewardShares] = useState([]);
const [adminInfo, setAdminInfo] = useState({}); const [adminInfo, setAdminInfo] = useState({});
const [nodeStatus, setNodeStatus] = useState({}); const [nodeStatus, setNodeStatus] = useState({});
const [addressLevel, setAddressLevel] = useState({}); const [addressLevel, setAddressLevel] = useState<AddressLevelEntry[]>([]);
const [tier4Online, setTier4Online] = useState(0); const [tier4Online, setTier4Online] = useState(0);
const [openSnack, setOpenSnack] = useState(false); const [openSnack, setOpenSnack] = useState(false);
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);
@ -240,20 +246,23 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
} }
}, [nodeStatus]); }, [nodeStatus]);
const getAddressLevel = useCallback(async () => { const getAddressLevel = async () => {
try { try {
const url = `${getBaseApiReact()}/addresses/online/levels`; const url = `${getBaseApiReact()}/addresses/online/levels`;
const response = await fetch(url); const response = await fetch(url);
const data = await response.json(); const data: AddressLevelEntry[] = await response.json();
setAddressLevel(data); if (Array.isArray(data)) {
setTier4Online( setAddressLevel(data);
parseFloat(data.addressLevel[7].count) + const level7 = data.find((entry) => entry.level === 7)?.count || 0;
parseFloat(data.addressLevel[8].count) const level8 = data.find((entry) => entry.level === 8)?.count || 0;
); const tier4Count =
parseFloat(level7.toString()) + parseFloat(level8.toString());
setTier4Online(tier4Count);
}
} catch (error) { } catch (error) {
console.error('Request failed', error); console.error('Request failed', error);
} }
}, []); };
const getRewardShares = useCallback(async (address) => { const getRewardShares = useCallback(async (address) => {
try { try {
@ -669,7 +678,11 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
<StatCard <StatCard
label="Avg. Created QORT Per Day" label="Avg. Created QORT Per Day"
value="3558.48 QORT" value={dayReward(
adminInfo,
nodeHeightBlock,
nodeStatus
).toFixed(2)}
/> />
</Grid> </Grid>
</Paper> </Paper>
@ -730,29 +743,24 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
<Grid container spacing={2}> <Grid container spacing={2}>
<StatCard <StatCard
label="Current Tier" label="Current Tier"
value="Tier 2 (Level 3 + 4)" value={currentTier(accountInfo?.level) || ''}
/> />
<StatCard <StatCard
label="Total Minters in The Tier" label="Total Minters in The Tier"
value={countMintersInLevel( value={
accountInfo?.level, countMintersInLevel(
addressLevel, accountInfo?.level,
tier4Online addressLevel,
)?.toFixed(0)} tier4Online
)?.toFixed(0) || ''
}
/> />
<StatCard label="Tier Share Per Block" value="13%" /> <StatCard label="Tier Share Per Block" value="13%" />
<StatCard <StatCard
label="Est. Reward Per Block" label="Est. Reward Per Block"
value="0.00506494 QORT" value="0.00506494 QORT"
/> />
<StatCard <StatCard label="Est. Reward Per Day" value="pollo" />
label="Est. Reward Per Day"
value={dayReward(
adminInfo,
nodeHeightBlock,
nodeStatus
).toFixed(2)}
/>
{/* <StatCard label="AdminInfo" value={adminInfo} /> */} {/* <StatCard label="AdminInfo" value={adminInfo} /> */}
</Grid> </Grid>
</Paper> </Paper>

View File

@ -1,4 +1,5 @@
import i18n from '../../i18n/i18n'; import i18n from '../../i18n/i18n';
import { AddressLevelEntry } from './Minting';
const accountTargetBlocks = (level: number): number | undefined => { const accountTargetBlocks = (level: number): number | undefined => {
if (level === 0) { if (level === 0) {
@ -82,18 +83,18 @@ export const blockReward = (nodeStatus): number => {
} }
}; };
export const currentTier = (accountInfo): string | undefined => { export const currentTier = (level): string | undefined => {
if (accountInfo.level === 0) { if (level === 0) {
return 'Tier 0 (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)'; 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)'; 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)'; 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)'; 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)'; return 'Tier 5 (Level 9 + 10)';
} else { } else {
return undefined; // fallback: should never reach this point return undefined; // fallback: should never reach this point
@ -140,87 +141,56 @@ export const tierPercent = (accountInfo, tier4Online): number | undefined => {
} else if (accountInfo.level === 10) { } else if (accountInfo.level === 10) {
return 32; return 32;
} else { } else {
return undefined; return undefined; // fallback: should never reach this point
} }
}; };
export const countMintersInLevel = ( export const countMintersInLevel = (
level, level: number,
addressLevel, addressLevel: AddressLevelEntry[],
tier4Online tier4Online: number
): number => { ): number | undefined => {
if (level === 0) { if (addressLevel && addressLevel.length > 0) {
const countTier0 = addressLevel[0].count; if (level === 0) {
return countTier0; const countTier0 = addressLevel[0].count;
} else if (level === 1) { return countTier0;
const countTier10 = addressLevel[1].count + addressLevel[2].count; } else if (level === 1 || level === 2) {
return countTier10; const countTier1 = addressLevel[1].count + addressLevel[2].count;
} else if (level === 2) { return countTier1;
const countTier11 = addressLevel[1].count + addressLevel[2].count; } else if (level === 3 || level === 4) {
return countTier11; const countTier2 = addressLevel[3].count + addressLevel[4].count;
} else if (level === 3) { return countTier2;
const countTier20 = addressLevel[3].count + addressLevel[4].count; } else if (level === 5 || level === 6) {
return countTier20; if (tier4Online < 30) {
} else if (level === 4) { const countTier3 =
const countTier21 = addressLevel[3].count + addressLevel[4].count; addressLevel[5].count +
return countTier21; addressLevel[6].count +
} else if (level === 5) { addressLevel[7].count +
if (tier4Online < 30) { addressLevel[8].count;
const countTier30 = return countTier3;
addressLevel[5].count + } else {
addressLevel[6].count + const countTier3 = addressLevel[5].count + addressLevel[6].count;
addressLevel[7].count + return countTier3;
addressLevel[8].count; }
return countTier30; } else if (level === 7 || level === 8) {
} else { if (tier4Online < 30) {
const countTier30 = addressLevel[5].count + addressLevel[6].count; const countTier4 =
return countTier30; 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() { // _countReward() {

View File

@ -92,7 +92,7 @@
"seedphrase_notice": "È stato generato una <seed>SEED PHRASE</seed> in background.", "seedphrase_notice": "È stato generato una <seed>SEED PHRASE</seed> in background.",
"turn_local_node": "si prega di attivare il nodo locale", "turn_local_node": "si prega di attivare il nodo locale",
"type_seed": "digita o incolla la seed phrase", "type_seed": "digita o incolla la seed phrase",
"your_accounts": "i tuoi conti salvati" "your_accounts": "i tuoi account salvati"
}, },
"success": { "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." "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."