anchor_view_components 0.45.0 → 0.45.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 02e14b9cbe3088a320100d337b3f23f92c97e03f659bd16d42ac21655838cc07
4
- data.tar.gz: 4323338bfdedf4ed58101ee366bd21726bc1f3d910d7c824a3bc8eae5ff93d59
3
+ metadata.gz: e70ad5e5ff2eb34b41352d913159bfa0baae9417393ce24007ef061a7eae1c8a
4
+ data.tar.gz: 4245d65fc162e270dc8d4711b17159d1ef271eb8b283c6d75ed4d59b77faf1cf
5
5
  SHA512:
6
- metadata.gz: 2c89ce43a18e3072e0a24d30ac43a4f489cfeea27c318dff78d4f02769c8c2418f1d179b2a71158eb44bc680cf1bd4b2f7d7cde0fe93948b2e2a55c523b7b645
7
- data.tar.gz: 35f880936914bd255eec0d3cc77f95352aef81b0dbe60feaada58877100e3c2b45468cd61fe6c0b471bf9836f0055aaff74fa16803cfccf7bfd917fab36542b3
6
+ metadata.gz: 383e4c7e44d61c1346d192fbe0fb6362b112b97854f87a98f7ea506ea2a5cd9449c68c4d80cd77020d2ad950d69e652e81b9b46980fb5cdc8c8a2c9c484bb485
7
+ data.tar.gz: cff07e92d9e67bb1d8228eea11d950cbef4420505c6f349203d3bcd3dd98c9d80ac7a0cd51f80980da60aadf1403fd797d5bc9420e2555ae12592c094ba080ce
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.45.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 73f1bd0: Reverted commit b050620b45f0ef6e73cfae2d2fe106c4831e7587, which was causing issues with some forms in the BuoyRails app.
8
+
3
9
  ## 0.45.0
4
10
 
5
11
  ### Minor Changes
@@ -1,25 +1,25 @@
1
- <%= tag.div(**merge_options(wrapper_options,
1
+ <%= tag.div(
2
2
  data: { controller: "autocomplete", autocomplete_url_value: src },
3
3
  role: "combobox",
4
4
  class: "group relative"
5
- )) do %>
5
+ ) do %>
6
6
  <% if form_builder.class.module_parent_name == "Anchor" %>
7
7
  <%= form_builder.text_field(
8
8
  name,
9
9
  **merge_options(input_options, default_input_options)
10
10
  ) %>
11
11
  <%= form_builder.text_field(
12
- :"#{name}_id",
12
+ "#{name}_id".to_sym,
13
13
  { class: "hidden", data: { autocomplete_target: "hidden" }}
14
14
  ) %>
15
15
  <% else %>
16
16
  <%= form_builder.input(
17
- :"#{name}_search",
17
+ "#{name}_search".to_sym,
18
18
  input_html: merge_options(input_options, default_input_options)
19
19
  ) %>
20
20
  <div class="hidden">
21
21
  <%= form_builder.input(
22
- :"#{name}_id",
22
+ "#{name}_id".to_sym,
23
23
  input_html: { data: { autocomplete_target: "hidden" } }
24
24
  ) %>
25
25
  </div>
@@ -13,8 +13,8 @@ module Anchor
13
13
  text-sm
14
14
  ).freeze
15
15
 
16
- def initialize(object:, attribute:, **kwargs)
17
- @object = object
16
+ def initialize(form_builder:, attribute:, **kwargs)
17
+ @form_builder = form_builder
18
18
  @attribute = attribute
19
19
 
20
20
  super(**kwargs)
@@ -22,14 +22,16 @@ module Anchor
22
22
 
23
23
  private
24
24
 
25
- attr_reader :attribute
25
+ attr_reader :attribute, :form_builder
26
+
27
+ delegate :object, to: :form_builder
26
28
 
27
29
  def error_message
28
- @object.errors.full_messages_for(attribute).to_sentence
30
+ object.errors.full_messages_for(attribute).to_sentence
29
31
  end
30
32
 
31
33
  def render?
32
- @object.errors.has_key?(attribute)
34
+ object.errors.has_key?(attribute)
33
35
  end
34
36
  end
35
37
  end
@@ -20,19 +20,23 @@ module Anchor
20
20
  ).freeze
21
21
 
22
22
  def initialize(
23
+ form_builder:,
23
24
  attribute:,
25
+ type:,
24
26
  starting_icon: nil,
25
27
  ending_icon: nil,
26
28
  **kwargs
27
29
  )
30
+ @form_builder = form_builder
28
31
  @attribute = attribute
32
+ @type = type
29
33
  @starting_icon = starting_icon
