From 57986c7040ed3def26dd402b18f33757fc73a8a6 Mon Sep 17 00:00:00 2001
From: Alexey Zapparov <alexey@zapparov.com>
Date: Wed, 10 Jan 2024 01:51:57 +0100
Subject: [PATCH] feat: Access params ActionMailer::Preview style

---
 lib/view_component/preview.rb | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/lib/view_component/preview.rb b/lib/view_component/preview.rb
index 783faff993..a5aacc2b59 100644
--- a/lib/view_component/preview.rb
+++ b/lib/view_component/preview.rb
@@ -13,6 +13,12 @@ class Preview
     include ActionView::Helpers::AssetTagHelper
     extend ActiveSupport::DescendantsTracker
 
+    attr_reader :params
+
+    def initialize(params = {})
+      @params = params
+    end
+
     def render(component, **args, &block)
       {
         args: args,
@@ -44,8 +50,7 @@ def all
       def render_args(example, params: {})
         example_params_names = instance_method(example).parameters.map(&:last)
         provided_params = params.slice(*example_params_names).to_h.symbolize_keys
-        result = provided_params.empty? ? new.public_send(example) : new.public_send(example, **provided_params)
-        result ||= {}
+        result = new(params).public_send(example, **provided_params) || {}
         result[:template] = preview_example_template_path(example) if result[:template].nil?
         @layout = nil unless defined?(@layout)
         result.merge(layout: @layout)