diff --git a/finnow-api/source/transaction/data_impl_sqlite.d b/finnow-api/source/transaction/data_impl_sqlite.d index 8445f6a..bb2077f 100644 --- a/finnow-api/source/transaction/data_impl_sqlite.d +++ b/finnow-api/source/transaction/data_impl_sqlite.d @@ -682,6 +682,7 @@ class SqliteTransactionDraftRepository : TransactionDraftRepository { response.category = draft.category; response.creditedAccount = draft.creditedAccount; response.debitedAccount = draft.debitedAccount; + response.tags = li.value.tags; response.lineItems = util.sqlite.findAll( db, import("sql/query/get_line_items_draft.sql"), @@ -881,7 +882,7 @@ class SqliteTransactionDraftRepository : TransactionDraftRepository { row.peek!string(20) ).toOptional; } - string aggregateTags = row.peek!(string, PeekMode.slice)(21); + string aggregateTags = row.peek!string(21); if (aggregateTags !is null) { import std.string : split; item.tags = aggregateTags.split(","); diff --git a/web-app/src/components/TransactionDraftCard.vue b/web-app/src/components/TransactionDraftCard.vue new file mode 100644 index 0000000..a0a4bab --- /dev/null +++ b/web-app/src/components/TransactionDraftCard.vue @@ -0,0 +1,115 @@ + + + diff --git a/web-app/src/pages/TransactionDraftPage.vue b/web-app/src/pages/TransactionDraftPage.vue new file mode 100644 index 0000000..8098838 --- /dev/null +++ b/web-app/src/pages/TransactionDraftPage.vue @@ -0,0 +1,188 @@ + + diff --git a/web-app/src/pages/home/DraftsModule.vue b/web-app/src/pages/home/DraftsModule.vue index 08a4663..a48aa96 100644 --- a/web-app/src/pages/home/DraftsModule.vue +++ b/web-app/src/pages/home/DraftsModule.vue @@ -6,6 +6,7 @@ import HomeModule from '@/components/HomeModule.vue' import { useRoute } from 'vue-router' import { onMounted, ref, type Ref } from 'vue' import { getSelectedProfile } from '@/api/profile' +import TransactionDraftCard from '@/components/TransactionDraftCard.vue' const route = useRoute() const page: Ref> = ref({ @@ -38,12 +39,12 @@ async function fetchPage(pageRequest: PageRequest) { @update="(pr) => fetchPage(pr)" class="align-right" /> -
- Draft ID: {{ draft.id }} Template name: {{ draft.templateName }} -
+ :draft="draft" + /> +

There are no drafts.

diff --git a/web-app/src/pages/transaction-editor/EditTransactionPage.vue b/web-app/src/pages/transaction-editor/EditTransactionPage.vue index 502f6d7..cd555e4 100644 --- a/web-app/src/pages/transaction-editor/EditTransactionPage.vue +++ b/web-app/src/pages/transaction-editor/EditTransactionPage.vue @@ -25,8 +25,10 @@ import VendorSelect from '@/components/VendorSelect.vue' import TagsSelect from '@/components/TagsSelect.vue' import { defaultEmptyFormFields, + DraftEditorContext, loadEditorContextFromRoute, NewTransactionEditorContext, + TransactionEditorContext, type TransactionEditorContextBase, type TransactionEditorFormFields, } from './util' @@ -54,6 +56,16 @@ const availableAccounts = computed(() => { const loading = ref(false) const formData: Ref = ref(defaultEmptyFormFields()) const editorContext: Ref = ref(new NewTransactionEditorContext()) +const pageTitle = computed(() => { + if (editorContext.value instanceof NewTransactionEditorContext) { + return 'Add Transaction' + } else if (editorContext.value instanceof DraftEditorContext) { + return 'Edit Draft Transaction' + } else if (editorContext.value instanceof TransactionEditorContext) { + return 'Edit Transaction' + } + return 'Edit Transaction' +}) watch(availableCurrencies, (newValue: Currency[]) => { if (newValue.length === 1) { @@ -77,8 +89,23 @@ onMounted(async () => { })