Module: RubyCms::AdminTurboTable

Extended by:
ActiveSupport::Concern
Included in:
RubyCms::Admin::ContentBlocksController, RubyCms::Admin::PermissionsController, RubyCms::Admin::UsersController, RubyCms::Admin::VisitorErrorsController
Defined in:
app/controllers/concerns/ruby_cms/admin_turbo_table.rb

Instance Method Summary collapse

Instance Method Details

#turbo_frame_idString?

Get Turbo Frame ID from request

Returns:

  • (String, nil)


42
43
44
# File 'app/controllers/concerns/ruby_cms/admin_turbo_table.rb', line 42

def turbo_frame_id
  request.headers["Turbo-Frame"]
end

#turbo_frame_request?Boolean

Check if this is a Turbo Frame request

Returns:

  • (Boolean)


9
10
11
# File 'app/controllers/concerns/ruby_cms/admin_turbo_table.rb', line 9

def turbo_frame_request?
  request.headers["Turbo-Frame"].present?
end

#turbo_redirect_to(url) ⇒ Object

Redirect with Turbo Frame support If Turbo Frame request, renders Turbo Stream redirect Otherwise performs normal redirect

Parameters:

  • url (String)

    URL to redirect to

  • options (Hash)

    Redirect options (notice, alert, etc.)



30
31
32
33
34
35
36
37
38
# File 'app/controllers/concerns/ruby_cms/admin_turbo_table.rb', line 30

def turbo_redirect_to(url, **)
  if turbo_frame_request?
    # For Turbo Frame requests, we can't redirect directly
    # Instead, we should render a Turbo Stream that updates the frame
    # or redirect the parent window
  else
    redirect_to(url, **)
  end
end

#turbo_render_index(turbo_frame_id: "admin_table_content") ⇒ Object

Render index action with Turbo Frame support If Turbo Frame request, renders only the table content Otherwise renders full page

Parameters:

  • turbo_frame_id (String) (defaults to: "admin_table_content")

    Turbo Frame ID (default: “admin_table_content”)



17
18
19
20
21
22
23
# File 'app/controllers/concerns/ruby_cms/admin_turbo_table.rb', line 17

def turbo_render_index(turbo_frame_id: "admin_table_content")
  if turbo_frame_request?
    render partial: turbo_frame_id, layout: false
  else
    render :index
  end
end

#turbo_stream_replace_table(turbo_frame_id: "admin_table_content", partial: nil) ⇒ Object

Render Turbo Stream replace for table

Parameters:

  • turbo_frame_id (String) (defaults to: "admin_table_content")

    Turbo Frame ID

  • partial (String) (defaults to: nil)

    Partial to render (default: turbo_frame_id)



63
64
65
66
# File 'app/controllers/concerns/ruby_cms/admin_turbo_table.rb', line 63

def turbo_stream_replace_table(turbo_frame_id: "admin_table_content", partial: nil)
  partial ||= turbo_frame_id
  render turbo_stream: turbo_stream.replace(turbo_frame_id, partial:)
end

#turbo_stream_request?Boolean

Check if request expects Turbo Stream response

Returns:

  • (Boolean)


48
49
50
# File 'app/controllers/concerns/ruby_cms/admin_turbo_table.rb', line 48

def turbo_stream_request?
  request.headers["Accept"]&.include?("text/vnd.turbo-stream.html")
end

#turbo_stream_update_table(turbo_frame_id: "admin_table_content", partial: nil) ⇒ Object

Render Turbo Stream update for table

Parameters:

  • turbo_frame_id (String) (defaults to: "admin_table_content")

    Turbo Frame ID

  • partial (String) (defaults to: nil)

    Partial to render (default: turbo_frame_id)



55
56
57
58
# File 'app/controllers/concerns/ruby_cms/admin_turbo_table.rb', line 55

def turbo_stream_update_table(turbo_frame_id: "admin_table_content", partial: nil)
  partial ||= turbo_frame_id
  render turbo_stream: turbo_stream.update(turbo_frame_id, partial:)
end