feat(#8): Handle polymorphic activity source

This commit is contained in:
Sirttas
2026-07-03 14:00:42 +02:00
parent 052a0a5d03
commit 8d73fe3ed1
8 changed files with 154 additions and 31 deletions
+11 -7
View File
@@ -2,12 +2,13 @@
import {findAllTransactionInLeger, useLedgerParam} from "@/ledger";
import {computedAsync} from "@vueuse/core";
import {TransactionResponse} from "@/generated/mammon";
import {ActivitySourceResponseTypeEnum, TransactionResponse} from "@/generated/mammon";
import {IskLabel} from "@/market";
import {SortableHeader, useSort, VirtualScrollTable} from "@/components/table";
import {TransferList, TransferTypes} from "@/transaction";
import {Dropdown} from "@/components";
import {CharacterLabel, useCharactersStore} from "@/characters";
import {SourceLabel} from "@/activity";
import {useCharactersStore} from "@/characters";
import {formatEveDate} from "@/formaters.ts";
const {ledgerId} = useLedgerParam();
@@ -21,10 +22,13 @@ const transactions = computedAsync<TransactionResponse[]>(async () => {
}, []);
const { sortedArray, headerProps } = useSort(computedAsync(() => Promise.all(transactions.value.map(async transaction => {
const character = await charactersStore.findById(transaction.characterId);
const source = transaction.source;
const character = source.type === ActivitySourceResponseTypeEnum.Character && source.characterId
? await charactersStore.findById(source.characterId)
: undefined;
return {
character,
characterName: character?.name ?? "",
source,
sourceName: character?.name ?? (source.type === ActivitySourceResponseTypeEnum.Corporation ? "Corporation" : ""),
transactionId: transaction.transactionId,
description: transaction.description,
date: new Date(transaction.datetime),
@@ -59,7 +63,7 @@ const getIskBalance = (transaction: TransactionResponse) => {
<template #default="{ list }">
<thead>
<tr>
<SortableHeader v-bind="headerProps" sortKey="characterName">Character</SortableHeader>
<SortableHeader v-bind="headerProps" sortKey="sourceName">Source</SortableHeader>
<SortableHeader v-bind="headerProps" sortKey="date">Date</SortableHeader>
<SortableHeader v-bind="headerProps" sortKey="balance">Isk Change</SortableHeader>
<SortableHeader v-bind="headerProps" sortKey="description">Description</SortableHeader>
@@ -68,7 +72,7 @@ const getIskBalance = (transaction: TransactionResponse) => {
<tbody>
<tr v-for="t in list" :key="t.data.transactionId">
<td>
<CharacterLabel v-if="t.data.character" :character="t.data.character" />
<SourceLabel :source="t.data.source" />
</td>
<td>
<Dropdown class="transfer-dropdown">