Skip to content

Conversation

@christian-byrne
Copy link
Contributor

@christian-byrne christian-byrne commented Nov 5, 2025

Fixes the janky UX when loading templates via URL query parameters by moving the loading logic earlier in the app lifecycle (from GraphView.onGraphReady to useWorkflowPersistence.restorePreviousWorkflow). The saved workflow now loads first as a background tab, then the template loads as the active tab, eliminating the visual flash where the saved workflow briefly appears before being replaced. After loading, the template and source query parameters are removed from the URL using router.replace to prevent the template from re-loading on page refresh. This preserves user work by keeping both workflows open in separate tabs and matches the existing behavior when clicking templates from the dialog. All 15 tests pass including 3 new tests for URL cleanup.

┆Issue is synchronized with this Notion page by Unito

Christian Byrne added 2 commits November 4, 2025 15:11
Move template URL loading logic from GraphView.onGraphReady to
useWorkflowPersistence.restorePreviousWorkflow. This ensures templates
load immediately after the saved workflow, eliminating the janky UX
where the previous graph loads, lags, then gets replaced by the template.

Workflow preservation:
- Saved workflow loads first and opens as a background tab
- Template then loads and becomes the active tab
- Both tabs remain open - user can switch back to previous work
- localStorage updates to template (active workflow) but old tab persists

Benefits:
- Clean loading UX - no flashing between workflows
- Preserves user work - old workflow stays as open tab
- Earlier in lifecycle - loads during GraphCanvas mount, not after ready
- Matches existing template dialog behavior

Changes:
- Restore localStorage workflow first (background tab)
- Then load template (active tab) if query param present
- Remove template loading from GraphView onGraphReady handler
- Tests pass (12/12)
After loading template from URL query params, remove them from the URL
to prevent the template from loading again on page refresh.

Changes:
- Remove template and source params from URL after successful load
- Remove params even on error to prevent retry loops
- Use router.replace to update URL without navigation
- Add 3 tests for URL cleanup behavior (15/15 tests passing)
@dosubot dosubot bot added the size:M This PR changes 30-99 lines, ignoring generated files. label Nov 5, 2025
@github-actions
Copy link

github-actions bot commented Nov 5, 2025

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 11/05/2025, 07:49:14 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Nov 5, 2025

🎭 Playwright Test Results

Some tests failed

⏰ Completed at: 11/05/2025, 08:24:01 AM UTC

📈 Summary

  • Total Tests: 256
  • Passed: 46 ✅
  • Failed: 181 ❌
  • Flaky: 1 ⚠️
  • Skipped: 28 ⏭️

📊 Test Reports by Browser


🎉 Click on the links above to view detailed test results for each browser configuration.

@github-actions
Copy link

github-actions bot commented Nov 5, 2025

Bundle Size Report

Summary

  • Raw size: 12.2 MB baseline 12.2 MB — 🔴 +608 B
  • Gzip: 2.49 MB baseline 2.49 MB — 🔴 +141 B
  • Brotli: 1.96 MB baseline 1.96 MB — 🔴 +148 B
  • Bundles: 58 current • 58 baseline • 13 added / 13 removed

Category Glance
Graph Workspace 🔴 +608 B (729 kB) · Vendor & Third-Party ⚪ 0 B (5.32 MB) · App Entry Points ⚪ 0 B (3.31 MB) · Other ⚪ 0 B (2.55 MB) · Panels & Settings ⚪ 0 B (293 kB) · UI Components ⚪ 0 B (12.6 kB) · + 3 more

