Sha256: 6e2cd5ace33427518c29259ef8b8823159cb05f6133fd4a11b4fc298c3e59418

Contents?: true

Size: 1.49 KB

Versions: 17

Compression:

Stored size: 1.49 KB

Contents

import { Controller } from "@hotwired/stimulus"
import { get } from "https://esm.sh/@rails/request.js@0.0.11?standalone"
import TomSelect from "https://esm.sh/tom-select@2.4.1/base?standalone"

export default class extends Controller {
  static values = { url: String, optionCreate: { type: String, default: "Add" }, noResults: { type: String, default: "No results found" } }

  initialize() {
    this.load = this.load.bind(this)
  }

  connect() {
    if (this.element.nodeName === "INPUT") {
      this.tomSelect = new TomSelect(this.element, this.#inputSettings)
    } else {
      this.tomSelect = new TomSelect(this.element, this.#selectSettings)
    }
  }

  disconnect() {
    this.tomSelect.destroy()
  }

  async load(query, callback) {
    const response     = await get(this.urlValue, { responseKind: "json", query: { q: query } })
    const jsonResponse = await response.json
    callback(jsonResponse)
  }

  get #inputSettings() {
    return { render: this.#render, load: this.#loadSetting, persist: false, createOnBlur: true, create: true }
  }

  get #selectSettings() {
    return { render: this.#render, load: this.#loadSetting }
  }

  get #render() {
    return {
      option_create: (data, escape) => {
        return `<div class="create">${this.optionCreateValue} <b>${escape(data.input)}</b>...</div>`
      },
      no_results: () =>  {
        return `<div class="no-results">${this.noResultsValue}</div>`
      }
    }
  }

  get #loadSetting() {
    return this.hasUrlValue && this.load
  }
}

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
css-zero-1.0.6 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-1.0.5 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-1.0.4 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-1.0.3 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-1.0.2 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-1.0.1 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-1.0.0 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-0.0.98 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-0.0.97 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-0.0.96 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-0.0.95 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-0.0.94 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-0.0.93 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-0.0.92 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-0.0.91 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-0.0.90 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js
css-zero-0.0.89 lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js