30
34
  @ending_icon = ending_icon
31
35
 
32
36
  super(**kwargs)
33
37
  end
34
38
 
35
- attr_reader :attribute, :starting_icon, :ending_icon
39
+ attr_reader :attribute, :type, :starting_icon, :ending_icon
36
40
 
37
41
  def options
38
42
  {
@@ -8,10 +8,14 @@ module Anchor
8
8
 
9
9
  attr_accessor :options
10
10
 
11
- def initialize(object:, attribute:, required: nil)
12
- @options = { class: LABEL_CLASSES }
11
+ def initialize(form_builder:, attribute:, **options)
12
+ @form_builder = form_builder
13
+ @attribute = attribute
14
+ @options = options.merge(
15
+ class: Array(options.delete(:class)) + LABEL_CLASSES
16
+ )
13
17
  @required = ModelValidators
14
- .new(object, required:)
18
+ .new(@form_builder.object, options)
15
19
  .attribute_required?(attribute)
16
20
 
17
21
  super()
@@ -1,7 +1,40 @@
1
1
  module Anchor
2
2
  class RadioButtonCollectionComponent < Component
3
+ attr_reader :attribute, :descriptions, :form_builder
4
+
5
+ def initialize(
6
+ form_builder:,
7
+ attribute:,
8
+ collection:,
9
+ value_method:,
10
+ text_method:,
11
+ descriptions: nil,
12
+ **options
13
+ )
14
+ @form_builder = form_builder
15
+ @attribute = attribute
16
+ @collection = collection
17
+ @value_method = value_method
18
+ @text_method = text_method
19
+ @descriptions = descriptions
20
+ @options = options
21
+
22
+ super()
23
+ end
24
+
3
25
  def options
4
- { class: RadioButtonComponent::INPUT_CLASSES }
26
+ @options.merge(
27
+ class: Array(@options.delete(:class)) +
28
+ RadioButtonComponent::INPUT_CLASSES
29
+ )
30
+ end
31
+
32
+ def radio(radio:)
33
+ RadioButtonComponent.new(
34
+ radio:,
35
+ attribute:,
36
+ form_builder:
37
+ )
5
38
  end
6
39
  end
7
40
  end
@@ -5,7 +5,7 @@
5
5
  <% if description.present? %>
6
6
  <div class="flex flex-col gap-1">
7
7
  <%= radio.label %>
8
- <%= tag.span description, id: description_id, class: DESCRIPTION_CLASSES %>
8
+ <%= description_span %>
9
9
  </div>
10
10
  <% else %>
11
11
  <%= tag.div radio.label, class: "self-center" %>
@@ -36,20 +36,24 @@ module Anchor
36
36
  text-sm
37
37
  ).freeze
38
38
 
39
- def initialize(form_builder:, radio:, attribute:, **kwargs)
40
- @form_builder = form_builder
39
+ def initialize(radio:, attribute:, form_builder:, **kwargs)
41
40
  @radio = radio
42
41
  @attribute = attribute
42
+ @form_builder = form_builder
43
43
 
44
44
  super(**kwargs)
45
45
  end
46
46
 
47
47
  private
48
48
 
49
- attr_reader :form_builder, :radio, :attribute
49
+ attr_reader :radio, :attribute, :form_builder
50
50
 
51
51
  delegate :value, :object, to: :radio
52
52
 
53
+ def description_span
54
+ tag.span description, id: description_id, class: DESCRIPTION_CLASSES
55
+ end
56
+
53
57
  def radio_options
54
58
  {
55
59
  aria: description.present? && aria_description,
@@ -1,11 +1,15 @@
1
1
  module Anchor
2
2
  class SelectComponent < Component
3
+ attr_reader :attribute
4
+
3
5
  def initialize(
6
+ form_builder:,
4
7
  attribute:,
5
8
  choices:,
6
9
  show_marker: true,
7
10
  **kwargs
8
11
  )
12
+ @form_builder = form_builder
9
13
  @attribute = attribute
10
14
  @choices = choices
11
15
  @show_marker = show_marker
@@ -20,7 +24,7 @@ module Anchor
20
24
  def html_options
21
25
  {
22
26
  class: InputComponent::INPUT_CLASSES,
23
- data: { testid: "select-#{@attribute.to_s.dasherize}" },
27
+ data: { testid: "select-#{attribute.to_s.dasherize}" },
24
28
  }
25
29
  end
26
30
 
@@ -32,7 +32,15 @@ module Anchor
32
32
  options = {},
33
33
  html_options = {}
34
34
  )
