1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-21 22:29:38 +02:00

Fix event handler removal on disconnect (#540)

* Fix event handler removal on disconnect

* Fix tab controller
This commit is contained in:
Jakub Kottnauer 2024-03-11 22:42:18 +01:00 committed by GitHub
parent c60ddaec1d
commit 2c3752668a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 19 additions and 25 deletions

View file

@ -3,21 +3,19 @@ import { Controller } from "@hotwired/stimulus"
// Connects to data-controller="account-collapse" // Connects to data-controller="account-collapse"
export default class extends Controller { export default class extends Controller {
static values = { type: String } static values = { type: String }
boundOnToggle = null
initialToggle = false initialToggle = false
STORAGE_NAME = "accountCollapseStates" STORAGE_NAME = "accountCollapseStates"
connect() { connect() {
this.boundOnToggle = this.onToggle.bind(this) this.element.addEventListener("toggle", this.onToggle)
this.element.addEventListener("toggle", this.boundOnToggle)
this.updateFromLocalStorage() this.updateFromLocalStorage()
} }
disconnect() { disconnect() {
this.element.removeEventListener("toggle", this.boundOnToggle) this.element.removeEventListener("toggle", this.onToggle)
} }
onToggle() { onToggle = () => {
if (this.initialToggle) { if (this.initialToggle) {
this.initialToggle = false this.initialToggle = false
return return

View file

@ -15,16 +15,14 @@ export default class extends Controller {
} }
connect() { connect() {
this.inputElements.forEach(el => el.addEventListener('change', this.handler.bind(this))); [...this.inputElements, ...this.selectElements].forEach(el => el.addEventListener('change', this.handler));
this.selectElements.forEach(el => el.addEventListener('change', this.handler.bind(this)));
} }
disconnect() { disconnect() {
this.inputElements.forEach(el => el.removeEventListener('change', this.handler.bind(this))); [...this.inputElements, ...this.selectElements].forEach(el => el.removeEventListener('change', this.handler));
this.selectElements.forEach(el => el.removeEventListener('change', this.handler.bind(this)));
} }
handler(e) { handler = (e) => {
console.log(e); console.log(e);
this.element.requestSubmit(); this.element.requestSubmit();
} }

View file

@ -8,14 +8,14 @@ export default class extends Controller {
connect() { connect() {
this.renderChart(this.seriesValue); this.renderChart(this.seriesValue);
document.addEventListener("turbo:load", this.renderChart.bind(this)); document.addEventListener("turbo:load", this.renderChart);
} }
disconnect() { disconnect() {
document.removeEventListener("turbo:load", this.renderChart.bind(this)); document.removeEventListener("turbo:load", this.renderChart);
} }
renderChart() { renderChart = () => {
this.drawChart(this.seriesValue); this.drawChart(this.seriesValue);
} }

View file

@ -8,24 +8,22 @@ export default class extends Controller {
connect() { connect() {
this.updateClasses(this.defaultTabValue); this.updateClasses(this.defaultTabValue);
document.addEventListener( document.addEventListener("turbo:load", this.onTurboLoad);
"turbo:load",
this.updateClasses.bind(this, this.defaultTabValue)
);
} }
disconnect() { disconnect() {
document.removeEventListener( document.removeEventListener("turbo:load", this.onTurboLoad);
"turbo:load",
this.updateClasses.bind(this, this.defaultTabValue)
);
} }
select(event) { select(event) {
this.updateClasses(event.target.dataset.id); this.updateClasses(event.target.dataset.id);
} }
updateClasses(selectedId) { onTurboLoad = () => {
this.updateClasses(this.defaultTabValue);
}
updateClasses = (selectedId) => {
this.btnTargets.forEach((btn) => btn.classList.remove(this.activeClass)); this.btnTargets.forEach((btn) => btn.classList.remove(this.activeClass));
this.tabTargets.forEach((tab) => tab.classList.add("hidden")); this.tabTargets.forEach((tab) => tab.classList.add("hidden"));

View file

@ -7,14 +7,14 @@ export default class extends Controller {
connect() { connect() {
this.renderChart(this.seriesValue); this.renderChart(this.seriesValue);
document.addEventListener("turbo:load", this.renderChart.bind(this)); document.addEventListener("turbo:load", this.renderChart);
} }
disconnect() { disconnect() {
document.removeEventListener("turbo:load", this.renderChart.bind(this)); document.removeEventListener("turbo:load", this.renderChart);
} }
renderChart() { renderChart = () => {
this.drawChart(this.seriesValue); this.drawChart(this.seriesValue);
} }