Skip to content

Commit 61d13b2

Browse files
committed
for the history
1 parent 54bc649 commit 61d13b2

17 files changed

+114
-147
lines changed

packages/shared/components/tiles/tileFooters/AsyncActivityTileFooter.svelte

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@
1616
import { closePopup, openPopup, PopupId } from '@auxiliary/popup'
1717
1818
export let activity: ActivityBase
19-
19+
20+
2021
$: shouldShowActions =
2122
(activity.direction() === ActivityDirection.Incoming ||
2223
activity.direction() === ActivityDirection.SelfTransaction) &&
2324
activity.asyncData()?.asyncStatus === ActivityAsyncStatus.Unclaimed
25+
26+
$: console.log(activity, shouldShowActions)
2427
2528
$: timeDiff = getTimeDiff(activity)
2629
$: hasExpirationTime = !!activity.asyncData()?.expirationDate
@@ -50,7 +53,7 @@
5053
}
5154
5255
function getTimeDiff(activity: ActivityBase): string {
53-
if (activity.asyncData) {
56+
if (activity.asyncData()) {
5457
const { asyncStatus, expirationDate, timelockDate } = activity.asyncData()
5558
if (asyncStatus === ActivityAsyncStatus.Timelocked) {
5659
return getTimeDifference(timelockDate, $time)
@@ -84,7 +87,7 @@
8487
{#if shouldShowActions}
8588
<Button
8689
onClick={onRejectClick}
87-
disabled={activity.asyncData?.isClaiming || activity.asyncData?.isRejected}
90+
disabled={activity.asyncData()?.isClaiming || activity.asyncData()?.isRejected}
8891
inlineStyle="min-width: 4rem;"
8992
size={ButtonSize.Small}
9093
outline
@@ -93,15 +96,15 @@
9396
</Button>
9497
<Button
9598
onClick={onClaimClick}
96-
disabled={activity.asyncData?.isClaiming}
97-
isBusy={activity.asyncData?.isClaiming}
99+
disabled={activity.asyncData()?.isClaiming}
100+
isBusy={activity.asyncData()?.isClaiming}
98101
inlineStyle="min-width: 4rem;"
99102
size={ButtonSize.Small}
100103
>
101104
{localize('actions.claim')}
102105
</Button>
103106
{:else}
104-
<ActivityAsyncStatusPill asyncStatus={activity.asyncData?.asyncStatus} />
107+
<ActivityAsyncStatusPill asyncStatus={activity.asyncData()?.asyncStatus} />
105108
{/if}
106109
</svelte:fragment>
107110
</TileFooter>

packages/shared/lib/core/wallet/actions/activities/generateAndStoreActivitiesForWallet.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,11 @@ export async function generateAndStoreActivitiesForWallet(wallet: IWalletState):
1919
const linkedProcessedTransactions = linkTransactionsWithClaimingTransactions(processedTransactions, wallet)
2020

2121
// Step 3: generate activities from processed transactions
22-
//const activities = await generateActivitiesFromProcessedTransactions(linkedProcessedTransactions, wallet)
2322
const activities = await Promise.all(linkedProcessedTransactions.flatMap((tx) => ActivityBase.generateActivitiesFromProcessedTransaction(wallet, tx)));
2423
selectedWalletActivities.set(activities.flat());
2524
console.log(activities)
2625

2726
hideActivitiesForFoundries(wallet)
28-
//await setOutgoingAsyncActivitiesToClaimed(wallet)
27+
await setOutgoingAsyncActivitiesToClaimed(wallet)
2928
await loadAssetsForSelectedWallet()
3029
}

packages/shared/lib/core/wallet/actions/activities/linkTransactionsWithClaimingTransactions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,6 @@ function searchClaimedTransactionInIncomingAsyncTransactions(
8383
transaction: ProcessedTransaction
8484
): ProcessedTransaction {
8585
return allAsyncTransaction.find((candidate) =>
86-
transaction.utxoInputs?.some((input) => input?.transactionId === candidate?.transactionId)
86+
transaction.transactionInputs?.some((input) => input.metadata?.blockId === candidate.blockId)
8787
)
8888
}
Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,37 @@
1-
import type { OutputData, OutputResponse, TransactionWithMetadata } from '@iota/sdk/out/types'
2-
1+
import type { OutputData, OutputWithMetadata, TransactionWithMetadata } from '@iota/sdk/out/types'
32
import { IWalletState } from '@core/wallet/interfaces'
4-
53
import { preprocessGroupedOutputs } from '../../utils/outputs'
64
import { ProcessedTransaction } from '../../interfaces'
75

6+
// TODO: Fix this.
87
export async function preprocessOutputsForWallet(wallet: IWalletState): Promise<ProcessedTransaction[]> {
98
const outputs = await wallet.outputs()
9+
console.log(outputs)
1010

1111
const transactions = await wallet.transactions()
12-
const transactionMap = getTransactionsMapFromList(transactions)
13-
const incomingTransactions = getMapFromList(await wallet.incomingTransactions())
12+
const transactionsSet = txsListToSet(transactions)
13+
const incomingTransactions = txsListToMap(await wallet.incomingTransactions())
1414

15-
const groupedOutputs: { [key: string]: OutputData[] } = {}
15+
const groupedOutputs = new Map<string, OutputData[]>();
1616
for (const output of outputs) {
17-
const transactionId = output?.metadata?.transactionId
17+
const blockId = output?.metadata?.blockId
1818

19-
const hasTransaction = !!transactionMap[transactionId]
20-
if (!hasTransaction) {
21-
if (!groupedOutputs[transactionId]) {
22-
groupedOutputs[transactionId] = []
19+
const hasBlock = transactionsSet.has(blockId);
20+
if (!hasBlock) {
21+
if (!groupedOutputs.has(blockId)) {
22+
groupedOutputs.set(blockId, [])
2323
}
24-
groupedOutputs[transactionId].push(output)
24+
groupedOutputs.get(blockId)?.push(output)
2525
}
2626
}
2727

2828
const processedTransactions: ProcessedTransaction[] = []
29-
for (const transactionId of Object.keys(groupedOutputs)) {
29+
for (const blockId of Object.keys(groupedOutputs)) {
3030
try {
31-
const inputs: OutputResponse[] = incomingTransactions[transactionId]?.inputs ?? []
32-
const processedTransaction = preprocessGroupedOutputs(groupedOutputs[transactionId], inputs, wallet)
31+
const transaction = incomingTransactions.get(blockId)
32+
const inputs: OutputWithMetadata[] = transaction?.inputs ?? []
33+
const outputs = groupedOutputs.get(blockId) ?? [];
34+
const processedTransaction = preprocessGroupedOutputs(outputs, inputs, wallet)
3335

3436
processedTransactions.push(processedTransaction)
3537
} catch (err) {
@@ -39,20 +41,20 @@ export async function preprocessOutputsForWallet(wallet: IWalletState): Promise<
3941
return processedTransactions
4042
}
4143

42-
function getTransactionsMapFromList(transactions: TransactionWithMetadata[]): { [transactionId: string]: boolean } {
43-
const transactionMap = {}
44+
function txsListToSet(transactions: TransactionWithMetadata[]): Set<string> {
45+
const blocksSet = new Set<string>();
4446
for (const transaction of transactions) {
45-
transactionMap[transaction?.transactionId] = true
47+
if(transaction.blockId){
48+
blocksSet.add(transaction.blockId);
49+
}
4650
}
47-
return transactionMap
51+
return blocksSet
4852
}
4953

50-
function getMapFromList(transactions: TransactionWithMetadata[]): {
51-
[transactionId: string]: TransactionWithMetadata
52-
} {
53-
const transactionMap = {}
54+
function txsListToMap(transactions: TransactionWithMetadata[]): Map<string, TransactionWithMetadata> {
55+
const transactionMap = new Map();
5456
for (const transaction of transactions) {
55-
transactionMap[transaction.transactionId] = transaction
57+
transactionMap.set(transaction.blockId, transaction);
5658
}
5759
return transactionMap
5860
}

packages/shared/lib/core/wallet/actions/activities/preprocessTransactionsForWallet.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { ProcessedTransaction } from '../../interfaces/processed-transaction.int
44

55
export async function preprocessTransactionsForWallet(wallet: IWalletState): Promise<ProcessedTransaction[]> {
66
const transactions = await wallet.transactions()
7+
console.log(transactions)
78

89
const processedTransactions: ProcessedTransaction[] = []
910

packages/shared/lib/core/wallet/actions/events-handlers/handleNewOutputEvent.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ import {
55
ActivityType,
66
IWrappedOutput,
77
WalletApiEventHandler,
8-
addActivitiesToWalletActivitiesInAllWalletActivities,
98
addPersistedAsset,
10-
generateActivities,
119
AddressConverter,
1210
getOrRequestAssetFromPersistedAssets,
1311
hasBlockIssuerFeature,
@@ -18,6 +16,8 @@ import {
1816
syncBalance,
1917
validateWalletApiEvent,
2018
DEFAULT_SYNC_OPTIONS,
19+
ActivityBase,
20+
selectedWalletActivities,
2121
} from '@core/wallet'
2222
import {
2323
AccountAddress,
@@ -75,18 +75,18 @@ export async function handleNewOutputEventInternal(walletId: string, payload: Ne
7575
const accountOutputs = await wallet.accounts()
7676
updateActiveWallet(wallet.id, { walletOutputs, accountOutputs, walletUnspentOutputs })
7777

78-
const processedOutput = preprocessGroupedOutputs([outputData], payload?.transactionInputs ?? [], wallet)
78+
const processedTransaction = preprocessGroupedOutputs([outputData], payload?.transactionInputs ?? [], wallet)
7979

80-
const activities = await generateActivities(processedOutput, wallet)
80+
const activities = await ActivityBase.generateActivitiesFromProcessedTransaction(wallet, processedTransaction)
8181
for (const activity of activities) {
82-
if (activity.type === ActivityType.Transaction || activity.type === ActivityType.Foundry) {
83-
const asset = await getOrRequestAssetFromPersistedAssets(activity.assetId)
82+
if (activity.type() === ActivityType.Transaction || activity.type() === ActivityType.Foundry) {
83+
selectedWalletActivities.update((activities) => [...activities, activity])
84+
const asset = await getOrRequestAssetFromPersistedAssets(activity.assetId())
8485
if (asset) {
8586
addPersistedAsset(asset)
8687
}
8788
}
8889
}
89-
addActivitiesToWalletActivitiesInAllWalletActivities(wallet.id, activities)
9090
}
9191
if (isImplicitAccountOutput(outputData)) {
9292
await syncBalance(wallet.id, true)

packages/shared/lib/core/wallet/actions/setOutgoingAsyncActivitiesToClaimed.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,34 @@ import { IWalletState } from '@core/wallet/interfaces'
22
import { BasicOutput, OutputData } from '@iota/sdk/out/types'
33
import { get } from 'svelte/store'
44
import { ActivityAsyncStatus, ActivityDirection } from '../enums'
5-
import { allWalletActivities, updateAsyncDataByActivityId } from '../stores'
65
import { getExpirationDateFromOutput } from '../utils'
76
import { getUnixTimestampFromNodeInfoAndSlotIndex, nodeInfoProtocolParameters } from '@core/network'
7+
import { selectedWalletActivities, updateActivityById } from '..'
88

99
export async function setOutgoingAsyncActivitiesToClaimed(wallet: IWalletState): Promise<void> {
10-
const walletActivities = get(allWalletActivities)[wallet.id]
10+
const walletActivities = get(selectedWalletActivities)
1111

1212
const activities = walletActivities.filter(
13-
(activity) => activity.direction === ActivityDirection.Outgoing && activity.asyncData
13+
(activity) => activity.direction() === ActivityDirection.Outgoing && activity.asyncData()
1414
)
1515

1616
for (const activity of activities) {
1717
try {
18-
const detailedOutput = await wallet.getOutput(activity.outputId)
18+
const detailedOutput = await wallet.getOutput(activity.outputId())
1919
const nodeProtocolParameters = get(nodeInfoProtocolParameters)
2020
if (nodeProtocolParameters && detailedOutput.metadata.spent) {
2121
const claimedDate = new Date(
2222
getUnixTimestampFromNodeInfoAndSlotIndex(nodeProtocolParameters, detailedOutput.metadata.spent.slot)
2323
)
2424
const isClaimed = detailedOutput && isOutputClaimed(detailedOutput, claimedDate)
2525
if (isClaimed && claimedDate) {
26-
updateAsyncDataByActivityId(wallet.id, activity.id, {
27-
asyncStatus: ActivityAsyncStatus.Claimed,
28-
claimedDate,
26+
updateActivityById(activity.id(), (activity) => {
27+
const asyncData = activity.asyncData();
28+
if(asyncData){
29+
asyncData.asyncStatus = ActivityAsyncStatus.Claimed;
30+
asyncData.claimedDate = claimedDate;
31+
}
32+
2933
})
3034
}
3135
}

packages/shared/lib/core/wallet/interfaces/activity-generation-parameters.interface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ActivityAction } from '../enums'
2-
import { IProcessedTransaction, ProcessedTransaction } from './processed-transaction.interface'
2+
import { ProcessedTransaction } from './processed-transaction.interface'
33
import { IWrappedOutput } from './wrapped-output.interface'
44

55
export interface ActivityGenerationParameters {

packages/shared/lib/core/wallet/interfaces/processed-transaction.interface.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ActivityDirection } from '@core/wallet/enums'
22
import { IWrappedOutput } from './wrapped-output.interface'
3-
import { CommonOutput, NftOutput, OutputType, UTXOInput, InclusionState } from '@iota/sdk/out/types'
3+
import { CommonOutput, NftOutput, OutputType, UTXOInput, InclusionState, OutputWithMetadata, OutputData } from '@iota/sdk/out/types'
44
import {
55
getNativeTokenFromOutput,
66
getNftId,
@@ -16,6 +16,7 @@ import { SenderInfo } from '../types'
1616
export interface IProcessedTransaction {
1717
outputs: IWrappedOutput[]
1818
transactionId: string
19+
blockId: string
1920
direction: ActivityDirection
2021
time: Date
2122
inclusionState: InclusionState
@@ -31,19 +32,19 @@ export interface IClaimData {
3132

3233
export class ProcessedTransaction {
3334
constructor(
34-
public outputs: IWrappedOutput[],
35+
public outputs: OutputData[],
3536
public transactionId: string,
3637
public direction: ActivityDirection,
3738
public time: Date,
3839
public inclusionState: InclusionState,
39-
public utxoInputs: UTXOInput[],
40-
public wrappedInputs: IWrappedOutput[],
41-
public claimingData?: IClaimData
40+
public transactionInputs: OutputWithMetadata[],
41+
public blockId: string,
42+
public claimingData?: IClaimData,
4243
) {}
4344

4445
getSendingInformation(wallet: IWalletState, output: CommonOutput): SenderInfo {
4546
const recipient = getRecipientFromOutput(output)
46-
const sender = this.wrappedInputs?.length
47+
const sender = this.transactionInputs?.length
4748
? getSubjectFromAddress(getSenderAddressFromInputs(wrappedInputs)) // TODO: Fix this
4849
: getSenderFromTransaction(this.direction === ActivityDirection.Incoming, wallet.depositAddress, output)
4950

@@ -56,17 +57,17 @@ export class ProcessedTransaction {
5657
}
5758
}
5859

59-
getBurnedNftInputs(): IWrappedOutput[] {
60-
return this.wrappedInputs.filter((wrappedInput) => {
60+
getBurnedNftInputs(): OutputWithMetadata[] {
61+
return this.transactionInputs.filter((wrappedInput) => {
6162
const input = wrappedInput.output
6263
if (input.type === OutputType.Nft) {
6364
const nftInput = input as NftOutput
64-
const nftId = getNftId(nftInput.nftId, wrappedInput.outputId)
65+
const nftId = getNftId(nftInput.nftId, wrappedInput.metadata.blockId)
6566

6667
const isIncludedInOutputs = this.outputs.some((output) => {
6768
if (output.output.type === OutputType.Nft) {
6869
const nftOutput = output.output as NftOutput
69-
return getNftId(nftOutput.nftId, output.outputId) === nftId
70+
return getNftId(nftOutput.nftId, output.metadata.outputId) === nftId
7071
} else {
7172
return false
7273
}
@@ -87,7 +88,7 @@ export class ProcessedTransaction {
8788
}
8889

8990
const inputNativeTokens: { [key: string]: number } = ProcessedTransaction.getAllNativeTokensFromOutputs(
90-
this.wrappedInputs
91+
this.transactionInputs
9192
)
9293
// No burned native tokens if input doesn't contain any native tokens
9394
if (Object.keys(inputNativeTokens).length === 0) {
@@ -116,7 +117,7 @@ export class ProcessedTransaction {
116117
}
117118
}
118119

119-
static getAllNativeTokensFromOutputs(outputs: IWrappedOutput[]): { [key: string]: number } {
120+
static getAllNativeTokensFromOutputs(outputs: OutputWithMetadata[]): { [key: string]: number } {
120121
const nativeTokens: { [key: string]: number } = {}
121122
for (const output of outputs) {
122123
if (output.output.type === OutputType.Foundry || output.output.type === OutputType.Basic) {

packages/shared/lib/core/wallet/stores/selected-wallet-activities.store.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@ export const activitySearchTerm: Writable<string> = writable('')
1717
export const queriedActivities: Readable<ActivityBase[]> = derived(
1818
[selectedWalletActivities, activitySearchTerm, activityFilter],
1919
([$selectedWalletActivities, $activitySearchTerm]) => {
20+
console.log($selectedWalletActivities)
2021
// TODO: Refactor this an clean up.
2122
let activityList = $selectedWalletActivities.filter((_activity) => {
2223
const containsAssets = _activity.type() === ActivityType.Transaction || _activity.type() === ActivityType.Foundry
24+
console.log(_activity.isHidden(), containsAssets)
2325
if (!_activity.isHidden() && !containsAssets) {
2426
return true
2527
}
@@ -29,11 +31,15 @@ export const queriedActivities: Readable<ActivityBase[]> = derived(
2931
? getAssetFromPersistedAssets(_activity.assetId())
3032
: undefined
3133
const hasValidAsset = asset?.metadata && isValidIrc30Token(asset.metadata)
32-
return !_activity.isHidden && hasValidAsset
34+
return !_activity.isHidden() && hasValidAsset
3335
})
3436

37+
console.log(activityList)
38+
3539
activityList = activityList.filter((activity) => isVisibleActivity(activity))
3640

41+
console.log(activityList)
42+
3743
if ($activitySearchTerm) {
3844
activityList = activityList.filter((activity) => {
3945
const fieldsToSearch = getFieldsToSearchFromActivity(activity)
@@ -92,3 +98,16 @@ function getFieldsToSearchFromActivity(activity: ActivityBase): string[] {
9298

9399
return fieldsToSearch
94100
}
101+
102+
103+
export function updateActivityById(id: string, updater: (activity: ActivityBase) => void){
104+
selectedWalletActivities.update((activities) => {
105+
let activity = activities.find((activity) => { activity.id() === id });
106+
107+
if(activity){
108+
updater(activity)
109+
}
110+
111+
return activities
112+
})
113+
}

0 commit comments

Comments
 (0)