@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
64 lines (56 loc) • 2.09 kB
text/typescript
import BigNumber from "bignumber.js";
import type { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
import { useMemo } from "react";
import {
getCurrentHederaPreloadData,
getHederaPreloadData,
} from "@ledgerhq/coin-hedera/preload-data";
import { getDelegationStatus, filterValidatorBySearchTerm } from "./utils";
import { useObservable } from "../../observable";
import type {
HederaAccount,
HederaPreloadData,
HederaValidator,
HederaDelegation,
HederaEnrichedDelegation,
} from "./types";
export function useHederaPreloadData(
currency: CryptoCurrency,
): HederaPreloadData | undefined | null {
return useObservable(getHederaPreloadData(currency), getCurrentHederaPreloadData(currency));
}
export function useHederaValidators(currency: CryptoCurrency, search?: string): HederaValidator[] {
const data = useHederaPreloadData(currency);
return useMemo(() => {
const validators = data?.validators ?? [];
if (validators.length === 0 || !search || search === "") {
return validators;
}
return validators.filter(validator => {
return filterValidatorBySearchTerm(validator, search);
});
}, [data, search]);
}
export function useHederaEnrichedDelegation(
account: HederaAccount,
delegation: HederaDelegation,
): HederaEnrichedDelegation {
const validators = useHederaValidators(account.currency);
const validatorByNodeId = new Map(validators.map(v => [v.nodeId, v]));
const validator = validatorByNodeId.get(delegation.nodeId) ?? null;
return {
...delegation,
status: getDelegationStatus(validator),
validator: {
name: validator?.name ?? "",
address: validator?.address ?? "",
addressChecksum: validator?.addressChecksum ?? null,
nodeId: delegation.nodeId,
minStake: validator?.minStake ?? new BigNumber(0),
maxStake: validator?.maxStake ?? new BigNumber(0),
activeStake: validator?.activeStake ?? new BigNumber(0),
activeStakePercentage: validator?.activeStakePercentage ?? new BigNumber(0),
overstaked: validator?.overstaked ?? false,
},
};
}