Skip to content

Commit

Permalink
feat(SelectMenu): allows to clear search query on close (#968)
Browse files Browse the repository at this point in the history
Co-authored-by: Benjamin Canac <canacb1@gmail.com>
  • Loading branch information
DarkGhostHunter and benjamincanac committed Nov 21, 2023
1 parent ceb2ed3 commit 11ccbbb
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 1 deletion.
17 changes: 17 additions & 0 deletions docs/content/3.forms/4.select-menu.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,23 @@ props:
---
::

#### Clear on close :u-badge{label="New" class="align-middle ml-2 !rounded-full" variant="subtle"}

By default, the search query will be kept after the menu is closed. To clear it on close, set the `clear-search-on-close` prop.

::component-card
---
baseProps:
class: 'w-full lg:w-40'
placeholder: 'Select a person'
searchable: true
searchablePlaceholder: 'Search a person...'
options: ['Wade Cooper', 'Arlene Mccoy', 'Devon Webb', 'Tom Cook', 'Tanya Fox', 'Hellen Schmidt', 'Caroline Schultz', 'Mason Heaney', 'Claudie Smitham', 'Emil Schaefer']
props:
clearSearchOnClose: true
---
::

### Async search

Pass a function to the `searchable` prop to customize the search behavior and filter options according to your needs. The function will receive the query as its first argument and should return an array.
Expand Down
12 changes: 12 additions & 0 deletions src/runtime/components/forms/SelectMenu.vue
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,10 @@ export default defineComponent({
type: String,
default: 'Search...'
},
clearSearchOnClose: {
type: Boolean,
default: () => configMenu.default.clearOnClose
},
debounce: {
type: Number,
default: 200
Expand Down Expand Up @@ -427,10 +431,17 @@ export default defineComponent({
return query.value === '' ? null : { [props.optionAttribute]: query.value }
})
function clearOnClose () {
if (props.clearSearchOnClose) {
query.value = ''
}
}
watch(container, (value) => {
if (value) {
emit('open')
} else {
clearOnClose()
emit('close')
emitFormBlur()
}
Expand All @@ -442,6 +453,7 @@ export default defineComponent({
// explicitly set input text because `ComboboxInput` `displayValue` is not reactive
searchInput.value.$el.value = ''
}
emit('update:modelValue', event)
emit('change', event)
emitFormChange()
Expand Down
3 changes: 2 additions & 1 deletion src/runtime/ui.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -790,7 +790,8 @@ export const selectMenu = {
placement: 'bottom-end'
},
default: {
selectedIcon: 'i-heroicons-check-20-solid'
selectedIcon: 'i-heroicons-check-20-solid',
clearOnClose: false
},
arrow: {
..._popperArrow,
Expand Down

1 comment on commit 11ccbbb

@vercel
Copy link

@vercel vercel bot commented on 11ccbbb Nov 21, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully deployed to the following URLs:

ui – ./

ui-nuxt-js.vercel.app
ui-git-dev-nuxt-js.vercel.app
ui.nuxt.com

Please sign in to comment.