-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix Parse for Date Range #3735
Fix Parse for Date Range #3735
Conversation
✅ Deploy Preview for actualbudget ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
Bundle Stats — desktop-clientHey there, this message comes from a GitHub action that helps you and reviewers to understand how these changes affect the size of this project's bundle. As this PR is updated, I'll keep you updated on how the bundle size is impacted. Total
Changeset
View detailed bundle breakdownAdded No assets were added Removed No assets were removed Bigger No assets were bigger Smaller
Unchanged
|
Bundle Stats — loot-coreHey there, this message comes from a GitHub action that helps you and reviewers to understand how these changes affect the size of this project's bundle. As this PR is updated, I'll keep you updated on how the bundle size is impacted. Total
Changeset No files were changed View detailed bundle breakdownAdded No assets were added Removed No assets were removed Bigger No assets were bigger Smaller No assets were smaller Unchanged
|
WalkthroughThe pull request modifies the Possibly related PRs
Suggested labels
Suggested reviewers
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (1)
packages/desktop-client/src/components/reports/DateRange.tsx (1)
The toString() check for 'Invalid Date' is redundant and can be removed
The
monthUtils.parseDate
implementation is a wrapper around an internal_parse
function that safely handles date parsing with proper timezone and DST considerations. The function already returns a valid Date object, making thetoString()
check for 'Invalid Date' redundant. The code can be simplified to:const dateParsed = monthUtils.parseDate(date); - if (dateParsed.toString() !== 'Invalid Date') { + if (dateParsed) { return d.format(dateParsed, 'yyyy-MM-dd'); } else { return null;🔗 Analysis chain
Line range hint
19-23
: Verify monthUtils.parseDate implementation and suggest improvements.While the change addresses the date parsing issue, there are a few considerations:
- The toString() check for 'Invalid Date' might be redundant if monthUtils.parseDate has built-in validation.
- Consider adding explicit type annotations for better type safety.
Let's verify the monthUtils.parseDate implementation:
Consider this type-safe implementation:
function checkDate(date: string) { - const dateParsed = monthUtils.parseDate(date); - if (dateParsed.toString() !== 'Invalid Date') { + const dateParsed: Date | null = monthUtils.parseDate(date); + if (dateParsed && dateParsed instanceof Date && !isNaN(dateParsed.getTime())) { return d.format(dateParsed, 'yyyy-MM-dd'); } else { return null;🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Check monthUtils.parseDate implementation and return type ast-grep --pattern 'parseDate = function($_) { $$$ }' # Check for existing usage patterns rg -A 3 'monthUtils.parseDate'Length of output: 1745
Script:
#!/bin/bash # Let's try to find the monthUtils implementation and its parseDate function fd monthUtils --exec cat {} # Also search for any type definitions related to monthUtils rg -g '*.ts' -g '*.d.ts' 'monthUtils' -B 2 -A 2Length of output: 97903
Script:
#!/bin/bash # Let's find the implementation of monthUtils.parseDate cat packages/loot-core/src/shared/months.tsLength of output: 13288
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
⛔ Files ignored due to path filters (1)
upcoming-release-notes/3735.md
is excluded by!**/*.md
📒 Files selected for processing (1)
- packages/desktop-client/src/components/reports/DateRange.tsx (2 hunks)
🔇 Additional comments (2)
packages/desktop-client/src/components/reports/DateRange.tsx (2)
5-6
: LGTM: Import statement is correctly placed and necessary.The addition of monthUtils import is required for the new date parsing implementation.
Line range hint
19-23
: Verify handling of edge cases in date comparisons.The date parsing change could affect how edge cases are handled in the display logic, particularly for:
- Year transitions (December to January)
- Month transitions
- Budget/average comparisons
Let's check for edge case handling:
✅ Verification successful
Based on the shell script results, I can now provide a final response:
Date parsing implementation is well-tested and handles edge cases appropriately
The codebase has comprehensive test coverage for date handling, particularly:
- Year/month transitions are tested in
rules.test.ts
with specific test cases for date comparisons- Invalid date handling is explicitly tested with proper validation
- Multiple date format parsing is supported and tested in
ImportTransactionsModal/utils.test.ts
The current implementation in
DateRange.tsx
follows the established pattern of handling invalid dates by returningnull
, which is consistent with the rest of the codebase's date handling approach.🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Look for test cases covering edge cases rg -l 'DateRange.*test' --type ts rg -l 'describe.*DateRange' --type ts # Check for existing date format patterns rg 'format\(.*date.*,' --type tsLength of output: 1745
Script:
#!/bin/bash # Let's check for date-related tests and edge cases in the codebase rg -A 5 "test\(.*date" --type ts rg -A 5 "describe\(.*date" --type ts # Look for monthUtils implementation and usage rg -A 10 "monthUtils = {" --type ts rg -A 10 "export function parseDate" --type ts # Check for date comparison logic ast-grep --pattern 'if ($_ !== "Invalid Date") { $$$ }' # Look for budget comparison code that uses dates rg -A 5 "budget.*date" --type ts rg -A 5 "comparison.*date" --type tsLength of output: 19987
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks like Date was automatically factoring in timezones.
Fix parse date in DateRange element which is causing the cards to display the wrong dates.