ajax conp,GitHub - soraino/v-autosuggest: A simple modular Vuejs component that autosuggest input fr...

v-autosuggest

68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f762d6175746f737567676573742e737667

68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f646d2f762d6175746f737567676573742e737667

68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7675652d322e782d627269676874677265656e2e737667

A simple modular Vuejs component that autosuggest input from a dyanamic or static data querying.

Table of contents

Installation

npm install --save v-autosuggest

Usage

import VAutoSuggest from 'v-autosuggest'

Vue.component('v-autosuggest', VAutosuggest )

In your template you can use this syntax:

v-model="searchData"

:getItemFromAjax="ajaxCall"

:suggValue="'name'"

:suggStatusComp="statusComponent"

:suggItemComp="suggItemComponent"

:items="staticSuggArray"

:maxSuggestion="maxSugg"

:inputClass="'form-control'"

/>

Properties

Property Name

type

Required

Default Value

Description

getItemFromAjax

Function

false

null

contains function that queries and returns the data ( if property "items" is present, this property function will not be fired )

suggValue

String

false

"value" or "item.value" for nested value

the property name that is the main thing that is being queried

suggStatusComp

Object (vue component)

false

base status component

Vue component that show the status of the querying

suggItemComp

Object (vue component)

false

base item component

Vue component that show the suggestion items

items

Array

false

null

Contains a static array of items that is gonna be queried (if this property is present, the getItemFromAjax function will not be fired)

maxSuggestion

Number

false

5

Max number of suggestion item is being shown on screen

inputClass

String

false

v-autocomplete-input

Defines the class for the input tag which you can override with your own class like bootstrap's form-control

Example

There's 2 ways of inserting the data for v-autosuggest

Basic Usage

Through online querying (ie: ajax, firebase , etc...)

Static JSON file or equivalent

Basic usage with Online querying (not limited to ajax)

import axios from 'axios'

import VAutosuggest from 'v-autosuggest'

export default {

name: 'app',

components: {

VAutosuggest

},

data () {

return {

searchData: ''

}

},

methods: {

ajaxCall: async function (query) {

const response = await axios.get(`https://swapi.co/api/people/?search=${query}`)

return response.data.results.reduce((Accumulative, current) => {

Accumulative.push({value: current.name, description: 'Height: '+ current.height + 'cm'})

return Accumulative

})

}

}

}

Important Note:

ajaxCall: Return either a promise or await the function and return the value

I use reduce in the ajaxCall to only get the the name and height of each of the data, but for the height i put description, this is because the default suggestion component shows description in the description property.

Basic usage with static data (eg: JSON file, array, xml)

import axios from 'axios'

import VAutosuggest from 'v-autosuggest'

export default {

name: 'app',

components: {

VAutosuggest

},

data () {

return {

searchData: '',

arrayData: [{name:'Ben', description:'180cm'},{name:'Jon', description:'179cm'},{name:'Smith', description:'190cm'}]

}

}

}

Advanced Usage

You are able to change the component for the status and suggestion to suit your own website.

This is the status component

d8a128f0655c47192101408f3e4c5b12.gif

These are the suggestion items component

0a4f2c667cd079467938e7aa1e54d509.png

You will be able to change the status and suggestion item component by passing your own into the suggStatusComp and suggItemComp respectively.

But there are some caveats.

Suggestion Status Component

When trying to make this component, be sure to include this prop and data

...props: {

suggestionStatusEnum: {

required: true,

type: Number,

default: 0

}

},

data () {

return {

suggestionStatus: {

nuetralStatus: 0,

noDataFound: 1,

loading: 2,

closeStatus: 3

}

}

}...

As you can see the suggestionStatus act as a enum to check the current status of the suggestion querying

Property Name

Description

suggestionStatusEnum

represents the current status of the suggestion querying

valueProp

Represents the key value data that you are trying to find/suggest

Status enum table

Status Name

Status Number

Status Description

nuetralStatus

0

Shown as a neutral stands as no suggestion is being shown but will still be able to shown as empty li tag to the user

noDataFound

1

This is to show an error message to the user that data can be found on their query

loading

2

Shows a loading spinner to tell user it is querying the data

closeStatus

3

Hides the li tag completely even if query finds the data

Example Suggestion Item component

No result found

.loader {

border: 2px solid #f3f3f3;

border-radius: 100%;

border-top: 2px solid black;

width: 20px;

height: 20px;

-webkit-animation: spin 0.5s linear infinite;

animation: spin 0.5s linear infinite;

margin: 0 auto;

}

/* Safari */

@-webkit-keyframes spin {

0% { -webkit-transform: rotate(0deg); }

100% { -webkit-transform: rotate(360deg); }

}

@keyframes spin {

0% { transform: rotate(0deg); }

100% { transform: rotate(360deg); }

}

export default {

name: 'suggestionStatus',

props: {

suggestionStatusEnum: {

required: true,

type: Number,

default: 0

}

},

data () {

return {

suggestionStatus: {

nuetralStatus: 0,

noDataFound: 1,

loading: 2,

closeStatus: 3

}

}

}

}

Suggestion Status Component

When trying to make this component, be sure to include these 2 props

...props: {

item: {

type: Object,

required: true

},

valueProp:{

type: String,

required: false,

default: 'value',

}

}...

property Name

Description

item

Object that represents a suggestion item

valueProp

Represents the key value data that you are trying to find/suggest

Example Suggestion Item component

export default {

name: 'suggItemComponent',

props: {

item: {

type: Object,

required: true

},

valueProp:{

type: String,

required: false,

default: 'value',

}

}

}

License