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,
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<AddressLevelEntry[]>([]);
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 }) => {
<StatCard
label="Avg. Created QORT Per Day"
value="3558.48 QORT"
value={dayReward(
adminInfo,
nodeHeightBlock,
nodeStatus
).toFixed(2)}
/>
</Grid>
</Paper>
@ -730,29 +743,24 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
<Grid container spacing={2}>
<StatCard
label="Current Tier"
value="Tier 2 (Level 3 + 4)"
value={currentTier(accountInfo?.level) || ''}
/>
<StatCard
label="Total Minters in The Tier"
value={countMintersInLevel(
accountInfo?.level,
addressLevel,
tier4Online
)?.toFixed(0)}
value={
countMintersInLevel(
accountInfo?.level,
addressLevel,
tier4Online
)?.toFixed(0) || ''
}
/>
<StatCard label="Tier Share Per Block" value="13%" />
<StatCard
label="Est. Reward Per Block"
value="0.00506494 QORT"
/>
<StatCard
label="Est. Reward Per Day"
value={dayReward(
adminInfo,
nodeHeightBlock,
nodeStatus
).toFixed(2)}
/>
<StatCard label="Est. Reward Per Day" value="pollo" />
{/* <StatCard label="AdminInfo" value={adminInfo} /> */}
</Grid>
</Paper>

View File

@ -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() {

View File

@ -92,7 +92,7 @@
"seedphrase_notice": "È stato generato una <seed>SEED PHRASE</seed> 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."