solidus_admin 0.3.0 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/builds/solidus_admin/tailwind.css +153 -133
- data/app/components/solidus_admin/base_component.rb +19 -5
- data/app/components/solidus_admin/layout/navigation/account/component.rb +2 -2
- data/app/components/solidus_admin/layout/navigation/component.rb +1 -1
- data/app/components/solidus_admin/layout/navigation/item/component.html.erb +2 -2
- data/app/components/solidus_admin/layout/navigation/item/component.rb +3 -6
- data/app/components/solidus_admin/orders/index/component.rb +1 -1
- data/app/components/solidus_admin/orders/show/adjustments/index/adjustable/component.rb +1 -1
- data/app/components/solidus_admin/orders/show/adjustments/index/source/component.rb +1 -1
- data/app/components/solidus_admin/products/status/component.rb +1 -1
- data/app/components/solidus_admin/stock_items/index/component.rb +1 -1
- data/app/components/solidus_admin/stock_locations/index/component.rb +2 -2
- data/app/components/solidus_admin/ui/forms/field/component.rb +17 -17
- data/app/components/solidus_admin/ui/icon/component.rb +3 -1
- data/app/components/solidus_admin/ui/pages/index/component.rb +5 -5
- data/app/components/solidus_admin/ui/table/component.rb +1 -1
- data/app/components/solidus_admin/ui/thumbnail_with_caption/component.rb +1 -1
- data/app/components/solidus_admin/ui/toast/component.html.erb +1 -1
- data/app/components/solidus_admin/users/index/component.rb +1 -1
- data/app/components/solidus_admin/users/store_credits/index/component.html.erb +49 -0
- data/app/components/solidus_admin/users/store_credits/index/component.rb +106 -0
- data/app/components/solidus_admin/users/store_credits/index/component.yml +12 -0
- data/app/controllers/solidus_admin/controller_helpers/search.rb +4 -4
- data/app/controllers/solidus_admin/users_controller.rb +9 -1
- data/config/routes.rb +1 -0
- data/lib/generators/solidus_admin/install/install_generator.rb +2 -0
- data/lib/solidus_admin/component_registry.rb +1 -1
- data/lib/solidus_admin/configuration.rb +3 -3
- data/lib/solidus_admin/install_tailwindcss.rb +1 -1
- data/lib/solidus_admin/testing_support/dummy_app/rake_tasks.rb +1 -1
- data/lib/solidus_admin/testing_support/feature_helpers.rb +1 -1
- data/lib/solidus_admin/version.rb +1 -1
- data/solidus_admin.gemspec +2 -2
- metadata +7 -5
- data/bin/rails +0 -13
@@ -10,7 +10,7 @@ module SolidusAdmin
|
|
10
10
|
include Turbo::FramesHelper
|
11
11
|
|
12
12
|
def icon_tag(name, **attrs)
|
13
|
-
render component("ui/icon").new(name
|
13
|
+
render component("ui/icon").new(name:, **attrs)
|
14
14
|
end
|
15
15
|
|
16
16
|
def missing_translation(key, options)
|
@@ -25,6 +25,10 @@ module SolidusAdmin
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
def self.i18n_scope
|
29
|
+
@i18n_scope ||= name.underscore.tr("/", ".")
|
30
|
+
end
|
31
|
+
|
28
32
|
def self.stimulus_id
|
29
33
|
@stimulus_id ||= name.underscore
|
30
34
|
.sub(/^solidus_admin\/(.*)\/component$/, '\1')
|
@@ -34,12 +38,22 @@ module SolidusAdmin
|
|
34
38
|
|
35
39
|
delegate :stimulus_id, to: :class
|
36
40
|
|
37
|
-
|
38
|
-
|
41
|
+
class << self
|
42
|
+
private
|
43
|
+
|
44
|
+
def engines_with_routes
|
45
|
+
Rails::Engine.subclasses.map(&:instance).reject do |engine|
|
46
|
+
engine.routes.empty?
|
47
|
+
end
|
48
|
+
end
|
39
49
|
end
|
40
50
|
|
41
|
-
|
42
|
-
|
51
|
+
# For each engine with routes, define a method that returns the routes proxy.
|
52
|
+
# This allows us to use the routes in the context of a component class.
|
53
|
+
engines_with_routes.each do |engine|
|
54
|
+
define_method(engine.engine_name) do
|
55
|
+
engine.routes.url_helpers
|
56
|
+
end
|
43
57
|
end
|
44
58
|
end
|
45
59
|
end
|
@@ -11,7 +11,7 @@ class SolidusAdmin::Layout::Navigation::Account::Component < SolidusAdmin::BaseC
|
|
11
11
|
def locale_options_for_select(available_locales)
|
12
12
|
available_locales.map do |locale|
|
13
13
|
[
|
14
|
-
t("spree.i18n.this_file_language", locale
|
14
|
+
t("spree.i18n.this_file_language", locale:, default: locale.to_s, fallback: false),
|
15
15
|
locale,
|
16
16
|
]
|
17
17
|
end.sort
|
@@ -27,7 +27,7 @@ class SolidusAdmin::Layout::Navigation::Account::Component < SolidusAdmin::BaseC
|
|
27
27
|
block_given? ? capture(&block) : nil,
|
28
28
|
tag.label(safe_join([
|
29
29
|
icon_tag(icon, class: "w-full max-w-[20px] h-5 fill-current shrink"),
|
30
|
-
tag.select(options, name
|
30
|
+
tag.select(options, name:, onchange: "this.form.requestSubmit()", class: "w-full appearance-none grow bg-transparent outline-none"),
|
31
31
|
icon_tag("expand-up-down-line", class: "w-full max-w-[20px] h-5 fill-current shrink"),
|
32
32
|
]), class: "flex gap-2 items-center px-2"),
|
33
33
|
])
|
@@ -9,7 +9,7 @@ class SolidusAdmin::Layout::Navigation::Component < SolidusAdmin::BaseComponent
|
|
9
9
|
@logo_path = logo_path
|
10
10
|
@items = items.map do |attrs|
|
11
11
|
children = attrs[:children].to_a.map { SolidusAdmin::MenuItem.new(**_1, top_level: false) }
|
12
|
-
SolidusAdmin::MenuItem.new(**attrs, children
|
12
|
+
SolidusAdmin::MenuItem.new(**attrs, children:, top_level: true)
|
13
13
|
end
|
14
14
|
@store = store
|
15
15
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<li class="group <%= "active" if active? %>">
|
2
2
|
<a
|
3
3
|
href="<%= path %>"
|
4
|
-
aria-current="<%= @item.current?(
|
4
|
+
aria-current="<%= @item.current?(self, @fullpath) ? "page" : "false" %>"
|
5
5
|
class="
|
6
6
|
flex gap-3 items-center
|
7
7
|
py-1 px-3 rounded
|
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
<% if @item.children? %>
|
22
22
|
<ul class="flex flex-col gap-0.5 pt-0.5 <%= "hidden" unless active? %>">
|
23
|
-
<%= render self.class.with_collection(@item.children,
|
23
|
+
<%= render self.class.with_collection(@item.children, fullpath: @fullpath) %>
|
24
24
|
</ul>
|
25
25
|
<% end %>
|
26
26
|
</li>
|
@@ -6,22 +6,19 @@ class SolidusAdmin::Layout::Navigation::Item::Component < SolidusAdmin::BaseComp
|
|
6
6
|
|
7
7
|
# @param item [SolidusAdmin::MenuItem]
|
8
8
|
# @param fullpath [String] the current path
|
9
|
-
# @param url_helpers [#solidus_admin, #spree] context for generating paths
|
10
9
|
def initialize(
|
11
10
|
item:,
|
12
|
-
fullpath: "#"
|
13
|
-
url_helpers: Struct.new(:spree, :solidus_admin).new(spree, solidus_admin)
|
11
|
+
fullpath: "#"
|
14
12
|
)
|
15
13
|
@item = item
|
16
|
-
@url_helpers = url_helpers
|
17
14
|
@fullpath = fullpath
|
18
15
|
end
|
19
16
|
|
20
17
|
def path
|
21
|
-
@item.path(
|
18
|
+
@item.path(self)
|
22
19
|
end
|
23
20
|
|
24
21
|
def active?
|
25
|
-
@item.active?(
|
22
|
+
@item.active?(self, @fullpath)
|
26
23
|
end
|
27
24
|
end
|
@@ -124,7 +124,7 @@ class SolidusAdmin::Orders::Index::Component < SolidusAdmin::UI::Pages::Index::C
|
|
124
124
|
'canceled' => :blue,
|
125
125
|
'cart' => :graphite_light,
|
126
126
|
}[order.state] || :yellow
|
127
|
-
component('ui/badge').new(name: order.state.humanize, color:
|
127
|
+
component('ui/badge').new(name: order.state.humanize, color:)
|
128
128
|
end
|
129
129
|
}
|
130
130
|
end
|
@@ -10,7 +10,7 @@ class SolidusAdmin::Orders::Show::Adjustments::Index::Adjustable::Component < So
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def call
|
13
|
-
render component("ui/thumbnail_with_caption").new(caption
|
13
|
+
render component("ui/thumbnail_with_caption").new(caption:, detail:) do
|
14
14
|
thumbnail
|
15
15
|
end
|
16
16
|
end
|
@@ -10,7 +10,7 @@ class SolidusAdmin::Orders::Show::Adjustments::Index::Source::Component < Solidu
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def call
|
13
|
-
render component("ui/thumbnail_with_caption").new(icon
|
13
|
+
render component("ui/thumbnail_with_caption").new(icon:, caption:, detail:)
|
14
14
|
end
|
15
15
|
|
16
16
|
def caption
|
@@ -138,7 +138,7 @@ class SolidusAdmin::StockItems::Index::Component < SolidusAdmin::UI::Pages::Inde
|
|
138
138
|
count = stock_movement_counts[_1.id] || 0
|
139
139
|
|
140
140
|
link_to(
|
141
|
-
"#{count} #{Spree::StockMovement.model_name.human(count:
|
141
|
+
"#{count} #{Spree::StockMovement.model_name.human(count:).downcase}",
|
142
142
|
spree.admin_stock_location_stock_movements_path(
|
143
143
|
_1.stock_location.id,
|
144
144
|
q: { variant_sku_eq: _1.variant.sku },
|
@@ -57,7 +57,7 @@ class SolidusAdmin::StockLocations::Index::Component < SolidusAdmin::Shipping::C
|
|
57
57
|
color = _1.active? ? :green : :graphite_light
|
58
58
|
text = _1.active? ? t('.active') : t('.inactive')
|
59
59
|
|
60
|
-
component('ui/badge').new(name: text, color:
|
60
|
+
component('ui/badge').new(name: text, color:)
|
61
61
|
},
|
62
62
|
},
|
63
63
|
{
|
@@ -78,7 +78,7 @@ class SolidusAdmin::StockLocations::Index::Component < SolidusAdmin::Shipping::C
|
|
78
78
|
count = _1.stock_movements.count
|
79
79
|
|
80
80
|
link_to(
|
81
|
-
"#{count} #{Spree::StockMovement.model_name.human(count:
|
81
|
+
"#{count} #{Spree::StockMovement.model_name.human(count:).downcase}",
|
82
82
|
spree.admin_stock_location_stock_movements_path(_1),
|
83
83
|
class: 'body-link'
|
84
84
|
)
|
@@ -18,14 +18,14 @@ class SolidusAdmin::UI::Forms::Field::Component < SolidusAdmin::BaseComponent
|
|
18
18
|
object_name, object, label, errors = extract_form_details(form, object, method)
|
19
19
|
|
20
20
|
new(
|
21
|
-
label
|
22
|
-
hint
|
23
|
-
tip
|
21
|
+
label:,
|
22
|
+
hint:,
|
23
|
+
tip:,
|
24
24
|
error: errors,
|
25
25
|
input_attributes: {
|
26
26
|
name: "#{object_name}[#{method}]",
|
27
27
|
tag: :input,
|
28
|
-
size
|
28
|
+
size:,
|
29
29
|
value: object.public_send(method),
|
30
30
|
error: (errors.to_sentence.capitalize if errors),
|
31
31
|
**attributes,
|
@@ -37,15 +37,15 @@ class SolidusAdmin::UI::Forms::Field::Component < SolidusAdmin::BaseComponent
|
|
37
37
|
object_name, object, label, errors = extract_form_details(form, object, method)
|
38
38
|
|
39
39
|
new(
|
40
|
-
label
|
41
|
-
hint
|
42
|
-
tip
|
40
|
+
label:,
|
41
|
+
hint:,
|
42
|
+
tip:,
|
43
43
|
error: errors,
|
44
44
|
input_attributes: {
|
45
45
|
name: "#{object_name}[#{method}]",
|
46
46
|
tag: :select,
|
47
|
-
choices
|
48
|
-
size
|
47
|
+
choices:,
|
48
|
+
size:,
|
49
49
|
value: object.public_send(method),
|
50
50
|
error: (errors.to_sentence.capitalize if errors),
|
51
51
|
**attributes,
|
@@ -57,13 +57,13 @@ class SolidusAdmin::UI::Forms::Field::Component < SolidusAdmin::BaseComponent
|
|
57
57
|
object_name, object, label, errors = extract_form_details(form, object, method)
|
58
58
|
|
59
59
|
new(
|
60
|
-
label
|
61
|
-
hint
|
62
|
-
tip
|
60
|
+
label:,
|
61
|
+
hint:,
|
62
|
+
tip:,
|
63
63
|
error: errors,
|
64
64
|
input_attributes: {
|
65
65
|
name: "#{object_name}[#{method}]",
|
66
|
-
size
|
66
|
+
size:,
|
67
67
|
tag: :textarea,
|
68
68
|
value: object.public_send(method),
|
69
69
|
error: (errors.to_sentence.capitalize if errors),
|
@@ -76,14 +76,14 @@ class SolidusAdmin::UI::Forms::Field::Component < SolidusAdmin::BaseComponent
|
|
76
76
|
object_name, object, label, errors = extract_form_details(form, object, method)
|
77
77
|
|
78
78
|
new(
|
79
|
-
label
|
80
|
-
hint
|
81
|
-
tip
|
79
|
+
label:,
|
80
|
+
hint:,
|
81
|
+
tip:,
|
82
82
|
error: errors,
|
83
83
|
).with_content(
|
84
84
|
component('ui/forms/switch').new(
|
85
85
|
name: "#{object_name}[#{method}]",
|
86
|
-
size
|
86
|
+
size:,
|
87
87
|
checked: object.public_send(method),
|
88
88
|
include_hidden: true,
|
89
89
|
**attributes,
|
@@ -23,7 +23,9 @@ class SolidusAdmin::UI::Icon::Component < SolidusAdmin::BaseComponent
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def call
|
26
|
-
|
26
|
+
# bypass the asset_host configuration to avoid CORS issues with CDNs:
|
27
|
+
# https://github.com/solidusio/solidus/issues/5657
|
28
|
+
href = asset_path("solidus_admin/remixicon.symbol.svg#ri-#{@name}", host: "")
|
27
29
|
tag.svg(tag.use("xlink:href": href), **@attrs)
|
28
30
|
end
|
29
31
|
end
|
@@ -61,8 +61,8 @@ class SolidusAdmin::UI::Pages::Index::Component < SolidusAdmin::BaseComponent
|
|
61
61
|
value: search_params,
|
62
62
|
url: search_url,
|
63
63
|
searchbar_key: search_key,
|
64
|
-
filters
|
65
|
-
scopes
|
64
|
+
filters:,
|
65
|
+
scopes:,
|
66
66
|
}
|
67
67
|
end
|
68
68
|
|
@@ -80,12 +80,12 @@ class SolidusAdmin::UI::Pages::Index::Component < SolidusAdmin::BaseComponent
|
|
80
80
|
id: stimulus_id,
|
81
81
|
data: {
|
82
82
|
class: model_class,
|
83
|
-
rows
|
83
|
+
rows:,
|
84
84
|
fade: -> { row_fade(_1) },
|
85
85
|
prev: prev_page_path,
|
86
86
|
next: next_page_path,
|
87
|
-
columns
|
88
|
-
batch_actions
|
87
|
+
columns:,
|
88
|
+
batch_actions:,
|
89
89
|
url: -> { row_url(_1) },
|
90
90
|
},
|
91
91
|
search: search_options,
|
@@ -8,7 +8,7 @@
|
|
8
8
|
"
|
9
9
|
data-controller="<%= stimulus_id %>"
|
10
10
|
data-<%= stimulus_id %>-animation-class="translate-y-full opacity-0"
|
11
|
-
data-<%= stimulus_id %>-transition-value="500"
|
11
|
+
data-<%= stimulus_id %>-transition-value="<%= Rails.env.test? ? 1000 : 500 %>"
|
12
12
|
role="dialog"
|
13
13
|
aria-label="<%= t(".#{@scheme}_label") %>"
|
14
14
|
aria-live="polite"
|
@@ -77,7 +77,7 @@ class SolidusAdmin::Users::Index::Component < SolidusAdmin::UsersAndRoles::Compo
|
|
77
77
|
when 'customer' then :green
|
78
78
|
else :graphite_light
|
79
79
|
end
|
80
|
-
render component('ui/badge').new(name: _1.name, color:
|
80
|
+
render component('ui/badge').new(name: _1.name, color:)
|
81
81
|
})
|
82
82
|
end,
|
83
83
|
},
|
@@ -0,0 +1,49 @@
|
|
1
|
+
<%= page do %>
|
2
|
+
<%= page_header do %>
|
3
|
+
<%= page_header_back(solidus_admin.users_path) %>
|
4
|
+
<%= page_header_title(t(".title", email: @user.email)) %>
|
5
|
+
|
6
|
+
<%= page_header_actions do %>
|
7
|
+
<%= render component("ui/button").new(tag: :a, text: t(".add_store_credit"), href: spree.new_admin_user_store_credit_url(user_id: @user.id, only_path: true)) %>
|
8
|
+
<% end %>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<%= page_header do %>
|
12
|
+
<% tabs.each do |tab| %>
|
13
|
+
<%= render(component("ui/button").new(tag: :a, scheme: :ghost, text: tab[:text], 'aria-current': tab[:current], href: tab[:href])) %>
|
14
|
+
<% end %>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<%= page_with_sidebar do %>
|
18
|
+
<%= page_with_sidebar_main do %>
|
19
|
+
|
20
|
+
<% if @store_credits.present? %>
|
21
|
+
<% @store_credits.group_by(&:currency).each do |currency, credits| %>
|
22
|
+
<% title = [t('spree.admin.store_credits.current_balance'), Spree::Money.new(credits.sum(&:amount_remaining), currency: currency)].join(" ") %>
|
23
|
+
|
24
|
+
<%= render component('ui/panel').new(title: title) do %>
|
25
|
+
<%= render component('ui/table').new(
|
26
|
+
id: stimulus_id,
|
27
|
+
data: {
|
28
|
+
class: model_class,
|
29
|
+
rows: credits,
|
30
|
+
fade: -> (_order) { false },
|
31
|
+
columns: columns,
|
32
|
+
url: -> { row_url(_1) },
|
33
|
+
},
|
34
|
+
)%>
|
35
|
+
<% end %>
|
36
|
+
<% end %>
|
37
|
+
<% else %>
|
38
|
+
<%= render component('ui/panel').new(title: t(".store_credit")) do %>
|
39
|
+
<%= t(".no_credits_found") %>
|
40
|
+
<%= render component("ui/button").new(tag: :a, text: t(".create_one"), href: spree.new_admin_user_store_credit_url(user_id: @user.id, only_path: true)) %>
|
41
|
+
<% end %>
|
42
|
+
<% end %>
|
43
|
+
<% end %>
|
44
|
+
|
45
|
+
<%= page_with_sidebar_aside do %>
|
46
|
+
<%= render component("users/stats").new(user: @user) %>
|
47
|
+
<% end %>
|
48
|
+
<% end %>
|
49
|
+
<% end %>
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class SolidusAdmin::Users::StoreCredits::Index::Component < SolidusAdmin::BaseComponent
|
4
|
+
include SolidusAdmin::Layout::PageHelpers
|
5
|
+
|
6
|
+
def initialize(user:, store_credits:)
|
7
|
+
@user = user
|
8
|
+
@store_credits = store_credits
|
9
|
+
end
|
10
|
+
|
11
|
+
def model_class
|
12
|
+
Spree::StoreCredit
|
13
|
+
end
|
14
|
+
|
15
|
+
def tabs
|
16
|
+
[
|
17
|
+
{
|
18
|
+
text: t('.account'),
|
19
|
+
href: solidus_admin.user_path(@user),
|
20
|
+
current: false,
|
21
|
+
},
|
22
|
+
{
|
23
|
+
text: t('.addresses'),
|
24
|
+
href: solidus_admin.addresses_user_path(@user),
|
25
|
+
current: false,
|
26
|
+
},
|
27
|
+
{
|
28
|
+
text: t('.order_history'),
|
29
|
+
href: solidus_admin.orders_user_path(@user),
|
30
|
+
current: false,
|
31
|
+
},
|
32
|
+
{
|
33
|
+
text: t('.items'),
|
34
|
+
href: spree.items_admin_user_path(@user),
|
35
|
+
current: false,
|
36
|
+
},
|
37
|
+
{
|
38
|
+
text: t('.store_credit'),
|
39
|
+
href: solidus_admin.store_credits_user_path(@user),
|
40
|
+
current: true,
|
41
|
+
},
|
42
|
+
]
|
43
|
+
end
|
44
|
+
|
45
|
+
def rows
|
46
|
+
@store_credits
|
47
|
+
end
|
48
|
+
|
49
|
+
def row_url(store_credit)
|
50
|
+
spree.admin_user_store_credit_path(@user, store_credit)
|
51
|
+
end
|
52
|
+
|
53
|
+
def columns
|
54
|
+
[
|
55
|
+
{
|
56
|
+
header: :credited,
|
57
|
+
col: { class: "w-[12%]" },
|
58
|
+
data: ->(store_credit) do
|
59
|
+
content_tag :div, store_credit.display_amount.to_html, class: "text-sm"
|
60
|
+
end
|
61
|
+
},
|
62
|
+
{
|
63
|
+
header: :authorized,
|
64
|
+
col: { class: "w-[13%]" },
|
65
|
+
data: ->(store_credit) do
|
66
|
+
content_tag :div, store_credit.display_amount_authorized.to_html, class: "text-sm"
|
67
|
+
end
|
68
|
+
},
|
69
|
+
{
|
70
|
+
header: :used,
|
71
|
+
col: { class: "w-[9%]" },
|
72
|
+
data: ->(store_credit) do
|
73
|
+
content_tag :div, store_credit.display_amount_used.to_html, class: "text-sm"
|
74
|
+
end
|
75
|
+
},
|
76
|
+
{
|
77
|
+
header: :type,
|
78
|
+
col: { class: "w-[13%]" },
|
79
|
+
data: ->(store_credit) do
|
80
|
+
component('ui/badge').new(name: store_credit.credit_type.name, color: :blue)
|
81
|
+
end
|
82
|
+
},
|
83
|
+
{
|
84
|
+
header: :created_by,
|
85
|
+
col: { class: "w-[22%]" },
|
86
|
+
data: ->(store_credit) do
|
87
|
+
content_tag :div, store_credit.created_by_email, class: "font-semibold text-sm"
|
88
|
+
end
|
89
|
+
},
|
90
|
+
{
|
91
|
+
header: :issued_on,
|
92
|
+
col: { class: "w-[16%]" },
|
93
|
+
data: ->(store_credit) do
|
94
|
+
I18n.l(store_credit.created_at.to_date)
|
95
|
+
end
|
96
|
+
},
|
97
|
+
{
|
98
|
+
header: :invalidated,
|
99
|
+
col: { class: "w-[15%]" },
|
100
|
+
data: ->(store_credit) do
|
101
|
+
store_credit.invalidated? ? component('ui/badge').yes : component('ui/badge').no
|
102
|
+
end
|
103
|
+
},
|
104
|
+
]
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
en:
|
2
|
+
title: "Users / %{email} / Store Credit"
|
3
|
+
account: Account
|
4
|
+
addresses: Addresses
|
5
|
+
order_history: Order History
|
6
|
+
items: Items
|
7
|
+
store_credit: Store Credit
|
8
|
+
last_active: Last Active
|
9
|
+
add_store_credit: Add Store Credit
|
10
|
+
no_credits_found: No Store Credits found.
|
11
|
+
create_one: Create One
|
12
|
+
back: Back
|
@@ -7,8 +7,8 @@ module SolidusAdmin::ControllerHelpers::Search
|
|
7
7
|
def search_scope(name, default: false, &block)
|
8
8
|
search_scopes << SearchScope.new(
|
9
9
|
name: name.to_s,
|
10
|
-
block
|
11
|
-
default
|
10
|
+
block:,
|
11
|
+
default:,
|
12
12
|
)
|
13
13
|
end
|
14
14
|
|
@@ -20,8 +20,8 @@ module SolidusAdmin::ControllerHelpers::Search
|
|
20
20
|
private
|
21
21
|
|
22
22
|
def apply_search_to(relation, param:)
|
23
|
-
relation = apply_scopes_to(relation, param:
|
24
|
-
apply_ransack_search_to(relation, param:
|
23
|
+
relation = apply_scopes_to(relation, param:)
|
24
|
+
apply_ransack_search_to(relation, param:)
|
25
25
|
end
|
26
26
|
|
27
27
|
def apply_ransack_search_to(relation, param:)
|
@@ -5,7 +5,7 @@ module SolidusAdmin
|
|
5
5
|
include SolidusAdmin::ControllerHelpers::Search
|
6
6
|
include Spree::Core::ControllerHelpers::StrongParameters
|
7
7
|
|
8
|
-
before_action :set_user, only: [:edit, :addresses, :update_addresses, :orders, :items]
|
8
|
+
before_action :set_user, only: [:edit, :addresses, :update_addresses, :orders, :items, :store_credits]
|
9
9
|
|
10
10
|
search_scope(:all, default: true)
|
11
11
|
search_scope(:customers) { _1.left_outer_joins(:role_users).where(role_users: { id: nil }) }
|
@@ -81,6 +81,14 @@ module SolidusAdmin
|
|
81
81
|
redirect_back_or_to users_path, status: :see_other
|
82
82
|
end
|
83
83
|
|
84
|
+
def store_credits
|
85
|
+
@store_credits = Spree::StoreCredit.where(user_id: @user.id).order(id: :desc)
|
86
|
+
|
87
|
+
respond_to do |format|
|
88
|
+
format.html { render component("users/store_credits/index").new(user: @user, store_credits: @store_credits) }
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
84
92
|
private
|
85
93
|
|
86
94
|
def set_user
|
data/config/routes.rb
CHANGED
@@ -28,7 +28,7 @@ module SolidusAdmin
|
|
28
28
|
prefix = "#{SolidusAdmin::Configuration::ENGINE_ROOT}/app/components/solidus_admin/"
|
29
29
|
suffix = "/component.rb"
|
30
30
|
dictionary = Dir["#{prefix}**#{suffix}"].map { _1.delete_prefix(prefix).delete_suffix(suffix) }
|
31
|
-
corrections = DidYouMean::SpellChecker.new(dictionary:
|
31
|
+
corrections = DidYouMean::SpellChecker.new(dictionary:).correct(key.to_s)
|
32
32
|
|
33
33
|
raise ComponentNotFoundError.new(
|
34
34
|
"Unknown component #{key}#{DidYouMean.formatter.message_for(corrections)}",
|
@@ -169,10 +169,10 @@ module SolidusAdmin
|
|
169
169
|
{
|
170
170
|
position: index,
|
171
171
|
key: item.label,
|
172
|
-
icon
|
173
|
-
route
|
172
|
+
icon:,
|
173
|
+
route:,
|
174
174
|
children: item.children.map.with_index(&menu_item_to_hash),
|
175
|
-
match_path
|
175
|
+
match_path:,
|
176
176
|
}
|
177
177
|
end
|
178
178
|
|
@@ -39,7 +39,7 @@ create_file "lib/tasks/solidus_admin/tailwind.rake", <<~RUBY
|
|
39
39
|
namespace :solidus_admin do
|
40
40
|
namespace :tailwindcss do
|
41
41
|
root = Rails.root
|
42
|
-
tailwindcss = Tailwindcss::
|
42
|
+
tailwindcss = Tailwindcss::Ruby.executable
|
43
43
|
|
44
44
|
tailwindcss_command = [
|
45
45
|
tailwindcss,
|
@@ -33,7 +33,7 @@ namespace :solidus_admin do
|
|
33
33
|
DummyApp::Application.root.join("app/assets/stylesheets/solidus_admin/application.tailwind.css")
|
34
34
|
)
|
35
35
|
|
36
|
-
tailwindcss = Tailwindcss::
|
36
|
+
tailwindcss = Tailwindcss::Ruby.executable
|
37
37
|
|
38
38
|
tailwindcss_command = [
|
39
39
|
tailwindcss,
|
data/solidus_admin.gemspec
CHANGED
@@ -22,10 +22,10 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.metadata["changelog_uri"] = "https://github.com/solidusio/solidus/releases?q=%22solidus_admin%2Fv0%22&expanded=true"
|
23
23
|
|
24
24
|
s.files = `git ls-files -z`.split("\x0").reject do |f|
|
25
|
-
f.match(%r{^(spec|
|
25
|
+
f.match(%r{^(spec|bin)/})
|
26
26
|
end + ["app/assets/builds/solidus_admin/tailwind.css"]
|
27
27
|
|
28
|
-
s.required_ruby_version = '>= 3.
|
28
|
+
s.required_ruby_version = '>= 3.1.0'
|
29
29
|
s.required_rubygems_version = '>= 1.8.23'
|
30
30
|
|
31
31
|
s.add_dependency 'geared_pagination', '~> 1.1'
|