diff --git a/browser_tests/fixtures/components/ComfyNodeSearchBox.ts b/browser_tests/fixtures/components/ComfyNodeSearchBox.ts index 9a85f85b0..23dc104cf 100644 --- a/browser_tests/fixtures/components/ComfyNodeSearchBox.ts +++ b/browser_tests/fixtures/components/ComfyNodeSearchBox.ts @@ -3,6 +3,13 @@ import { Locator, Page } from '@playwright/test' export class ComfyNodeSearchFilterSelectionPanel { constructor(public readonly page: Page) {} + get header() { + return this.page + .getByRole('dialog') + .locator('div') + .filter({ hasText: 'Add node filter condition' }) + } + async selectFilterType(filterType: string) { await this.page .locator( diff --git a/browser_tests/nodeSearchBox.spec.ts b/browser_tests/nodeSearchBox.spec.ts index f6c2feacc..f7523c38a 100644 --- a/browser_tests/nodeSearchBox.spec.ts +++ b/browser_tests/nodeSearchBox.spec.ts @@ -132,6 +132,22 @@ test.describe('Node search box', () => { await expectFilterChips(comfyPage, ['MODEL']) }) + test('Outer click dismisses filter panel but keeps search box visible', async ({ + comfyPage + }) => { + await comfyPage.searchBox.filterButton.click() + const panel = comfyPage.searchBox.filterSelectionPanel + await panel.header.waitFor({ state: 'visible' }) + const panelBounds = await panel.header.boundingBox() + await comfyPage.page.mouse.click(panelBounds!.x - 10, panelBounds!.y - 10) + + // Verify the filter selection panel is hidden + expect(panel.header).not.toBeVisible() + + // Verify the node search dialog is still visible + expect(comfyPage.searchBox.input).toBeVisible() + }) + test('Can add multiple filters', async ({ comfyPage }) => { await comfyPage.searchBox.addFilter('MODEL', 'Input Type') await comfyPage.searchBox.addFilter('CLIP', 'Output Type') diff --git a/src/components/searchbox/NodeSearchBox.vue b/src/components/searchbox/NodeSearchBox.vue index cd1dc0b54..f2e60e3ef 100644 --- a/src/components/searchbox/NodeSearchBox.vue +++ b/src/components/searchbox/NodeSearchBox.vue @@ -19,7 +19,13 @@ class="filter-button z-10" @click="nodeSearchFilterVisible = true" /> - + @@ -140,7 +146,6 @@ onMounted(reFocusInput) const onAddFilter = (filterAndValue: FilterAndValue) => { nodeSearchFilterVisible.value = false emit('addFilter', filterAndValue) - reFocusInput() } const onRemoveFilter = (event: Event, filterAndValue: FilterAndValue) => { event.stopPropagation()