Skip to content

Instantly share code, notes, and snippets.

@secretpray
Created November 6, 2022 04:46
Show Gist options
  • Save secretpray/e03839966939dacecc8a4158ad03517d to your computer and use it in GitHub Desktop.
Save secretpray/e03839966939dacecc8a4158ad03517d to your computer and use it in GitHub Desktop.
Rails 7 with Importmap and slim-select
  1. Addd slim-select
bin/importmap pin slim-select 

optionaly

bin/importmap pin slim-select  --download
  1. Add css (3 variants)
  • add to app/views/layouts/application.html.erb
<%= stylesheet_link_tag "https://cdnjs.cloudflare.com/ajax/libs/slim-select/1.27.1/slimselect.min.css", "data-turbo-track": "reload" %>

or

  • in rails console
`curl https://cdnjs.cloudflare.com/ajax/libs/slim-select/1.27.1/slimselect.min.css --output "#{Rails.root.join('app', 'assets', 'stylesheets')}/slimsel
ect.min.css"`

or

  • add to app/assets/stylesheets/application.css
@import url("https://cdnjs.cloudflare.com/ajax/libs/slim-select/1.27.1/slimselect.min.css");
  1. Optionaly
import { Controller } from "stimulus"
import SlimSelect from "slim-select"
// import "slim-select/dist/slimselect.min.css"
// import "../style/slimselect-customized.css"

export default class extends Controller {
  connect() {
    const limit = this.data.get("limit")
    const placeholder = this.data.get("placeholder")
    const searchText = this.data.get("no-results")
    const closeOnSelect = this.single
    const allowDeselect = !this.element.required

    this.select = new SlimSelect({
      select: this.element,
      closeOnSelect,
      allowDeselect,
      limit,
      placeholder,
      searchText
    })
  }

  get single() {
    return !this.element.multiple
  }
  get multi() {
    return this.element.multiple
  }

  disconnect() {
    if (this.select) {
      this.select.destroy()
    }
  }
}
.ss-main .ss-single-selected, .ss-main .ss-multi-selected {
  min-height: calc(1.5em + 0.75rem + 2px);
  border: 1px solid #ced4da;
  border-radius: 0.5rem;
}

.ss-main .ss-multi-selected .ss-add {
  margin: 13px 12px 0 5px;
}

.ss-main .ss-multi-selected .ss-values .ss-value {
  background-color: #f7f7f9;
  padding: 6px 10px;
}

.ss-main .ss-multi-selected .ss-values .ss-value .ss-value-text {
  color: #657072;
}

.ss-main .ss-multi-selected .ss-values .ss-value .ss-value-delete {
  padding-left: 3px;
  color: #BC3C35;
}

.ss-content .ss-list .ss-option.ss-highlighted, .ss-content .ss-list .ss-option:hover {
  color: #657072;
  background-color: #58B7C1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment