Skip to content

Commit

Permalink
fix(extension): [lw-10789] fix delegation tx summary
Browse files Browse the repository at this point in the history
  • Loading branch information
vetalcore committed Jul 1, 2024
1 parent e2fadc0 commit 69ca3f4
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@ import { inspectTxValues } from '@src/utils/tx-inspection';
import { firstValueFrom } from 'rxjs';
import { getAssetsInformation } from '@src/utils/get-assets-information';
import { MAX_POOLS_COUNT } from '@lace/staking';
import { ActivityStatus, DelegationActivityType, TransactionActivityType } from '@lace/core';
import {
ActivityStatus,
ConwayEraCertificatesTypes,
DelegationActivityType,
TransactionActivityType
} from '@lace/core';
import type { ActivityType } from '@lace/core';
import { formatDate, formatTime } from '@src/utils/format-date';
import { createHistoricalOwnInputResolver, HistoricalOwnInputResolverArgs } from '@src/utils/own-input-resolver';
Expand Down Expand Up @@ -68,10 +73,12 @@ const shouldIncludeFee = (

return !(
type === DelegationActivityType.delegationRegistration ||
type === ConwayEraCertificatesTypes.Registration ||
// Existence of any (new) delegationInfo means that this "de-registration"
// activity is accompanied by a "delegation" activity, which carries the fees.
// However, fees should be shown if de-registration activity is standalone.
(type === DelegationActivityType.delegationDeregistration && !!delegationInfo?.length)
((type === DelegationActivityType.delegationDeregistration || type === ConwayEraCertificatesTypes.Unregistration) &&
!!delegationInfo?.length)
);
};

Expand Down Expand Up @@ -213,14 +220,16 @@ const buildGetActivityDetail =
const deposit =
// since one tx can be split into two (delegation, registration) actions,
// ensure only the registration tx carries the deposit
implicitCoin.deposit && type === DelegationActivityType.delegationRegistration
implicitCoin.deposit &&
(type === DelegationActivityType.delegationRegistration || type === ConwayEraCertificatesTypes.Registration)
? Wallet.util.lovelacesToAdaString(implicitCoin.deposit.toString())
: undefined;
const depositReclaimValue = Wallet.util.calculateDepositReclaim(implicitCoin);
const depositReclaim =
// since one tx can be split into two (delegation, de-registration) actions,
// ensure only the de-registration tx carries the reclaimed deposit
depositReclaimValue && type === DelegationActivityType.delegationDeregistration
depositReclaimValue &&
(type === DelegationActivityType.delegationDeregistration || type === ConwayEraCertificatesTypes.Unregistration)
? Wallet.util.lovelacesToAdaString(depositReclaimValue.toString())
: undefined;
const feeInAda = Wallet.util.lovelacesToAdaString(tx.body.fee.toString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
ActivityStatus,
AssetActivityItemProps,
AssetActivityListProps,
ConwayEraCertificatesTypes,
DelegationActivityType,
TransactionActivityType
} from '@lace/core';
Expand Down Expand Up @@ -69,21 +70,34 @@ type MappedActivityListProps = Omit<AssetActivityListProps, 'items'> & {
};
export type FetchWalletActivitiesReturn = MappedActivityListProps[];

type extendedDelegationActivityType =
| DelegationActivityType
| ConwayEraCertificatesTypes.Registration
| ConwayEraCertificatesTypes.Unregistration;

type DelegationActivityItemProps = Omit<ExtendedActivityProps, 'type'> & {
type: DelegationActivityType;
type: extendedDelegationActivityType;
};

const isDelegationActivity = (activity: ExtendedActivityProps): activity is DelegationActivityItemProps =>
activity.type in DelegationActivityType;
activity.type in DelegationActivityType ||
activity.type === ConwayEraCertificatesTypes.Registration ||
activity.type === ConwayEraCertificatesTypes.Unregistration;

