Skip to content

Commit 91a4f4b

Browse files
committed
feat(AutoComplete): Start implementation (experimental)
1 parent 5f970bc commit 91a4f4b

File tree

3 files changed

+83
-0
lines changed

3 files changed

+83
-0
lines changed

src/formkit/PrimeAutoComplete.vue

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<script setup lang='ts'>
2+
const props = defineProps({
3+
context: Object,
4+
})
5+
6+
const context = props.context
7+
const attrs = context?.attrs
8+
9+
const suggestions = ref([])
10+
11+
function search(event) {
12+
suggestions.value = attrs.complete(event.query)
13+
}
14+
15+
function handleInput(e: any) {
16+
context?.node.input(props.context?._value)
17+
}
18+
19+
const styleClass = computed(() => (context?.state.validationVisible && !context?.state.valid) ? `${attrs?.class} p-invalid` : attrs?.class)
20+
</script>
21+
22+
<template>
23+
<div>
24+
<AutoComplete
25+
:id="context.id"
26+
v-model="context._value"
27+
:disabled="attrs._disabled ?? false"
28+
:tabindex="attrs.tabindex"
29+
:aria-label="attrs.ariaLabel"
30+
:aria-labelledby="attrs.ariaLabelledby"
31+
:suggestions="suggestions"
32+
:dropdown="attrs?.dropdown ?? false"
33+
:multiple="attrs.multiple ?? false"
34+
:pt="attrs.pt"
35+
:pt-options="attrs.ptOptions"
36+
:unstyled="attrs.unstyled ?? false"
37+
@complete="search"
38+
@change="handleInput"
39+
/>
40+
</div>
41+
</template>

src/formkit/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { FormKitTypeDefinition } from '@formkit/core'
22
import { createInput } from '@formkit/vue'
33

4+
import PrimeAutoComplete from './PrimeAutocomplete.vue'
45
import PrimeCalendar from './PrimeCalendar.vue'
56
import PrimeCheckbox from './PrimeCheckbox.vue'
67
import PrimeChips from './PrimeChips.vue'
@@ -23,6 +24,9 @@ import PrimeToggleButton from './PrimeToggleButton.vue'
2324
import PrimeSelectButton from './PrimeSelectButton.vue'
2425
import PrimeTriStateCheckbox from './PrimeTriStateCheckbox.vue'
2526

27+
export const primeAutoCompleteDefinition: FormKitTypeDefinition = createInput(PrimeAutoComplete, {
28+
props: [],
29+
})
2630
export const primeInputTextDefinition: FormKitTypeDefinition = createInput(PrimeInputText, {
2731
props: ['iconRight', 'iconLeft'],
2832
})
@@ -106,6 +110,7 @@ export const primeTriStateCheckboxDefinition: FormKitTypeDefinition = createInpu
106110
})
107111

108112
export const primeInputs = {
113+
primeAutoComplete: primeAutoCompleteDefinition,
109114
primeInputText: primeInputTextDefinition,
110115
primeInputNumber: primeInputNumberDefinition,
111116
primeInputMask: primeInputMaskDefinition,

src/pages/demo/AutoComplete.vue

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<script setup lang='ts'>
2+
import PrimeInput from '@/components/demo/PrimeInput.vue'
3+
4+
const primeAttributes = 'placeholder, separator, allowDuplicate, max, addOnBlur'
5+
6+
const list = ['Hello', 'Hero', 'House', 'World']
7+
8+
function search(query: string) {
9+
return list.filter(i => i.toLowerCase().includes(query.toLowerCase()))
10+
}
11+
12+
const schema
13+
= [
14+
{
15+
$formkit: 'primeAutoComplete',
16+
id: 'basic',
17+
name: 'basic',
18+
complete: search,
19+
label: 'Basic AutoComplete',
20+
},
21+
]
22+
23+
const data = { }
24+
</script>
25+
26+
<template>
27+
<div>
28+
<PrimeInput
29+
header="AutoComplete" :schema="schema" :data="data"
30+
:prime-attributes="primeAttributes"
31+
/>
32+
</div>
33+
</template>
34+
35+
<style lang='scss' scoped>
36+
37+
</style>

0 commit comments

Comments
 (0)