-
Notifications
You must be signed in to change notification settings - Fork 376
Select Vue Nodes After Drag #5863
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
base: main
Are you sure you want to change the base?
Conversation
🎭 Playwright Test Results❌ Some tests failed ⏰ Completed at: 09/30/2025, 04:57:38 PM UTC 📈 Summary
📊 Test Reports by Browser
🎉 Click on the links above to view detailed test results for each browser configuration. |
🎨 Storybook Build Status✅ Build completed successfully! ⏰ Completed at: 09/30/2025, 04:47:43 PM UTC 🔗 Links🎉 Your Storybook is ready for review! |
// If it wasn't a drag: single-select the node | ||
if (!wasDragging) { | ||
const selectedMultipleNodes = | ||
canvasStore.selectedItems.filter((n) => isLGraphNode(n)).length > 1 |
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.
This feels a little weird to me. Can we change the selection logic in useNodePointerInteractions instead? I think we'll have to change the interface there anyway since that's where the dragging logic lives.
I would expect the selection to be apparent as I click and drag, not after I release the click.
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.
I agree - I think we should try to match litegraph behavior exactly (unless it's extremely difficult to do).
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.
It should be fairly comfortable to add a test case here, following the existing patterns:
ComfyUI_frontend/browser_tests/tests/vueNodes/interactions/node/select.spec.ts
Lines 23 to 38 in 35ddb19
test(`should allow selecting multiple nodes with ${name}+click`, async ({ | |
comfyPage | |
}) => { | |
await comfyPage.page.getByText('Load Checkpoint').click() | |
expect(await comfyPage.vueNodes.getSelectedNodeCount()).toBe(1) | |
await comfyPage.page.getByText('Empty Latent Image').click({ | |
modifiers: [modifier] | |
}) | |
expect(await comfyPage.vueNodes.getSelectedNodeCount()).toBe(2) | |
await comfyPage.page.getByText('KSampler').click({ | |
modifiers: [modifier] | |
}) | |
expect(await comfyPage.vueNodes.getSelectedNodeCount()).toBe(3) | |
}) |
const selectedMultipleNodes = | ||
canvasStore.selectedItems.filter((n) => isLGraphNode(n)).length > 1 |
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.
nit: we can optimize this by just doing a normal for
loop and returning early if we hit 2, then move it to existing utils file or into the module scope.
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.
Long term if we're doing this in multiple places, it might be a candidate for a computed value in the store. Something like canvasStore.selectedNodesCount
? (Depending on how expensive the filtering ends up being)
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.
Last time I checked, canvas.selectedItems is not reactive
This pull request refactors the node selection logic in the Vue nodes event handler composable to simplify the function signature and improve single vs. multi-selection behavior. The main change is the removal of the
wasDragging
parameter from thehandleNodeSelect
function, with selection logic now determined by the current selection state. Related test code is updated to match the new function signature.Node selection logic improvements:
handleNodeSelect
function inuseNodeEventHandlersIndividual
to remove thewasDragging
parameter, making the function signature simpler and relying on selection state to handle single vs. multi-selection.isLGraphNode
, and only perform single selection if not.Code and test updates:
handleNodeSelect
in the composable to remove thewasDragging
argument, ensuring consistent usage throughout the codebase. [1] [2] [3]handleNodeSelect
signature without the third parameter. [1] [2] [3] [4] [5] [6]Utility import:
isLGraphNode
from@/utils/litegraphUtil
to support the updated selection logic.## SummaryScreenshots (if applicable)
Screen.Recording.2025-09-30.at.17.47.18.mov