Class: Plutonium::Resource::Definition

Inherits:
Definition::Base show all
Defined in:
lib/plutonium/resource/definition.rb

Constant Summary collapse

VALID_MODAL_MODES =
[:centered, :slideover, false].freeze

Constants included from Definition::Views

Definition::Views::GRID_LAYOUTS, Definition::Views::GRID_SLOTS, Definition::Views::KNOWN_VIEWS

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Definition::Base

#collection_class, #detail_class, #edit_page_class, #form_class, #grid_class, #index_page_class, #initialize, #interactive_action_page_class, #new_page_class, #query_form, #show_page_class

Methods included from Definition::Metadata

#defined_metadata_fields

Methods included from Definition::Views

#default_view, #defined_grid_columns, #defined_grid_fields, #defined_grid_layout, #defined_views

Methods included from Definition::Search

#search_definition

Methods included from Definition::Scoping

#default_scope

Methods included from Definition::Sorting

#default_sort

Constructor Details

This class inherits a constructor from Plutonium::Definition::Base

Class Method Details

.configure_crud_modal_targets!Object

Re-derives the default :new / :edit actions so their turbo_frame matches the current ‘modal_mode`. Called when `.modal` is set and once at Resource::Definition load (so the default :slideover state propagates to the action records). Subclasses inherit those records via DefineableProps#inherited (deep_dup); calling `.modal` on a subclass re-runs this method locally.



26
27
28
29
30
31
32
33
34
# File 'lib/plutonium/resource/definition.rb', line 26

def self.configure_crud_modal_targets!
  target = (modal_mode == false) ? nil : Plutonium::REMOTE_MODAL_FRAME
  [:new, :edit].each do |name|
    action = defined_actions[name]
    next unless action
    next if action.turbo_frame == target
    defined_actions[name] = action.with(turbo_frame: target)
  end
end

Sets how :new / :edit actions render.

  • :slideover (default) — slide-in panel from the right

  • :centered — centered dialog

  • false — no modal; new/edit are full standalone pages



12
13
14
15
16
17
18
# File 'lib/plutonium/resource/definition.rb', line 12

def self.modal(mode)
  unless VALID_MODAL_MODES.include?(mode)
    raise ArgumentError, "modal must be one of #{VALID_MODAL_MODES.inspect}, got #{mode.inspect}"
  end
  self.modal_mode = mode
  configure_crud_modal_targets!
end

Instance Method Details



36
37
38
# File 'lib/plutonium/resource/definition.rb', line 36

def modal
  self.class.modal_mode
end