From d36417e41227c9785b55027da4329ed16520f485 Mon Sep 17 00:00:00 2001 From: shall0pass <20625555+shall0pass@users.noreply.github.com> Date: Sat, 21 Jan 2023 17:17:50 -0600 Subject: [PATCH] [Feature] Add option to control the "cleared state" in Rules (#482) --- .../src/components/accounts/TransactionList.js | 3 ++- .../desktop-client/src/components/modals/EditRule.js | 3 ++- .../src/components/util/GenericInput.js | 11 +++++++++++ packages/loot-core/src/shared/rules.js | 10 ++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/packages/desktop-client/src/components/accounts/TransactionList.js b/packages/desktop-client/src/components/accounts/TransactionList.js index 2cd9e4312..ead417d15 100644 --- a/packages/desktop-client/src/components/accounts/TransactionList.js +++ b/packages/desktop-client/src/components/accounts/TransactionList.js @@ -133,7 +133,8 @@ export default function TransactionList({ if ( newTransaction[field] == null || newTransaction[field] === '' || - newTransaction[field] === 0 + newTransaction[field] === 0 || + newTransaction[field] === false ) { newTransaction[field] = diff[field]; } diff --git a/packages/desktop-client/src/components/modals/EditRule.js b/packages/desktop-client/src/components/modals/EditRule.js index e30e1ff24..e31d429d0 100644 --- a/packages/desktop-client/src/components/modals/EditRule.js +++ b/packages/desktop-client/src/components/modals/EditRule.js @@ -284,7 +284,8 @@ let actionFields = [ 'date', 'amount', 'category', - 'account' + 'account', + 'cleared' ].map(field => [field, mapField(field)]); function ActionEditor({ ops, action, editorStyle, onChange, onDelete, onAdd }) { let { field, op, value, type, error, inputKey = 'initial' } = action; diff --git a/packages/desktop-client/src/components/util/GenericInput.js b/packages/desktop-client/src/components/util/GenericInput.js index 8d8c6aeaf..1d5bd0e95 100644 --- a/packages/desktop-client/src/components/util/GenericInput.js +++ b/packages/desktop-client/src/components/util/GenericInput.js @@ -7,6 +7,7 @@ import Autocomplete from 'loot-design/src/components/Autocomplete'; import CategoryAutocomplete from 'loot-design/src/components/CategorySelect'; import { View, Input } from 'loot-design/src/components/common'; import DateSelect from 'loot-design/src/components/DateSelect'; +import { Checkbox } from 'loot-design/src/components/forms'; import PayeeAutocomplete from 'loot-design/src/components/PayeeAutocomplete'; import RecurringSchedulePicker from 'loot-design/src/components/RecurringSchedulePicker'; @@ -149,6 +150,16 @@ export default function GenericInput({ } break; + case 'boolean': + content = ( + <Checkbox + checked={value} + value={value} + onChange={e => onChange(!value)} + /> + ); + break; + default: if (multi) { content = ( diff --git a/packages/loot-core/src/shared/rules.js b/packages/loot-core/src/shared/rules.js index bfc7c98f4..f19b4358d 100644 --- a/packages/loot-core/src/shared/rules.js +++ b/packages/loot-core/src/shared/rules.js @@ -57,6 +57,8 @@ export function mapField(field, opts) { return 'amount (inflow)'; case 'amount-outflow': return 'amount (outflow)'; + case 'cleared': + return 'cleared'; default: return field; } @@ -154,6 +156,10 @@ export function parse(item) { let parsed = item.value == null ? '' : item.value; return { ...item, value: parsed }; } + case 'boolean': { + let parsed = item.value; + return { ...item, value: parsed }; + } default: } @@ -174,6 +180,10 @@ export function unparse({ error, inputKey, ...item }) { let unparsed = item.value == null ? '' : item.value; return { ...item, value: unparsed }; } + case 'boolean': { + let unparsed = item.value == null ? false : item.value; + return { ...item, value: unparsed }; + } default: } -- GitLab