# frozen_string_literal: true module PageObjects module Components class SelectKit < PageObjects::Components::Base attr_reader :context def initialize(context) @context = context end def component if @context.is_a?(Capybara::Node::Element) @context else find(@context) end end def visible? has_css?(@context) end def hidden? has_no_css?(@context) end def expanded_component expand_if_needed find(@context + ".is-expanded", wait: 5) end def collapsed_component find(@context + ":not(.is-expanded)") end def is_expanded? has_css?(context + ".is-expanded") end def is_collapsed? has_css?(context + ":not(.is-expanded)", wait: 0) end def is_not_disabled? has_css?(@context + ":not(.disabled)", wait: 0) end def value component.find(".select-kit-header")["data-value"] end def has_selected_value?(value) component.find(".select-kit-header[data-value='#{value}']") end def has_selected_name?(name) component.find(".select-kit-header[data-name='#{name}']") end def has_selected_choice_name?(name) component.find(".selected-choice[data-name='#{name}']") end def has_option_name?(name) component.find(".select-kit-collection li[data-name='#{name}']") end def has_option_value?(value) component.find(".select-kit-collection li[data-value='#{value}']") end def has_no_option_value?(value) component.has_no_css?(".select-kit-collection li[data-value='#{value}']") end def expand collapsed_component.find(":not(.is-expanded) .select-kit-header", visible: :all).click expanded_component end def collapse expanded_component.find(".is-expanded .select-kit-header").click collapsed_component end def search(value = nil) expanded_component.find(".select-kit-filter .filter-input").fill_in(with: value) end def select_row_by_value(value) expanded_component.find(".select-kit-row[data-value='#{value}']").click end def select_row_by_name(name) expanded_component.find(".select-kit-row[data-name='#{name}']").click end def select_row_by_index(index) expanded_component.find(".select-kit-row[data-index='#{index}']").click end def expand_if_needed expand if is_collapsed? end end end end