-
-
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
Convert useSplitsExpanded.jsx to tsx #3894
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
Smaller No assets were 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
|
Warning Rate limit exceeded@joel-jeremy has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 29 minutes and 1 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (3)
WalkthroughThis pull request introduces significant modifications to the handling of expanded transaction splits within the Additionally, the request includes the deletion of the Possibly related PRs
Suggested labels
Suggested reviewers
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: 1
🧹 Outside diff range and nitpick comments (4)
packages/desktop-client/src/components/transactions/TransactionsTable.jsx (2)
Line range hint
1-2595
: Update file extension to .tsxSince this PR is about converting to TypeScript, the file extension should be changed from
.jsx
to.tsx
to properly indicate it's a TypeScript React component file.
Migration from
expanded
toisExpanded
is incompleteThe implementation in
useSplitsExpanded.tsx
only exports and defines theisExpanded
method, but there's still one usage of the oldexpanded
method inTransactionsTable.jsx
. This indicates an incomplete migration that needs to be fixed:
packages/desktop-client/src/components/transactions/TransactionsTable.jsx
: ReplaceprevSplitsExpanded.current.expanded(t.parent_id)
withprevSplitsExpanded.current.isExpanded(t.parent_id)
to maintain consistency with the new API.🔗 Analysis chain
Line range hint
2105-2124
: Verify consistent usage ofisExpanded
methodThe change from
splitsExpanded.expanded
tosplitsExpanded.isExpanded
appears to be part of a method name migration. While the changes look correct, there are a few points to verify:
- Ensure all other usages of
expanded
have been migrated toisExpanded
- Verify that the behavior remains the same between the old and new method names
Let me gather more context about the
splitsExpanded
implementation to understand if this is a legitimate coexistence of both method names or an incomplete migration.
Let me check the implementation in the
useSplitsExpanded
hook to understand if this is a transition period where both methods are valid or if there's an inconsistency.🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Check for any remaining usages of the old method name and verify the new method usage # Check for any remaining .expanded calls that might have been missed rg "\.expanded\(" # Check all usages of the new isExpanded method to ensure consistent usage rg "\.isExpanded\("Length of output: 448
Script:
#!/bin/bash # Let's find the implementation of splitsExpanded to understand the methods ast-grep --pattern 'class $_ { $$$ expanded($_) { $$$ } $$$ }' ast-grep --pattern 'class $_ { $$$ isExpanded($_) { $$$ } $$$ }' # Also check for any potential interface or type definitions rg "interface.*Expanded" -A 5 rg "type.*Expanded" -A 5Length of output: 3706
Script:
#!/bin/bash # Check the implementation in useSplitsExpanded.tsx cat packages/desktop-client/src/hooks/useSplitsExpanded.tsxLength of output: 4182
packages/desktop-client/src/hooks/useSplitsExpanded.tsx (2)
81-81
: Simplify Set copying by directly passing the Set to the constructorWhen creating a new
Set
from an existing one, you can pass the existingSet
directly to theSet
constructor instead of spreading it into an array. This approach is more concise and efficient.Apply this diff to simplify the code:
- const ids = new Set([...state.ids]); + const ids = new Set(state.ids);Also applies to: 91-91, 101-101, 129-129
155-162
: Ensure cleanup of thesetTimeout
to prevent potential memory leaksThe
setTimeout
in theuseEffect
hook is not being cleared if the component unmounts before the timeout completes. While the timeout duration is short, it's good practice to clear timers inuseEffect
hooks to prevent potential memory leaks.Apply this diff to include the cleanup:
useEffect(() => { + let timer: ReturnType<typeof setTimeout> | undefined; if (state.transitionId != null) { // This timeout allows animations to finish - setTimeout(() => { + timer = setTimeout(() => { dispatch({ type: 'finish-switch-mode' }); }, 250); } + return () => { + if (timer !== undefined) { + clearTimeout(timer); + } + }; }, [state.transitionId]);
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
⛔ Files ignored due to path filters (1)
upcoming-release-notes/3894.md
is excluded by!**/*.md
📒 Files selected for processing (3)
packages/desktop-client/src/components/transactions/TransactionsTable.jsx
(3 hunks)packages/desktop-client/src/hooks/useSplitsExpanded.jsx
(0 hunks)packages/desktop-client/src/hooks/useSplitsExpanded.tsx
(1 hunks)
💤 Files with no reviewable changes (1)
- packages/desktop-client/src/hooks/useSplitsExpanded.jsx
🔇 Additional comments (1)
packages/desktop-client/src/components/transactions/TransactionsTable.jsx (1)
2595-2595
: LGTM: Consistent prop passing
The isExpanded
prop correctly passes the new method name, maintaining consistency with the changes made above.
useEffect(() => { | ||
// In a finished state, cache the state | ||
if (state.transitionId == null) { | ||
reduxDispatch({ type: 'SET_LAST_SPLIT_STATE', splitState: state }); |
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.
Avoid storing non-serializable values in Redux state
The ids
property in state
is a Set
, which is not serializable by default. Storing non-serializable values in Redux can lead to issues with debugging and persistence. Consider converting the Set
to an Array
before dispatching it to the Redux store.
Apply this diff to serialize the ids
when caching the state:
reduxDispatch({
type: 'SET_LAST_SPLIT_STATE',
splitState: {
...state,
- ids: state.ids,
+ ids: Array.from(state.ids),
},
});
Also, update the initial state to convert the ids
array back to a Set
:
const [state, dispatch] = useReducer<typeof splitsExpandedReducer>(
splitsExpandedReducer,
- cachedState.current || { ids: new Set(), mode: initialMode },
+ cachedState.current
+ ? {
+ ...cachedState.current,
+ ids: new Set(cachedState.current.ids),
+ }
+ : { ids: new Set(), mode: initialMode },
);
Committable suggestion skipped: line range outside the PR's diff.
f764bf9
to
a767d99
Compare
Closing this in favor of #3945 |
No description provided.