const getDelegationAmount = (activity: DelegationActivityItemProps) => {
const fee = new BigNumber(Number.parseFloat(activity.fee));

if (activity.type === DelegationActivityType.delegationRegistration) {
if (
activity.type === DelegationActivityType.delegationRegistration ||
activity.type === ConwayEraCertificatesTypes.Registration
) {
return fee.plus(activity.deposit);
}

if (activity.type === DelegationActivityType.delegationDeregistration) {
if (
activity.type === DelegationActivityType.delegationDeregistration ||
activity.type === ConwayEraCertificatesTypes.Unregistration
) {
return new BigNumber(activity.depositReclaim).minus(fee);
}

Expand Down Expand Up @@ -363,7 +377,7 @@ const mapWalletActivities = memoize(
{ cardanoFiatPrice, fiatCurrency, assetId },
{ cardanoCoin, assetDetails }
) =>
`${transactions.history.length}_${transactions.outgoing.inFlight.length}_${assetInfo.size}_${
`${transactions.history.length}_${transactions.outgoing.inFlight.map(({ id }) => id).join('')}_${assetInfo.size}_${
rewardsHistory.all.length
}_${cardanoFiatPrice}_${fiatCurrency.code}_${assetId || ''}_${cardanoCoin?.id}_${assetDetails?.id}_${
addresses[0]?.address
Expand Down
22 changes: 18 additions & 4 deletions packages/core/src/ui/components/Activity/AssetActivityItem.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/* eslint-disable complexity */
/* eslint-disable unicorn/consistent-function-scoping */
/* eslint-disable react/no-multi-comp */
import React, { useMemo, useRef, useEffect, useCallback } from 'react';
Expand All @@ -10,7 +11,7 @@ import { ReactComponent as PendingIcon } from '../../assets/icons/pending.compon
import { ReactComponent as ErrorIcon } from '../../assets/icons/error.component.svg';
import pluralize from 'pluralize';
import { txIconSize } from '@src/ui/utils/icon-size';
import { DelegationActivityType, TransactionActivityType } from '../ActivityDetail/types';
import { DelegationActivityType, TransactionActivityType, ConwayEraCertificatesTypes } from '../ActivityDetail/types';
import type { ActivityType } from '../ActivityDetail/types';
import styles from './AssetActivityItem.module.scss';
import { ActivityTypeIcon } from '../ActivityDetail/ActivityTypeIcon';
Expand Down Expand Up @@ -93,6 +94,7 @@ const ActivityStatusIcon = ({ status, type }: ActivityStatusIconProps) => {
const negativeBalanceStyling: Set<Partial<ActivityType>> = new Set([
TransactionActivityType.outgoing,
DelegationActivityType.delegationRegistration,
ConwayEraCertificatesTypes.Registration,
TransactionActivityType.self,
DelegationActivityType.delegation
]);
Expand All @@ -115,7 +117,13 @@ export const AssetActivityItem = ({

const getText = useCallback(
(items: number): { text: string; suffix: string } => {
if (type in DelegationActivityType || type === TransactionActivityType.self) return { text: amount, suffix: '' };
if (
type in DelegationActivityType ||
type === ConwayEraCertificatesTypes.Registration ||
type === ConwayEraCertificatesTypes.Unregistration ||
type === TransactionActivityType.self
)
return { text: amount, suffix: '' };

const assetsIdsText = assets
?.slice(0, items)
Expand Down Expand Up @@ -161,7 +169,9 @@ export const AssetActivityItem = ({
const assetsText = useMemo(() => getText(assetsToShow), [getText, assetsToShow]);

const assetAmountContent =
type in DelegationActivityType ? (
type in DelegationActivityType ||
type === ConwayEraCertificatesTypes.Registration ||
type === ConwayEraCertificatesTypes.Unregistration ? (
<p data-testid="tokens-amount" className={styles.description}>
{DELEGATION_ASSET_NUMBER} {t('core.assetActivityItem.entry.token')}
</p>
Expand Down Expand Up @@ -192,7 +202,11 @@ export const AssetActivityItem = ({
</div>
<div data-testid="asset-info" className={styles.info}>
<h6 data-testid="transaction-type" className={styles.title}>
{isPendingTx && type !== TransactionActivityType.self && !(type in DelegationActivityType)
{isPendingTx &&
type !== TransactionActivityType.self &&
!(type in DelegationActivityType) &&
type !== ConwayEraCertificatesTypes.Registration &&
type !== ConwayEraCertificatesTypes.Unregistration
? t('core.assetActivityItem.entry.name.sending')
: t(`core.assetActivityItem.entry.name.${type}` as unknown as CoreTranslationKey)}
</h6>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import { ActivityStatus, AssetActivityListProps, DelegationActivityType } from '@lace/core';
import { ActivityStatus, AssetActivityListProps, ConwayEraCertificatesTypes, DelegationActivityType } from '@lace/core';
import flatMap from 'lodash/flatMap';

export const hasPendingDelegationTransaction = (walletActivities: AssetActivityListProps[]) =>
flatMap(walletActivities, ({ items }) => items).some(
({ type, status }) => type && type in DelegationActivityType && status === ActivityStatus.PENDING
({ type, status }) =>
type &&
(type in DelegationActivityType ||
type === ConwayEraCertificatesTypes.Registration ||
type === ConwayEraCertificatesTypes.Unregistration) &&
status === ActivityStatus.PENDING
);

0 comments on commit 69ca3f4

Please sign in to comment.