Sha256: 9f35f35059dba0526074e30cc8c4b133d63edbfedbac827abe75d5d0d27a61eb

Contents?: true

Size: 942 Bytes

Versions: 9

Compression:

Stored size: 942 Bytes

Contents

# frozen_string_literal: true

require "active_support/concern"

module Primer
  # Helper to share tab validation logic between components.
  # The component will raise an error if there are 0 or 2+ selected tabs.
  module TabbedComponentHelper
    extend ActiveSupport::Concern

    class MultipleSelectedTabsError < StandardError; end

    def before_render
      validate_single_selected_tab unless Rails.env.production?
    end

    private

    def navigation_tag(with_panel)
      with_panel ? :div : :nav
    end

    def wrapper(**system_arguments)
      return yield unless @with_panel

      render Primer::TabContainerComponent.new(**system_arguments) do
        yield
      end
    end

    def validate_single_selected_tab
      raise MultipleSelectedTabsError, "only one tab can be selected" if selected_tabs_count > 1
    end

    def selected_tabs_count
      @selected_tabs_count ||= tabs.count(&:selected)
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
primer_view_components-0.0.51 app/lib/primer/tabbed_component_helper.rb
primer_view_components-0.0.50 app/lib/primer/tabbed_component_helper.rb
primer_view_components-0.0.49 app/lib/primer/tabbed_component_helper.rb
primer_view_components-0.0.48 app/lib/primer/tabbed_component_helper.rb
primer_view_components-0.0.47 app/lib/primer/tabbed_component_helper.rb
primer_view_components-0.0.46 app/lib/primer/tabbed_component_helper.rb
primer_view_components-0.0.45 app/lib/primer/tabbed_component_helper.rb
primer_view_components-0.0.44 app/lib/primer/tabbed_component_helper.rb
primer_view_components-0.0.43 app/lib/primer/tabbed_component_helper.rb