diff --git a/packages/shared/components/atoms/tiles/ActivityTile.svelte b/packages/shared/components/atoms/tiles/ActivityTile.svelte index 72c13a15ee..641c620dc4 100644 --- a/packages/shared/components/atoms/tiles/ActivityTile.svelte +++ b/packages/shared/components/atoms/tiles/ActivityTile.svelte @@ -21,6 +21,7 @@ NftActivityTileContent, GovernanceActivityTileContent, } from 'shared/components' + import { time } from '@core/app' export let activity: Activity @@ -30,6 +31,8 @@ activity.type === ActivityType.Basic || activity.type === ActivityType.Foundry ? getAssetFromPersistedAssets(activity.assetId) : undefined) + $: isTimelocked = activity?.asyncData?.timelockDate > $time + $: shouldShowAsyncFooter = activity.asyncData && activity.asyncData.asyncStatus !== ActivityAsyncStatus.Claimed function handleTransactionClick(): void { if (asset?.verification?.status === NotVerifiedStatus.New) { @@ -70,9 +73,9 @@ {/if} - {#if activity.asyncData?.asyncStatus === ActivityAsyncStatus.Timelocked} + {#if isTimelocked} - {:else if activity.asyncData} + {:else if shouldShowAsyncFooter} {/if} diff --git a/packages/shared/components/atoms/tiles/tileFooters/AsyncActivityTileFooter.svelte b/packages/shared/components/atoms/tiles/tileFooters/AsyncActivityTileFooter.svelte index 28caea219c..fe8c8257a6 100644 --- a/packages/shared/components/atoms/tiles/tileFooters/AsyncActivityTileFooter.svelte +++ b/packages/shared/components/atoms/tiles/tileFooters/AsyncActivityTileFooter.svelte @@ -30,9 +30,9 @@ (activity.direction === ActivityDirection.Incoming || activity.direction === ActivityDirection.SelfTransaction) && activity.asyncData?.asyncStatus === ActivityAsyncStatus.Unclaimed - $: shouldShowAsyncFooter = activity.asyncData?.asyncStatus !== ActivityAsyncStatus.Claimed $: timeDiff = getTimeDiff(activity) + $: hasExpirationTime = !!activity.asyncData?.expirationDate function handleRejectClick(): void { openPopup({ @@ -68,45 +68,49 @@ return getTimeDifference(expirationDate, $time) } } - return localize('general.none') + return undefined } -{#if shouldShowAsyncFooter} - - + + + {#if timeDiff} {timeDiff} - - - {#if shouldShowActions} - - - {:else} - - {/if} - - -{/if} + {/if} + + + {#if shouldShowActions} + + + {:else} + + {/if} + + diff --git a/packages/shared/lib/core/wallet/actions/activities/setAsyncStatusOfAccountActivities.ts b/packages/shared/lib/core/wallet/actions/activities/setAsyncStatusOfAccountActivities.ts index cefdf79434..9088cc6dd9 100644 --- a/packages/shared/lib/core/wallet/actions/activities/setAsyncStatusOfAccountActivities.ts +++ b/packages/shared/lib/core/wallet/actions/activities/setAsyncStatusOfAccountActivities.ts @@ -1,9 +1,9 @@ import { syncBalance } from '@core/account/actions/syncBalance' -import { Activity } from '@core/wallet/types' import { updateNftInAllAccountNfts } from '@core/nfts' import { ActivityAsyncStatus, ActivityDirection, ActivityType } from '@core/wallet/enums' import { allAccountActivities } from '../../stores' import { refreshAccountAssetsForActiveProfile } from '../refreshAccountAssetsForActiveProfile' +import { getAsyncStatus } from '@core/wallet/utils/generateActivity/helper' export function setAsyncStatusOfAccountActivities(time: Date): void { const balancesToUpdate: number[] = [] @@ -14,8 +14,13 @@ export function setAsyncStatusOfAccountActivities(time: Date): void { if (oldAsyncStatus === ActivityAsyncStatus.Claimed || oldAsyncStatus === ActivityAsyncStatus.Expired) { continue } - activity.asyncData.asyncStatus = getAsyncStatus(activity, time) - + activity.asyncData.asyncStatus = getAsyncStatus( + false, + activity.asyncData.expirationDate, + activity.asyncData.timelockDate, + !!activity.storageDeposit, + time.getTime() + ) if (oldAsyncStatus !== null && oldAsyncStatus !== activity.asyncData.asyncStatus) { if (!balancesToUpdate.includes(accountIndex)) { balancesToUpdate.push(accountIndex) @@ -40,19 +45,3 @@ export function setAsyncStatusOfAccountActivities(time: Date): void { void refreshAccountAssetsForActiveProfile() } } - -function getAsyncStatus(activity: Activity, time: Date): ActivityAsyncStatus { - if (activity.asyncData?.timelockDate) { - if (activity.asyncData.timelockDate.getTime() > time.getTime()) { - return ActivityAsyncStatus.Timelocked - } - } else if (activity.asyncData) { - if (activity.asyncData.asyncStatus !== ActivityAsyncStatus.Claimed) { - if (time > activity.asyncData.expirationDate) { - return ActivityAsyncStatus.Expired - } else { - return ActivityAsyncStatus.Unclaimed - } - } - } -} diff --git a/packages/shared/lib/core/wallet/constants/unlock-condition.constants.ts b/packages/shared/lib/core/wallet/constants/unlock-condition.constants.ts index 8c0c80b17b..9cb9608640 100644 --- a/packages/shared/lib/core/wallet/constants/unlock-condition.constants.ts +++ b/packages/shared/lib/core/wallet/constants/unlock-condition.constants.ts @@ -6,4 +6,8 @@ export const UNLOCK_CONDITION_STATE_CONTROLLER_ADDRESS = 4 export const UNLOCK_CONDITION_GOVERNOR_ADDRESS = 5 export const UNLOCK_CONDITION_IMMUTABLE_ALIAS = 6 -export const ASYNC_UNLOCK_CONDITION_TYPES = [UNLOCK_CONDITION_STORAGE_DEPOSIT_RETURN, UNLOCK_CONDITION_EXPIRATION] +export const ASYNC_UNLOCK_CONDITION_TYPES = [ + UNLOCK_CONDITION_STORAGE_DEPOSIT_RETURN, + UNLOCK_CONDITION_EXPIRATION, + UNLOCK_CONDITION_TIMELOCK, +] diff --git a/packages/shared/lib/core/wallet/utils/generateActivity/helper/getAsyncDataFromOutput.ts b/packages/shared/lib/core/wallet/utils/generateActivity/helper/getAsyncDataFromOutput.ts index 5b74818180..aef84296c0 100644 --- a/packages/shared/lib/core/wallet/utils/generateActivity/helper/getAsyncDataFromOutput.ts +++ b/packages/shared/lib/core/wallet/utils/generateActivity/helper/getAsyncDataFromOutput.ts @@ -1,8 +1,10 @@ import { IAccountState } from '@core/account' -import { isActivityHiddenForAccountIndex, ActivityAsyncStatus, IClaimData, Output, AsyncData } from '@core/wallet' +import { isActivityHiddenForAccountIndex, IClaimData, Output, AsyncData } from '@core/wallet' import { getExpirationDateFromOutput } from '../../outputs/getExpirationDateFromOutput' import { getTimelockDateFromOutput } from './getTimelockDateFromOutput' import { isOutputAsync } from '../../outputs/isOutputAsync' +import { getAsyncStatus } from './getAsyncStatus' +import { getStorageDepositFromOutput } from './getStorageDepositFromOutput' export function getAsyncDataFromOutput( output: Output, @@ -19,19 +21,15 @@ export function getAsyncDataFromOutput( const expirationDate = getExpirationDateFromOutput(output) const timelockDate = getTimelockDateFromOutput(output) + const { storageDeposit } = getStorageDepositFromOutput(output) - let asyncStatus - if (claimingData) { - asyncStatus = ActivityAsyncStatus.Claimed - } else if (timelockDate) { - if (timelockDate.getTime() > Date.now()) { - asyncStatus = ActivityAsyncStatus.Timelocked - } - } else if (expirationDate && expirationDate.getTime() < Date.now()) { - asyncStatus = ActivityAsyncStatus.Expired - } else { - asyncStatus = ActivityAsyncStatus.Unclaimed - } + const asyncStatus = getAsyncStatus( + !!claimingTransactionId, + expirationDate, + timelockDate, + !!storageDeposit, + Date.now() + ) return { asyncStatus, diff --git a/packages/shared/lib/core/wallet/utils/generateActivity/helper/getAsyncStatus.ts b/packages/shared/lib/core/wallet/utils/generateActivity/helper/getAsyncStatus.ts new file mode 100644 index 0000000000..8e45ed2471 --- /dev/null +++ b/packages/shared/lib/core/wallet/utils/generateActivity/helper/getAsyncStatus.ts @@ -0,0 +1,23 @@ +import { ActivityAsyncStatus } from '@core/wallet/enums' + +export function getAsyncStatus( + isClaimed: boolean, + expirationDate: Date, + timelockDate: Date, + hasStorageDeposit: boolean, + currentTimeStamp: number +): ActivityAsyncStatus { + if (isClaimed) { + return ActivityAsyncStatus.Claimed + } else if (timelockDate && timelockDate.getTime() > currentTimeStamp) { + return ActivityAsyncStatus.Timelocked + } else if (expirationDate && expirationDate.getTime() < currentTimeStamp) { + return ActivityAsyncStatus.Expired + } else if (hasStorageDeposit || expirationDate) { + return ActivityAsyncStatus.Unclaimed + } else if (timelockDate) { + return ActivityAsyncStatus.Claimed + } else { + return ActivityAsyncStatus.Unclaimed + } +} diff --git a/packages/shared/lib/core/wallet/utils/generateActivity/helper/index.ts b/packages/shared/lib/core/wallet/utils/generateActivity/helper/index.ts index cfeb8c142e..9437928974 100644 --- a/packages/shared/lib/core/wallet/utils/generateActivity/helper/index.ts +++ b/packages/shared/lib/core/wallet/utils/generateActivity/helper/index.ts @@ -1,5 +1,6 @@ export * from './getActivityTypeFromOutput' export * from './getAsyncDataFromOutput' +export * from './getAsyncStatus' export * from './getAmountFromOutput' export * from './getSendingInformation' export * from './getGovernanceInfo' diff --git a/packages/shared/lib/core/wallet/utils/outputs/getTimeDifference.ts b/packages/shared/lib/core/wallet/utils/outputs/getTimeDifference.ts index 10284ef7cf..465094bceb 100644 --- a/packages/shared/lib/core/wallet/utils/outputs/getTimeDifference.ts +++ b/packages/shared/lib/core/wallet/utils/outputs/getTimeDifference.ts @@ -22,6 +22,6 @@ export function getTimeDifference(lateDate: Date, earlyDate: Date): string { } else if (seconds > 0) { return '<1min' } else { - return '-' + return undefined } }