Files
openfoodnetwork/app/webpacker/controllers/tabs_and_panels_controller.js
basilawwad 08111f9a2c added shop target and activateshoppanel function
Remove Pending Message

Update shopping_spec.rb

Update shopping_spec.rb
2024-02-16 09:27:21 +03:00

55 lines
1.5 KiB
JavaScript

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";
}
});
}
}