From 03ad5f26db7f4a4befa3cea81d67e5927a40f78b Mon Sep 17 00:00:00 2001 From: Jason Zimdars Date: Fri, 19 Sep 2025 10:49:47 -0500 Subject: [PATCH] Expand columns exclusively --- app/assets/stylesheets/card-columns.css | 8 +++---- .../collapsible_columns_controller.js | 22 +++++++++++++++++++ app/views/cards/index/_columns.html.erb | 2 +- .../cards/index/engagement/_closed.html.erb | 4 ++-- .../cards/index/engagement/_doing.html.erb | 5 ++--- .../cards/index/engagement/_on_deck.html.erb | 5 ++--- 6 files changed, 33 insertions(+), 13 deletions(-) create mode 100644 app/javascript/controllers/collapsible_columns_controller.js diff --git a/app/assets/stylesheets/card-columns.css b/app/assets/stylesheets/card-columns.css index d67ac6e73..ed14b6339 100644 --- a/app/assets/stylesheets/card-columns.css +++ b/app/assets/stylesheets/card-columns.css @@ -62,15 +62,15 @@ .cards { align-items: stretch; display: flex; + flex: 1 0 var(--expanded-min); flex-direction: column; gap: var(--cards-gap); justify-content: start; + max-inline-size: var(--expanded-min); + min-inline-size: var(--expanded-min); position: relative; scroll-snap-align: start; - flex: 1 0 var(--expanded-min); - min-width: var(--expanded-min); - max-width: var(--expanded-min); - transition: all 300ms ease; + transition: inline-size 300ms ease; /* Make sure filter dialogs don't end up behind sticky headers */ &:has([open]) { diff --git a/app/javascript/controllers/collapsible_columns_controller.js b/app/javascript/controllers/collapsible_columns_controller.js new file mode 100644 index 000000000..fbb8b97bb --- /dev/null +++ b/app/javascript/controllers/collapsible_columns_controller.js @@ -0,0 +1,22 @@ +import { Controller } from "@hotwired/stimulus" + +export default class extends Controller { + static classes = [ "collapsed" ] + static targets = [ "column" ] + + toggle(event) { + const clickedColumn = event.target.closest('[data-collapsible-columns-target="column"]') + + if (!clickedColumn) return + + const isCurrentlyCollapsed = clickedColumn.classList.contains(this.collapsedClass) + + this.columnTargets.forEach(column => { + column.classList.add(this.collapsedClass) + }) + + if (isCurrentlyCollapsed) { + clickedColumn.classList.remove(this.collapsedClass) + } + } +} diff --git a/app/views/cards/index/_columns.html.erb b/app/views/cards/index/_columns.html.erb index dbf60de29..c382a2383 100644 --- a/app/views/cards/index/_columns.html.erb +++ b/app/views/cards/index/_columns.html.erb @@ -1,6 +1,6 @@ <% cache @cache_key do %> <%= turbo_frame_tag :card_columns do %> -
+
<%= render "cards/index/engagement/on_deck", user_filtering: user_filtering, **on_deck.to_h %> <%= render "cards/index/engagement/considering", user_filtering: user_filtering, **considering.to_h %> diff --git a/app/views/cards/index/engagement/_closed.html.erb b/app/views/cards/index/engagement/_closed.html.erb index 89a773af8..dca8fc3db 100644 --- a/app/views/cards/index/engagement/_closed.html.erb +++ b/app/views/cards/index/engagement/_closed.html.erb @@ -1,6 +1,6 @@