Class: HakumiComponents::Cascader::Component
- Inherits:
-
BaseComponent
- Object
- ViewComponent::Base
- BaseComponent
- HakumiComponents::Cascader::Component
- Extended by:
- T::Sig
- Defined in:
- app/components/hakumi_components/cascader/component.rb
Constant Summary collapse
- TRIGGERS =
T.let([ :click, :hover ].freeze, T::Array[Symbol])
Constants inherited from BaseComponent
BaseComponent::ControllerOptions, BaseComponent::DateInput, BaseComponent::DateLikeValue, BaseComponent::DimensionInput, BaseComponent::HtmlPayloadInput, BaseComponent::I18nOptionValue, BaseComponent::PresenceArray, BaseComponent::PresenceScalar, BaseComponent::PresenceValue, BaseComponent::RawHtmlInput, BaseComponent::SIZES, BaseComponent::SizeValue, BaseComponent::SymbolInput
Instance Method Summary collapse
-
#initialize(name: nil, options: [], label: nil, caption: nil, value: [], placeholder: nil, size: :default, disabled: false, required: false, allow_clear: true, show_search: false, change_on_select: false, expand_trigger: :click, display_render: nil, standalone: true, rules: nil, errors: [], **html_options) ⇒ Component
constructor
A new instance of Component.
- #selected_label ⇒ Object
- #validate_props! ⇒ Object
- #wrapper_attributes ⇒ Object
- #wrapper_classes ⇒ Object
Methods included from HakumiComponents::Concerns::SelectionControl
#selection_control_allow_clear, #selection_control_contract, #selection_control_disabled, #selection_control_has_value?, #selection_control_placeholder, #selection_control_size, #selection_control_value
Methods included from HakumiComponents::Concerns::SelectionControlInterface
#selection_control_allow_clear, #selection_control_contract, #selection_control_disabled, #selection_control_has_value?, #selection_control_placeholder, #selection_control_size, #selection_control_value
Methods included from HakumiComponents::Concerns::FormField
#describedby_ids, #error?, #error_message, #form_field_caption, #form_field_contract, #form_field_errors, #form_field_html_options, #form_field_label, #form_field_name, #form_field_required, #form_field_rules, #form_field_standalone, #form_item_attributes, #form_item_classes, #input_id, #render_caption, #render_error, #render_explain, #render_label, #standalone?
Methods included from HakumiComponents::Concerns::FormFieldInterface
Methods inherited from BaseComponent
#append_data_token, boolean_html_param, #build_inline_style, cast_boolean, #cast_boolean, #class_names, #component_classes, #data_attributes_from, #dimension_to_css, #ensure_dom_id!, float_html_param, #generate_id, #html_classes, html_param, html_primitive_param, #html_style, #i18n_scope, integer_html_param, #merge_attributes, #render_value, #size_to_pixels, #stimulus_attrs, string_html_param, string_or_symbol_array_html_param, symbol_html_param, #t_default, #translate_with_default, #validate_inclusion!, #validate_required!, #value_present?
Constructor Details
#initialize(name: nil, options: [], label: nil, caption: nil, value: [], placeholder: nil, size: :default, disabled: false, required: false, allow_clear: true, show_search: false, change_on_select: false, expand_trigger: :click, display_render: nil, standalone: true, rules: nil, errors: [], **html_options) ⇒ Component
Returns a new instance of Component.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'app/components/hakumi_components/cascader/component.rb', line 35 def initialize( name: nil, options: [], label: nil, caption: nil, value: [], placeholder: nil, size: :default, disabled: false, required: false, allow_clear: true, show_search: false, change_on_select: false, expand_trigger: :click, display_render: nil, standalone: true, rules: nil, errors: [], ** ) @name = T.let(name || generate_id("cascader"), Types::FormFieldName) @options = T.let( HakumiComponents::SelectionControl::Coercion.tree_nodes(Array()), T::Array[HakumiComponents::SelectionControl::TreeNode] ) @label = label @caption = caption @value = T.let(value || [], Types::FormFieldValue) @placeholder = T.let(placeholder || t_default(:placeholder, default: "Select"), T.nilable(String)) @size = size @disabled = disabled @required = required @allow_clear = allow_clear @show_search = show_search @change_on_select = change_on_select @expand_trigger = @display_render = T.let(display_render, T.nilable(T.proc.params(labels: T::Array[String]).returns(String))) @standalone = standalone @rules = T.let(rules, T.nilable(T::Array[Types::ValidationRule])) @errors = T.let(errors, Types::FormFieldErrors) @html_options = T.let(, Types::HtmlAttributes) initialize_selection_control_contract!( name: @name, label: @label, caption: @caption, value: @value, placeholder: @placeholder, size: @size, disabled: @disabled, allow_clear: @allow_clear, required: @required, standalone: @standalone, errors: @errors, html_options: @html_options, rules: @rules ) validate_props! end |
Instance Method Details
#selected_label ⇒ Object
132 133 134 135 136 137 138 139 |
# File 'app/components/hakumi_components/cascader/component.rb', line 132 def selected_label labels = labels_for_path(Array(selection_control_value)) return nil if labels.empty? return @display_render.call(labels) if @display_render labels.join(" / ") end |
#validate_props! ⇒ Object
96 97 98 99 |
# File 'app/components/hakumi_components/cascader/component.rb', line 96 def validate_props! validate_inclusion!(:size, SIZES) validate_inclusion!(:expand_trigger, TRIGGERS) end |
#wrapper_attributes ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'app/components/hakumi_components/cascader/component.rb', line 116 def wrapper_attributes base_attrs = { class: wrapper_classes, data: { controller: "hakumi--cascader", hakumi__cascader_options_value: .map(&:to_cascader_option).to_json, hakumi__cascader_value_value: Array(selection_control_value).to_json, hakumi__cascader_trigger_value: @expand_trigger, hakumi__cascader_change_on_select_value: @change_on_select, hakumi__cascader_disabled_value: selection_control_disabled } } merge_attributes(base_attrs, ) end |
#wrapper_classes ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'app/components/hakumi_components/cascader/component.rb', line 102 def wrapper_classes class_names( "cascader", { lg: selection_control_size == :large, sm: selection_control_size == :small, disabled: selection_control_disabled, "allow-clear": selection_control_allow_clear }, [ selection_control_html_class_name ] ) end |