Sha256: 756d2399bf811a41e1c0aaa9fe8f08a5074c7ed1c903cf308e4cb52c06402c3c

Contents?: true

Size: 1.19 KB

Versions: 10

Compression:

Stored size: 1.19 KB

Contents

module Avo
  module Fields
    class HasAndBelongsToManyField < Field
      def initialize(name, **args, &block)
        @defaults = {
          updatable: false,
          component: 'has-many-field'
        }

        super(name, **args, &block)

        hide_on :index

        @resource = args[:resource]
      end

      def hydrate_field(fields, model, resource, view)
        if view === :create
          return {
            relationship: :has_many,
          }
        end

        return {} if [:index].include? view

        target_resource = get_target_resource model
        fields[:relation_class] = target_resource.class.to_s
        fields[:path] = target_resource.url
        fields[:relationship] = :has_and_belongs_to_many
        fields[:relationship_model] = target_resource.model.name

        fields
      end

      def has_own_panel?
        true
      end

      def get_target_resource(model)
        if @resource.present?
          App.get_resources.find { |r| r.class == @resource }
        else
          App.get_resources.find { |r| r.class == "Avo::Resources::#{model._reflections[id.to_s].plural_name.to_s.camelcase.singularize}".safe_constantize }
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
avo-0.4.8 lib/avo/app/fields/has_and_belongs_to_many.rb
avo-0.4.7 lib/avo/app/fields/has_and_belongs_to_many.rb
avo-0.4.6 lib/avo/app/fields/has_and_belongs_to_many.rb
avo-0.4.5 lib/avo/app/fields/has_and_belongs_to_many.rb
avo-0.4.4 lib/avo/app/fields/has_and_belongs_to_many.rb
avo-0.4.3 lib/avo/app/fields/has_and_belongs_to_many.rb
avo-0.4.2 lib/avo/app/fields/has_and_belongs_to_many.rb
avo-0.4.1 lib/avo/app/fields/has_and_belongs_to_many.rb
avo-0.3.2 lib/avo/app/fields/has_and_belongs_to_many.rb
avo-0.3.1 lib/avo/app/fields/has_and_belongs_to_many.rb