50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
import {inject, computed, ref} from 'vue';
|
|
|
|
export default function useSearch(params = null, options = null) {
|
|
params = params === null ? [] : params;
|
|
options = options === null ? {} : options;
|
|
const axios = inject('axios');
|
|
const results = ref({hits: []});
|
|
const realSearchString = ref('');
|
|
|
|
async function search(text, filters = [], options = {}) {
|
|
var response = await axios.post(
|
|
import.meta.env.MODE === 'development' ? 'http://localhost:7700/indexes/members/search' : '/indexes/members/search',
|
|
{
|
|
q: text,
|
|
filter: filters,
|
|
sort: ['lastname:asc', 'firstname:asc'],
|
|
...options,
|
|
},
|
|
{headers: {Authorization: 'Bearer ' + document.querySelector('meta[name="meilisearch_key"]').content}}
|
|
);
|
|
|
|
return response.data;
|
|
}
|
|
|
|
function clearSearch() {
|
|
searchString.value = '';
|
|
}
|
|
|
|
const searchString = computed({
|
|
get: () => realSearchString.value,
|
|
set: async (v) => {
|
|
realSearchString.value = v;
|
|
|
|
if (!v.length) {
|
|
results.value = {hits: []};
|
|
return;
|
|
}
|
|
|
|
results.value = await search(v, params, options);
|
|
},
|
|
});
|
|
|
|
return {
|
|
search,
|
|
searchString,
|
|
results,
|
|
clearSearch,
|
|
};
|
|
}
|