Skip to content

Instantly share code, notes, and snippets.

@skyporter
Last active June 5, 2020 14:02
Show Gist options
  • Save skyporter/6adbdcddf015bebfbf9b28b82faaba13 to your computer and use it in GitHub Desktop.
Save skyporter/6adbdcddf015bebfbf9b28b82faaba13 to your computer and use it in GitHub Desktop.
.sortable-position {
&__draggable {
&-handler {
cursor: move;
}
&-ghost {
border: 1px dashed $gray-400;
background: #fffce4;
}
}
}
import {Controller} from "stimulus"
import Sortable from 'sortablejs';
export default class extends Controller {
static targets = ["position"]
connect() {
let sortable = new Sortable(this.element, {
animation: 150,
swapThreshold: 0.65,
handle: '.sortable-position__draggable-handler',
ghostClass: 'sortable-position__draggable-ghost',
draggable: '.sortable-position__draggable-item',
onEnd: (_e) => {
let i = 0;
this.positionTargets.forEach((el) => {
el.value = i++;
});
}
});
}
}
<div data-controller="sortable-position">
<%= form.fields_for :uploads do |ff| %>
<div class="sortable-position__draggable-item">
<div class="d-flex">
<%= tag.span svg_icon("move", class: "mr-0"), class: "btn btn-link text-muted sortable-position__draggable-handler" %>
<%= form.hidden_field :position, "data-target": "sortable-position.position" %>
...
</div>
</div>
<% end %>
</div>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment