diff --git a/src/FiscalOS.Web/src/components/TransactionCard.vue b/src/FiscalOS.Web/src/components/TransactionCard.vue
index abc41d3..a4dfbe5 100644
--- a/src/FiscalOS.Web/src/components/TransactionCard.vue
+++ b/src/FiscalOS.Web/src/components/TransactionCard.vue
@@ -5,6 +5,10 @@
transaction: Transaction;
}>();
+ const emit = defineEmits<{
+ delete: [id: string];
+ }>();
+
function formatDate(date: string) {
const formatter = new Intl.DateTimeFormat('en-US', {
year: 'numeric',
@@ -39,6 +43,14 @@
{{ transaction.description }}
+
+
+
@@ -69,4 +81,26 @@
font-size: 0.875rem;
color: #666666;
}
+
+ .actions {
+ display: flex;
+ justify-content: flex-end;
+ gap: 0.5rem;
+ padding-top: 0.5rem;
+ }
+
+ .delete-btn {
+ background: none;
+ border: 0.0625rem solid var(--state-error);
+ border-radius: 0.25rem;
+ color: var(--state-error);
+ cursor: pointer;
+ font-size: 0.75rem;
+ padding: 0.25rem 0.5rem;
+ }
+
+ .delete-btn:hover {
+ background: var(--state-error);
+ color: var(--text-primary);
+ }
diff --git a/src/FiscalOS.Web/src/services/transactionService.ts b/src/FiscalOS.Web/src/services/transactionService.ts
index e2ba0c3..156a7cc 100644
--- a/src/FiscalOS.Web/src/services/transactionService.ts
+++ b/src/FiscalOS.Web/src/services/transactionService.ts
@@ -20,6 +20,7 @@ export class TransactionServiceFactory implements ITransactionServiceFactory {
export interface ITransactionService {
get: (pageNumber?: number, pageSize?: number) => Promise, Error[]>>;
+ deleteById: (id: string) => Promise>;
}
export class TransactionService implements ITransactionService {
@@ -32,6 +33,24 @@ export class TransactionService implements ITransactionService {
this.client = client;
}
+ async deleteById(id: string): Promise> {
+ const url = this.endpoints.get + '/' + id;
+ const request = new ClientRequest(url);
+
+ try {
+ const res = await this.client.delete(request);
+
+ if (res.ok === false) {
+ return Err([new Error('Failed to delete transaction.')]);
+ }
+
+ return Ok(true);
+ } catch (error) {
+ console.error(error);
+ return Err([new Error('Failed to delete transaction.')]);
+ }
+ }
+
async get(pageNumber: number = 1, pageSize: number = 500) {
const queryParams = new URLSearchParams({
pageNumber: pageNumber.toString(),
diff --git a/src/FiscalOS.Web/src/views/TransactionsView.vue b/src/FiscalOS.Web/src/views/TransactionsView.vue
index 1502111..99c08c6 100644
--- a/src/FiscalOS.Web/src/views/TransactionsView.vue
+++ b/src/FiscalOS.Web/src/views/TransactionsView.vue
@@ -10,6 +10,17 @@
const transactions = ref([]);
+ async function handleDelete(id: string) {
+ const result = await transactionService.deleteById(id);
+
+ if (result.err) {
+ alert(result.val.map(e => e.message).join('\n'));
+ return;
+ }
+
+ transactions.value = transactions.value.filter(t => t.id !== id);
+ }
+
onMounted(async () => {
const result = await transactionService.get();
@@ -30,7 +41,10 @@
v-for="transaction in transactions"
:key="transaction.id"
>
-
+