/* eslint-disable no-underscore-dangle */
import * as Mousetrap from 'mousetrap'
import { Controller } from 'stimulus'
import { Turbo } from '@hotwired/turbo-rails'
import { autocomplete } from '@algolia/autocomplete-js'
import debouncePromise from '@/js/helpers/debounce_promise'
export default class extends Controller {
static targets = ['autocomplete', 'button']
debouncedFetch = debouncePromise(fetch, this.debounceTimeout)
get translationKeys() {
let keys
try {
keys = JSON.parse(this.autocompleteTarget.dataset.translationKeys)
} catch (error) {
keys = {}
}
return keys
}
get debounceTimeout() {
return this.autocompleteTarget.dataset.debounceTimeout
}
get searchResource() {
return this.autocompleteTarget.dataset.searchResource
}
get isGlobalSearch() {
return this.searchResource === 'global'
}
get searchUrl() {
return this.isGlobalSearch ? `${window.Avo.configuration.root_path}/avo_api/search` : `${window.Avo.configuration.root_path}/avo_api/${this.searchResource}/search`
}
addSource(resourceName, data) {
const that = this
return {
sourceId: resourceName,
getItems: () => data.results,
onSelect({ item }) {
Turbo.visit(item._url, { action: 'replace' })
},
templates: {
header() {
return data.header
},
item({ item, createElement }) {
let element = ''
if (item._avatar) {
let classes
switch (item._avatar_type) {
default:
case 'circle':
classes = 'rounded-full'
break
case 'rounded':
classes = 'rounded'
break
}
element += ``
}
element += `