From c69142f58e0b084a26c5f42cd1e0d5f9cb9d849a Mon Sep 17 00:00:00 2001 From: Matiss Janis Aboltins Date: Thu, 21 Aug 2025 20:09:21 +0100 Subject: [PATCH] Refactor schedule handling in ManageRules component (#5600) - Updated the ManageRules component to use ScheduleEntity type for schedules. - Improved the describeSchedule function to include type annotations for better clarity. - Added a conditional check to handle cases where the schedule may not exist, ensuring robust functionality. --- .../src/components/ManageRules.tsx | 23 ++++++++++--------- packages/loot-core/src/shared/schedules.ts | 7 +++++- upcoming-release-notes/5600.md | 6 +++++ 3 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 upcoming-release-notes/5600.md diff --git a/packages/desktop-client/src/components/ManageRules.tsx b/packages/desktop-client/src/components/ManageRules.tsx index 765f176d0d..e6f2e33a8d 100644 --- a/packages/desktop-client/src/components/ManageRules.tsx +++ b/packages/desktop-client/src/components/ManageRules.tsx @@ -21,7 +21,11 @@ import { getNormalisedString } from 'loot-core/shared/normalisation'; import { q } from 'loot-core/shared/query'; import { mapField, friendlyOp } from 'loot-core/shared/rules'; import { describeSchedule } from 'loot-core/shared/schedules'; -import { type RuleEntity, type NewRuleEntity } from 'loot-core/types/models'; +import { + type RuleEntity, + type NewRuleEntity, + type ScheduleEntity, +} from 'loot-core/types/models'; import { InfiniteScrollWrapper } from './common/InfiniteScrollWrapper'; import { Link } from './common/Link'; @@ -45,12 +49,7 @@ export type FilterData = { payees?: Array<{ id: string; name: string }>; categories?: Array<{ id: string; name: string }>; accounts?: Array<{ id: string; name: string }>; - schedules?: readonly { - id: string; - rule: string; - _payee: string; - completed: boolean; - }[]; + schedules?: readonly ScheduleEntity[]; }; export function mapValue( @@ -98,10 +97,12 @@ export function ruleToString(rule: RuleEntity, data: FilterData) { const schedule = data.schedules?.find(s => s.id === String(action.value)); return [ friendlyOp(action.op), - describeSchedule( - schedule, - data.payees?.find(p => p.id === schedule?._payee), - ), + schedule + ? describeSchedule( + schedule, + data.payees?.find(p => p.id === schedule._payee), + ) + : '-', ]; } else if (action.op === 'prepend-notes' || action.op === 'append-notes') { const noteValue = String(action.value || ''); diff --git a/packages/loot-core/src/shared/schedules.ts b/packages/loot-core/src/shared/schedules.ts index c524d981c5..0862f7194b 100644 --- a/packages/loot-core/src/shared/schedules.ts +++ b/packages/loot-core/src/shared/schedules.ts @@ -4,6 +4,8 @@ import * as d from 'date-fns'; import { Locale } from 'date-fns'; import { t } from 'i18next'; +import { type PayeeEntity, type ScheduleEntity } from 'loot-core/types/models'; + import { Condition } from '../server/rules'; import * as monthUtils from './months'; @@ -394,7 +396,10 @@ export function getScheduledAmount( return inverse ? -Math.round(avg) : Math.round(avg); } -export function describeSchedule(schedule, payee) { +export function describeSchedule( + schedule: ScheduleEntity, + payee?: PayeeEntity, +) { if (payee) { return `${payee.name} (${schedule.next_date})`; } else { diff --git a/upcoming-release-notes/5600.md b/upcoming-release-notes/5600.md new file mode 100644 index 0000000000..710c0c908e --- /dev/null +++ b/upcoming-release-notes/5600.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [MatissJanis] +--- + +Add missing conditional for describing schedules in rules page