From d9916cb01ef6136f557fb88cd30a1aa46ac09980 Mon Sep 17 00:00:00 2001 From: Carlo Date: Mon, 29 Nov 2021 15:28:38 +0100 Subject: [PATCH] fix: Removed space after colons in account names. Sometimes the android keyboard / autosuggestion adds it. --- frontend/src/helpers/clear-transaction.ts | 12 ------- frontend/src/helpers/fix-transaction.test.ts | 33 +++++++++++++++++++ frontend/src/helpers/fix-transaction.ts | 32 ++++++++++++++++++ .../pages/dashboard/confirmation-modal.tsx | 4 +-- 4 files changed, 67 insertions(+), 14 deletions(-) delete mode 100644 frontend/src/helpers/clear-transaction.ts create mode 100644 frontend/src/helpers/fix-transaction.test.ts create mode 100644 frontend/src/helpers/fix-transaction.ts diff --git a/frontend/src/helpers/clear-transaction.ts b/frontend/src/helpers/clear-transaction.ts deleted file mode 100644 index 8411994..0000000 --- a/frontend/src/helpers/clear-transaction.ts +++ /dev/null @@ -1,12 +0,0 @@ -import dayjs from 'dayjs'; -import { Transaction } from 'pta-journal'; - -// Removes empty entries -function clearTransaction(trx: Transaction): Transaction { - return { - ...trx, - entries: trx.entries.filter((e) => !(e.account == "" && e.amount === "")), - }; -} - -export default clearTransaction; diff --git a/frontend/src/helpers/fix-transaction.test.ts b/frontend/src/helpers/fix-transaction.test.ts new file mode 100644 index 0000000..5403053 --- /dev/null +++ b/frontend/src/helpers/fix-transaction.test.ts @@ -0,0 +1,33 @@ +import { Transaction } from 'pta-journal'; + +import { clearTransaction, fixColons } from './fix-transaction'; + +describe("clearTransaction", () => { + test("Clears empty postings", () => { + const trx: Transaction = { + comment: "comment", + date: new Date("2019-01-01"), + description: "string", + entries: [ + { account: "", amount: "" }, + { account: "A", amount: "" }, + { account: "", amount: "123" }, + ], + }; + + expect(clearTransaction(trx).entries.length).toBe(2); + }); +}); + +describe("fixColons", () => { + test("Clears empty spaces in accounts", () => { + const trx: Transaction = { + comment: "comment", + date: new Date("2019-01-01"), + description: "string", + entries: [{ account: "Expenses: Groceries", amount: "" }], + }; + + expect(fixColons(trx).entries[0].account).toBe("Expenses:Groceries"); + }); +}); diff --git a/frontend/src/helpers/fix-transaction.ts b/frontend/src/helpers/fix-transaction.ts new file mode 100644 index 0000000..0e0a7d3 --- /dev/null +++ b/frontend/src/helpers/fix-transaction.ts @@ -0,0 +1,32 @@ +import dayjs from 'dayjs'; +import { Transaction } from 'pta-journal'; + +type FixTransaction = (trx: Transaction) => Transaction; + +// Removes empty entries +export const clearTransaction: FixTransaction = (trx) => { + return { + ...trx, + entries: trx.entries.filter((e) => !(e.account == "" && e.amount === "")), + }; +}; + +// Removes empty entries +export const fixColons: FixTransaction = (trx) => { + return { + ...trx, + entries: trx.entries.map((e) => ({ + ...e, + account: e.account.replace(/:\s+/g, ":"), + })), + }; +}; + +const compose = + (...functions) => + (args) => + functions.reduceRight((arg, fn) => fn(arg), args); + +const fixer: FixTransaction = compose(clearTransaction, fixColons); + +export default fixer; diff --git a/frontend/src/pages/dashboard/confirmation-modal.tsx b/frontend/src/pages/dashboard/confirmation-modal.tsx index 66fe243..da090b1 100644 --- a/frontend/src/pages/dashboard/confirmation-modal.tsx +++ b/frontend/src/pages/dashboard/confirmation-modal.tsx @@ -1,6 +1,6 @@ import React, { FC } from 'react'; -import clearTransaction from 'helpers/clear-transaction'; +import fixer from 'helpers/fix-transaction'; import { Button, Code, Group, Modal } from '@mantine/core'; @@ -11,7 +11,7 @@ const ConfirmationModal: FC<{ onCancel: () => void; onConfirm: (data: Transaction) => void; }> = ({ data, onCancel, onConfirm }) => { - const clean = clearTransaction(data); + const clean = fixer(data); const trxstr = formatTransaction(clean); return (