From 797cf3c06526dbb74b60bd1fe62157b14deea91e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvis=20Serr=C3=A3o?= Date: Tue, 28 Jan 2025 13:24:59 -0300 Subject: [PATCH 01/12] Improve category level limit validation --- app/models/category.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/models/category.rb b/app/models/category.rb index ebeadbf9..2a4e2799 100644 --- a/app/models/category.rb +++ b/app/models/category.rb @@ -91,6 +91,10 @@ class Category < ApplicationRecord end end + def parent? + subcategories.any? + end + def subcategory? parent.present? end @@ -121,7 +125,7 @@ class Category < ApplicationRecord private def category_level_limit - if subcategory? && parent.subcategory? + if (subcategory? && parent.subcategory?) || (parent? && subcategory?) errors.add(:parent, "can't have more than 2 levels of subcategories") end end -- 2.53.0 From 8a7df9013262afaafa6649c89672cb227490eaac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvis=20Serr=C3=A3o?= Date: Tue, 28 Jan 2025 13:30:00 -0300 Subject: [PATCH 02/12] Set categories list only for non parents --- app/controllers/categories_controller.rb | 21 ++++++++++++++++----- app/models/category.rb | 1 + 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index 03752869..3c03969e 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -2,6 +2,7 @@ class CategoriesController < ApplicationController layout :with_sidebar before_action :set_category, only: %i[edit update destroy] + before_action :set_categories, only: %i[update edit] before_action :set_transaction, only: :create def index @@ -10,7 +11,7 @@ class CategoriesController < ApplicationController def new @category = Current.family.categories.new color: Category::COLORS.sample - @categories = Current.family.categories.alphabetically.where(parent_id: nil).where.not(id: @category.id) + set_categories end def create @@ -27,19 +28,21 @@ class CategoriesController < ApplicationController format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, redirect_target_url) } end else - @categories = Current.family.categories.alphabetically.where(parent_id: nil).where.not(id: @category.id) + set_categories render :new, status: :unprocessable_entity end end def edit - @categories = Current.family.categories.alphabetically.where(parent_id: nil).where.not(id: @category.id) end def update - @category.update! category_params + if @category.update(category_params) - redirect_back_or_to categories_path, notice: t(".success") + redirect_back_or_to categories_path, notice: t(".success") + else + render :edit, status: :unprocessable_entity + end end def destroy @@ -59,6 +62,14 @@ class CategoriesController < ApplicationController @category = Current.family.categories.find(params[:id]) end + def set_categories + @categories = unless @category.parent? + Current.family.categories.alphabetically.roots.where.not(id: @category.id) + else + [] + end + end + def set_transaction if params[:transaction_id].present? @transaction = Current.family.transactions.find(params[:transaction_id]) diff --git a/app/models/category.rb b/app/models/category.rb index 2a4e2799..d0ccaa60 100644 --- a/app/models/category.rb +++ b/app/models/category.rb @@ -15,6 +15,7 @@ class Category < ApplicationRecord validate :nested_category_matches_parent_classification scope :alphabetically, -> { order(:name) } + scope :roots, -> { where(parent_id: nil) } scope :incomes, -> { where(classification: "income") } scope :expenses, -> { where(classification: "expense") } -- 2.53.0 From 2f708e55ac4b17f41018d0254c557d2f52db5b29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvis=20Serr=C3=A3o?= Date: Tue, 28 Jan 2025 13:30:37 -0300 Subject: [PATCH 03/12] Disable select field --- app/views/categories/_form.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/categories/_form.html.erb b/app/views/categories/_form.html.erb index 8927c0bf..06426988 100644 --- a/app/views/categories/_form.html.erb +++ b/app/views/categories/_form.html.erb @@ -34,7 +34,7 @@
<%= f.select :classification, [["Income", "income"], ["Expense", "expense"]], { label: "Classification" }, required: true %> <%= f.text_field :name, placeholder: t(".placeholder"), required: true, autofocus: true, label: "Name", data: { color_avatar_target: "name" } %> - <%= f.select :parent_id, categories.pluck(:name, :id), { include_blank: "(unassigned)", label: "Parent category (optional)" } %> + <%= f.select :parent_id, categories.pluck(:name, :id), { include_blank: "(unassigned)", label: "Parent category (optional)" }, disabled: category.parent? %>
-- 2.53.0 From 79ed958f6467a6a49dd9376db26d14a36331f020 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvis=20Serr=C3=A3o?= Date: Tue, 28 Jan 2025 13:31:28 -0300 Subject: [PATCH 04/12] Add info about the disabled select --- app/views/categories/_form.html.erb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/views/categories/_form.html.erb b/app/views/categories/_form.html.erb index 06426988..dbfd76ae 100644 --- a/app/views/categories/_form.html.erb +++ b/app/views/categories/_form.html.erb @@ -35,6 +35,9 @@ <%= f.select :classification, [["Income", "income"], ["Expense", "expense"]], { label: "Classification" }, required: true %> <%= f.text_field :name, placeholder: t(".placeholder"), required: true, autofocus: true, label: "Name", data: { color_avatar_target: "name" } %> <%= f.select :parent_id, categories.pluck(:name, :id), { include_blank: "(unassigned)", label: "Parent category (optional)" }, disabled: category.parent? %> + <% if category.parent? %> + This category couldn’t be assigned as a subcategory because it already has subcategories. + <% end %> -- 2.53.0 From 62d6efcb931e7dfbeefabd1e0bb17ccc90bd09cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvis=20Serr=C3=A3o?= Date: Tue, 28 Jan 2025 14:05:45 -0300 Subject: [PATCH 05/12] =?UTF-8?q?Don=E2=80=99t=20render=20a=20select=20inp?= =?UTF-8?q?ut=20for=20parent=20categories?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/categories/_form.html.erb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/views/categories/_form.html.erb b/app/views/categories/_form.html.erb index dbfd76ae..7117a3bf 100644 --- a/app/views/categories/_form.html.erb +++ b/app/views/categories/_form.html.erb @@ -34,9 +34,8 @@
<%= f.select :classification, [["Income", "income"], ["Expense", "expense"]], { label: "Classification" }, required: true %> <%= f.text_field :name, placeholder: t(".placeholder"), required: true, autofocus: true, label: "Name", data: { color_avatar_target: "name" } %> - <%= f.select :parent_id, categories.pluck(:name, :id), { include_blank: "(unassigned)", label: "Parent category (optional)" }, disabled: category.parent? %> - <% if category.parent? %> - This category couldn’t be assigned as a subcategory because it already has subcategories. + <% unless category.parent? %> + <%= f.select :parent_id, categories.pluck(:name, :id), { include_blank: "(unassigned)", label: "Parent category (optional)" }, disabled: category.parent? %> <% end %>
-- 2.53.0 From 408727575142cb4f3620f6f665e2a6a19374e585 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvis=20Serr=C3=A3o?= Date: Tue, 28 Jan 2025 15:16:05 -0300 Subject: [PATCH 06/12] Handle correctly turbo_stream request format --- app/controllers/categories_controller.rb | 14 ++-- app/views/categories/_form.html.erb | 83 ++++++++++++------------ 2 files changed, 52 insertions(+), 45 deletions(-) diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index 3c03969e..99bb2827 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -24,12 +24,13 @@ class CategoriesController < ApplicationController redirect_target_url = request.referer || categories_path respond_to do |format| - format.html { redirect_back_or_to categories_path, notice: t(".success") } format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, redirect_target_url) } end else set_categories - render :new, status: :unprocessable_entity + respond_to do |format| + format.turbo_stream { render turbo_stream: turbo_stream.replace("form", partial: "form", locals: { category: @category, categories: @categories }) } + end end end @@ -38,10 +39,15 @@ class CategoriesController < ApplicationController def update if @category.update(category_params) + flash[:notice] = t(".success") - redirect_back_or_to categories_path, notice: t(".success") + respond_to do |format| + format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, categories_path) } + end else - render :edit, status: :unprocessable_entity + respond_to do |format| + format.turbo_stream { render turbo_stream: turbo_stream.replace("form", partial: "form", locals: { category: @category, categories: @categories }) } + end end end diff --git a/app/views/categories/_form.html.erb b/app/views/categories/_form.html.erb index 7117a3bf..43cc4f1f 100644 --- a/app/views/categories/_form.html.erb +++ b/app/views/categories/_form.html.erb @@ -1,48 +1,49 @@ <%# locals: (category:, categories:) %> +<%= turbo_frame_tag 'form' do %> +
+ <%= styled_form_with model: category, class: "space-y-4" do |f| %> +
+
+ <%= render partial: "shared/color_avatar", locals: { name: category.name, color: category.color } %> +
-
- <%= styled_form_with model: category, class: "space-y-4", data: { turbo_frame: :_top } do |f| %> -
-
- <%= render partial: "shared/color_avatar", locals: { name: category.name, color: category.color } %> -
+
+ <% Category::COLORS.each do |color| %> + + <% end %> +
-
- <% Category::COLORS.each do |color| %> - + <% if category.errors.any? %> + <%= render "shared/form_errors", model: category %> <% end %> -
- <% if category.errors.any? %> - <%= render "shared/form_errors", model: category %> - <% end %> +
+ <% Category.icon_codes.each do |icon| %> + + <% end %> +
-
- <% Category.icon_codes.each do |icon| %> - - <% end %> -
+
+ <%= f.select :classification, [["Income", "income"], ["Expense", "expense"]], { label: "Classification" }, required: true %> + <%= f.text_field :name, placeholder: t(".placeholder"), required: true, autofocus: true, label: "Name", data: { color_avatar_target: "name" } %> + <% unless category.parent? %> + <%= f.select :parent_id, categories.pluck(:name, :id), { include_blank: "(unassigned)", label: "Parent category (optional)" }, disabled: category.parent? %> + <% end %> +
+
-
- <%= f.select :classification, [["Income", "income"], ["Expense", "expense"]], { label: "Classification" }, required: true %> - <%= f.text_field :name, placeholder: t(".placeholder"), required: true, autofocus: true, label: "Name", data: { color_avatar_target: "name" } %> - <% unless category.parent? %> - <%= f.select :parent_id, categories.pluck(:name, :id), { include_blank: "(unassigned)", label: "Parent category (optional)" }, disabled: category.parent? %> - <% end %> -
-
- -
- <%= hidden_field_tag :transaction_id, params[:transaction_id] %> - <%= f.submit %> -
- <% end %> -
+
+ <%= hidden_field_tag :transaction_id, params[:transaction_id] %> + <%= f.submit %> +
+ <% end %> + +<% end %> \ No newline at end of file -- 2.53.0 From c6bf21490f79c657acbdda58c4cece7ba25d999a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvis=20Serr=C3=A3o?= Date: Tue, 28 Jan 2025 16:05:17 -0300 Subject: [PATCH 07/12] Add turbo_stream format to requests on create and update action's tests --- app/controllers/categories_controller.rb | 8 ++++---- test/controllers/categories_controller_test.rb | 17 +++++++++-------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index 99bb2827..ed17e628 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -24,12 +24,12 @@ class CategoriesController < ApplicationController redirect_target_url = request.referer || categories_path respond_to do |format| - format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, redirect_target_url) } + format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, redirect_target_url), status: :created } end else set_categories respond_to do |format| - format.turbo_stream { render turbo_stream: turbo_stream.replace("form", partial: "form", locals: { category: @category, categories: @categories }) } + format.turbo_stream { render turbo_stream: turbo_stream.replace("form", partial: "form", locals: { category: @category, categories: @categories }), status: :unprocessable_entity } end end end @@ -42,11 +42,11 @@ class CategoriesController < ApplicationController flash[:notice] = t(".success") respond_to do |format| - format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, categories_path) } + format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, categories_path), status: :no_content } end else respond_to do |format| - format.turbo_stream { render turbo_stream: turbo_stream.replace("form", partial: "form", locals: { category: @category, categories: @categories }) } + format.turbo_stream { render turbo_stream: turbo_stream.replace("form", partial: "form", locals: { category: @category, categories: @categories }), status: :unprocessable_entity } end end end diff --git a/test/controllers/categories_controller_test.rb b/test/controllers/categories_controller_test.rb index 07f45b6a..c968fa1b 100644 --- a/test/controllers/categories_controller_test.rb +++ b/test/controllers/categories_controller_test.rb @@ -20,22 +20,23 @@ class CategoriesControllerTest < ActionDispatch::IntegrationTest color = Category::COLORS.sample assert_difference "Category.count", +1 do - post categories_url, params: { + post categories_url(format: :turbo_stream), params: { category: { name: "New Category", - color: color } } + color: color } + } end new_category = Category.order(:created_at).last - assert_redirected_to categories_url + assert_response :created assert_equal "New Category", new_category.name assert_equal color, new_category.color end test "create fails if name is not unique" do assert_no_difference "Category.count" do - post categories_url, params: { + post categories_url(format: :turbo_stream), params: { category: { name: categories(:food_and_drink).name, color: Category::COLORS.sample } } @@ -48,7 +49,7 @@ class CategoriesControllerTest < ActionDispatch::IntegrationTest color = Category::COLORS.sample assert_difference "Category.count", +1 do - post categories_url, params: { + post categories_url(format: :turbo_stream), params: { transaction_id: @transaction.id, category: { name: "New Category", @@ -57,7 +58,7 @@ class CategoriesControllerTest < ActionDispatch::IntegrationTest new_category = Category.order(:created_at).last - assert_redirected_to categories_url + assert_response :created assert_equal "New Category", new_category.name assert_equal color, new_category.color assert_equal @transaction.reload.category, new_category @@ -73,14 +74,14 @@ class CategoriesControllerTest < ActionDispatch::IntegrationTest assert_changes -> { categories(:income).name }, to: "New Name" do assert_changes -> { categories(:income).reload.color }, to: new_color do - patch category_url(categories(:income)), params: { + patch category_url(categories(:income), format: :turbo_stream), params: { category: { name: "New Name", color: new_color } } end end - assert_redirected_to categories_url + assert_response :no_content end test "bootstrap" do -- 2.53.0 From 866140c196337d0f38ecf42fc3808fee3d502708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvis=20Serr=C3=A3o?= Date: Tue, 28 Jan 2025 16:11:27 -0300 Subject: [PATCH 08/12] Remove no_content status from update action --- app/controllers/categories_controller.rb | 2 +- test/controllers/categories_controller_test.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index ed17e628..bda431d5 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -42,7 +42,7 @@ class CategoriesController < ApplicationController flash[:notice] = t(".success") respond_to do |format| - format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, categories_path), status: :no_content } + format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, categories_path) } end else respond_to do |format| diff --git a/test/controllers/categories_controller_test.rb b/test/controllers/categories_controller_test.rb index c968fa1b..15126809 100644 --- a/test/controllers/categories_controller_test.rb +++ b/test/controllers/categories_controller_test.rb @@ -81,7 +81,7 @@ class CategoriesControllerTest < ActionDispatch::IntegrationTest end end - assert_response :no_content + assert_response :success end test "bootstrap" do -- 2.53.0 From 8097d494c6ea7c436a4d42877aa21a1bd6fb4676 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvis=20Serr=C3=A3o?= Date: Wed, 29 Jan 2025 15:38:34 -0300 Subject: [PATCH 09/12] Revert "Remove no_content status from update action" This reverts commit 866140c196337d0f38ecf42fc3808fee3d502708. --- app/controllers/categories_controller.rb | 2 +- test/controllers/categories_controller_test.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index bda431d5..ed17e628 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -42,7 +42,7 @@ class CategoriesController < ApplicationController flash[:notice] = t(".success") respond_to do |format| - format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, categories_path) } + format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, categories_path), status: :no_content } end else respond_to do |format| diff --git a/test/controllers/categories_controller_test.rb b/test/controllers/categories_controller_test.rb index 15126809..c968fa1b 100644 --- a/test/controllers/categories_controller_test.rb +++ b/test/controllers/categories_controller_test.rb @@ -81,7 +81,7 @@ class CategoriesControllerTest < ActionDispatch::IntegrationTest end end - assert_response :success + assert_response :no_content end test "bootstrap" do -- 2.53.0 From 5a481843357690719b67b6eecbacadbebade3696 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvis=20Serr=C3=A3o?= Date: Wed, 29 Jan 2025 15:38:40 -0300 Subject: [PATCH 10/12] Revert "Add turbo_stream format to requests on create and update action's tests" This reverts commit c6bf21490f79c657acbdda58c4cece7ba25d999a. --- app/controllers/categories_controller.rb | 8 ++++---- test/controllers/categories_controller_test.rb | 17 ++++++++--------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index ed17e628..99bb2827 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -24,12 +24,12 @@ class CategoriesController < ApplicationController redirect_target_url = request.referer || categories_path respond_to do |format| - format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, redirect_target_url), status: :created } + format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, redirect_target_url) } end else set_categories respond_to do |format| - format.turbo_stream { render turbo_stream: turbo_stream.replace("form", partial: "form", locals: { category: @category, categories: @categories }), status: :unprocessable_entity } + format.turbo_stream { render turbo_stream: turbo_stream.replace("form", partial: "form", locals: { category: @category, categories: @categories }) } end end end @@ -42,11 +42,11 @@ class CategoriesController < ApplicationController flash[:notice] = t(".success") respond_to do |format| - format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, categories_path), status: :no_content } + format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, categories_path) } end else respond_to do |format| - format.turbo_stream { render turbo_stream: turbo_stream.replace("form", partial: "form", locals: { category: @category, categories: @categories }), status: :unprocessable_entity } + format.turbo_stream { render turbo_stream: turbo_stream.replace("form", partial: "form", locals: { category: @category, categories: @categories }) } end end end diff --git a/test/controllers/categories_controller_test.rb b/test/controllers/categories_controller_test.rb index c968fa1b..07f45b6a 100644 --- a/test/controllers/categories_controller_test.rb +++ b/test/controllers/categories_controller_test.rb @@ -20,23 +20,22 @@ class CategoriesControllerTest < ActionDispatch::IntegrationTest color = Category::COLORS.sample assert_difference "Category.count", +1 do - post categories_url(format: :turbo_stream), params: { + post categories_url, params: { category: { name: "New Category", - color: color } - } + color: color } } end new_category = Category.order(:created_at).last - assert_response :created + assert_redirected_to categories_url assert_equal "New Category", new_category.name assert_equal color, new_category.color end test "create fails if name is not unique" do assert_no_difference "Category.count" do - post categories_url(format: :turbo_stream), params: { + post categories_url, params: { category: { name: categories(:food_and_drink).name, color: Category::COLORS.sample } } @@ -49,7 +48,7 @@ class CategoriesControllerTest < ActionDispatch::IntegrationTest color = Category::COLORS.sample assert_difference "Category.count", +1 do - post categories_url(format: :turbo_stream), params: { + post categories_url, params: { transaction_id: @transaction.id, category: { name: "New Category", @@ -58,7 +57,7 @@ class CategoriesControllerTest < ActionDispatch::IntegrationTest new_category = Category.order(:created_at).last - assert_response :created + assert_redirected_to categories_url assert_equal "New Category", new_category.name assert_equal color, new_category.color assert_equal @transaction.reload.category, new_category @@ -74,14 +73,14 @@ class CategoriesControllerTest < ActionDispatch::IntegrationTest assert_changes -> { categories(:income).name }, to: "New Name" do assert_changes -> { categories(:income).reload.color }, to: new_color do - patch category_url(categories(:income), format: :turbo_stream), params: { + patch category_url(categories(:income)), params: { category: { name: "New Name", color: new_color } } end end - assert_response :no_content + assert_redirected_to categories_url end test "bootstrap" do -- 2.53.0 From 2926b848b895253fd698a89c79db35713f4a2fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvis=20Serr=C3=A3o?= Date: Wed, 29 Jan 2025 15:49:14 -0300 Subject: [PATCH 11/12] Add correct redirect url for both html and turbo_stream formats --- app/controllers/categories_controller.rb | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index 99bb2827..a9d3d105 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -24,13 +24,12 @@ class CategoriesController < ApplicationController redirect_target_url = request.referer || categories_path respond_to do |format| + format.html { redirect_back_or_to categories_path, notice: t(".success") } format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, redirect_target_url) } end else set_categories - respond_to do |format| - format.turbo_stream { render turbo_stream: turbo_stream.replace("form", partial: "form", locals: { category: @category, categories: @categories }) } - end + render :new, status: :unprocessable_entity end end @@ -41,13 +40,13 @@ class CategoriesController < ApplicationController if @category.update(category_params) flash[:notice] = t(".success") + redirect_target_url = request.referer || categories_path respond_to do |format| - format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, categories_path) } + format.html { redirect_back_or_to categories_path, notice: t(".success") } + format.turbo_stream { render turbo_stream: turbo_stream.action(:redirect, redirect_target_url) } end else - respond_to do |format| - format.turbo_stream { render turbo_stream: turbo_stream.replace("form", partial: "form", locals: { category: @category, categories: @categories }) } - end + render :edit, status: :unprocessable_entity end end -- 2.53.0 From 2c07cd6d19ee5d43e9e4fb1a36e4ed49b3702d89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvis=20Serr=C3=A3o?= Date: Thu, 30 Jan 2025 12:28:02 -0300 Subject: [PATCH 12/12] Remove useless turbo_frame_tag --- app/views/categories/_form.html.erb | 83 ++++++++++++++--------------- 1 file changed, 41 insertions(+), 42 deletions(-) diff --git a/app/views/categories/_form.html.erb b/app/views/categories/_form.html.erb index 43cc4f1f..884d5509 100644 --- a/app/views/categories/_form.html.erb +++ b/app/views/categories/_form.html.erb @@ -1,49 +1,48 @@ <%# locals: (category:, categories:) %> -<%= turbo_frame_tag 'form' do %> -
- <%= styled_form_with model: category, class: "space-y-4" do |f| %> -
-
- <%= render partial: "shared/color_avatar", locals: { name: category.name, color: category.color } %> -
-
- <% Category::COLORS.each do |color| %> - - <% end %> -
+
+ <%= styled_form_with model: category, class: "space-y-4" do |f| %> +
+
+ <%= render partial: "shared/color_avatar", locals: { name: category.name, color: category.color } %> +
- <% if category.errors.any? %> - <%= render "shared/form_errors", model: category %> +
+ <% Category::COLORS.each do |color| %> + <% end %> +
-
- <% Category.icon_codes.each do |icon| %> - - <% end %> -
+ <% if category.errors.any? %> + <%= render "shared/form_errors", model: category %> + <% end %> -
- <%= f.select :classification, [["Income", "income"], ["Expense", "expense"]], { label: "Classification" }, required: true %> - <%= f.text_field :name, placeholder: t(".placeholder"), required: true, autofocus: true, label: "Name", data: { color_avatar_target: "name" } %> - <% unless category.parent? %> - <%= f.select :parent_id, categories.pluck(:name, :id), { include_blank: "(unassigned)", label: "Parent category (optional)" }, disabled: category.parent? %> - <% end %> -
-
+
+ <% Category.icon_codes.each do |icon| %> + + <% end %> +
-
- <%= hidden_field_tag :transaction_id, params[:transaction_id] %> - <%= f.submit %> -
- <% end %> -
-<% end %> \ No newline at end of file +
+ <%= f.select :classification, [["Income", "income"], ["Expense", "expense"]], { label: "Classification" }, required: true %> + <%= f.text_field :name, placeholder: t(".placeholder"), required: true, autofocus: true, label: "Name", data: { color_avatar_target: "name" } %> + <% unless category.parent? %> + <%= f.select :parent_id, categories.pluck(:name, :id), { include_blank: "(unassigned)", label: "Parent category (optional)" }, disabled: category.parent? %> + <% end %> +
+
+ +
+ <%= hidden_field_tag :transaction_id, params[:transaction_id] %> + <%= f.submit %> +
+ <% end %> +
-- 2.53.0