From 7a2f77d096039028bd76732759eef6a746031646 Mon Sep 17 00:00:00 2001 From: Jason Zimdars Date: Fri, 19 Sep 2025 17:34:52 -0500 Subject: [PATCH] Drop cards into specific stage columns --- app/controllers/cards/drops_controller.rb | 26 +++++++++++++++---- .../controllers/drag_and_drop_controller.js | 4 +++ .../cards/index/engagement/_doing.html.erb | 8 +++--- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/app/controllers/cards/drops_controller.rb b/app/controllers/cards/drops_controller.rb index e6076f0cf..6bb10c562 100644 --- a/app/controllers/cards/drops_controller.rb +++ b/app/controllers/cards/drops_controller.rb @@ -30,6 +30,10 @@ class Cards::DropsController < ApplicationController @card.move_to_on_deck when :doing @card.engage + if params[:stage_id].present? + stage = Workflow::Stage.find(params[:stage_id]) + @card.change_stage_to(stage) + end when :closed @card.close end @@ -37,10 +41,22 @@ class Cards::DropsController < ApplicationController def render_column_replacement page_and_filter = page_and_filter_for @filter.with(engagement_status: @drop_target.to_s), per_page: CardsController::PAGE_SIZE - render \ - turbo_stream: turbo_stream.replace("#{@drop_target.to_s.gsub('_', '-')}-cards", - method: :morph, - partial: "cards/index/engagement/#{@drop_target}", - locals: { user_filtering: @user_filtering, **page_and_filter.to_h }) + + if @drop_target == :doing && params[:stage_id].present? + # For stage-specific doing columns, we need to render the specific stage + stage = Workflow::Stage.find(params[:stage_id]) + render \ + turbo_stream: turbo_stream.replace("doing-cards-#{stage.id}", + method: :morph, + partial: "cards/index/engagement/doing", + locals: { user_filtering: @user_filtering, **page_and_filter.to_h, stage: stage }) + else + # For other columns, use the standard approach + render \ + turbo_stream: turbo_stream.replace("#{@drop_target.to_s.gsub('_', '-')}-cards", + method: :morph, + partial: "cards/index/engagement/#{@drop_target}", + locals: { user_filtering: @user_filtering, **page_and_filter.to_h }) + end end end diff --git a/app/javascript/controllers/drag_and_drop_controller.js b/app/javascript/controllers/drag_and_drop_controller.js index 01ccc593d..0c7c08e49 100644 --- a/app/javascript/controllers/drag_and_drop_controller.js +++ b/app/javascript/controllers/drag_and_drop_controller.js @@ -73,9 +73,13 @@ export default class extends Controller { const body = new FormData() const id = item.dataset.id const containerTarget = container.dataset.dropTarget + const stageId = container.dataset.stageId body.append("dropped_item_id", id) body.append("drop_target", containerTarget) + if (stageId) { + body.append("stage_id", stageId) + } return post(this.urlValue, { body, headers: { Accept: "text/vnd.turbo-stream.html" } }) } } diff --git a/app/views/cards/index/engagement/_doing.html.erb b/app/views/cards/index/engagement/_doing.html.erb index 35735b301..c168ee451 100644 --- a/app/views/cards/index/engagement/_doing.html.erb +++ b/app/views/cards/index/engagement/_doing.html.erb @@ -1,8 +1,10 @@ -