0.4.1 • Published 2 years ago

@tresinternet/vue3-autocomplete v0.4.1

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

@tresinternet/vue3-autocomplete

Table of contents

Installation

Using npm

npm install @tresinternet/vue3-autocomplete

Usage

Load the component locally into your component.

<script setup lang="ts">
import Autocomplete from '@tresinternet/vue3-autocomplete'
// Optional: Import default CSS
import '@tresinternet/vue3-autocomplete/dist/style.css'
</script>

Use the component into your template.

<template>
	<Autocomplete
			@on-input="updateAutocompleteItems"
			:results="items"
	></Autocomplete>
</template>

Properties

PropertyTypeDescriptionRequiredDefault
auto-select-first-resultBooleanIf true, selects the first item in the list when pressing 'Enter'-keyNofalse
debounceIntegerTime to wait before each call to the @input eventNo0
display-itemFunctionDescribes how to render each item in resultsNoreturn typeof item === 'string' ? item as any : item.name - If the item type is a string, it returns this string. Otherwise, return item.name
display-valueStringThe property to display in the input fieldNo
input-classArrayOverride input default classesNo[]
maxIntegerDefine a render limit for results itemsNo10
placeholderStringDefault input placeholderNo''
results-container-classArrayOverride results container default classesNo[]
results-item-classArrayOverride results item default classesNo[]
resultsArrayItems to display in the results listNo[]
use-html-for-resultsBooleanIf true, displayItem method will display results as htmlNofalse

Events

EventDescriptionParameters
@on-cancelTriggered when the user cancels the input by pressing the Escape key
@on-clear-inputTriggered when the user clicks the clear button
@on-inputTriggered on user input, should update the local results listquery: string
@on-invalid-inputTriggered when the user clicks the return-key but no valid results are available
@on-selectTriggered when user click on a list item and return the selected itemitem: unknown

Public functions

FunctionDescription
setText(query: string)Manually set the text of the input-field of the autocomplete component

Available slots

SlotDescription
clearInputThe contents of the clear-button. Defaults to an SVG-element with an ×

Examples

To correctly use the component, you need to provide a list of items to display in the results list. You can do this by using the results property. This list needs to be filtered by the user input. You can do this by using the @input event. This event is triggered on user input and should update the local results list. Also sorting the results list is a good idea.

<script setup lang="ts">
import Autocomplete from '@tresinternet/vue3-autocomplete'
// Optional: Import default CSS
import '@tresinternet/vue3-autocomplete/dist/style.css'

// Define a ref to the autocomplete component
const autocomplete = ref()

// Define the initial list of items
const items: Ref<{ value: string; name: string }[]> = ref([])
// Define the list of items to display in the results list
const filteredItems: Ref<{ value: string; name: string }[]> = ref([])

// Store the current value of the autocomplete field
const currentValue = ref('')

/**
 * Update the filtered items based on the search query
 * Triggered when the user types in the autocomplete
 * @param query The query to filter the items on
 */
function updateAutocompleteItems(query: string) {
	// Filter the items based on the query
	filteredItems.value = items.value.filter((item) =>
		item.label.toLowerCase().includes(query.toLowerCase()))

	// Sort the items, starting with the ones that start with the query, and sort them alphabetically
	// Sort the rest of the items alphabetically
	// This is just an example, you can sort the items however you want
	filteredItems.value.sort((a, b) => {
		if (a.label.toLowerCase().startsWith(query.toLowerCase())) {
			if (b.label.toLowerCase().startsWith(query.toLowerCase())) {
				return a.label.localeCompare(b.label)
			}
			return -1
		}
		if (b.label.toLowerCase().startsWith(query.toLowerCase())) {
			return 1
		}
		return a.label.localeCompare(b.label)
	})
}

/**
 * Select an item from the autocomplete.
 * Triggered when the user selects an item from the autocomplete
 * @param item The selected item
 */
function selectAutocompleteItem(item: { value: number; name: string }) {
	// Do something with the selected item
	...

	// Trigger the `updateAutocompleteItems` function to update the filtered items list with the selected item
	updateAutocompleteItems(item.name)
}


/**
 * Cancel the autocomplete
 */
function cancelAutocomplete() {
	// If there is no initial value, clear the filtered items and clear the text
	// (in that case, the input should revert to an empty value)
	// Otherwise, revert the text to the initial value
	// The `currentValue` variable should be replaced with your own variable / check
	if (!currentValue) {
		autocomplete.value?.setText('')
		updateAutocompleteItems('')
	}
	else {
		autocomplete.value?.setText(currentValue)
		updateAutocompleteItems(currentValue)
	}
}

/**
 * Clear the autocomplete
 */
function clearAutocomplete() {
	// Clear the currently selected item
	...

	// Trigger the `updateAutocompleteItems` function with an empty string to clear the filtered items list
	updateAutocompleteItems('')
}

</script>
<Autocomplete
	ref="autocomplete"
	:results="filteredItems"
	:auto-select-first-result="true"
	:display-value="currentValue"
	@on-input="updateAutocompleteItems"
	@on-select="selectAutocompleteItem"
	@on-cancel="cancelAutocomplete"
	@on-clear-input="clearAutocomplete"
/>

Todo

  • Fix inline documentation and add Typescript support

Origin

This code was initially written by Takachi67 and can be found on https://github.com/Takachi67/vue3-autocomplete

License

MIT

0.4.1

2 years ago

0.4.0

2 years ago

0.3.0

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago