Chore: Moving Wishlist from 3dealer to Core

This commit is contained in:
2026-09-28 10:10:50 +03:00
parent b1162761de
commit 36806cac5b
11 changed files with 16 additions and 272 deletions
+5 -4
View File
@@ -10,14 +10,15 @@ window.Turbo.session.drive = false;
import { Application } from "@hotwired/stimulus";
import { registerControllers } from "./stimulus/index";
import { registerCheckout } from "@boboko/core";
import { registerCheckout, registerWishlist } from "@boboko/core";
const application = Application.start();
application.debug = false;
registerControllers(application);
// Portable cart + checkout module, installed as a real npm dependency (see
// package.json). Owns its own bbk-* Stimulus controllers; this is the only
// wiring line it needs here.
// Portable cart + checkout + wishlist modules, installed as a real npm
// dependency (see package.json). Each owns its own Stimulus controllers;
// these are the only wiring lines they need here.
registerCheckout(application);
registerWishlist(application);
-2
View File
@@ -19,7 +19,6 @@ import RangeSliderController from './range-slider-controller'
import StarRatingController from './star-rating-controller'
import TabLinkController from './tab-link-controller'
import TabsController from './tabs-controller'
import WishlistController from './wishlist-controller'
export function registerControllers(application) {
application.register('appear', AppearController)
@@ -38,5 +37,4 @@ export function registerControllers(application) {
application.register('star-rating', StarRatingController)
application.register('tab-link', TabLinkController)
application.register('tabs', TabsController)
application.register('wishlist', WishlistController)
}
@@ -1,42 +0,0 @@
import { Controller } from '@hotwired/stimulus'
// Heart toggle (x-wishlist-button). Posts the form with fetch and reflects the
// server's answer on aria-pressed, which the CSS uses to swap the outline and
// filled heart. If the request fails, falls back to a normal form submit.
export default class extends Controller {
static targets = ['button', 'status']
static values = {
addLabel: String,
removeLabel: String,
addedMessage: String,
removedMessage: String,
}
async toggle(event) {
event.preventDefault()
if (this.busy) return
this.busy = true
try {
const response = await fetch(this.element.action, {
method: 'POST',
headers: { Accept: 'application/json', 'X-Requested-With': 'XMLHttpRequest' },
body: new FormData(this.element),
})
if (!response.ok) throw new Error(`Wishlist toggle failed: ${response.status}`)
const { active } = await response.json()
this.buttonTarget.setAttribute('aria-pressed', active ? 'true' : 'false')
this.buttonTarget.setAttribute('aria-label', active ? this.removeLabelValue : this.addLabelValue)
this.statusTarget.textContent = active ? this.addedMessageValue : this.removedMessageValue
} catch {
this.element.submit()
} finally {
this.busy = false
}
}
}