Skip to content
Snippets Groups Projects
Unverified Commit 2a8b25a3 authored by Jed Fox's avatar Jed Fox Committed by GitHub
Browse files

Fix error cases in displaying filters/rules (#678)

* Add missing imported_payee case

* Switch over to a `switch` to ensure no other cases are missed

* Fix switching from “amount” to “amount (inflow/outflow)”

* fix crash when parsing null value as number

* Fix formatting for “payee/category/account contains” filters
parent f2163af9
No related branches found
No related tags found
No related merge requests found
...@@ -51,6 +51,7 @@ let SchedulesQuery = liveQueryContext(q('schedules').select('*')); ...@@ -51,6 +51,7 @@ let SchedulesQuery = liveQueryContext(q('schedules').select('*'));
export function Value({ export function Value({
value, value,
field, field,
valueIsRaw,
inline = false, inline = false,
data: dataProp, data: dataProp,
describe = x => x.name, describe = x => x.name,
...@@ -93,35 +94,44 @@ export function Value({ ...@@ -93,35 +94,44 @@ export function Value({
} else if (typeof value === 'boolean') { } else if (typeof value === 'boolean') {
return value ? 'true' : 'false'; return value ? 'true' : 'false';
} else { } else {
if (field === 'amount') { switch (field) {
return integerToCurrency(value); case 'amount':
} else if (field === 'date') { return integerToCurrency(value);
if (value) { case 'date':
if (value.frequency) { if (value) {
return getRecurringDescription(value); if (value.frequency) {
return getRecurringDescription(value);
}
return formatDate(parseISO(value), dateFormat);
} }
return formatDate(parseISO(value), dateFormat); return null;
} case 'month':
return null; return value
} else if (field === 'month') { ? formatDate(parseISO(value), getMonthYearFormat(dateFormat))
return value : null;
? formatDate(parseISO(value), getMonthYearFormat(dateFormat)) case 'year':
: null; return value ? formatDate(parseISO(value), 'yyyy') : null;
} else if (field === 'year') { case 'notes':
return value ? formatDate(parseISO(value), 'yyyy') : null; case 'imported_payee':
} else if (field === 'notes') { return value;
return value; case 'payee':
} else { case 'category':
if (data && data.length) { case 'account':
let item = data.find(item => item.id === value); if (valueIsRaw) {
if (item) { return value;
return describe(item); }
} else { if (data && data.length) {
return '(deleted)'; let item = data.find(item => item.id === value);
if (item) {
return describe(item);
} else {
return '(deleted)';
}
} }
} else {
return ''; return '';
} default:
throw new Error(`Unknown field ${field}`);
} }
} }
} }
......
...@@ -486,7 +486,12 @@ function FilterExpression({ ...@@ -486,7 +486,12 @@ function FilterExpression({
{mapField(field, options)} {mapField(field, options)}
</Text>{' '} </Text>{' '}
<Text style={{ color: colors.n3 }}>{friendlyOp(op)}</Text>{' '} <Text style={{ color: colors.n3 }}>{friendlyOp(op)}</Text>{' '}
<Value value={value} field={field} inline={true} /> <Value
value={value}
field={field}
inline={true}
valueIsRaw={op === 'contains'}
/>
</> </>
)} )}
</div> </div>
......
...@@ -147,7 +147,11 @@ export function parse(item) { ...@@ -147,7 +147,11 @@ export function parse(item) {
switch (item.type) { switch (item.type) {
case 'number': { case 'number': {
let parsed = item.value; let parsed = item.value;
if (item.field === 'amount' && item.op !== 'isbetween') { if (
item.field === 'amount' &&
item.op !== 'isbetween' &&
parsed != null
) {
parsed = integerToAmount(parsed); parsed = integerToAmount(parsed);
} }
return { ...item, value: parsed }; return { ...item, value: parsed };
...@@ -197,7 +201,7 @@ export function makeValue(value, cond) { ...@@ -197,7 +201,7 @@ export function makeValue(value, cond) {
return { return {
...cond, ...cond,
error: null, error: null,
value: value ? currencyToAmount(value) || 0 : 0, value: value ? currencyToAmount(String(value)) || 0 : 0,
}; };
} }
break; break;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment