Sha256: 3759191754aaa3b05e8d95976a51a555e0a87eec69267ee8bac570353e5e1e85

Contents?: true

Size: 1.79 KB

Versions: 2

Compression:

Stored size: 1.79 KB

Contents

module Para
  module Inputs
    class NestedManyInput < SimpleForm::Inputs::Base
      attr_reader :resource

      def input(wrapper_options = nil)
        input_html_options[:class] << "nested-many"

        orderable = options.fetch(:orderable, model.orderable?)
        add_button = options.fetch(:add_button, true)
        # Load existing resources
        resources = object.send(attribute_name)
        # Order them if the list should be orderable
        resources = resources.sort_by(&:position) if orderable

        locals = options.fetch(:locals, {})

        template.render(
          partial: 'para/inputs/nested_many',
          locals: {
            form: @builder,
            model: model,
            attribute_name: attribute_name,
            orderable: orderable,
            add_button: add_button,
            dom_identifier: dom_identifier,
            resources: resources,
            nested_locals: locals,
            subclass: subclass,
            subclasses: subclasses,
            inset: inset?
          }
        )
      end

      def parent_model
        @parent_model ||= @builder.object.class
      end

      def model
        @model ||= parent_model.reflect_on_association(attribute_name).klass
      end

      def dom_identifier
        @dom_identifier ||= begin
          name = attribute_name
          time = (Time.now.to_f * 1000).to_i
          random = (rand * 1000).to_i
          [name, time, random].join('-')
        end
      end

      def subclass
        @subclass ||= options.fetch(:subclass, subclasses.presence)
      end

      def subclasses
        options.fetch(
          :subclasses,
          (model.try(:descendants) || []).sort_by { |m| m.model_name.human }
        )
      end

      def inset?
        options.fetch(:inset, false)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
para-0.7.1 lib/para/inputs/nested_many_input.rb
para-0.7.0 lib/para/inputs/nested_many_input.rb