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

Add controller to save accounts collapse state to localStorage (#432)

* Add controller to save accounts collapse state to localStorage

* Small clean up

* Fix indentation
This commit is contained in:
Sergey Tyan 2024-02-12 02:38:28 +08:00 committed by GitHub
parent d3151be9ae
commit aef15c9371
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 54 additions and 1 deletions

View file

@ -0,0 +1,53 @@
import { Controller } from "@hotwired/stimulus"
// Connects to data-controller="account-collapse"
export default class extends Controller {
static values = { type: String }
boundOnToggle = null
initialToggle = false
STORAGE_NAME = "accountCollapseStates"
connect() {
this.boundOnToggle = this.onToggle.bind(this)
this.element.addEventListener("toggle", this.boundOnToggle)
this.updateFromLocalStorage()
}
disconnect() {
this.element.removeEventListener("toggle", this.boundOnToggle)
}
onToggle() {
if (this.initialToggle) {
this.initialToggle = false
return
}
const items = this.getItemsFromLocalStorage()
if (items.has(this.typeValue)) {
items.delete(this.typeValue)
} else {
items.add(this.typeValue)
}
localStorage.setItem(this.STORAGE_NAME, JSON.stringify([...items]))
}
updateFromLocalStorage() {
const items = this.getItemsFromLocalStorage()
if (items.has(this.typeValue)) {
this.initialToggle = true
this.element.setAttribute("open", "")
}
}
getItemsFromLocalStorage() {
try {
const items = localStorage.getItem(this.STORAGE_NAME)
return new Set(items ? JSON.parse(items) : [])
} catch (error) {
console.error("Error parsing items from localStorage:", error)
return new Set()
}
}
}