Skip to content

fix(gui): reduce macro command modal full-reload usage#1135

Merged
chhoumann merged 1 commit intomasterfrom
fsm-phase3-reduce-macro-modal-reloads
Mar 5, 2026
Merged

fix(gui): reduce macro command modal full-reload usage#1135
chhoumann merged 1 commit intomasterfrom
fsm-phase3-reduce-macro-modal-reloads

Conversation

@chhoumann
Copy link
Owner

@chhoumann chhoumann commented Mar 5, 2026

Reduce remaining full-modal reload usage in two macro command settings dialogs by rendering only dynamic subsections in place.

This is phase 3 of the FSM/reload stabilization stream after #1132, #1133, and #1134.

What changed:

  • ConditionalCommandSettingsModal
    • removed full-modal reload dependency
    • introduced a dedicated condition config container (conditionalSettingsModal__conditionConfig)
    • mode/operator/value-type changes now rerender only that container
  • OpenFileCommandSettingsModal
    • removed full-modal reload dependency
    • introduced a dedicated split-direction container (openFileCommandSettingsModal__splitDirection)
    • location changes now rerender only split-direction controls
  • updated the living ExecPlan (plans/issue-1130-fsm-modal-reload.md) with phase-3 progress, discovery, decision, and retrospective notes

Why:

  • These interactions change small, isolated parts of UI and do not require tearing down/rebuilding the entire modal.
  • In-place updates further reduce modal churn and complement FSM-based restoration fallback.

Validation:

  • bun run test
  • bun run build-with-lint
  • Obsidian CLI smoke in dev vault:
    • obsidian vault=dev plugin:reload id=quickadd
    • obsidian vault=dev command id=quickadd:testQuickAdd
    • obsidian vault=dev dev:errors (no runtime errors)

Refs #1130


Open with Devin

Summary by CodeRabbit

  • Improvements
    • Conditional command settings modal now updates condition configuration in-place when adjusting variables, operators, value types, or script settings, eliminating unnecessary reloads and improving responsiveness.
    • File operation command settings modal now refreshes location and split-direction settings in-place, providing faster configuration adjustments without full modal reloads.

@vercel
Copy link

vercel bot commented Mar 5, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
quickadd Ready Ready Preview Mar 5, 2026 7:05am

@chhoumann chhoumann marked this pull request as ready for review March 5, 2026 07:05
@coderabbitai
Copy link

coderabbitai bot commented Mar 5, 2026

📝 Walkthrough

Walkthrough

This pull request refactors two modal settings classes to replace full modal reloads with in-place container-driven rendering. The changes move away from ModalReloadController usage toward targeted UI updates within dedicated containers for condition/direction configuration sections, with planning documentation updated accordingly.

Changes

Cohort / File(s) Summary
Planning & Documentation
plans/issue-1130-fsm-modal-reload.md
Added phase-3 work description documenting in-place rendering migration for ConditionalCommandSettingsModal and OpenFileCommandSettingsModal, removing ModalReloadController usage and updating outcomes to reflect container-based subsection updates.
Condition Modal Refactor
src/gui/MacroGUIs/ConditionalCommandSettingsModal.ts
Removed ModalReloadController; introduced conditionConfigContainer field and new renderConditionConfiguration method. Refactored all rendering helpers (renderVariableConfiguration, renderScriptConfiguration, renderVariableNameSetting, renderOperatorSetting, renderValueTypeSetting, renderExpectedValueSetting, renderScriptPathSetting, renderScriptExportSetting) to accept explicit container and condition parameters; mode changes now trigger in-place re-render instead of modal reload.
File Command Modal Refactor
src/gui/MacroGUIs/OpenFileCommandSettingsModal.ts
Removed ModalReloadController; introduced directionSettingContainer field. Added renderDirectionSetting helper and container-based rendering for split-direction UI. Location changes now trigger targeted split-direction UI refresh instead of full modal reload; direction container created in addOpenLocationSetting and conditionally rendered based on location value.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • fix(gui): preserve modal edit position during settings reload #1132: Directly related at code level—this PR removes ModalReloadController usage from the same modal classes in favor of in-place container rendering, while #1132 adds/uses ModalReloadController for full-modal reloads; opposing refactoring directions on identical components.

Poem

