import { Controller } from "stimulus"; export default class extends Controller { static targets = ["tab", "panel", "default", "shop"]; static values = { className: String }; connect() { this._activateFromWindowLocationOrDefaultPanelTarget(); window.addEventListener("popstate", (event) => { this._activateFromWindowLocationOrDefaultPanelTarget(); }); } _activateFromWindowLocationOrDefaultPanelTarget() { // Conveniently AngularJs rewrite "example.com#panel" to "example.com#/panel" const hashWithoutSlash = window.location.hash.replace("/", ""); const tabWithSameHash = this.tabTargets.find((tab) => tab.hash == hashWithoutSlash); if (hashWithoutSlash != "" && tabWithSameHash) { this._activateByHash(tabWithSameHash.hash); } else { this._activateByHash(`#${this.defaultTarget.id}`); } } activate(event) { this._activateByHash(event.currentTarget.hash); } activateDefaultPanel() { this._activateByHash(`#${this.defaultTarget.id}`); } activateShopPanel() { this._activateByHash(`#${this.shopTarget.id}`); } _activateByHash(hash) { this.tabTargets.forEach((tab) => { if (tab.hash == hash) { tab.classList.add(this.classNameValue); } else { tab.classList.remove(this.classNameValue); } }); this.panelTargets.forEach((panel) => { if (panel.id == hash.replace("#", "")) { panel.style.display = "block"; } else { panel.style.display = "none"; } }); } }