mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-29 10:42:44 +00:00
refactor: Fix SearchBox v-model binding and rename ModelSelector to SampleModelSelector
SearchBox: - Fix defineModel usage to use default 'modelValue' prop name - Remove incorrect empty string parameter that caused Vue warning - Add comment explaining defineModel behavior SampleModelSelector (formerly ModelSelector): - Rename ModelSelector.vue to SampleModelSelector.vue to indicate it's a sample component - Fix v-model syntax error in SearchBox binding (remove extra '=' character) - Add v-model:search-query binding to MultiSelect for search functionality - Add watch handlers for searchText and searchQuery debugging - Import watch from Vue and add searchText ref for MultiSelect search useModelSelectorDialog: - Update import to use renamed SampleModelSelector component These changes fix the v-model binding issues preventing search functionality from working properly in both the header SearchBox and MultiSelect components. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -19,7 +19,8 @@ const { placeHolder, showBorder = false } = defineProps<{
|
|||||||
placeHolder?: string
|
placeHolder?: string
|
||||||
showBorder?: boolean
|
showBorder?: boolean
|
||||||
}>()
|
}>()
|
||||||
const searchQuery = defineModel<string>('')
|
// defineModel without arguments uses 'modelValue' as the prop name
|
||||||
|
const searchQuery = defineModel<string>()
|
||||||
|
|
||||||
const wrapperStyle = computed(() => {
|
const wrapperStyle = computed(() => {
|
||||||
return showBorder
|
return showBorder
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template #header>
|
<template #header>
|
||||||
<SearchBox v-model:="searchQuery" class="max-w-[384px]" />
|
<SearchBox v-model="searchQuery" class="max-w-[384px]" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template #header-right-area>
|
<template #header-right-area>
|
||||||
@@ -59,6 +59,7 @@
|
|||||||
<div class="relative px-6 pt-2 pb-4 flex gap-2">
|
<div class="relative px-6 pt-2 pb-4 flex gap-2">
|
||||||
<MultiSelect
|
<MultiSelect
|
||||||
v-model="selectedFrameworks"
|
v-model="selectedFrameworks"
|
||||||
|
v-model:search-query="searchText"
|
||||||
class="w-[250px]"
|
class="w-[250px]"
|
||||||
label="Select Frameworks"
|
label="Select Frameworks"
|
||||||
:options="frameworkOptions"
|
:options="frameworkOptions"
|
||||||
@@ -135,7 +136,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { provide, ref } from 'vue'
|
import { provide, ref, watch } from 'vue'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
|
|
||||||
import IconButton from '@/components/button/IconButton.vue'
|
import IconButton from '@/components/button/IconButton.vue'
|
||||||
@@ -201,9 +202,18 @@ const { onClose } = defineProps<{
|
|||||||
provide(OnCloseKey, onClose)
|
provide(OnCloseKey, onClose)
|
||||||
|
|
||||||
const searchQuery = ref<string>('')
|
const searchQuery = ref<string>('')
|
||||||
|
const searchText = ref<string>('')
|
||||||
const selectedFrameworks = ref([])
|
const selectedFrameworks = ref([])
|
||||||
const selectedProjects = ref([])
|
const selectedProjects = ref([])
|
||||||
const selectedSort = ref<string>('popular')
|
const selectedSort = ref<string>('popular')
|
||||||
|
|
||||||
const selectedNavItem = ref<string | null>('installed')
|
const selectedNavItem = ref<string | null>('installed')
|
||||||
|
|
||||||
|
watch(searchText, (newQuery) => {
|
||||||
|
console.log('searchText:', searchText.value, newQuery)
|
||||||
|
})
|
||||||
|
|
||||||
|
watch(searchQuery, (newQuery) => {
|
||||||
|
console.log('searchQuery:', searchQuery.value, newQuery)
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import ModelSelector from '@/components/widget/ModelSelector.vue'
|
import SampleModelSelector from '@/components/widget/SampleModelSelector.vue'
|
||||||
import { useDialogService } from '@/services/dialogService'
|
import { useDialogService } from '@/services/dialogService'
|
||||||
import { useDialogStore } from '@/stores/dialogStore'
|
import { useDialogStore } from '@/stores/dialogStore'
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ export const useModelSelectorDialog = () => {
|
|||||||
function show() {
|
function show() {
|
||||||
dialogService.showLayoutDialog({
|
dialogService.showLayoutDialog({
|
||||||
key: DIALOG_KEY,
|
key: DIALOG_KEY,
|
||||||
component: ModelSelector,
|
component: SampleModelSelector,
|
||||||
props: {
|
props: {
|
||||||
onClose: hide
|
onClose: hide
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user