diff --git a/app/javascript/controllers/collapsible_columns_controller.js b/app/javascript/controllers/collapsible_columns_controller.js index 01289baf0..788a817ab 100644 --- a/app/javascript/controllers/collapsible_columns_controller.js +++ b/app/javascript/controllers/collapsible_columns_controller.js @@ -1,5 +1,5 @@ import { Controller } from "@hotwired/stimulus" -import { nextFrame } from "helpers/timing_helpers"; +import { nextFrame, delay, debounce } from "helpers/timing_helpers"; export default class extends Controller { static classes = [ "collapsed", "noTransitions" ] @@ -8,12 +8,12 @@ export default class extends Controller { collection: String } - async connect() { - this.#disableTransitions() - this.#restoreColumns() + initialize() { + this.restoreState = debounce(this.restoreState.bind(this), 10) + } - await nextFrame() - this.#enableTransitions() + async connect() { + await this.#restoreColumnsDisablingTransitions() } toggle({ target }) { @@ -27,6 +27,19 @@ export default class extends Controller { } } + async restoreState(event) { + await nextFrame() + await this.#restoreColumnsDisablingTransitions() + } + + async #restoreColumnsDisablingTransitions() { + this.#disableTransitions() + this.#restoreColumns() + + await nextFrame() + this.#enableTransitions() + } + #disableTransitions() { this.element.classList.add(this.noTransitionsClass) } @@ -79,13 +92,17 @@ export default class extends Controller { #restoreColumns() { this.columnTargets.forEach(column => { - const key = this.#localStorageKeyFor(column) - if (localStorage.getItem(key)) { - this.#expand(column) - } + this.#restoreColumn(column) }) } + #restoreColumn(column) { + const key = this.#localStorageKeyFor(column) + if (localStorage.getItem(key)) { + this.#expand(column) + } + } + #localStorageKeyFor(column) { return `expand-${this.collectionValue}-${column.getAttribute("id")}` } diff --git a/app/views/collections/show/_column.html.erb b/app/views/collections/show/_column.html.erb index ed667047d..3a6084b0c 100644 --- a/app/views/collections/show/_column.html.erb +++ b/app/views/collections/show/_column.html.erb @@ -4,7 +4,7 @@ data-drag-and-strum-target="container" data-collapsible-columns-target="column" data-controller="clicker" - data-action="turbo:before-morph-attribute->collapsible-columns#preventToggle" + data-action="turbo:before-morph-attribute->collapsible-columns#preventToggle turbo:before-stream-render@document->collapsible-columns#restoreState" data-drag-and-drop-url="<%= columns_card_drops_column_path("__id__", column_id: column.id) %>" > <%= render "collections/show/expander", title: column.name, count: column.cards.active.count, column_id: dom_id(column) do %>