From 47eaecae31496d421df5599e18536cd461e9b950 Mon Sep 17 00:00:00 2001 From: Jorge Manrubia Date: Sat, 27 Sep 2025 08:40:45 +0200 Subject: [PATCH] Add columns --- .../collections/columns_controller.rb | 11 ++++++- app/models/column.rb | 9 ++++- app/views/collections/show/_columns.html.erb | 33 +++++++++---------- .../collections/show/_columns_menu.html.erb | 11 +++++++ test/models/column_test.rb | 9 +++++ 5 files changed, 53 insertions(+), 20 deletions(-) create mode 100644 app/views/collections/show/_columns_menu.html.erb create mode 100644 test/models/column_test.rb diff --git a/app/controllers/collections/columns_controller.rb b/app/controllers/collections/columns_controller.rb index f69a8b80b..8fe6a796b 100644 --- a/app/controllers/collections/columns_controller.rb +++ b/app/controllers/collections/columns_controller.rb @@ -1,7 +1,12 @@ class Collections::ColumnsController < ApplicationController include CollectionScoped - before_action :set_column + before_action :set_column, only: :show + + def create + @column = @collection.columns.create!(column_params) + render turbo_stream: turbo_stream.before("closed-cards", partial: "collections/show/column", locals: { column: @column }) + end def show set_page_and_extract_portion_from @column.cards.active.reverse_chronologically @@ -11,4 +16,8 @@ class Collections::ColumnsController < ApplicationController def set_column @column = @collection.columns.find(params[:id]) end + + def column_params + params.require(:column).permit(:name) + end end diff --git a/app/models/column.rb b/app/models/column.rb index 7191d333b..f62a728ce 100644 --- a/app/models/column.rb +++ b/app/models/column.rb @@ -4,4 +4,11 @@ class Column < ApplicationRecord validates :name, presence: true validates :color, presence: true -end \ No newline at end of file + + before_validation :set_default_color + + private + def set_default_color + self.color ||= Card::DEFAULT_COLOR + end +end diff --git a/app/views/collections/show/_columns.html.erb b/app/views/collections/show/_columns.html.erb index 71e8b4e43..267a7a5c0 100644 --- a/app/views/collections/show/_columns.html.erb +++ b/app/views/collections/show/_columns.html.erb @@ -1,20 +1,17 @@ - <%= turbo_frame_tag :cards_container do %> -
+<%= turbo_frame_tag :cards_container do %> +
-
- <%= render "collections/show/not_now", collection: collection %> -
- - <%= render "collections/show/stream", collection: collection, page: page %> - -
- <%= render partial: "collections/show/column", collection: collection.columns, cached: true %> - <%= render "collections/show/closed", collection: collection %> - - -
+
+ <%= render "collections/show/not_now", collection: collection %>
- <% end %> + + <%= render "collections/show/stream", collection: collection, page: page %> + +
+ <%= render partial: "collections/show/column", collection: collection.columns, cached: true %> + <%= render "collections/show/closed", collection: collection %> + + <%= render "collections/show/columns_menu", collection: collection %> +
+
+<% end %> diff --git a/app/views/collections/show/_columns_menu.html.erb b/app/views/collections/show/_columns_menu.html.erb new file mode 100644 index 000000000..44f33b0ae --- /dev/null +++ b/app/views/collections/show/_columns_menu.html.erb @@ -0,0 +1,11 @@ +
+ + + <%= form_with model: [ collection, Column.new ], data: { action: "turbo:submit-end->dialog#close" } do |form| %> + <%= form.text_field :name, class: "input", placeholder: "Column name", required: true %> + <%= form.submit "Add a column", class: "btn btn--link" %> + <% end %> + +
diff --git a/test/models/column_test.rb b/test/models/column_test.rb new file mode 100644 index 000000000..b65ff2037 --- /dev/null +++ b/test/models/column_test.rb @@ -0,0 +1,9 @@ +require "test_helper" + +class ColumnTest < ActiveSupport::TestCase + test "creates column with default color when color not provided" do + column = collections(:writebook).columns.create!(name: "New Column") + + assert_equal Card::DEFAULT_COLOR, column.color + end +end