diff --git a/src/components/Dropdown.vue b/src/components/Dropdown.vue index 047259e..b0bca1b 100644 --- a/src/components/Dropdown.vue +++ b/src/components/Dropdown.vue @@ -6,7 +6,7 @@ import {ref} from 'vue'; interface Props { inline?: boolean; - autoClose: boolean; + autoClose?: boolean; } const props = withDefaults(defineProps(), { diff --git a/src/ledger/LedgerLabel.vue b/src/ledger/LedgerLabel.vue index 23bd9ae..e584595 100644 --- a/src/ledger/LedgerLabel.vue +++ b/src/ledger/LedgerLabel.vue @@ -2,9 +2,12 @@ import {isCombined, Ledger} from "@/ledger/ledger.ts"; import {FolderOpenIcon} from '@heroicons/vue/24/outline'; +import {RouterLink} from "vue-router"; +import {routeNames} from "@/routes.ts"; interface Props { ledger: Ledger; + link?: boolean; } const props = defineProps(); @@ -14,6 +17,7 @@ const props = defineProps();
- {{ ledger.name }} + {{ ledger.name }} + {{ ledger.name }}
diff --git a/src/ledger/ledger.ts b/src/ledger/ledger.ts index 74659c8..cb75a39 100644 --- a/src/ledger/ledger.ts +++ b/src/ledger/ledger.ts @@ -6,12 +6,14 @@ import { LedgerResponseTypeEnum, MainLedgerResponse, MainLedgerResponseTypeEnum, + TransactionResponse, + TransferResponseTypeEnum, UpdateCombinedLedgerRequest, UpdateMainLedgerRequest } from "@/generated/mammon"; import {defineStore} from "pinia"; import {ref, triggerRef} from "vue"; -import {ledgerApi} from "@/mammon"; +import {ledgerApi, transactionApi} from "@/mammon"; export const LedgerTypes = LedgerResponseTypeEnum; @@ -20,6 +22,7 @@ export type MainLedger = MainLedgerResponse & {type: MainLedgerResponseTypeEnum} export type CombinedLedger = CombinedLedgerResponse & {type: CombinedLedgerResponseTypeEnum} export type Ledger = MainLedger | CombinedLedger; +export const TransferTypes = TransferResponseTypeEnum; export const systemLedgerRef = 'system'; export const systemLedger = { @@ -71,3 +74,5 @@ export const useLedgersStore = defineStore('ledgers', () => { return {ledgers, findById, findAllById, createMain, createCombined, updateMain, updateCombined, refresh}; }) +export const findAllTransactionInLeger = (ledger: Ledger | string): Promise => transactionApi.finAllTransactionsInLedger(typeof ledger == 'string' ? ledger : ledger.ledgerId).then(response => response.data) + diff --git a/src/mammon/mammonService.ts b/src/mammon/mammonService.ts index 2b2bf10..22c400c 100644 --- a/src/mammon/mammonService.ts +++ b/src/mammon/mammonService.ts @@ -6,7 +6,8 @@ import { CharacterRuleBookApi, LedgerApi, ProcessingApi, - RuleBookApi + RuleBookApi, + TransactionApi } from "@/generated/mammon"; export const mammonUrl = import.meta.env.VITE_MAMMON_URL; @@ -22,6 +23,7 @@ const mammonAxiosInstance = axios.create({ logResource(mammonAxiosInstance) export const ledgerApi = new LedgerApi(undefined, mammonUrl, mammonAxiosInstance); +export const transactionApi = new TransactionApi(undefined, mammonUrl, mammonAxiosInstance); export const characterApi = new CharacterApi(undefined, mammonUrl, mammonAxiosInstance); export const ruleBookApi = new RuleBookApi(undefined, mammonUrl, mammonAxiosInstance); export const characterRuleBookApi = new CharacterRuleBookApi(undefined, mammonUrl, mammonAxiosInstance); diff --git a/src/market/IskLabel.vue b/src/market/IskLabel.vue new file mode 100644 index 0000000..97fafaa --- /dev/null +++ b/src/market/IskLabel.vue @@ -0,0 +1,13 @@ + + + \ No newline at end of file diff --git a/src/market/index.ts b/src/market/index.ts index a77f718..01ee844 100644 --- a/src/market/index.ts +++ b/src/market/index.ts @@ -6,3 +6,5 @@ export * from './type'; export * from './appraisal'; export * from './market'; +export { default as IskLabel } from './IskLabel.vue'; + diff --git a/src/market/type/MarketType.ts b/src/market/type/MarketType.ts index 0301189..3f37467 100644 --- a/src/market/type/MarketType.ts +++ b/src/market/type/MarketType.ts @@ -1,27 +1,40 @@ +import {esiAxiosInstance} from '@/service'; + export type MarketType = { - id: number; + type_id: number; group_id: number; - marketgroup_id: number; + market_group_id: number; name: string; published: boolean; description: string; - basePrice: number; + base_price: number; icon_id: number; volume: number; - portionSize: number; + portion_size: number; } +const cache = new Map(); // TODO move to pinia store + +const fetchType = (id: number): Promise => { + if (cache.has(id)) { + return Promise.resolve(cache.get(id)!); + } + return esiAxiosInstance.get(`/universe/types/${id}/`).then(r => { + cache.set(id, r.data); + return r.data; + }); +}; + export const getMarketType = async (type: string | number): Promise => (await getMarketTypes([type]))[0]; export const getMarketTypes = async (types: (string | number)[]): Promise => { if (types.length === 0) { return []; - } else if (types.length === 1 && typeof types[0] === "number") { - return []; } - return [] + const ids = types.filter((t): t is number => typeof t === 'number'); + return Promise.all(ids.map(fetchType)); } -const blueprintMarketGrous = [ // TODO add all groups +const blueprintMarketGroups = [ // TODO add all groups 2, 2157, 2159, diff --git a/src/pages/ledger/ListLedgerTransactions.vue b/src/pages/ledger/ListLedgerTransactions.vue new file mode 100644 index 0000000..8e9ab12 --- /dev/null +++ b/src/pages/ledger/ListLedgerTransactions.vue @@ -0,0 +1,67 @@ + + + diff --git a/src/pages/ledger/ListLedgers.vue b/src/pages/ledger/ListLedgers.vue index cab096a..2f20fba 100644 --- a/src/pages/ledger/ListLedgers.vue +++ b/src/pages/ledger/ListLedgers.vue @@ -4,7 +4,7 @@ import {EditLedgerModal, LedgerLabel, useLedgersStore} from "@/ledger"; import {storeToRefs} from "pinia"; import {nextTick, ref} from "vue"; import {PencilSquareIcon} from "@heroicons/vue/24/outline"; -import {formatIsk} from "@/formaters.ts"; +import {IskLabel} from "@/market"; const {ledgers} = storeToRefs(useLedgersStore()); @@ -22,9 +22,9 @@ const openEdit = async (ledgerId: string) => { \ No newline at end of file diff --git a/src/routes.ts b/src/routes.ts index 20b3bde..22e70bc 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -3,10 +3,11 @@ import {RouteRecordRaw} from 'vue-router'; export const routeNames = { home: 'home', callback: 'callback', + listLedgerTransactions: 'list-ledger-tTransactions', listRuleBooks: 'list-rule-books', newRuleBook: 'new-rule-book', editRuleBook: 'edit-rule-book', - characterRulebook: 'character-rulebook', + editCharacterRulebook: 'edit-character-rule-book', marketTypes: 'market-types', about: 'about', } as const; @@ -17,6 +18,7 @@ export const routes: RouteRecordRaw[] = [ {path: '/ledgers', component: () => import('@/pages/Ledgers.vue'), children: [ {path: '', component: () => import('@/pages/ledger/ListLedgers.vue')}, + {path: ':ledgerId/transactions', name: routeNames.listLedgerTransactions, component: () => import('@/pages/ledger/ListLedgerTransactions.vue')}, ]}, {path: '/rules', component: () => import('@/pages/Rules.vue'), children: [ @@ -28,7 +30,7 @@ export const routes: RouteRecordRaw[] = [ ]}, {path: '/characters/rules', children: [ {path: '', component: () => import('@/pages/rules/ListCharacterRuleBooks.vue')}, - {path: '/characters/:characterId/rules', name: routeNames.characterRulebook, component: () => import('@/pages/rules/EditCharacterRuleBook.vue')}, + {path: '/characters/:characterId/rules', name: routeNames.editCharacterRulebook, component: () => import('@/pages/rules/EditCharacterRuleBook.vue')}, ]} ]},