From d49f907f538486d28b1ed002fb044c24cb38b16e Mon Sep 17 00:00:00 2001 From: Neil <55785687+carkom@users.noreply.github.com> Date: Fri, 26 Apr 2024 08:59:16 +0100 Subject: [PATCH] Custom Reports Adjustments (#2659) * monthly Spending * Add Average * notes * title * date filter * TS fixes and hide average when no data * fix average tooltip and relabel x-axis * Wording/verbiage * remove spending files * adjustments * reports.d revert * revert filter changes * adjust update filters * notes * remove old notes * adjust style * lint fixes --- .../src/components/filters/AppliedFilters.tsx | 2 +- .../src/components/filters/FilterExpression.tsx | 2 +- .../src/components/filters/FiltersMenu.jsx | 12 +++++++----- .../src/components/filters/FiltersStack.tsx | 2 +- .../components/reports/{Change.jsx => Change.tsx} | 13 +++++++++++-- .../src/components/reports/ModeButton.tsx | 2 +- .../src/components/reports/ReportCard.tsx | 2 +- .../src/components/reports/reports/CashFlowCard.jsx | 5 +---- .../src/components/reports/reports/NetWorthCard.jsx | 7 ++----- .../reports/spreadsheets/custom-spreadsheet.ts | 2 -- .../reports/spreadsheets/grouped-spreadsheet.ts | 2 -- .../components/reports/spreadsheets/makeQuery.ts | 4 ++-- packages/desktop-client/src/style/themes/dark.ts | 1 + .../desktop-client/src/style/themes/development.ts | 2 ++ packages/desktop-client/src/style/themes/light.ts | 1 + .../desktop-client/src/style/themes/midnight.ts | 2 ++ packages/loot-core/src/shared/months.ts | 4 ++++ upcoming-release-notes/2659.md | 6 ++++++ 18 files changed, 44 insertions(+), 27 deletions(-) rename packages/desktop-client/src/components/reports/{Change.jsx => Change.tsx} (58%) create mode 100644 upcoming-release-notes/2659.md diff --git a/packages/desktop-client/src/components/filters/AppliedFilters.tsx b/packages/desktop-client/src/components/filters/AppliedFilters.tsx index 930d31927..538bdd72b 100644 --- a/packages/desktop-client/src/components/filters/AppliedFilters.tsx +++ b/packages/desktop-client/src/components/filters/AppliedFilters.tsx @@ -12,7 +12,7 @@ type AppliedFiltersProps = { onUpdate: ( filter: RuleConditionEntity, newFilter: RuleConditionEntity, - ) => RuleConditionEntity; + ) => void; onDelete: (filter: RuleConditionEntity) => void; conditionsOp: string; onCondOpChange: (value: string, filters: RuleConditionEntity[]) => void; diff --git a/packages/desktop-client/src/components/filters/FilterExpression.tsx b/packages/desktop-client/src/components/filters/FilterExpression.tsx index 08bb15645..5a258e951 100644 --- a/packages/desktop-client/src/components/filters/FilterExpression.tsx +++ b/packages/desktop-client/src/components/filters/FilterExpression.tsx @@ -24,7 +24,7 @@ type FilterExpressionProps = { value: string | string[] | number | boolean | undefined; options: RuleConditionEntity['options']; style?: CSSProperties; - onChange: (cond: RuleConditionEntity) => RuleConditionEntity; + onChange: (cond: RuleConditionEntity) => void; onDelete: () => void; }; diff --git a/packages/desktop-client/src/components/filters/FiltersMenu.jsx b/packages/desktop-client/src/components/filters/FiltersMenu.jsx index 18889c515..db8459deb 100644 --- a/packages/desktop-client/src/components/filters/FiltersMenu.jsx +++ b/packages/desktop-client/src/components/filters/FiltersMenu.jsx @@ -243,7 +243,7 @@ function ConfigureField({ ); } -export function FilterButton({ onApply, compact, hover }) { +export function FilterButton({ onApply, compact, hover, exclude }) { const filters = useFilters(); const dateFormat = useDateFormat() || 'MM/dd/yyyy'; @@ -359,10 +359,12 @@ export function FilterButton({ onApply, compact, hover }) { onMenuSelect={name => { dispatch({ type: 'configure', field: name }); }} - items={filterFields.map(([name, text]) => ({ - name, - text: titleFirst(text), - }))} + items={filterFields + .filter(f => (exclude ? !exclude.includes(f[0]) : true)) + .map(([name, text]) => ({ + name, + text: titleFirst(text), + }))} /> </Tooltip> )} diff --git a/packages/desktop-client/src/components/filters/FiltersStack.tsx b/packages/desktop-client/src/components/filters/FiltersStack.tsx index 055fd110c..3d050ec44 100644 --- a/packages/desktop-client/src/components/filters/FiltersStack.tsx +++ b/packages/desktop-client/src/components/filters/FiltersStack.tsx @@ -27,7 +27,7 @@ export function FiltersStack({ onUpdateFilter: ( filter: RuleConditionEntity, newFilter: RuleConditionEntity, - ) => RuleConditionEntity; + ) => void; onDeleteFilter: (filter: RuleConditionEntity) => void; onClearFilters: () => void; onReloadSavedFilter: (savedFilter: SavedFilter, value?: string) => void; diff --git a/packages/desktop-client/src/components/reports/Change.jsx b/packages/desktop-client/src/components/reports/Change.tsx similarity index 58% rename from packages/desktop-client/src/components/reports/Change.jsx rename to packages/desktop-client/src/components/reports/Change.tsx index 5267b2c77..8c4c429e7 100644 --- a/packages/desktop-client/src/components/reports/Change.jsx +++ b/packages/desktop-client/src/components/reports/Change.tsx @@ -2,15 +2,24 @@ import React from 'react'; import { integerToCurrency } from 'loot-core/src/shared/util'; -import { theme, styles } from '../../style'; +import { styles } from '../../style/styles'; +import { theme } from '../../style/theme'; +import { type CSSProperties } from '../../style/types'; import { Block } from '../common/Block'; -export function Change({ amount }) { +export function Change({ + amount, + style, +}: { + amount: number; + style?: CSSProperties; +}) { return ( <Block style={{ ...styles.smallText, color: amount < 0 ? theme.errorText : theme.noticeTextLight, + ...style, }} > {amount >= 0 ? '+' : ''} diff --git a/packages/desktop-client/src/components/reports/ModeButton.tsx b/packages/desktop-client/src/components/reports/ModeButton.tsx index 70b00bef7..503d9692e 100644 --- a/packages/desktop-client/src/components/reports/ModeButton.tsx +++ b/packages/desktop-client/src/components/reports/ModeButton.tsx @@ -6,7 +6,7 @@ import { Button } from '../common/Button'; type ModeButtonProps = { selected: boolean; children: ReactNode; - style: CSSProperties; + style?: CSSProperties; onSelect: MouseEventHandler<HTMLButtonElement>; }; diff --git a/packages/desktop-client/src/components/reports/ReportCard.tsx b/packages/desktop-client/src/components/reports/ReportCard.tsx index 41278b394..fb69523ab 100644 --- a/packages/desktop-client/src/components/reports/ReportCard.tsx +++ b/packages/desktop-client/src/components/reports/ReportCard.tsx @@ -8,8 +8,8 @@ import { View } from '../common/View'; type ReportCardProps = { to: string; - report: CustomReportEntity; children: ReactNode; + report?: CustomReportEntity; flex?: string; style?: CSSProperties; }; diff --git a/packages/desktop-client/src/components/reports/reports/CashFlowCard.jsx b/packages/desktop-client/src/components/reports/reports/CashFlowCard.jsx index ed8daeb6a..a5984b82c 100644 --- a/packages/desktop-client/src/components/reports/reports/CashFlowCard.jsx +++ b/packages/desktop-client/src/components/reports/reports/CashFlowCard.jsx @@ -102,10 +102,7 @@ export function CashFlowCard() { {data && ( <View style={{ textAlign: 'right' }}> <PrivacyFilter activationFilters={[!isCardHovered]}> - <Change - amount={income - expenses} - style={{ color: theme.tableText, fontWeight: 300 }} - /> + <Change amount={income - expenses} /> </PrivacyFilter> </View> )} diff --git a/packages/desktop-client/src/components/reports/reports/NetWorthCard.jsx b/packages/desktop-client/src/components/reports/reports/NetWorthCard.jsx index 3b2963bd4..dc0ca1964 100644 --- a/packages/desktop-client/src/components/reports/reports/NetWorthCard.jsx +++ b/packages/desktop-client/src/components/reports/reports/NetWorthCard.jsx @@ -3,7 +3,7 @@ import React, { useState, useMemo, useCallback } from 'react'; import * as monthUtils from 'loot-core/src/shared/months'; import { integerToCurrency } from 'loot-core/src/shared/util'; -import { theme, styles } from '../../../style'; +import { styles } from '../../../style'; import { Block } from '../../common/Block'; import { View } from '../../common/View'; import { PrivacyFilter } from '../../PrivacyFilter'; @@ -59,10 +59,7 @@ export function NetWorthCard({ accounts }) { </PrivacyFilter> </Block> <PrivacyFilter activationFilters={[!isCardHovered]}> - <Change - amount={data.totalChange} - style={{ color: theme.tableText, fontWeight: 300 }} - /> + <Change amount={data.totalChange} /> </PrivacyFilter> </View> )} diff --git a/packages/desktop-client/src/components/reports/spreadsheets/custom-spreadsheet.ts b/packages/desktop-client/src/components/reports/spreadsheets/custom-spreadsheet.ts index 1f4569ccc..860efbc07 100644 --- a/packages/desktop-client/src/components/reports/spreadsheets/custom-spreadsheet.ts +++ b/packages/desktop-client/src/components/reports/spreadsheets/custom-spreadsheet.ts @@ -110,7 +110,6 @@ export function createCustomSpreadsheet({ startDate, endDate, interval, - selectedCategories, categoryFilter, conditionsOpKey, filters, @@ -122,7 +121,6 @@ export function createCustomSpreadsheet({ startDate, endDate, interval, - selectedCategories, categoryFilter, conditionsOpKey, filters, diff --git a/packages/desktop-client/src/components/reports/spreadsheets/grouped-spreadsheet.ts b/packages/desktop-client/src/components/reports/spreadsheets/grouped-spreadsheet.ts index b473e5577..da794cdfe 100644 --- a/packages/desktop-client/src/components/reports/spreadsheets/grouped-spreadsheet.ts +++ b/packages/desktop-client/src/components/reports/spreadsheets/grouped-spreadsheet.ts @@ -59,7 +59,6 @@ export function createGroupedSpreadsheet({ startDate, endDate, interval, - selectedCategories, categoryFilter, conditionsOpKey, filters, @@ -71,7 +70,6 @@ export function createGroupedSpreadsheet({ startDate, endDate, interval, - selectedCategories, categoryFilter, conditionsOpKey, filters, diff --git a/packages/desktop-client/src/components/reports/spreadsheets/makeQuery.ts b/packages/desktop-client/src/components/reports/spreadsheets/makeQuery.ts index 986738eae..f72964f35 100644 --- a/packages/desktop-client/src/components/reports/spreadsheets/makeQuery.ts +++ b/packages/desktop-client/src/components/reports/spreadsheets/makeQuery.ts @@ -8,7 +8,6 @@ export function makeQuery( startDate: string, endDate: string, interval: string, - selectedCategories: CategoryEntity[], categoryFilter: CategoryEntity[], conditionsOpKey: string, filters: unknown[], @@ -27,7 +26,7 @@ export function makeQuery( const query = q('transactions') //Apply Category_Selector .filter( - selectedCategories && { + categoryFilter && { $or: [ { category: null, @@ -66,6 +65,7 @@ export function makeQuery( { date: intervalGroup }, { category: { $id: '$category.id' } }, { categoryHidden: { $id: '$category.hidden' } }, + { categoryIncome: { $id: '$category.is_income' } }, { categoryGroup: { $id: '$category.group.id' } }, { categoryGroupHidden: { $id: '$category.group.hidden' } }, { account: { $id: '$account.id' } }, diff --git a/packages/desktop-client/src/style/themes/dark.ts b/packages/desktop-client/src/style/themes/dark.ts index 185b042e4..d580e723a 100644 --- a/packages/desktop-client/src/style/themes/dark.ts +++ b/packages/desktop-client/src/style/themes/dark.ts @@ -188,5 +188,6 @@ export const pillBorderSelected = colorPalette.purple400; export const reportsRed = colorPalette.red300; export const reportsBlue = colorPalette.blue400; +export const reportsGreen = colorPalette.green400; export const reportsLabel = pageText; export const reportsInnerLabel = colorPalette.navy800; diff --git a/packages/desktop-client/src/style/themes/development.ts b/packages/desktop-client/src/style/themes/development.ts index c8a47c85e..c4f71d3df 100644 --- a/packages/desktop-client/src/style/themes/development.ts +++ b/packages/desktop-client/src/style/themes/development.ts @@ -187,4 +187,6 @@ export const pillBorderSelected = colorPalette.purple500; export const reportsRed = colorPalette.red300; export const reportsBlue = colorPalette.blue400; +export const reportsGreen = colorPalette.green400; export const reportsLabel = colorPalette.navy900; +export const reportsInnerLabel = colorPalette.navy800; diff --git a/packages/desktop-client/src/style/themes/light.ts b/packages/desktop-client/src/style/themes/light.ts index 37549803d..294122cf3 100644 --- a/packages/desktop-client/src/style/themes/light.ts +++ b/packages/desktop-client/src/style/themes/light.ts @@ -190,5 +190,6 @@ export const pillBorderSelected = colorPalette.purple500; export const reportsRed = colorPalette.red300; export const reportsBlue = colorPalette.blue400; +export const reportsGreen = colorPalette.green400; export const reportsLabel = colorPalette.navy900; export const reportsInnerLabel = colorPalette.navy800; diff --git a/packages/desktop-client/src/style/themes/midnight.ts b/packages/desktop-client/src/style/themes/midnight.ts index 135194af8..9a6fc4fbe 100644 --- a/packages/desktop-client/src/style/themes/midnight.ts +++ b/packages/desktop-client/src/style/themes/midnight.ts @@ -190,4 +190,6 @@ export const pillBorderSelected = colorPalette.purple300; export const reportsRed = colorPalette.red300; export const reportsBlue = colorPalette.blue400; +export const reportsGreen = colorPalette.green400; export const reportsLabel = pageText; +export const reportsInnerLabel = colorPalette.navy800; diff --git a/packages/loot-core/src/shared/months.ts b/packages/loot-core/src/shared/months.ts index 634324780..6be72eddc 100644 --- a/packages/loot-core/src/shared/months.ts +++ b/packages/loot-core/src/shared/months.ts @@ -347,6 +347,10 @@ export function getMonth(day: string): string { return day.slice(0, 7); } +export function getDay(day: string): number { + return Number(d.format(_parse(day), 'dd')); +} + export function getMonthEnd(day: string): string { return subDays(nextMonth(day.slice(0, 7)) + '-01', 1); } diff --git a/upcoming-release-notes/2659.md b/upcoming-release-notes/2659.md new file mode 100644 index 000000000..a509cc689 --- /dev/null +++ b/upcoming-release-notes/2659.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [carkom] +--- + +Some slight adjustments to tidy up the code and make it work better. Some TS updates as well. -- GitLab