module Scrivito class PageConfig < Struct.new(:obj, :editing_context, :lookup_context) def initialize(**named_params) named_params.each { |key, value| self[key] = value } end def to_json { current_page: current_page_config, user_id: user_id_config, preloaded_obj_data: preloaded_obj_data }.to_json end private def user_id_config editor.id end def preloaded_obj_data if obj [obj.data_from_cms.to_h] else [] end end def current_page_config return {} unless obj { id: obj.id, obj_class: obj.obj_class, description_for_editor: obj.description_for_editor, has_children: obj.children.any?, has_conflict: obj.has_conflict?, has_details_view: obj_has_details_view?, modification: modification(obj), parent_path: obj.parent_path, restriction_messages: editor.restriction_messages_for(obj), } end def obj_has_details_view? lookup_context.find(obj.details_view_path).present? rescue ActionView::MissingTemplate false end def modification(obj_or_resource) comparison = editing_context.comparison if comparison.active? comparison.modification(obj_or_resource) else obj_or_resource.modification end end def editor editing_context.editor end end end