diff --git a/admin/app/components/solidus_admin/base_component.rb b/admin/app/components/solidus_admin/base_component.rb
index e41e65235cf..e3adf62c02f 100644
--- a/admin/app/components/solidus_admin/base_component.rb
+++ b/admin/app/components/solidus_admin/base_component.rb
@@ -38,12 +38,22 @@ def self.stimulus_id
delegate :stimulus_id, to: :class
- def spree
- @spree ||= Spree::Core::Engine.routes.url_helpers
+ class << self
+ private
+
+ def engines_with_routes
+ Rails::Engine.subclasses.map(&:instance).reject do |engine|
+ engine.routes.empty?
+ end
+ end
end
- def solidus_admin
- @solidus_admin ||= SolidusAdmin::Engine.routes.url_helpers
+ # For each engine with routes, define a method that returns the routes proxy.
+ # This allows us to use the routes in the context of a component class.
+ engines_with_routes.each do |engine|
+ define_method(engine.engine_name) do
+ engine.routes.url_helpers
+ end
end
end
end
diff --git a/admin/app/components/solidus_admin/layout/navigation/item/component.html.erb b/admin/app/components/solidus_admin/layout/navigation/item/component.html.erb
index d3270a08c07..575872b242b 100644
--- a/admin/app/components/solidus_admin/layout/navigation/item/component.html.erb
+++ b/admin/app/components/solidus_admin/layout/navigation/item/component.html.erb
@@ -1,7 +1,7 @@
">
"
+ aria-current="<%= @item.current?(self, @fullpath) ? "page" : "false" %>"
class="
flex gap-3 items-center
py-1 px-3 rounded
@@ -20,7 +20,7 @@
<% if @item.children? %>
">
- <%= render self.class.with_collection(@item.children, url_helpers: @url_helpers, fullpath: @fullpath) %>
+ <%= render self.class.with_collection(@item.children, fullpath: @fullpath) %>
<% end %>
diff --git a/admin/app/components/solidus_admin/layout/navigation/item/component.rb b/admin/app/components/solidus_admin/layout/navigation/item/component.rb
index 17ac8a62f74..f05c95a47bb 100644
--- a/admin/app/components/solidus_admin/layout/navigation/item/component.rb
+++ b/admin/app/components/solidus_admin/layout/navigation/item/component.rb
@@ -6,22 +6,19 @@ class SolidusAdmin::Layout::Navigation::Item::Component < SolidusAdmin::BaseComp
# @param item [SolidusAdmin::MenuItem]
# @param fullpath [String] the current path
- # @param url_helpers [#solidus_admin, #spree] context for generating paths
def initialize(
item:,
- fullpath: "#",
- url_helpers: Struct.new(:spree, :solidus_admin).new(spree, solidus_admin)
+ fullpath: "#"
)
@item = item
- @url_helpers = url_helpers
@fullpath = fullpath
end
def path
- @item.path(@url_helpers)
+ @item.path(self)
end
def active?
- @item.active?(@url_helpers, @fullpath)
+ @item.active?(self, @fullpath)
end
end
diff --git a/promotions/lib/components/admin/solidus_admin/orders/show/adjustments/index/source/solidus_promotions_benefit/component.rb b/promotions/lib/components/admin/solidus_admin/orders/show/adjustments/index/source/solidus_promotions_benefit/component.rb
index 3f24c7c478f..0ceee3408cf 100644
--- a/promotions/lib/components/admin/solidus_admin/orders/show/adjustments/index/source/solidus_promotions_benefit/component.rb
+++ b/promotions/lib/components/admin/solidus_admin/orders/show/adjustments/index/source/solidus_promotions_benefit/component.rb
@@ -10,8 +10,4 @@ def detail
def promotion_name
source.promotion.name
end
-
- def solidus_promotions
- @solidus_promotions ||= SolidusPromotions::Engine.routes.url_helpers
- end
end
diff --git a/promotions/lib/components/admin/solidus_promotions/promotions/index/component.rb b/promotions/lib/components/admin/solidus_promotions/promotions/index/component.rb
index 19cf4b79772..4d64c3164e9 100644
--- a/promotions/lib/components/admin/solidus_promotions/promotions/index/component.rb
+++ b/promotions/lib/components/admin/solidus_promotions/promotions/index/component.rb
@@ -101,8 +101,4 @@ def columns
}
]
end
-
- def solidus_promotions
- @solidus_promotions ||= SolidusPromotions::Engine.routes.url_helpers
- end
end