Sha256: 17622ea1b2aa2da994ebd8ca6de235513033a0dcb8582c88c0ecbc7c81e0d752

Contents?: true

Size: 1.17 KB

Versions: 2

Compression:

Stored size: 1.17 KB

Contents

# frozen_string_literal: true

module Katalyst
  module Navigation
    # STI base class for menu items (headings, links and buttons)
    class Item < ApplicationRecord
      belongs_to :menu, inverse_of: :items, class_name: "Katalyst::Navigation::Menu"

      after_initialize :initialize_tree

      attr_accessor :parent, :children, :index, :depth

      TARGETS = %i[self _top _blank kpop].index_by(&:itself).freeze

      enum method: TARGETS, _prefix: :target

      def self.permitted_params
        %i[
          title
          url
          visible
          target
          type
        ]
      end

      def layout?
        is_a? Layout
      end

      # Entrypoint for combining additional options based on attribute rules
      def item_options
        options_for_target
      end

      def options_for_target
        return {} if target == "self"

        options = { target: target }

        unless target == "_blank" || target == "_top"
          options = { data: { turbo: true, turbo_frame: target } }
        end
        options
      end

      private

      def initialize_tree
        self.parent   ||= nil
        self.children ||= []
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
katalyst-navigation-1.3.4 app/models/katalyst/navigation/item.rb
katalyst-navigation-1.3.3 app/models/katalyst/navigation/item.rb