Skip to content

Commit

Permalink
Add stores/index component with dedicated actions
Browse files Browse the repository at this point in the history
  • Loading branch information
rainerdema committed Dec 5, 2023
1 parent 791264b commit 86cd799
Show file tree
Hide file tree
Showing 7 changed files with 147 additions and 0 deletions.
32 changes: 32 additions & 0 deletions admin/app/components/solidus_admin/stores/index/component.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<%= page do %>
<%= page_header do %>
<%= page_header_title title %>
<%= page_header_actions do %>
<%= render component("ui/button").new(
tag: :a,
text: t('.add'),
href: spree.new_admin_store_path,
icon: "add-line",
) %>
<% end %>
<% end %>
<%= render component('ui/table').new(
id: stimulus_id,
data: {
class: Spree::Store,
rows: @stores,
url: ->(store) { spree.edit_admin_store_path(store) },
columns: columns,
batch_actions: batch_actions,
},
search: {
name: :q,
value: params[:q],
url: solidus_admin.stores_path,
searchbar_key: :name_or_url_or_code_cont,
filters: filters,
scopes: scopes,
},
) %>
<% end %>
51 changes: 51 additions & 0 deletions admin/app/components/solidus_admin/stores/index/component.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# frozen_string_literal: true

class SolidusAdmin::Stores::Index::Component < SolidusAdmin::BaseComponent
include SolidusAdmin::Layout::PageHelpers

def initialize(stores:)
@stores = stores
end

def title
Spree::Store.model_name.human.pluralize
end

def batch_actions
[
{
display_name: t('.batch_actions.delete'),
action: solidus_admin.stores_path,
method: :delete,
icon: 'delete-bin-7-line',
},
]
end

def filters
[]
end

def scopes
[]
end

def columns
[
:name,
:url,
{
header: :slug,
data: ->(store) do
content_tag :div, store.code
end
},
{
header: :default,
data: ->(store) do
store.default? ? component('ui/badge').yes : component('ui/badge').no
end
},
]
end
end
4 changes: 4 additions & 0 deletions admin/app/components/solidus_admin/stores/index/component.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
en:
add: 'Add new'
batch_actions:
delete: 'Delete'
27 changes: 27 additions & 0 deletions admin/app/controllers/solidus_admin/stores_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# frozen_string_literal: true

module SolidusAdmin
class StoresController < SolidusAdmin::BaseController
include SolidusAdmin::ControllerHelpers::Search

def index
@stores = apply_search_to(
Spree::Store.order(created_at: :desc, id: :desc),
param: :q,
)

respond_to do |format|
format.html { render component('stores/index').new(stores: @stores) }
end
end

def destroy
@stores = Spree::Store.where(id: params[:id])

Spree::Store.transaction { @stores.destroy_all }

flash[:notice] = t('.success')
redirect_back_or_to stores_path, status: :see_other
end
end
end
6 changes: 6 additions & 0 deletions admin/config/locales/stores.en.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
en:
solidus_admin:
stores:
title: "Stores"
destroy:
success: "Stores were successfully removed."
1 change: 1 addition & 0 deletions admin/config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,5 @@
admin_resources :tax_rates, only: [:index, :destroy]
admin_resources :payment_methods, only: [:index, :destroy], sortable: true
admin_resources :stock_items, only: [:index]
admin_resources :stores, only: [:index, :destroy]
end
26 changes: 26 additions & 0 deletions admin/spec/features/stores_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# frozen_string_literal: true

require 'spec_helper'

describe "Stores", :js, type: :feature do
before { sign_in create(:admin_user, email: '[email protected]') }

it "lists stores and allows deleting them" do
store1 = create(:store)
store2 = create(:store)

visit "/admin/stores"

expect(page).to have_content(store1.name)
expect(page).to have_content(store2.name)

expect(page).to be_axe_clean

select_row(store2.name)
click_on "Delete"

expect(page).to have_content("Stores were successfully removed.")
expect(page).not_to have_content(store2.name)
expect(Spree::Store.count).to eq(1)
end
end

0 comments on commit 86cd799

Please sign in to comment.