Skip to content

Commit

Permalink
enable editing of product property using UI components
Browse files Browse the repository at this point in the history
  • Loading branch information
Astr0surf3r committed Nov 2, 2024
1 parent 3be1cc8 commit f52b0cf
Show file tree
Hide file tree
Showing 10 changed files with 109 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<%= turbo_frame_tag :edit_property_modal do %>
<%= render component("ui/modal").new(title: t(".title")) do |modal| %>
<%= form_for @property, url: solidus_admin.property_path(@property), html: { id: form_id } do |f| %>
<div class="flex flex-col gap-6 pb-4">
<%= render component("ui/forms/field").text_field(f, :name, class: "required") %>
<%= render component("ui/forms/field").text_field(f, :presentation, class: "required") %>
</div>
<% modal.with_actions do %>
<form method="dialog">
<%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
</form>
<%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
<% end %>
<% end %>
<% end %>
<% end %>
<%= render component("properties/index").new(page: @page) %>
12 changes: 12 additions & 0 deletions admin/app/components/solidus_admin/properties/edit/component.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# frozen_string_literal: true

class SolidusAdmin::Properties::Edit::Component < SolidusAdmin::BaseComponent
def initialize(page:, property:)
@page = page
@property = property
end

def form_id
dom_id(@property, "#{stimulus_id}_edit_property_form")
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
en:
title: "Edit Property"
cancel: "Cancel"
submit: "Update Property"
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,13 @@ def search_url
end

def row_url(property)
spree.edit_admin_property_path(property)
spree.edit_admin_property_path(property, _turbo_frame: :edit_property_modal)
end

def turbo_frames
%w[
new_property_modal
edit_property_modal
]
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ def initialize(page:, property:)
@page = page
@property = property
end

def form_id
dom_id(@property, "#{stimulus_id}_new_property_form")
end
Expand Down
39 changes: 39 additions & 0 deletions admin/app/controllers/solidus_admin/properties_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ module SolidusAdmin
class PropertiesController < SolidusAdmin::BaseController
include SolidusAdmin::ControllerHelpers::Search

before_action :find_property, only: %i[edit update]

def index
set_index_page

Expand Down Expand Up @@ -58,6 +60,39 @@ def create
end
end

def edit
set_index_page

respond_to do |format|
format.html { render component('properties/edit').new(page: @page, property: @property) }
end
end

def update
if @property.update(property_params)
respond_to do |format|
flash[:notice] = t('.success')

format.html do
redirect_to solidus_admin.properties_path, status: :see_other
end

format.turbo_stream do
render turbo_stream: '<turbo-stream action="refresh" />'
end
end
else
set_index_page

respond_to do |format|
format.html do
page_component = component('properties/edit').new(page: @page, property: @property)
render page_component, status: :unprocessable_entity
end
end
end
end

def destroy
@properties = Spree::Property.where(id: params[:id])

Expand All @@ -71,6 +106,10 @@ def destroy

private

def find_property
@property = Spree::Property.find(params[:id])
end

def property_params
params.require(:property).permit(:name, :presentation)
end
Expand Down
2 changes: 2 additions & 0 deletions admin/config/locales/properties.en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,5 @@ en:
success: "Properties were successfully removed."
create:
success: "Property was successfully created."
update:
success: "Property was successfully updated."
2 changes: 1 addition & 1 deletion admin/config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
end

admin_resources :promotions, only: [:index, :destroy]
admin_resources :properties, only: [:index, :new, :create, :destroy]
admin_resources :properties, except: [:show]
admin_resources :option_types, only: [:index, :destroy], sortable: true
admin_resources :taxonomies, only: [:index, :destroy], sortable: true
admin_resources :promotion_categories, only: [:index, :destroy]
Expand Down
32 changes: 31 additions & 1 deletion admin/spec/features/properties_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
expect(Spree::Property.count).to eq(1)
end

context "creating a new property" do
context "creating a new property" do
it "creates a new product property" do
visit "/admin/properties"
click_on "Add new"
Expand Down Expand Up @@ -78,4 +78,34 @@
expect(Spree::Property.count).to eq(1)
end
end

context "editing an existing property" do
let!(:property) { create(:property, name: "Color", presentation: "Cool Color") }

it "updates the property" do
visit "/admin/properties"
# Find the row containing the property with name "Color"
find('tr', text: 'Color').click

fill_in "Name", with: "Size"
fill_in "Presentation", with: "Cool Size"
click_on "Update Property"

expect(page).to have_content("Property was successfully updated.")
expect(page).to have_content("Size")
expect(page).to have_content("Cool Size")
expect(Spree::Property.count).to eq(1)
end

it "shows validation errors" do
visit "/admin/properties"
find('tr', text: 'Color').click

fill_in "Name", with: ""
click_on "Update Property"

expect(page).to have_content("can't be blank")
expect(Spree::Property.count).to eq(1)
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,4 @@
expect(assigns(:collection)).to be_empty
end
end

context "#show" do
it "redirects to edit when a property is found" do
get :show, params: { id: property.id }
expect(response).to redirect_to(edit_admin_property_path(property))
end
end
end

0 comments on commit f52b0cf

Please sign in to comment.