Per-category breakdown
App Entry Points — 3.31 MB (baseline 3.31 MB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-DV9j6SKl.js (new) 2.92 MB 🔴 +2.92 MB 🔴 +605 kB 🔴 +457 kB
assets/index-zUwM8XLC.js (removed) 2.92 MB 🟢 -2.92 MB 🟢 -605 kB 🟢 -457 kB
assets/index-51niwHpI.js (new) 382 kB 🔴 +382 kB 🔴 +76.6 kB 🔴 +62 kB
assets/index-Dv04s-Ig.js (removed) 382 kB 🟢 -382 kB 🟢 -76.6 kB 🟢 -62.1 kB
assets/index-COPRQy7p.js (new) 1.75 kB 🔴 +1.75 kB 🔴 +578 B 🔴 +487 B
assets/index-DTXds8Ct.js (removed) 1.75 kB 🟢 -1.75 kB 🟢 -576 B 🟢 -483 B

Status: 3 added / 3 removed

Graph Workspace — 729 kB (baseline 729 kB) • 🔴 +608 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BCgZnPAf.js (new) 729 kB 🔴 +729 kB 🔴 +143 kB 🔴 +110 kB
assets/GraphView-Dyy-XWDh.js (removed) 729 kB 🟢 -729 kB 🟢 -142 kB 🟢 -110 kB

Status: 1 added / 1 removed

Views & Navigation — 8.18 kB (baseline 8.18 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/UserSelectView-C9DKR6mg.js (removed) 8.18 kB 🟢 -8.18 kB 🟢 -2.48 kB 🟢 -2.17 kB
assets/UserSelectView-DwXJW3XX.js (new) 8.18 kB 🔴 +8.18 kB 🔴 +2.48 kB 🔴 +2.17 kB

Status: 1 added / 1 removed

Panels & Settings — 293 kB (baseline 293 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CreditsPanel-CMwT6wSm.js (removed) 22.9 kB 🟢 -22.9 kB 🟢 -5.45 kB 🟢 -4.77 kB
assets/CreditsPanel-DfF3TeVF.js (new) 22.9 kB 🔴 +22.9 kB 🔴 +5.45 kB 🔴 +4.76 kB
assets/KeybindingPanel-2qbK87QK.js (removed) 15.3 kB 🟢 -15.3 kB 🟢 -3.78 kB 🟢 -3.32 kB
assets/KeybindingPanel-DdCnm83K.js (new) 15.3 kB 🔴 +15.3 kB 🔴 +3.77 kB 🔴 +3.33 kB
assets/ExtensionPanel-CMZsUbOf.js (removed) 12.1 kB 🟢 -12.1 kB 🟢 -2.84 kB 🟢 -2.48 kB
assets/ExtensionPanel-I_rRmUZc.js (new) 12.1 kB 🔴 +12.1 kB 🔴 +2.84 kB 🔴 +2.48 kB
assets/AboutPanel-BM4HpRbG.js (removed) 10.3 kB 🟢 -10.3 kB 🟢 -2.68 kB 🟢 -2.34 kB
assets/AboutPanel-CHOqyV2v.js (new) 10.3 kB 🔴 +10.3 kB 🔴 +2.67 kB 🔴 +2.34 kB
assets/ServerConfigPanel-f6ZnzKbo.js (new) 8.23 kB 🔴 +8.23 kB 🔴 +2.17 kB 🔴 +1.91 kB
assets/ServerConfigPanel-pN2hcMW7.js (removed) 8.23 kB 🟢 -8.23 kB 🟢 -2.18 kB 🟢 -1.91 kB
assets/UserPanel-C3fnz9w3.js (removed) 7.94 kB 🟢 -7.94 kB 🟢 -2.07 kB 🟢 -1.81 kB
assets/UserPanel-DXmqRDie.js (new) 7.94 kB 🔴 +7.94 kB 🔴 +2.07 kB 🔴 +1.81 kB
assets/settings-0O6mq5to.js 24.3 kB 24.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BYaBy7dC.js 20.4 kB 20.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-C3vygQN4.js 25.7 kB 25.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CbKYXyH0.js 22.7 kB 22.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CCholIsI.js 25 kB 25 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DFX7vRkK.js 19.8 kB 19.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-INJLrcmT.js 31.3 kB 31.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-iR6BKRXe.js 23.7 kB 23.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-YjQmudNE.js 23.5 kB 23.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 6 added / 6 removed

UI Components — 12.6 kB (baseline 12.6 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-Bib10V0s.js (new) 11.3 kB 🔴 +11.3 kB 🔴 +2.83 kB 🔴 +2.49 kB
assets/ComfyQueueButton-d1L9pL9N.js (removed) 11.3 kB 🟢 -11.3 kB 🟢 -2.83 kB 🟢 -2.49 kB
assets/UserAvatar.vue_vue_type_script_setup_true_lang-CY-Afo9h.js 1.29 kB 1.29 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 1 added / 1 removed

Data & Services — 10.4 kB (baseline 10.4 kB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/keybindingService-Baif3Q2k.js (new) 7.6 kB 🔴 +7.6 kB 🔴 +1.85 kB 🔴 +1.59 kB
assets/keybindingService-DfBQoB60.js (removed) 7.6 kB 🟢 -7.6 kB 🟢 -1.85 kB 🟢 -1.59 kB
assets/serverConfigStore-Drx1xdev.js 2.79 kB 2.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 1 added / 1 removed

Utilities & Hooks — 1.07 kB (baseline 1.07 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/mathUtil-CTARWQ-l.js 1.07 kB 1.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Vendor & Third-Party — 5.32 MB (baseline 5.32 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-other-DTJaZ2wB.js 3.22 MB 3.22 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-PESgPnbc.js 517 B 517 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-JDoAqkQm.js 1.37 MB 1.37 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-BovKm-bo.js 232 kB 232 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-D0cJmhlH.js 92.6 kB 92.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-BZLod3g9.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 2.55 MB (baseline 2.55 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/commands-B2KZRBmX.js 15.1 kB 15.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Bw-ckyga.js 13.9 kB 13.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C_NmM85I.js 13.8 kB 13.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CuozCW4W.js 14 kB 14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DGfVUJCR.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-dOJNDogK.js 14.5 kB 14.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DwiE551e.js 14.7 kB 14.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Fw7mvqSy.js 13.1 kB 13.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-FXnO1W4Q.js 13.2 kB 13.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-B2H4r1yK.js 70.7 kB 70.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BfrcYvru.js 59.4 kB 59.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BhRi1J0e.js 68.4 kB 68.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BUG9wuyt.js 80.3 kB 80.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C0hL5eRA.js 76.4 kB 76.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CkKZCT7r.js 58.7 kB 58.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D1RQ0Vb_.js 66.3 kB 66.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DdyfZOXg.js 67.6 kB 67.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DPE2NqRw.js 92.9 kB 92.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-3I1vPgv4.js 181 kB 181 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-B2huPGKQ.js 190 kB 190 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BWugyUzd.js 215 kB 215 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-bXqu6Stq.js 194 kB 194 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CtB2M3sY.js 229 kB 229 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D-rCrn-T.js 200 kB 200 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D38DSnl1.js 179 kB 179 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DAsU52ON.js 192 kB 192 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DnGONaA_.js 196 kB 196 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It feels wrong because the logic doesn't seem to belong in a function named restorePreviousWorkflow

Copy link
Collaborator

Choose a reason for hiding this comment

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

how about loadWorkflowFromSource?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good idea. I'll refactor into a workflowSources array and change the loader/initializer to be more generic

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Maybe we can just remove this or majorly refactor it.

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

Labels

size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants