diff --git a/app/controllers/boards/columns_controller.rb b/app/controllers/boards/columns_controller.rb index 9e14eb937..4b71e7f3e 100644 --- a/app/controllers/boards/columns_controller.rb +++ b/app/controllers/boards/columns_controller.rb @@ -35,7 +35,7 @@ class Boards::ColumnsController < ApplicationController @column.destroy respond_to do |format| - format.turbo_stream + format.html { redirect_back_or_to @board } format.json { head :no_content } end end diff --git a/app/models/column/positioned.rb b/app/models/column/positioned.rb index 8518172de..c6ef105da 100644 --- a/app/models/column/positioned.rb +++ b/app/models/column/positioned.rb @@ -31,6 +31,10 @@ module Column::Positioned right_column.nil? end + def adjacent_columns + board.columns.where(id: [ left_column&.id, right_column&.id ].compact) + end + private def set_position max_position = board.columns.maximum(:position) || 0 diff --git a/app/views/boards/columns/create.turbo_stream.erb b/app/views/boards/columns/create.turbo_stream.erb index 957547c09..10ce7df7a 100644 --- a/app/views/boards/columns/create.turbo_stream.erb +++ b/app/views/boards/columns/create.turbo_stream.erb @@ -1 +1,2 @@ <%= turbo_stream.before("closed-cards", partial: "boards/show/column", method: :morph, locals: { column: @column }) %> +<%= render "columns/refresh_adjacent_columns", column: @column %> diff --git a/app/views/boards/columns/destroy.turbo_stream.erb b/app/views/boards/columns/destroy.turbo_stream.erb deleted file mode 100644 index 7b6613a95..000000000 --- a/app/views/boards/columns/destroy.turbo_stream.erb +++ /dev/null @@ -1 +0,0 @@ -<%= turbo_stream.remove(dom_id(@column)) %> \ No newline at end of file diff --git a/app/views/columns/_refresh_adjacent_columns.turbo_stream.erb b/app/views/columns/_refresh_adjacent_columns.turbo_stream.erb new file mode 100644 index 000000000..958902608 --- /dev/null +++ b/app/views/columns/_refresh_adjacent_columns.turbo_stream.erb @@ -0,0 +1,3 @@ +<% column.adjacent_columns.each do |adjacent_column| %> + <%= turbo_stream.replace(dom_id(adjacent_column), partial: "boards/show/column", method: :morph, locals: { column: adjacent_column }) %> +<% end %> diff --git a/app/views/columns/left_positions/create.turbo_stream.erb b/app/views/columns/left_positions/create.turbo_stream.erb index 70729cf1b..75938e3ff 100644 --- a/app/views/columns/left_positions/create.turbo_stream.erb +++ b/app/views/columns/left_positions/create.turbo_stream.erb @@ -1,4 +1,5 @@ <% if @left_column %> <%= turbo_stream.remove(dom_id(@column)) %> <%= turbo_stream.before(@left_column, partial: "boards/show/column", locals: { column: @column }) %> + <%= render "columns/refresh_adjacent_columns", column: @column %> <% end %> diff --git a/app/views/columns/right_positions/create.turbo_stream.erb b/app/views/columns/right_positions/create.turbo_stream.erb index a01ac7ce2..cabe87fc0 100644 --- a/app/views/columns/right_positions/create.turbo_stream.erb +++ b/app/views/columns/right_positions/create.turbo_stream.erb @@ -1,4 +1,5 @@ <% if @right_column %> <%= turbo_stream.remove(dom_id(@column)) %> <%= turbo_stream.after(@right_column, partial: "boards/show/column", locals: { column: @column }) %> + <%= render "columns/refresh_adjacent_columns", column: @column %> <% end %> diff --git a/test/controllers/boards/columns_controller_test.rb b/test/controllers/boards/columns_controller_test.rb index d7542da27..b9c974321 100644 --- a/test/controllers/boards/columns_controller_test.rb +++ b/test/controllers/boards/columns_controller_test.rb @@ -19,6 +19,17 @@ class Boards::ColumnsControllerTest < ActionDispatch::IntegrationTest assert_equal "New Column", boards(:writebook).columns.last.name end + test "create refreshes adjacent columns" do + board = boards(:writebook) + + post board_columns_path(board), params: { column: { name: "New Column" } }, as: :turbo_stream + + new_column = board.columns.find_by!(name: "New Column") + new_column.adjacent_columns.each do |adjacent_column| + assert_turbo_stream action: :replace, target: dom_id(adjacent_column) + end + end + test "update" do column = columns(:writebook_in_progress) @@ -29,12 +40,12 @@ class Boards::ColumnsControllerTest < ActionDispatch::IntegrationTest end test "destroy" do - column = columns(:writebook_on_hold) + column = columns(:writebook_in_progress) + adjacent_columns = column.adjacent_columns.to_a - assert_difference -> { boards(:writebook).columns.count }, -1 do - delete board_column_path(boards(:writebook), column), as: :turbo_stream - assert_response :success - end + delete board_column_path(column.board, column), as: :turbo_stream + + assert_redirected_to board_path(column.board) end test "index as JSON" do diff --git a/test/controllers/columns/left_positions_controller_test.rb b/test/controllers/columns/left_positions_controller_test.rb index 57810ca70..6c807b0e5 100644 --- a/test/controllers/columns/left_positions_controller_test.rb +++ b/test/controllers/columns/left_positions_controller_test.rb @@ -21,6 +21,16 @@ class Columns::LeftPositionsControllerTest < ActionDispatch::IntegrationTest assert_equal original_position_a, column_b.reload.position end + test "move left refreshes adjacent columns" do + column = columns(:writebook_in_progress) + + post column_left_position_path(column), as: :turbo_stream + + column.reload.adjacent_columns.each do |adjacent_column| + assert_turbo_stream action: :replace, target: dom_id(adjacent_column) + end + end + test "users can only reorder columns in boards they have access to" do column = columns(:writebook_in_progress) diff --git a/test/controllers/columns/right_positions_controller_test.rb b/test/controllers/columns/right_positions_controller_test.rb index 8226950ea..c927531be 100644 --- a/test/controllers/columns/right_positions_controller_test.rb +++ b/test/controllers/columns/right_positions_controller_test.rb @@ -21,6 +21,16 @@ class Columns::RightPositionsControllerTest < ActionDispatch::IntegrationTest assert_equal original_position_a, column_b.reload.position end + test "move right refreshes adjacent columns" do + column = columns(:writebook_in_progress) + + post column_right_position_path(column), as: :turbo_stream + + column.reload.adjacent_columns.each do |adjacent_column| + assert_turbo_stream action: :replace, target: dom_id(adjacent_column) + end + end + test "users can only reorder columns in boards they have access to" do column = columns(:writebook_triage)