Skip to content

Commit

Permalink
Attempt 2
Browse files Browse the repository at this point in the history
  • Loading branch information
jho406 committed Feb 5, 2025
1 parent de8f98c commit 103bfd6
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 21 deletions.
58 changes: 38 additions & 20 deletions lib/superglue/rendering.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,37 @@ def superglue_template(template)
end
end

def render_to_body(options = {})
if @_capture_options_before_render && !options[:partial]
@_capture_options_before_render = false

@_render_options = options
_ensure_react_page!(options[:template], options[:prefixes])

html_template_exist = template_exists?(options[:template], options[:prefixes], false)
if !html_template_exist
# test for file
# skip partial and partial
super(options.merge(
template: _superglue_template,
prefixes: []
))
else
super
end
else
super
end
end

def render(...)
if _jsx_defaults
@_capture_options_before_render = true
end

super
end

def use_jsx_rendering_defaults
@_use_jsx_rendering_defaults = true
end
Expand All @@ -29,8 +60,8 @@ def _ensure_react_page!(template, prefixes)
end

def default_render
# double check this if the short circut is ok
if _jsx_defaults
_ensure_react_page!(action_name.to_s, _prefixes)
render
else
super
Expand All @@ -39,28 +70,15 @@ def default_render

def render_props
if @_render_options
if template_exists?(@_render_options[:template].to_s, @_render_options[:prefixes], formats: [:json])
render_to_string(@_render_options.merge({formats: [:json], layout: true})).strip.html_safe
else
render_to_string(@_render_options.merge({inline: "", formats: [:json], layout: true})).strip.html_safe
end
end
end
options = @_render_options

def render(...)
if _jsx_defaults
@_render_options = _normalize_render(...)
_ensure_react_page!(@_render_options[:template].to_s, @_render_options[:prefixes])

html_template_exist = template_exists?(@_render_options[:template].to_s, @_render_options[:prefixes], false)

if html_template_exist
super
if template_exists?(options[:template], options[:prefixes], formats: [:json])
# what happened to layout?
render_to_body(options.merge({formats: [:json]})).strip.html_safe
else
super(@_render_options.merge({template: _superglue_template, prefixes: []}))
options.delete(:template)
render_to_body(options.merge({inline: "", formats: [:json]})).strip.html_safe
end
else
super
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion test/render_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ class RenderTest < ActionController::TestCase
end

test "rendering props only" do
get :single_props_only, format: :json
get :simple, format: :json

assert_response 200
rendered = <<~HTML
Expand Down

0 comments on commit 103bfd6

Please sign in to comment.