Skip to content

Commit 4ed9222

Browse files
viva-jinyiclaude
andcommitted
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>
1 parent 50db4b7 commit 4ed9222

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

src/components/input/SearchBox.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ const { placeHolder, showBorder = false } = defineProps<{
1919
placeHolder?: string
2020
showBorder?: boolean
2121
}>()
22-
const searchQuery = defineModel<string>('')
22+
// defineModel without arguments uses 'modelValue' as the prop name
23+
const searchQuery = defineModel<string>()
2324
2425
const wrapperStyle = computed(() => {
2526
return showBorder

src/components/widget/ModelSelector.vue renamed to src/components/widget/SampleModelSelector.vue

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
</template>
1313

1414
<template #header>
15-
<SearchBox v-model:="searchQuery" class="max-w-[384px]" />
15+
<SearchBox v-model="searchQuery" class="max-w-[384px]" />
1616
</template>
1717

1818
<template #header-right-area>
@@ -59,6 +59,7 @@
5959
<div class="relative px-6 pt-2 pb-4 flex gap-2">
6060
<MultiSelect
6161
v-model="selectedFrameworks"
62+
v-model:search-query="searchText"
6263
class="w-[250px]"
6364
label="Select Frameworks"
6465
:options="frameworkOptions"
@@ -135,7 +136,7 @@
135136
</template>
136137

137138
<script setup lang="ts">
138-
import { provide, ref } from 'vue'
139+
import { provide, ref, watch } from 'vue'
139140
import { useI18n } from 'vue-i18n'
140141
141142
import IconButton from '@/components/button/IconButton.vue'
@@ -201,9 +202,18 @@ const { onClose } = defineProps<{
201202
provide(OnCloseKey, onClose)
202203
203204
const searchQuery = ref<string>('')
205+
const searchText = ref<string>('')
204206
const selectedFrameworks = ref([])
205207
const selectedProjects = ref([])
206208
const selectedSort = ref<string>('popular')
207209
208210
const selectedNavItem = ref<string | null>('installed')
211+
212+
watch(searchText, (newQuery) => {
213+
console.log('searchText:', searchText.value, newQuery)
214+
})
215+
216+
watch(searchQuery, (newQuery) => {
217+
console.log('searchQuery:', searchQuery.value, newQuery)
218+
})
209219
</script>

src/composables/useModelSelectorDialog.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import ModelSelector from '@/components/widget/ModelSelector.vue'
1+
import SampleModelSelector from '@/components/widget/SampleModelSelector.vue'
22
import { useDialogService } from '@/services/dialogService'
33
import { useDialogStore } from '@/stores/dialogStore'
44

@@ -15,7 +15,7 @@ export const useModelSelectorDialog = () => {
1515
function show() {
1616
dialogService.showLayoutDialog({
1717
key: DIALOG_KEY,
18-
component: ModelSelector,
18+
component: SampleModelSelector,
1919
props: {
2020
onClose: hide
2121
}

0 commit comments

Comments
 (0)