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('*'));
export function Value({
value,
field,
valueIsRaw,
inline = false,
data: dataProp,
describe = x => x.name,
......@@ -93,35 +94,44 @@ export function Value({
} else if (typeof value === 'boolean') {
return value ? 'true' : 'false';
} else {
if (field === 'amount') {
return integerToCurrency(value);
} else if (field === 'date') {
if (value) {
if (value.frequency) {
return getRecurringDescription(value);
switch (field) {
case 'amount':
return integerToCurrency(value);
case 'date':
if (value) {
if (value.frequency) {
return getRecurringDescription(value);
}
return formatDate(parseISO(value), dateFormat);
}
return formatDate(parseISO(value), dateFormat);
}
return null;
} else if (field === 'month') {
return value
? formatDate(parseISO(value), getMonthYearFormat(dateFormat))
: null;
} else if (field === 'year') {
return value ? formatDate(parseISO(value), 'yyyy') : null;
} else if (field === 'notes') {
return value;
} else {
if (data && data.length) {
let item = data.find(item => item.id === value);
if (item) {
return describe(item);
} else {
return '(deleted)';
return null;
case 'month':
return value
? formatDate(parseISO(value), getMonthYearFormat(dateFormat))
: null;
case 'year':
return value ? formatDate(parseISO(value), 'yyyy') : null;
case 'notes':
case 'imported_payee':
return value;
case 'payee':
case 'category':
case 'account':
if (valueIsRaw) {
return value;
}
if (data && data.length) {
let item = data.find(item => item.id === value);
if (item) {
return describe(item);
} else {
return '(deleted)';
}
}
} else {
return '';
}
default:
throw new Error(`Unknown field ${field}`);
}
}
}
......
......@@ -486,7 +486,12 @@ function FilterExpression({
{mapField(field, options)}
</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>
......
......@@ -147,7 +147,11 @@ export function parse(item) {
switch (item.type) {
case 'number': {
let parsed = item.value;
if (item.field === 'amount' && item.op !== 'isbetween') {
if (
item.field === 'amount' &&
item.op !== 'isbetween' &&
parsed != null
) {
parsed = integerToAmount(parsed);
}
return { ...item, value: parsed };
......@@ -197,7 +201,7 @@ export function makeValue(value, cond) {
return {
...cond,
error: null,
value: value ? currencyToAmount(value) || 0 : 0,
value: value ? currencyToAmount(String(value)) || 0 : 0,
};
}
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