Skip to content

Checkout Controller

The checkout controller manages the multi-step checkout flow — shipping address, shipping method, payment, and order placement.

Source: src/js/controllers/checkout-controller.js (~1000 lines)

Checkout Steps

Targets

TargetElementPurpose
stepStep containersShow/hide active step
stepIndicatorStep progress barVisual step progress
shippingFormAddress formShipping address inputs
billingFormAddress formBilling address inputs
shippingMethodsMethod listAvailable shipping options
paymentMethodsMethod listAvailable payment options
orderSummarySummary panelItems, totals, applied coupons
placeOrderButtonSubmit buttonFinal order placement
errorMessageError displayValidation/API errors

Values

ValueTypeDescription
stepNumberCurrent step (1-4)
cartIdStringCart/quote ID
isGuestBooleanGuest vs. logged-in checkout
countriesString (JSON)Available countries + regions

Step 1: Shipping Address

  • Form fields: name, street, city, region, postcode, country, phone, email
  • Country selection populates region dropdown dynamically
  • Saved addresses available for logged-in customers
  • Address validation before proceeding

Step 2: Shipping Method

After address entry:

  1. POST address to API to get available shipping methods
  2. Display methods with rates (e.g., "Standard - $9.95", "Express - $14.95")
  3. User selects a method
  4. Totals update with selected shipping cost

Step 3: Payment

Payment methods loaded from the API. The controller supports:

  • Braintree — Hosted fields (card number, CVV, expiry) via iframe
  • PayPal — Redirect to PayPal flow
  • Other — Extensible payment adapter pattern

Payment adapters are in src/js/payment-methods/:

payment-methods/
├── base-adapter.js       # Abstract adapter interface
└── braintree-adapter.js  # Braintree hosted fields implementation

Step 4: Review & Place Order

  1. Display full order summary (items, shipping, tax, total)
  2. Show shipping and billing addresses
  3. "Place Order" button triggers order creation
  4. On success: redirect to order success page
  5. On failure: display error, stay on current step

Order Placement Flow

Guest vs. Logged-In

FeatureGuestLogged-In
Email requiredStep 1Pre-filled
Saved addressesNoYes (dropdown)
Save address optionNoCheckbox
Order historyNoLinked to account

Source: src/js/controllers/checkout-controller.js, src/js/payment-methods/