From 4b055d2c178a15d00d4a2fbef91fe1ef24e7cb1a Mon Sep 17 00:00:00 2001 From: Jeremy Green Date: Wed, 18 Dec 2024 09:18:34 -0600 Subject: [PATCH] Ability to super scaffold fields onto Membership (#990) * Allow super scaffolded fields to work on Memerships * prevent duplicate fields if someone has ejected this form * Use account/memberships/attributes to super scaffold attributes on to Membership#show * Allow account/memberships/fields to work * Allow the app to specify membership params for invitations * refactor * linter --- .../lib/scaffolding/transformer.rb | 10 ++-- .../account/invitations/controller_base.rb | 5 ++ .../views/account/invitations/_form.html.erb | 4 ++ .../views/account/memberships/_form.html.erb | 60 ++++++++++--------- .../views/account/memberships/show.html.erb | 1 + .../app/views/account/users/_form.html.erb | 1 - 6 files changed, 47 insertions(+), 34 deletions(-) diff --git a/bullet_train-super_scaffolding/lib/scaffolding/transformer.rb b/bullet_train-super_scaffolding/lib/scaffolding/transformer.rb index c1fe254ba..3af0be5b6 100644 --- a/bullet_train-super_scaffolding/lib/scaffolding/transformer.rb +++ b/bullet_train-super_scaffolding/lib/scaffolding/transformer.rb @@ -835,8 +835,10 @@ def valid_#{attribute.collection_name} end show_page_doesnt_exist = child == "User" - scaffold_add_line_to_file("./app/views/account/scaffolding/completely_concrete/tangible_things/show.html.erb", field_content.strip, ERB_NEW_FIELDS_HOOK, prepend: true, suppress_could_not_find: show_page_doesnt_exist) - + show_page_target = (child == "Membership") ? + "./app/views/account/scaffolding/completely_concrete/tangible_things/_attributes.html.erb" : + "./app/views/account/scaffolding/completely_concrete/tangible_things/show.html.erb" + scaffold_add_line_to_file(show_page_target, field_content.strip, ERB_NEW_FIELDS_HOOK, prepend: true, suppress_could_not_find: show_page_doesnt_exist) end # @@ -848,7 +850,7 @@ def valid_#{attribute.collection_name} # table header. field_content = "<%= t('.fields.#{attribute.is_vanilla? ? attribute.name : attribute.name_without_id_suffix}.heading') %>" - unless ["Team", "User"].include?(child) + unless ["Team", "User", "Membership"].include?(child) scaffold_add_line_to_file("./app/views/account/scaffolding/completely_concrete/tangible_things/_index.html.erb", field_content, "<%# 🚅 super scaffolding will insert new field headers above this line. %>", prepend: true) end @@ -884,7 +886,7 @@ def valid_#{attribute.collection_name} field_content.gsub!(/\s%>/, ", one_line: true %>") end - unless ["Team", "User"].include?(child) + unless ["Team", "User", "Membership"].include?(child) scaffold_add_line_to_file("./app/views/account/scaffolding/completely_concrete/tangible_things/_tangible_thing.html.erb", field_content.strip, ERB_NEW_FIELDS_HOOK, prepend: true) end diff --git a/bullet_train/app/controllers/concerns/account/invitations/controller_base.rb b/bullet_train/app/controllers/concerns/account/invitations/controller_base.rb index 2942e400f..6ebf400d6 100644 --- a/bullet_train/app/controllers/concerns/account/invitations/controller_base.rb +++ b/bullet_train/app/controllers/concerns/account/invitations/controller_base.rb @@ -124,6 +124,10 @@ def permitted_fields raise "It looks like you've removed `permitted_fields` from your controller. This will break Super Scaffolding." end + def permitted_membership_fields + raise "It looks like you've removed `permitted_membership_fields` from your controller. This will break Super Scaffolding." + end + def permitted_arrays raise "It looks like you've removed `permitted_arrays` from your controller. This will break Super Scaffolding." end @@ -145,6 +149,7 @@ def invitation_params # 🚅 super scaffolding will insert new fields above this line. # 🚅 super scaffolding will insert new arrays above this line. membership_attributes: [ + *permitted_membership_fields, :user_first_name, :user_last_name, role_ids: [] diff --git a/bullet_train/app/views/account/invitations/_form.html.erb b/bullet_train/app/views/account/invitations/_form.html.erb index 96ed04809..ab20ac574 100644 --- a/bullet_train/app/views/account/invitations/_form.html.erb +++ b/bullet_train/app/views/account/invitations/_form.html.erb @@ -33,6 +33,10 @@ <% end %> <% end %> + + <% with_field_settings form: fields do %> + <%= render "account/memberships/fields", membership: fields.object, form: fields %> + <% end %> <% end %> <% end %> diff --git a/bullet_train/app/views/account/memberships/_form.html.erb b/bullet_train/app/views/account/memberships/_form.html.erb index 7da48a3a5..431fc5927 100644 --- a/bullet_train/app/views/account/memberships/_form.html.erb +++ b/bullet_train/app/views/account/memberships/_form.html.erb @@ -1,42 +1,44 @@ <%= form_with(model: [:account, (@team unless membership.persisted?), membership], class: 'form', local: true) do |form| %> <%= render 'account/shared/forms/errors', form: form %> - <% if membership.unclaimed? || membership.tombstone? %> -
-
- <%= render 'shared/fields/text_field', form: form, method: :user_first_name %> -
-
- <%= render 'shared/fields/text_field', form: form, method: :user_last_name %> + <% with_field_settings form: form do %> + <% if membership.unclaimed? || membership.tombstone? %> +
+
+ <%= render 'shared/fields/text_field', form: form, method: :user_first_name %> +
+ +
+ <%= render 'shared/fields/text_field', form: form, method: :user_last_name %> +
-
- <% end %> + <% end %> - <% if membership.tombstone? %> - <% if cloudinary_enabled? %> - <%= render 'shared/fields/cloudinary_image', form: form, method: :user_profile_photo_id %> + <% if membership.tombstone? %> + <% if cloudinary_enabled? %> + <%= render 'shared/fields/cloudinary_image', form: form, method: :user_profile_photo_id %> + <% end %> <% end %> - <% end %> - <%= hidden_field_tag 'membership[role_ids][]', nil %> - - <% Membership.assignable_roles.each do |role| %> - <% if role.manageable_by?(current_membership.roles) %> -
- <%= form.check_box :role_ids, {multiple: true, class: "h-4 w-4 text-primary-500 focus:ring-primary-500 border-slate-300 rounded mt-0.5"}, role.id, nil %> - -
+ <%= hidden_field_tag 'membership[role_ids][]', nil %> + + <% Membership.assignable_roles.each do |role| %> + <% if role.manageable_by?(current_membership.roles) %> +
+ <%= form.check_box :role_ids, {multiple: true, class: "h-4 w-4 text-primary-500 focus:ring-primary-500 border-slate-300 rounded mt-0.5"}, role.id, nil %> + +
+ <% end %> <% end %> - <% end %> - <%= render "account/memberships/fields", membership: membership, form: form %> - <%# 🚅 super scaffolding will insert new fields above this line. %> + <%= render "account/memberships/fields", membership: membership, form: form %> + <% end %>
<%= form.submit t('.buttons.update'), class: "button" %> diff --git a/bullet_train/app/views/account/memberships/show.html.erb b/bullet_train/app/views/account/memberships/show.html.erb index da8c429db..34159e812 100644 --- a/bullet_train/app/views/account/memberships/show.html.erb +++ b/bullet_train/app/views/account/memberships/show.html.erb @@ -27,6 +27,7 @@ <% end %> <% end %> <% end %> + <%= render "account/memberships/attributes", membership: @membership %> <% end %> <%# 🚅 super scaffolding will insert new fields above this line. %> <% end %> diff --git a/bullet_train/app/views/account/users/_form.html.erb b/bullet_train/app/views/account/users/_form.html.erb index 3ff8bfe97..a0764755c 100644 --- a/bullet_train/app/views/account/users/_form.html.erb +++ b/bullet_train/app/views/account/users/_form.html.erb @@ -32,7 +32,6 @@ <% end %> <%= render "account/users/fields", user: user, form: form %> - <%# 🚅 super scaffolding will insert new fields above this line. %>
<% end %>