generated from boboko/starter
checkout process - start
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import { Controller } from '@hotwired/stimulus'
|
||||
|
||||
// Static, client-only interactivity for the checkout page's address form — no
|
||||
// fetch, no cart mutation, just show/hide. Nothing here talks to the server;
|
||||
// CheckoutController::saveAddress() is what actually persists anything.
|
||||
export default class extends Controller {
|
||||
static targets = [
|
||||
'guestTab', 'loginTab', 'guestPanel', 'loginPanel',
|
||||
'sameAsBilling', 'shippingFields',
|
||||
]
|
||||
|
||||
connect() {
|
||||
// Reflect whatever the server rendered (old input on a validation
|
||||
// redisplay, or the default) before any click happens.
|
||||
if (this.hasSameAsBillingTarget) this.syncShippingFields()
|
||||
}
|
||||
|
||||
showGuest() {
|
||||
this.guestPanelTarget.hidden = false
|
||||
this.loginPanelTarget.hidden = true
|
||||
this.guestTabTarget.setAttribute('aria-selected', 'true')
|
||||
this.loginTabTarget.setAttribute('aria-selected', 'false')
|
||||
}
|
||||
|
||||
showLogin() {
|
||||
this.guestPanelTarget.hidden = true
|
||||
this.loginPanelTarget.hidden = false
|
||||
this.guestTabTarget.setAttribute('aria-selected', 'false')
|
||||
this.loginTabTarget.setAttribute('aria-selected', 'true')
|
||||
}
|
||||
|
||||
toggleSameAsBilling() {
|
||||
this.syncShippingFields()
|
||||
}
|
||||
|
||||
// Disabled fields are simply never submitted by the browser — the server
|
||||
// never sees stale shipping values while "same as billing" is checked.
|
||||
syncShippingFields() {
|
||||
const sameAsBilling = this.sameAsBillingTarget.checked
|
||||
|
||||
this.shippingFieldsTarget.hidden = sameAsBilling
|
||||
this.shippingFieldsTarget.querySelectorAll('input, select, textarea').forEach((field) => {
|
||||
field.disabled = sameAsBilling
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user