35
- render RadioButtonCollectionComponent.new do |component|
35
+ render RadioButtonCollectionComponent.new(
36
+ form_builder: self,
37
+ attribute:,
38
+ collection:,
39
+ value_method:,
40
+ text_method:,
41
+ **options,
42
+ **html_options
43
+ ) do |component|
36
44
  super(
37
45
  attribute,
38
46
  collection,
@@ -41,11 +49,7 @@ module Anchor
41
49
  options,
42
50
  component.options.merge(html_options),
43
51
  ) do |radio|
44
- render RadioButtonComponent.new(
45
- radio:,
46
- attribute:,
47
- form_builder: self
48
- )
52
+ render component.radio(radio:)
49
53
  end
50
54
  end
51
55
  end
@@ -82,7 +86,9 @@ module Anchor
82
86
 
83
87
  def email_field(attribute, options = {})
84
88
  render InputComponent.new(
89
+ form_builder: self,
85
90
  attribute:,
91
+ type: :email,
86
92
  starting_icon: options.delete(:starting_icon),
87
93
  ending_icon: options.delete(:ending_icon)
88
94
  ) do |component|
@@ -92,7 +98,7 @@ module Anchor
92
98
 
93
99
  def error_message_for(attribute, options = {})
94
100
  render ErrorMessageComponent.new(
95
- object:,
101
+ form_builder: self,
96
102
  attribute:,
97
103
  **options
98
104
  )
@@ -100,9 +106,10 @@ module Anchor
100
106
 
101
107
  def label(attribute, text = nil, options = {}, &block)
102
108
  render LabelComponent.new(
103
- object:,
109
+ form_builder: self,
104
110
  attribute:,
105
- required: options.delete(:required) { :if_has_validators }
111
+ text:,
112
+ **options
106
113
  ) do |component|
107
114
  if block.present?
108
115
  super
@@ -119,7 +126,9 @@ module Anchor
119
126
 
120
127
  def number_field(attribute, options = {})
121
128
  render InputComponent.new(
129
+ form_builder: self,
122
130
  attribute:,
131
+ type: :number,
123
132
  starting_icon: options.delete(:starting_icon),
124
133
  ending_icon: options.delete(:ending_icon)
125
134
  ) do |component|
@@ -129,7 +138,9 @@ module Anchor
129
138
 
130
139
  def search_field(attribute, options = {})
131
140
  render InputComponent.new(
141
+ form_builder: self,
132
142
  attribute:,
143
+ type: :search,
133
144
  starting_icon: options.delete(:starting_icon),
134
145
  ending_icon: options.delete(:ending_icon)
135
146
  ) do |component|
@@ -139,6 +150,7 @@ module Anchor
139
150
 
140
151
  def select(attribute, choices = nil, options = {}, html_options = {}, &)
141
152
  render SelectComponent.new(
153
+ form_builder: self,
142
154
  attribute:,
143
155
  choices:,
144
156
  show_marker: options.fetch(:show_marker, true),
@@ -156,7 +168,9 @@ module Anchor
156
168
 
157
169
  def text_field(attribute, options = {})
158
170
  render InputComponent.new(
171
+ form_builder: self,
159
172
  attribute:,
173
+ type: :text,
160
174
  starting_icon: options.delete(:starting_icon),
161
175
  ending_icon: options.delete(:ending_icon)
162
176
  ) do |component|
@@ -1,18 +1,13 @@
1
1
  module Anchor
2
2
  class ModelValidators
3
- # Pass the value :if_has_validators to the required keyword argument to
4
- # indicate an unspecified value. Passing any other value will result in
5
- # `required`'s truthiness being used to determine whether the attribute is
6
- # required, while passing :if_has_validators will check the model's
7
- # validators.
8
- def initialize(model, required: :if_has_validators)
3
+ def initialize(model, options)
9
4
  @model = model
10
- @required = required
5
+ @options = options
11
6
  end
12
7
 
13
8
  def attribute_required?(attribute)
14
- if required != :if_has_validators
15
- required
9
+ if options.has_key?(:required)
10
+ options[:required]
16
11
  elsif has_validators?
17
12
  attribute_required_by_validators?(attribute)
18
13
  else
@@ -22,7 +17,7 @@ module Anchor
22
17
 
23
18
  private
24
19
 
25
- attr_reader :model, :required
20
+ attr_reader :model, :options
26
21
 
27
22
  def has_validators?
28
23
  model.class.respond_to?(:validators_on)
@@ -1,5 +1,5 @@
1
1
  module Anchor
2
2
  module ViewComponents
3
- VERSION = "0.45.0".freeze
3
+ VERSION = "0.45.1".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anchor_view_components
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.45.0
4
+ version: 0.45.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Buoy Software
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-10 00:00:00.000000000 Z
11
+ date: 2024-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails