Sha256: 33c602a0eedd440ce2115860a49235dcdb786589e760a8b0be80ea7d13b99d59

Contents?: true

Size: 931 Bytes

Versions: 27

Compression:

Stored size: 931 Bytes

Contents

import { Controller } from "@hotwired/stimulus"
import Sortable from "libraries/sortablejs"
import formRequestSubmitPolyfill from "libraries/form-request-submit-polyfill"

export default class extends Controller {
  static get targets() {
    return [ "form", "list" ]
  }

  connect() {
    this.sortable = Sortable.create(this.listTarget, {
      handle: '[data-sortable-handle]',
      onEnd: this.saveSort.bind(this),
      animation: 150
    })
  }

  saveSort(event) {
    if (this.hasFormTarget) {
      this.prepareForm()
      this.formTarget.requestSubmit()
    }
  }
  
  prepareForm() {
    // Empty form
    this.formTarget.innerHTML = ''
    
    // Add hidden fields to store ids
    this.orderedIds.forEach(function(id) {
      this.formTarget.insertAdjacentHTML("beforeend", `<input type="hidden" name="ids[]" value="${id}" />`)
    }.bind(this))
  }

  get orderedIds() {
    return this.sortable.toArray()
  }

}

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
spina-2.18.0 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.17.0 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.16.0 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.15.1 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.15.0 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.14.0 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.13.1 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.13.0 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.12.0 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.11.0 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.10.0 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.9.1 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.9.0 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.8.1 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.8.0 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.7.0 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.6.2 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.6.1 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.6.0 app/assets/javascripts/spina/controllers/sortable_controller.js
spina-2.5.0 app/assets/javascripts/spina/controllers/sortable_controller.js