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? %> <% 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