spree_admin 5.3.0.rc2 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +137 -8
- data/app/assets/tailwind/spree/admin/components/_cards.css +6 -6
- data/app/assets/tailwind/spree/admin/components/_forms.css +1 -1
- data/app/controllers/concerns/spree/admin/bulk_operations_concern.rb +1 -10
- data/app/controllers/spree/admin/products_controller.rb +3 -15
- data/app/views/spree/admin/exports/new.html.erb +11 -10
- data/app/views/spree/admin/products/form/variants/_variant_template.html.erb +1 -1
- data/app/views/spree/admin/promotion_actions/new.html.erb +3 -3
- data/app/views/spree/admin/promotion_rules/new.html.erb +1 -1
- data/app/views/spree/admin/promotions/form/_kind.html.erb +18 -16
- data/app/views/spree/admin/stores/new.html.erb +5 -5
- data/app/views/spree/admin/tables/_query_builder.html.erb +1 -1
- data/app/views/spree/admin/variants/form/_inventory.html.erb +1 -1
- data/app/views/spree/admin/variants/form/_pricing.html.erb +2 -2
- data/config/locales/en.yml +0 -1
- metadata +5 -6
- data/app/views/spree/admin/products/bulk_status_update.turbo_stream.erb +0 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 550e43e0d20266ca7432c695dc429234fe9152cb9a5716ca6d8518482744d493
|
|
4
|
+
data.tar.gz: b1d9bab21c05510f2c8a2a3a82c1c97e90b92853a91f46abbae29980428d32d9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2e5951bcf9cdd501d16e6410ef893125e619f84a865cb16fb0176894505075eca514c76348cd387b9927eb4f1fdc37abed2349c49ecf116acf1fa99399ce2b6e
|
|
7
|
+
data.tar.gz: 1098481f56d76418a17dfff7806e4b64527ef2be597e11800992ad4393617aa66c6a5f54cae85d329315d3cd2f92af414ffe86c165ae2a4f6fc9c8c03f8bec6f
|
data/README.md
CHANGED
|
@@ -1,21 +1,150 @@
|
|
|
1
|
-
# Spree Admin
|
|
1
|
+
# Spree Admin
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://badge.fury.io/rb/spree_admin)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Spree Admin provides a modern, fully-featured admin dashboard for managing your Spree Commerce store.
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
This gem includes:
|
|
6
10
|
|
|
7
|
-
|
|
11
|
+
- **Dashboard** - Analytics and KPI overview
|
|
12
|
+
- **Product Management** - Products, variants, properties, option types
|
|
13
|
+
- **Order Management** - Orders, payments, shipments, refunds
|
|
14
|
+
- **Customer Management** - Customer accounts and order history
|
|
15
|
+
- **Inventory Management** - Stock locations, stock items, transfers
|
|
16
|
+
- **Promotions** - Discounts, coupon codes, promotion rules
|
|
17
|
+
- **Content Management** - Pages, menus, navigation
|
|
18
|
+
- **Settings** - Store configuration, payment methods, shipping methods, taxes
|
|
19
|
+
|
|
20
|
+
## Installation
|
|
8
21
|
|
|
9
22
|
```bash
|
|
10
23
|
bundle add spree_admin
|
|
24
|
+
bin/rails g spree:admin:install
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
You will need to restart your web server and run `bin/dev` to start the development server for the admin dashboard.
|
|
28
|
+
|
|
29
|
+
## Features
|
|
30
|
+
|
|
31
|
+
### Dynamic Tables
|
|
32
|
+
|
|
33
|
+
Register customizable tables for your resources:
|
|
34
|
+
|
|
35
|
+
```ruby
|
|
36
|
+
# config/initializers/spree_admin_tables.rb
|
|
37
|
+
Rails.application.config.after_initialize do
|
|
38
|
+
Spree.admin.tables.register(:gift_cards, model_class: Spree::GiftCard)
|
|
39
|
+
|
|
40
|
+
Spree.admin.tables.gift_cards.add :code,
|
|
41
|
+
label: :code,
|
|
42
|
+
type: :string,
|
|
43
|
+
sortable: true,
|
|
44
|
+
filterable: true,
|
|
45
|
+
default: true,
|
|
46
|
+
position: 10
|
|
47
|
+
end
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Column types: `:string`, `:currency`, `:date`, `:datetime`, `:boolean`, `:custom`
|
|
51
|
+
|
|
52
|
+
### Navigation
|
|
53
|
+
|
|
54
|
+
Configure sidebar and settings navigation:
|
|
55
|
+
|
|
56
|
+
```ruby
|
|
57
|
+
# config/initializers/spree_admin_navigation.rb
|
|
58
|
+
Rails.application.config.after_initialize do
|
|
59
|
+
Spree.admin.navigation.sidebar.add :reports,
|
|
60
|
+
label: :reports,
|
|
61
|
+
url: :admin_reports_path,
|
|
62
|
+
icon: 'chart-bar',
|
|
63
|
+
position: 60,
|
|
64
|
+
if: -> { can?(:manage, Spree::Report) }
|
|
65
|
+
end
|
|
11
66
|
```
|
|
12
67
|
|
|
13
|
-
|
|
68
|
+
### Partial Hooks
|
|
69
|
+
|
|
70
|
+
Extend the admin interface with partial hooks (100+ available):
|
|
71
|
+
|
|
72
|
+
```erb
|
|
73
|
+
<%# app/views/spree/admin/orders/_show_sidebar.html.erb %>
|
|
74
|
+
<div class="card">
|
|
75
|
+
<div class="card-body">
|
|
76
|
+
Custom order sidebar content
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Controllers
|
|
82
|
+
|
|
83
|
+
Admin controllers inherit from `Spree::Admin::ResourceController` for consistent CRUD:
|
|
84
|
+
|
|
85
|
+
```ruby
|
|
86
|
+
module Spree
|
|
87
|
+
module Admin
|
|
88
|
+
class GiftCardsController < ResourceController
|
|
89
|
+
private
|
|
90
|
+
|
|
91
|
+
def model_class
|
|
92
|
+
Spree::GiftCard
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def permitted_resource_params
|
|
96
|
+
params.require(:gift_card).permit(
|
|
97
|
+
Spree::PermittedAttributes.gift_card_attributes
|
|
98
|
+
)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Form Builder
|
|
106
|
+
|
|
107
|
+
Use the Spree admin form builder for consistent styling:
|
|
108
|
+
|
|
109
|
+
```erb
|
|
110
|
+
<%= f.spree_text_field :name %>
|
|
111
|
+
<%= f.spree_text_area :description %>
|
|
112
|
+
<%= f.spree_check_box :active %>
|
|
113
|
+
<%= f.spree_select :status, options_for_status %>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Technology Stack
|
|
117
|
+
|
|
118
|
+
- **Tailwind CSS** - Utility-first CSS framework
|
|
119
|
+
- **Turbo/Hotwire** - SPA-like interactions without JavaScript frameworks
|
|
120
|
+
- **Stimulus** - Modest JavaScript framework for controllers
|
|
121
|
+
|
|
122
|
+
## Testing
|
|
14
123
|
|
|
15
124
|
```bash
|
|
16
|
-
|
|
125
|
+
cd admin
|
|
126
|
+
bundle exec rake test_app # First time only
|
|
127
|
+
bundle exec rspec
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
For controller specs, use `stub_authorization!` for authentication:
|
|
131
|
+
|
|
132
|
+
```ruby
|
|
133
|
+
RSpec.describe Spree::Admin::ProductsController, type: :controller do
|
|
134
|
+
stub_authorization!
|
|
135
|
+
render_views
|
|
136
|
+
|
|
137
|
+
describe 'GET #index' do
|
|
138
|
+
it 'renders the index template' do
|
|
139
|
+
get :index
|
|
140
|
+
expect(response).to render_template(:index)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
17
144
|
```
|
|
18
145
|
|
|
19
|
-
|
|
146
|
+
## Documentation
|
|
20
147
|
|
|
21
|
-
|
|
148
|
+
- [Admin Customization Guide](https://docs.spreecommerce.org/developer/customization/admin)
|
|
149
|
+
- [Navigation Configuration](https://docs.spreecommerce.org/developer/customization/admin-navigation)
|
|
150
|
+
- [Permissions Guide](https://docs.spreecommerce.org/developer/customization/permissions)
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
@layer components {
|
|
6
6
|
.card,
|
|
7
7
|
.card-lg {
|
|
8
|
-
@apply relative flex flex-col min-w-0 break-words bg-white border border-gray-200 rounded-
|
|
8
|
+
@apply relative flex flex-col min-w-0 break-words bg-white border border-gray-200 rounded-xl;
|
|
9
9
|
background-clip: border-box;
|
|
10
10
|
}
|
|
11
11
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
.card .card {
|
|
17
|
-
@apply rounded-
|
|
17
|
+
@apply rounded-xl;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
/* Card with table */
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
.card-header {
|
|
90
|
-
@apply flex items-center mb-0 p-5 pr-3 h-14 border-b border-gray-100 rounded-t-[calc(var(--radius-
|
|
90
|
+
@apply flex items-center mb-0 p-5 pr-3 h-14 border-b border-gray-100 rounded-t-[calc(var(--radius-xl)-1px)];
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
.card-header .card-title {
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
.card-footer:last-child {
|
|
114
|
-
@apply rounded-b-[calc(var(--radius-
|
|
114
|
+
@apply rounded-b-[calc(var(--radius-xl)-1px)];
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
.card-footer.border-top,
|
|
@@ -135,13 +135,13 @@
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
.card-img-top {
|
|
138
|
-
@apply w-full rounded-t-[calc(var(--radius-
|
|
138
|
+
@apply w-full rounded-t-[calc(var(--radius-xl)-1px)];
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
/* Collapsable Card */
|
|
142
142
|
.collapsable-card {
|
|
143
143
|
@apply relative flex flex-col min-w-0 break-words overflow-hidden;
|
|
144
|
-
@apply bg-white border border-gray-200 rounded-
|
|
144
|
+
@apply bg-white border border-gray-200 rounded-xl;
|
|
145
145
|
background-clip: border-box;
|
|
146
146
|
}
|
|
147
147
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
.select-input,
|
|
24
24
|
.form-control-sm,
|
|
25
25
|
.custom-select-sm {
|
|
26
|
-
@apply block w-full py-2
|
|
26
|
+
@apply block w-full py-2 px-3 text-base font-normal leading-normal;
|
|
27
27
|
@apply text-gray-950 bg-white border border-gray-200 rounded-lg shadow-xs;
|
|
28
28
|
@apply focus:outline-offset-2 focus:outline-blue-500 focus:border-gray-200 focus:ring-0;
|
|
29
29
|
@apply transition-all duration-100 ease-in-out;
|
|
@@ -25,16 +25,7 @@ module Spree
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def handle_bulk_operation_response
|
|
28
|
-
|
|
29
|
-
format.turbo_stream do
|
|
30
|
-
flash.now[:success] = flash_message_for(bulk_collection, :successfully_updated)
|
|
31
|
-
render partial: 'spree/admin/shared/close_bulk_modal'
|
|
32
|
-
end
|
|
33
|
-
format.html do
|
|
34
|
-
flash[:success] = flash_message_for(bulk_collection, :successfully_updated)
|
|
35
|
-
redirect_to request.referer
|
|
36
|
-
end
|
|
37
|
-
end
|
|
28
|
+
redirect_back fallback_location: request.referer, status: :see_other
|
|
38
29
|
end
|
|
39
30
|
|
|
40
31
|
def bulk_collection
|
|
@@ -86,22 +86,10 @@ module Spree
|
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
def bulk_status_update
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if defined?(Spree::Webhooks::Subscriber) && Spree::Webhooks::Subscriber.any?
|
|
93
|
-
::Spree::Products::QueueStatusChangedWebhook.call(
|
|
94
|
-
ids: product_ids,
|
|
95
|
-
event: Spree::Product::STATUS_TO_WEBHOOK_EVENT[params[:status]]
|
|
96
|
-
)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
invoke_callbacks(:bulk_status_update, :after)
|
|
89
|
+
bulk_collection.update_all(status: params[:status], updated_at: Time.current)
|
|
90
|
+
invoke_callbacks(:bulk_status_update, :after)
|
|
100
91
|
|
|
101
|
-
|
|
102
|
-
else
|
|
103
|
-
flash.now[:error] = Spree.t('something_went_wrong')
|
|
104
|
-
end
|
|
92
|
+
handle_bulk_operation_response
|
|
105
93
|
end
|
|
106
94
|
|
|
107
95
|
def bulk_remove_from_taxons
|
|
@@ -10,23 +10,24 @@
|
|
|
10
10
|
</div>
|
|
11
11
|
<div class="dialog-body">
|
|
12
12
|
<%= render 'spree/admin/shared/error_messages', target: @export %>
|
|
13
|
-
<div class="custom-control custom-radio">
|
|
13
|
+
<div class="custom-control custom-radio hover:bg-gray-50 rounded-lg p-3">
|
|
14
14
|
<%= f.radio_button :record_selection, 'filtered', class: 'custom-control-input' %>
|
|
15
|
-
<%= f.label :record_selection, for: :export_record_selection_filtered, class: 'custom-control-label' do %>
|
|
15
|
+
<%= f.label :record_selection, for: :export_record_selection_filtered, class: 'custom-control-label flex-col items-start' do %>
|
|
16
16
|
<%= Spree.t(:filtered_records) %>
|
|
17
|
+
<span class="text-gray-600 font-normal">
|
|
18
|
+
<%= Spree.t('admin.export_only_filtered_records') %>
|
|
19
|
+
</span>
|
|
17
20
|
<% end %>
|
|
18
|
-
<span class="text-gray-600 font-normal ml-7 mt-2">
|
|
19
|
-
<%= Spree.t('admin.export_only_filtered_records') %>
|
|
20
|
-
</span>
|
|
21
21
|
</div>
|
|
22
|
-
<div class="custom-control custom-radio
|
|
22
|
+
<div class="custom-control custom-radio hover:bg-gray-50 rounded-lg p-3">
|
|
23
23
|
<%= f.radio_button :record_selection, 'all', class: 'custom-control-input' %>
|
|
24
|
-
<%= f.label :record_selection, for: :export_record_selection_all, class: 'custom-control-label' do %>
|
|
24
|
+
<%= f.label :record_selection, for: :export_record_selection_all, class: 'custom-control-label flex-col items-start' do %>
|
|
25
25
|
<%= Spree.t(:all) %>
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
<span class="text-gray-600 font-normal">
|
|
27
|
+
<%= Spree.t('admin.export_all') %>
|
|
28
|
+
</span>
|
|
29
29
|
</span>
|
|
30
|
+
<% end %>
|
|
30
31
|
</div>
|
|
31
32
|
</div>
|
|
32
33
|
<div class="dialog-footer">
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
</div>
|
|
35
35
|
<% if can?(:manage, @product.default_variant) %>
|
|
36
36
|
<div class="variants-table__body__cell column-actions flex items-center">
|
|
37
|
-
<a href="#" class="btn btn-light invisible ml-2" data-slot="variantEditButton">
|
|
37
|
+
<a href="#" class="btn btn-sm btn-light invisible ml-2" data-slot="variantEditButton">
|
|
38
38
|
<%= icon('edit') %>
|
|
39
39
|
<%= Spree.t(:edit)%>
|
|
40
40
|
</a>
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
<% if @promotion_action.type.nil? %>
|
|
11
11
|
<% options_for_promotion_action_types(@promotion).each do |action_type| %>
|
|
12
12
|
<% key = action_type.to_s.demodulize.underscore %>
|
|
13
|
-
<%= link_to spree.new_admin_promotion_action_path(@promotion, promotion_action: { type: action_type }), class: 'flex align-items-top w-full py-2 px-4 hover:bg-gray-100 rounded-xl mb-2', data: { turbo_prefetch: false } do %>
|
|
14
|
-
<%= radio_button_tag :type, action_type, checked: @promotion_action.type == action_type %>
|
|
15
|
-
<div
|
|
13
|
+
<%= link_to spree.new_admin_promotion_action_path(@promotion, promotion_action: { type: action_type }), class: 'flex align-items-top w-full py-2 px-4 hover:bg-gray-100 rounded-xl mb-2 no-underline', data: { turbo_prefetch: false } do %>
|
|
14
|
+
<%= radio_button_tag :type, action_type, class: 'hidden',checked: @promotion_action.type == action_type %>
|
|
15
|
+
<div>
|
|
16
16
|
<h6><%= Spree.t("promotion_action_types.#{key}.name") %></h6>
|
|
17
17
|
<p class="text-gray-600 mb-0"><%= Spree.t("promotion_action_types.#{key}.description") %></p>
|
|
18
18
|
</div>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<% key = rule_type.demodulize.underscore %>
|
|
13
13
|
<%= link_to spree.new_admin_promotion_rule_path(@promotion, promotion_rule: { type: rule_type }), class: 'flex align-items-top w-full py-2 px-4 hover:bg-gray-100 rounded-xl mb-2 no-underline', data: { turbo_prefetch: false } do %>
|
|
14
14
|
<%= radio_button_tag :type, rule_type, class: 'hidden' %>
|
|
15
|
-
<div
|
|
15
|
+
<div>
|
|
16
16
|
<h6 class="font-bold mb-1"><%= Spree.t("promotion_rule_types.#{key}.name") %></h6>
|
|
17
17
|
<p class="text-gray-600 mb-0"><%= Spree.t("promotion_rule_types.#{key}.description") %></p>
|
|
18
18
|
</div>
|
|
@@ -5,40 +5,40 @@
|
|
|
5
5
|
|
|
6
6
|
<div data-reveal-target="item" class="rounded-md p-6 bg-gray-25 mt-6 <% if @promotion.automatic? %>hidden<% end %>">
|
|
7
7
|
<div data-controller="reveal" data-reveal-hidden-class="hidden">
|
|
8
|
-
<div class="
|
|
8
|
+
<div class="custom-control custom-radio">
|
|
9
9
|
<%= f.radio_button :multi_codes, false, data: { action: 'change->reveal#toggle' }, class: 'custom-control-input' %>
|
|
10
|
-
<%= f.label :multi_codes_false, class: 'custom-control-label' do %>
|
|
10
|
+
<%= f.label :multi_codes_false, class: 'custom-control-label flex-col items-start' do %>
|
|
11
11
|
One code for all customers
|
|
12
|
-
<span class="form-text font-normal
|
|
12
|
+
<span class="form-text font-normal">
|
|
13
13
|
You can limit the number of times this code can be used.
|
|
14
14
|
</span>
|
|
15
15
|
<% end %>
|
|
16
16
|
</div>
|
|
17
|
-
<div data-reveal-target="item" class="
|
|
17
|
+
<div data-reveal-target="item" class="mt-2 ml-6 <% if @promotion.multi_codes? %>hidden<% end %>">
|
|
18
18
|
<%= f.text_field :code, class: 'form-input uppercase', placeholder: 'Your coupon code' %>
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
|
-
<div class="mt-
|
|
21
|
+
<div class="mt-6 custom-control custom-radio">
|
|
22
22
|
<%= f.radio_button :multi_codes, true, data: { action: 'change->reveal#toggle' }, class: 'custom-control-input' %>
|
|
23
|
-
<%= f.label :multi_codes_true, class: 'custom-control-label' do %>
|
|
23
|
+
<%= f.label :multi_codes_true, class: 'custom-control-label flex-col items-start' do %>
|
|
24
24
|
Generate unique codes
|
|
25
|
-
<span class="form-text font-normal
|
|
25
|
+
<span class="form-text font-normal">
|
|
26
26
|
These codes are generated automatically and can be downloaded as a CSV file. Codes are unique and can only be used once.
|
|
27
27
|
</span>
|
|
28
28
|
<% end %>
|
|
29
29
|
</div>
|
|
30
|
-
<div data-reveal-target="item" class="ml-6 mt-2 grid
|
|
31
|
-
<div
|
|
30
|
+
<div data-reveal-target="item" class="ml-6 mt-2 grid gap-3 <% unless @promotion.multi_codes? %>hidden<% end %>">
|
|
31
|
+
<div>
|
|
32
32
|
<%= f.text_field :code_prefix, class: 'form-input uppercase', placeholder: 'Coupon Prefix (optional)' %>
|
|
33
|
-
<span class="form-text mt-
|
|
33
|
+
<span class="form-text mt-1">
|
|
34
34
|
eg. <strong>ABC</strong>
|
|
35
35
|
</span>
|
|
36
36
|
</div>
|
|
37
|
-
<div
|
|
37
|
+
<div>
|
|
38
38
|
<% minimum_number_of_codes = @promotion.persisted? && @promotion.coupon_codes.count.positive? ? @promotion.coupon_codes.count : 1 %>
|
|
39
39
|
<% maximum_number_of_codes = ENV.fetch('PROMOTION_MAX_NUMBER_OF_CODES', 5000) %>
|
|
40
40
|
<%= f.number_field :number_of_codes, class: 'form-input', placeholder: 'Number of codes', min: minimum_number_of_codes, max: maximum_number_of_codes, step: 1 %>
|
|
41
|
-
<span class="form-text mt-
|
|
41
|
+
<span class="form-text mt-1">
|
|
42
42
|
How many codes you want to generate.
|
|
43
43
|
<% if @promotion.persisted? %>
|
|
44
44
|
To add more codes just increase this number
|
|
@@ -52,10 +52,12 @@
|
|
|
52
52
|
|
|
53
53
|
<div class="mt-6 custom-control custom-radio">
|
|
54
54
|
<%= f.radio_button :kind, :automatic, data: { action: 'change->reveal#hide' }, class: 'custom-control-input' %>
|
|
55
|
-
<%= f.label :kind_automatic, Spree.t(:automatic_promotion), class: 'custom-control-label' %>
|
|
55
|
+
<%= f.label :kind_automatic, Spree.t(:automatic_promotion), class: 'custom-control-label flex-col items-start' do %>
|
|
56
|
+
<%= Spree.t(:automatic_promotion) %>
|
|
57
|
+
<span class="form-text font-normal">
|
|
58
|
+
This promotion will be automatically applied to all eligible orders.
|
|
59
|
+
</span>
|
|
60
|
+
<% end %>
|
|
56
61
|
|
|
57
|
-
<p class="form-text mt-2 mb-0">
|
|
58
|
-
This promotion will be automatically applied to all eligible orders.
|
|
59
|
-
</p>
|
|
60
62
|
</div>
|
|
61
63
|
</div>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<%= form_for @store, url: spree.admin_stores_path, data: { turbo: false, controller: 'store-form enable-button' } do |f| %>
|
|
2
|
-
<div class="container pt-
|
|
2
|
+
<div class="container mx-auto px-4 pt-8">
|
|
3
3
|
<h1 class="mb-6"><%= Spree.t(:new_store) %></h1>
|
|
4
4
|
|
|
5
5
|
<%= render partial: 'spree/admin/shared/error_messages', locals: { target: @store } %>
|
|
@@ -54,12 +54,12 @@
|
|
|
54
54
|
<% end %>
|
|
55
55
|
</div>
|
|
56
56
|
<div class="col-span-12 lg:col-span-5 lg:col-start-8">
|
|
57
|
-
<h5>What will be shared with this new store:</h5>
|
|
57
|
+
<h5 class="mb-2">What will be shared with this new store:</h5>
|
|
58
58
|
<ul class="list-none p-0">
|
|
59
59
|
<li>
|
|
60
60
|
<%= icon('check', class: 'text-green-700') %>
|
|
61
61
|
<%= Spree.t(:products) %>, <%= Spree.t(:stock_locations) %> & <%= Spree.t(:inventory) %><br />
|
|
62
|
-
<em class="ml-
|
|
62
|
+
<em class="ml-5 text-gray-600 text-sm">you can select which ones will be available for this store</em>
|
|
63
63
|
</li>
|
|
64
64
|
<li>
|
|
65
65
|
<%= icon('check', class: 'text-green-700') %>
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
<li>
|
|
73
73
|
<%= icon('check', class: 'text-green-700') %>
|
|
74
74
|
<%= Spree.t(:payment_methods) %><br />
|
|
75
|
-
<em class="ml-
|
|
75
|
+
<em class="ml-5 text-gray-600 text-sm">you can select which ones will be available for this store</em>
|
|
76
76
|
</li>
|
|
77
77
|
<li>
|
|
78
78
|
<%= icon('check', class: 'text-green-700') %>
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
</li>
|
|
81
81
|
</ul>
|
|
82
82
|
|
|
83
|
-
<h5>What will not be shared with this new store:</h5>
|
|
83
|
+
<h5 class="mt-6 mb-2">What will not be shared with this new store:</h5>
|
|
84
84
|
<ul class="list-none p-0">
|
|
85
85
|
<li>
|
|
86
86
|
<%= icon('x', class: 'text-danger') %>
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
data-query-builder-operators-value="<%= operators_json %>"
|
|
24
24
|
class="grow flex flex-col justify-between">
|
|
25
25
|
|
|
26
|
-
<%= form_with url: url_for, method: :get, html: { class: 'grow flex flex-col justify-between' },data: { turbo_frame: '
|
|
26
|
+
<%= form_with url: url_for, method: :get, html: { class: 'grow flex flex-col justify-between' }, data: { turbo_frame: frame_name, turbo_action: 'advance', query_builder_target: 'form', action: 'submit->query-builder#submitForm' } do |f| %>
|
|
27
27
|
<div class="drawer-body">
|
|
28
28
|
<div class="mb-4 flex items-center gap-2 flex-wrap">
|
|
29
29
|
<span class="text-sm text-gray-600">
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<%= f.spree_check_box :track_inventory, data: { action: 'change->reveal#toggle' } %>
|
|
10
10
|
</div>
|
|
11
11
|
|
|
12
|
-
<table class="table <%= 'hidden!' unless f.object.track_inventory? %>" data-reveal-target="item">
|
|
12
|
+
<table class="table border-t <%= 'hidden!' unless f.object.track_inventory? %>" data-reveal-target="item">
|
|
13
13
|
<thead>
|
|
14
14
|
<tr>
|
|
15
15
|
<th scope="col"><%= Spree.t(:stock_location) %></th>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<div class="card mb-6" data-product-form-target="pricesForm">
|
|
2
|
-
<div class="card-header flex items-center justify-between">
|
|
2
|
+
<div class="card-header flex items-center justify-between border-b-0">
|
|
3
3
|
<h5 class="card-title">
|
|
4
4
|
<%= Spree.t(:pricing) %>
|
|
5
5
|
</h5>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<% end %>
|
|
10
10
|
</div>
|
|
11
11
|
<div class="card-body p-0">
|
|
12
|
-
<table class="table">
|
|
12
|
+
<table class="table border-t">
|
|
13
13
|
<thead>
|
|
14
14
|
<tr>
|
|
15
15
|
<th scope="col"><%= Spree.t(:currency) %></th>
|
data/config/locales/en.yml
CHANGED
|
@@ -27,7 +27,6 @@ en:
|
|
|
27
27
|
set_active: Setting products to active will make those products available on the storefront.
|
|
28
28
|
set_archived: Setting products to archived will hide them from storefront.
|
|
29
29
|
set_draft: Setting products to draft will hide them from storefront.
|
|
30
|
-
status_updated: Status updated
|
|
31
30
|
title:
|
|
32
31
|
add_tags: Add tags
|
|
33
32
|
add_to_brand: Add to brand
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: spree_admin
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.3.0
|
|
4
|
+
version: 5.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Vendo Connect Inc.
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - ">="
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 5.3.0
|
|
18
|
+
version: 5.3.0
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - ">="
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 5.3.0
|
|
25
|
+
version: 5.3.0
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: active_link_to
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -802,7 +802,6 @@ files:
|
|
|
802
802
|
- app/views/spree/admin/products/_search_result.html.erb
|
|
803
803
|
- app/views/spree/admin/products/_search_results.html.erb
|
|
804
804
|
- app/views/spree/admin/products/_table_filter_dropdown.html.erb
|
|
805
|
-
- app/views/spree/admin/products/bulk_status_update.turbo_stream.erb
|
|
806
805
|
- app/views/spree/admin/products/edit.html.erb
|
|
807
806
|
- app/views/spree/admin/products/form/_base.html.erb
|
|
808
807
|
- app/views/spree/admin/products/form/_categorization.html.erb
|
|
@@ -1256,9 +1255,9 @@ licenses:
|
|
|
1256
1255
|
- AGPL-3.0-or-later
|
|
1257
1256
|
metadata:
|
|
1258
1257
|
bug_tracker_uri: https://github.com/spree/spree/issues
|
|
1259
|
-
changelog_uri: https://github.com/spree/spree/releases/tag/v5.3.0
|
|
1258
|
+
changelog_uri: https://github.com/spree/spree/releases/tag/v5.3.0
|
|
1260
1259
|
documentation_uri: https://docs.spreecommerce.org/
|
|
1261
|
-
source_code_uri: https://github.com/spree/spree/tree/v5.3.0
|
|
1260
|
+
source_code_uri: https://github.com/spree/spree/tree/v5.3.0
|
|
1262
1261
|
rdoc_options: []
|
|
1263
1262
|
require_paths:
|
|
1264
1263
|
- lib
|