diff --git a/src/components/common/SearchBox.vue b/src/components/common/SearchBox.vue
index bc3bb93cf..4371392d0 100644
--- a/src/components/common/SearchBox.vue
+++ b/src/components/common/SearchBox.vue
@@ -1,20 +1,45 @@
-
-
-
-
+
-
+
+
diff --git a/src/components/searchbox/NodeSearchBox.vue b/src/components/searchbox/NodeSearchBox.vue
index e19963745..07fcc2bfd 100644
--- a/src/components/searchbox/NodeSearchBox.vue
+++ b/src/components/searchbox/NodeSearchBox.vue
@@ -7,7 +7,22 @@
v-if="hoveredSuggestion"
/>
-
+
+
+
+
-
-
- {{ value[0].invokeSequence.toUpperCase() }}
-
- {{ value[1] }}
-
+
@@ -70,9 +85,9 @@
diff --git a/src/components/sidebar/tabs/NodeLibrarySidebarTab.vue b/src/components/sidebar/tabs/NodeLibrarySidebarTab.vue
index 74e316038..3288c7987 100644
--- a/src/components/sidebar/tabs/NodeLibrarySidebarTab.vue
+++ b/src/components/sidebar/tabs/NodeLibrarySidebarTab.vue
@@ -23,8 +23,17 @@
class="node-lib-search-box"
v-model:modelValue="searchQuery"
@search="handleSearch"
+ @show-filter="($event) => searchFilter.toggle($event)"
+ @remove-filter="onRemoveFilter"
:placeholder="$t('searchNodes') + '...'"
+ filter-icon="pi pi-filter"
+ :filters
/>
+
+
+
(null)
const hoveredComfyNode = computed(() => {
@@ -240,16 +253,26 @@ const insertNode = (nodeDef: ComfyNodeDefImpl) => {
}
const filteredRoot = ref(null)
+const filters: Ref }>> =
+ ref([])
const handleSearch = (query: string) => {
- if (query.length < 3) {
+ if (query.length < 3 && !filters.value.length) {
filteredRoot.value = null
expandedKeys.value = {}
return
}
- const matchedNodes = nodeDefStore.nodeSearchService.searchNode(query, [], {
- limit: 64
- })
+ const f = filters.value.map((f) => f.filter as FilterAndValue)
+ const matchedNodes = nodeDefStore.nodeSearchService.searchNode(
+ query,
+ f,
+ {
+ limit: 64
+ },
+ {
+ matchWildcards: false
+ }
+ )
filteredRoot.value = buildNodeDefTree(matchedNodes)
expandNode(filteredRoot.value)
@@ -353,6 +376,26 @@ const updateCustomization = (icon: string, color: string) => {
)
}
}
+
+const onAddFilter = (filterAndValue: FilterAndValue) => {
+ filters.value.push({
+ filter: filterAndValue,
+ badge: filterAndValue[0].invokeSequence.toUpperCase(),
+ badgeClass: filterAndValue[0].invokeSequence + '-badge',
+ text: filterAndValue[1],
+ id: +new Date()
+ })
+
+ handleSearch(searchQuery.value)
+}
+
+const onRemoveFilter = (filterAndValue) => {
+ const index = filters.value.findIndex((f) => f === filterAndValue)
+ if (index !== -1) {
+ filters.value.splice(index, 1)
+ }
+ handleSearch(searchQuery.value)
+}