forked from fixin.me/fixin.me
Add stimulus-rails gem and wire up 7 controllers: - measurements_view_controller: view toggle (compact/wide) via localStorage - measurements_controller: grouped rows MutationObserver - charts_controller: Plotly chart rendering - form_controller: keyboard shortcuts (Escape/Enter) and submit validation - details_controller: quantity picker state, focusout close, MutationObserver - readout_unit_controller: default unit button enable/disable + PATCH submission - drag_controller: drag-and-drop for quantity reparenting and unit rebasing Remove all inline onclick/onkeydown/ondrag*/onsubmit handlers from templates. Remove all window.* global exports from application.js. Remove bare <script> block from measurements/_form.html.erb. Remove turbo:load listeners for behavior now in controller connect(). application.js now only contains: Turbo Stream custom action definitions and the showPage visibility listener. Document Stimulus conventions in CLAUDE.md. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
37 lines
1.3 KiB
JavaScript
37 lines
1.3 KiB
JavaScript
import { Controller } from "@hotwired/stimulus"
|
|
|
|
export default class extends Controller {
|
|
static targets = ["select", "button"]
|
|
|
|
unitChanged() {
|
|
if (this.selectTarget.value && this.selectTarget.value !== this.selectTarget.dataset.defaultUnitId) {
|
|
Turbo.StreamElement.prototype.enableElement(this.buttonTarget)
|
|
} else {
|
|
Turbo.StreamElement.prototype.disableElement(this.buttonTarget)
|
|
}
|
|
}
|
|
|
|
setDefault() {
|
|
const select = this.selectTarget
|
|
const form = document.createElement('form')
|
|
form.action = this.buttonTarget.dataset.path
|
|
form.method = 'post'
|
|
form.dataset.turboStream = 'true'
|
|
const methodInput = document.createElement('input')
|
|
methodInput.type = 'hidden'; methodInput.name = '_method'; methodInput.value = 'patch'
|
|
const unitInput = document.createElement('input')
|
|
unitInput.type = 'hidden'; unitInput.name = 'quantity[default_unit_id]'; unitInput.value = select.value
|
|
form.appendChild(methodInput)
|
|
form.appendChild(unitInput)
|
|
form.addEventListener('turbo:submit-end', event => {
|
|
if (event.detail.success) {
|
|
select.dataset.defaultUnitId = select.value
|
|
this.unitChanged()
|
|
}
|
|
form.remove()
|
|
})
|
|
document.body.appendChild(form)
|
|
form.requestSubmit()
|
|
}
|
|
}
|