🐰 No more reloads, just containers neat,
Refactoring makes our modals fleet!
In-place rendering, smooth and clean,
The fastest UI you've ever seen.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The PR title accurately summarizes the main change: reducing full-modal reloads in macro command settings modals by implementing in-place rendering of dynamic subsections.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fsm-phase3-reduce-macro-modal-reloads

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages
Copy link

Deploying quickadd with  Cloudflare Pages  Cloudflare Pages

Latest commit: 0c98e51
Status: ✅  Deploy successful!
Preview URL: https://f4b3c6a8.quickadd.pages.dev
Branch Preview URL: https://fsm-phase3-reduce-macro-moda.quickadd.pages.dev

View logs

Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 4 additional findings.

Open in Devin Review

@chhoumann chhoumann merged commit a1a6271 into master Mar 5, 2026
5 checks passed
@chhoumann chhoumann deleted the fsm-phase3-reduce-macro-modal-reloads branch March 5, 2026 07:09
chhoumann added a commit that referenced this pull request Mar 5, 2026
chhoumann added a commit that referenced this pull request Mar 5, 2026
* Revert "fix(gui): reduce choice builder reload churn (#1136)"

This reverts commit 818272a.

* Revert "fix(gui): reduce macro settings modal reload churn (#1135)"

This reverts commit a1a6271.

* Revert "fix(gui): reduce ai settings modal reload churn (#1134)"

This reverts commit ae0f7a1.

* Revert "test(gui): harden modal reload queue replay (#1133)"

This reverts commit 9373144.

* Revert "fix(gui): preserve modal edit position during settings reload (#1132)"

This reverts commit 11bda19.
github-actions bot pushed a commit that referenced this pull request Mar 5, 2026
# [2.12.0](2.11.0...2.12.0) (2026-03-05)

### Bug Fixes

* **capture:** preserve canvas tab indentation on configured writes ([#1125](#1125)) ([0a1578e](0a1578e))
* disallow capture targets with .base extension ([cb39ed4](cb39ed4))
* **field-suggestions:** opt-in inline values from fenced code blocks ([#1128](#1128)) ([8597905](8597905))
* **gui:** preserve modal edit position during settings reload ([#1132](#1132)) ([11bda19](11bda19))
* **gui:** reduce ai settings modal reload churn ([#1134](#1134)) ([ae0f7a1](ae0f7a1))
* **gui:** reduce choice builder reload churn ([#1136](#1136)) ([818272a](818272a))
* **gui:** reduce macro settings modal reload churn ([#1135](#1135)) ([a1a6271](a1a6271))
* harden existing-tab matching and document issue workflow ([#1108](#1108)) ([7b12d3b](7b12d3b))
* make template path resolution deterministic ([3297d54](3297d54))
* normalize capture title for non-markdown targets ([964d672](964d672))
* preserve capture-format spacing for insert-at-end ([#1119](#1119)) ([8bb8ed4](8bb8ed4))
* preserve explicit capture target file extensions ([57e43ff](57e43ff))
* preserve insert-at-end order for non-newline captures ([#1120](#1120)) ([e7cbbf2](e7cbbf2))
* resolve template file-name paths without duplicate default folder ([7bfd41b](7bfd41b))
* resolve vault-relative template paths using root folders ([81216de](81216de))

### Features

* add AI request logging API and reduce assistant log noise ([#1110](#1110)) ([2c36800](2c36800))
* automate docs version snapshot during release ([#1111](#1111)) ([1571846](1571846))
* **capture:** fully support capture into canvas cards ([#1124](#1124)) ([a53f889](a53f889))
* **cli:** add native QuickAdd Obsidian CLI handlers ([#1129](#1129)) ([8102d47](8102d47))
* **format:** support mapped VALUE suggester display text ([#1127](#1127)) ([b8ec56c](b8ec56c))
* **macro:** add editor cursor navigation commands ([101d5f6](101d5f6))
* support .base template files for template choices ([11e6490](11e6490))

### Reverts

* **gui:** remove modal reload refactor series ([#1137](#1137)) ([3ba1a73](3ba1a73)), closes [#1136](#1136) [#1135](#1135) [#1134](#1134) [#1133](#1133) [#1132](#1132)
@github-actions
Copy link

github-actions bot commented Mar 5, 2026

🎉 This PR is included in version 2.12.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant