23 lines
667 B
JavaScript
23 lines
667 B
JavaScript
import fuzzaldrinPlus from 'fuzzaldrin-plus';
|
|
import { MAX_LIST_SIZE } from '~/issues/list/constants';
|
|
import axios from '~/lib/utils/axios_utils';
|
|
|
|
export class AutocompleteCache {
|
|
constructor() {
|
|
this.cache = {};
|
|
}
|
|
|
|
fetch({ url, cacheName, searchProperty, search }) {
|
|
if (this.cache[cacheName]) {
|
|
const data = search
|
|
? fuzzaldrinPlus.filter(this.cache[cacheName], search, { key: searchProperty })
|
|
: this.cache[cacheName].slice(0, MAX_LIST_SIZE);
|
|
return Promise.resolve(data);
|
|
}
|
|
|
|
return axios.get(url).then(({ data }) => {
|
|
this.cache[cacheName] = data;
|
|
return data.slice(0, MAX_LIST_SIZE);
|
|
});
|
|
}
|
|
}
|