diff options
Diffstat (limited to 'app/assets/javascripts/issues/dashboard/utils.js')
-rw-r--r-- | app/assets/javascripts/issues/dashboard/utils.js | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/app/assets/javascripts/issues/dashboard/utils.js b/app/assets/javascripts/issues/dashboard/utils.js new file mode 100644 index 00000000000..6fa95b38649 --- /dev/null +++ b/app/assets/javascripts/issues/dashboard/utils.js @@ -0,0 +1,23 @@ +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); + }); + } +} |