Skip to content

Release v0.4.2#92

Merged
kryptodrex merged 82 commits intomainfrom
develop
Mar 26, 2026
Merged

Release v0.4.2#92
kryptodrex merged 82 commits intomainfrom
develop

Conversation

@kryptodrex
Copy link
Copy Markdown
Owner

Features

  • No major features for this release

Improvements

  • Plans now save automatically when closed, but can still be saved via shortcut or menubar task
    • Note: If it's a new plan or demo plan that hasn't been saved yet it will still prompt to save
  • Reworked the view mode selector to take up less space, and no longer have an unnecessary favorites modal associated with it
  • Added a Pay Details button to Key Metrics screen as well
  • Increase icon line width for visibility
  • Reorganized the plan header to make it less cluttered
  • Header actions now switch between full buttons on wider windows and compact dropdowns on smaller screens

Bug Fixes

  • Fixed demo generation immediately causing pay breakdown to go into the negative if random Gross Income is on the lower end
  • Fixed off-center "Add Loan Payment" button when no loan items were added yet
  • Fixed new plan creation starting with only two view modes visible after exiting Setup Wizard
  • Fixed focused header action borders clipping near the sticky tab header edge

Restructure the ViewModeSelector markup and styles: remove the extra wrapper, move the settings button out of the option loop, ensure buttons use proper keys and className logic, and adjust CSS (selector height, reduced padding, font-size tweaks, and settings icon styling). Improve copy and formatting in ViewModeSettingsModal and tidy the checkbox disable expression. Increase MAX_VISIBLE_FAVORITE_VIEW_MODES from 3 to 6 to allow pinning more view modes.
Adjust header layout and button sizing: align items in .header-btn-group, set .header-btn-secondary to height: fit-content, and remove redundant .view-mode-selector-wrap rules. Add a null/undefined guard in PlanDashboard.tsx so sanitizeFavoriteViewModes is only called when viewModeFavorites is present (pass undefined otherwise) to avoid potential runtime errors.
Remove supplemental quarterly insertion and refactor syncFavoritesForCadence to accept an optional previousCadenceMode. The new logic removes a prior non-default cadence (so stale cadence tabs don't linger), preserves permanent defaults (monthly/yearly), and inserts the new cadence in canonical order while respecting MAX_VISIBLE_FAVORITE_VIEW_MODES. Also update buildViewModeSelectorOptions to stop auto-adding supplemental modes and expand unit tests to cover the new behaviors.
Change default payCadenceLabel from 'Your Pay Frequency' to 'Pay Frequency' to simplify the displayed label. Add padding to .view-mode-settings-button for improved spacing/alignment. Update unit test to look up the cadence button with a case-insensitive regex (/Weekly\s*Pay Frequency/i) so it matches the adjusted label and tolerant spacing/casing.
Introduce a Pay Settings modal and UI flow, plus cadence-aware initialization for view-mode favorites.

Changes include:
- Import new icons and PaySettingsModal component; add Banknote header button to open pay details and simplify "Copy Plan" label to "Copy".
- Add showPaySettingsModal state and wire menu events (openPayOptions) and app actions to open the modal. Subscribe/unsubscribe to a new copy menu event.
- Remove the old paySettingsSearchRequestKey prop/flow and instead show the PaySettingsModal directly; clear pending field highlights when opening/closing.
- When a plan has no stored viewModeFavorites, pick the pay-frequency cadence as the initial displayMode and persist initial favorites (using syncFavoritesForCadence and DEFAULT_FAVORITE_VIEW_MODES) via updateBudgetSettings so the favorites modal reflects the cadence.
- Guard favorites-change effect to no-op when favorites aren't stored yet to avoid clobbering the cadence initializer.
- Update effect dependencies and minor wiring changes to ensure displayMode stays valid and integration with existing tab logic.

This consolidates pay settings UX into a modal and ensures new plans get a sensible initial tab based on the user's chosen pay frequency.
kryptodrex and others added 29 commits March 25, 2026 08:41
Introduce a new TransientStatusIndicator component for transient, accessible status messages. Adds component implementation (props: message, variant, topRem, rightRem, zoomFactor), corresponding CSS for positioning, visual variants and responsive behavior, and an index export. Also updates the shared components barrel to export the new component.
Implement save-before-close behavior and refine UI/UX across the dashboard and app.

- electron/main.ts: Replace async message box with a modal save prompt (showMessageBoxSync) that offers Save / Don't Save / Cancel; attempt a programmatic save via webContents before closing, show an error box if the save fails, and preserve window state. Improves protection against data loss when closing windows with unsaved changes.

- src/App.tsx: Replace two ad-hoc zoom/undo status divs with the new TransientStatusIndicator component to centralize transient status rendering and account for zoom factor and variants.

- src/components/PlanDashboard/PlanDashboard.css: Tighten header action spacing (gap adjustments), align items center, and tweak responsive layout/order for header button groups to improve compactness and alignment.

- src/components/PlanDashboard/PlanDashboard.tsx: Refactor save logic into performSave() returning a boolean so callers (including the close handler) can detect success; provide handleSave wrapper for explicit save actions. Remove duplicated Save/Copy buttons from the header and adjust the Settings button disabled condition to not depend on loading. Update imports accordingly.

These changes aim to prevent accidental data loss, simplify transient status handling, and tighten the dashboard header layout and save flow for programmatic use.
Introduce a previewable view mode selector and wire it into several tab views. Replaced the CompactViewModeSelector with a new ViewModeButton, added previewDisplayMode state and handleDisplayModePreview to allow temporary previewing of modes (effectiveDisplayMode used when rendering). Passed a viewModeControl prop into PayBreakdown, BillsManager, LoansManager, TaxBreakdown and SavingsManager so the selector can be rendered in each tab header. Also updated multiple tabs to use effectiveDisplayMode instead of the persistent displayMode, adjusted a header label in PayBreakdown (After-Tax -> Take Home Pay), and made a small CSS whitespace tweak.
@kryptodrex kryptodrex merged commit b85504e into main Mar 26, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant