hotwire_combobox 0.2.1 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9649cc031cc63f665e78c4f72857f72698d42af893d8204cab739a5817be27b8
4
- data.tar.gz: f9e791cc61927caebd9db3c32cf3e71382f6d77e4f54c8275348b02600fce8d4
3
+ metadata.gz: 375e5d8a06acd3bfb37fda548dcbaf55c097dafddf6511d33292ee424c267e92
4
+ data.tar.gz: 334608cf151572af945be3f9cf17598ccbf9b1808580c1cb57e2ea8e24fba246
5
5
  SHA512:
6
- metadata.gz: 5f6c132e19554295758e13763663a6e0d3b0e7a0a413088a25aed723370dd5967133af3e2660e9ef4ecb16d661f39232bb36ac9c08c37531b36677f2a8c0d961
7
- data.tar.gz: 6461c5650345338c17dd33dd378575d5376e2b31ed9466aa4b527096ae831db8feac8b73f357dc8da7908dd7e41aeed1a6750bd9bc1cd570c6e5634562aca0f9
6
+ metadata.gz: 3a39403f378b1be54d167ed15e4006e96751c19ab71c3c7f60414c3b13598f861fb2cbc7611995775f804a1caadcc0849fc89f68dc4761777a015acf57e1ad19
7
+ data.tar.gz: 1618b436e6c19922b32ce986f6f5103676e206eb9d04c868cfa5bfd6b9a84dd62dd65c164dd2072ab355e62d951e91610dfb9043fe72e14432ec2e9c6fcb45b4
@@ -61,7 +61,6 @@ export default class HwComboboxController extends Concerns(...concerns) {
61
61
  initialize() {
62
62
  this._initializeActors()
63
63
  this._initializeFiltering()
64
- this._initializeMultiselect()
65
64
  }
66
65
 
67
66
  connect() {
@@ -70,6 +69,7 @@ export default class HwComboboxController extends Concerns(...concerns) {
70
69
 
71
70
  idempotentConnect() {
72
71
  this._connectSelection()
72
+ this._connectMultiselect()
73
73
  this._connectListAutocomplete()
74
74
  this._connectDialog()
75
75
  }
@@ -1,5 +1,5 @@
1
1
  /*!
2
- HotwireCombobox 0.2.1
2
+ HotwireCombobox 0.2.3
3
3
  */
4
4
  import { Controller } from '@hotwired/stimulus';
5
5
 
@@ -776,7 +776,7 @@ Combobox.Multiselect = Base => class extends Base {
776
776
  }
777
777
  }
778
778
 
779
- _initializeMultiselect() {
779
+ _connectMultiselect() {
780
780
  if (!this._isMultiPreselected) {
781
781
  this._preselectMultiple();
782
782
  this._markMultiPreselected();
@@ -1702,7 +1702,6 @@ class HwComboboxController extends Concerns(...concerns) {
1702
1702
  initialize() {
1703
1703
  this._initializeActors();
1704
1704
  this._initializeFiltering();
1705
- this._initializeMultiselect();
1706
1705
  }
1707
1706
 
1708
1707
  connect() {
@@ -1711,6 +1710,7 @@ class HwComboboxController extends Concerns(...concerns) {
1711
1710
 
1712
1711
  idempotentConnect() {
1713
1712
  this._connectSelection();
1713
+ this._connectMultiselect();
1714
1714
  this._connectListAutocomplete();
1715
1715
  this._connectDialog();
1716
1716
  }
@@ -1,5 +1,5 @@
1
1
  /*!
2
- HotwireCombobox 0.2.1
2
+ HotwireCombobox 0.2.3
3
3
  */
4
4
  (function (global, factory) {
5
5
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@hotwired/stimulus')) :
@@ -780,7 +780,7 @@ HotwireCombobox 0.2.1
780
780
  }
781
781
  }
782
782
 
783
- _initializeMultiselect() {
783
+ _connectMultiselect() {
784
784
  if (!this._isMultiPreselected) {
785
785
  this._preselectMultiple();
786
786
  this._markMultiPreselected();
@@ -1706,7 +1706,6 @@ HotwireCombobox 0.2.1
1706
1706
  initialize() {
1707
1707
  this._initializeActors();
1708
1708
  this._initializeFiltering();
1709
- this._initializeMultiselect();
1710
1709
  }
1711
1710
 
1712
1711
  connect() {
@@ -1715,6 +1714,7 @@ HotwireCombobox 0.2.1
1715
1714
 
1716
1715
  idempotentConnect() {
1717
1716
  this._connectSelection();
1717
+ this._connectMultiselect();
1718
1718
  this._connectListAutocomplete();
1719
1719
  this._connectDialog();
1720
1720
  }
@@ -55,7 +55,7 @@ Combobox.Multiselect = Base => class extends Base {
55
55
  }
56
56
  }
57
57
 
58
- _initializeMultiselect() {
58
+ _connectMultiselect() {
59
59
  if (!this._isMultiPreselected) {
60
60
  this._preselectMultiple()
61
61
  this._markMultiPreselected()
@@ -80,15 +80,7 @@ class HotwireCombobox::Component
80
80
 
81
81
  def announcer_attrs
82
82
  {
83
- style: "
84
- position: absolute;
85
- width: 1px;
86
- height: 1px;
87
- margin: -1px;
88
- padding: 0;
89
- overflow: hidden;
90
- clip: rect(0, 0, 0, 0);
91
- border: 0;".squish,
83
+ class: "hw-combobox__announcer",
92
84
  aria: announcer_aria,
93
85
  data: announcer_data
94
86
  }
@@ -256,7 +248,7 @@ class HotwireCombobox::Component
256
248
  end
257
249
 
258
250
  def association_exists?
259
- form_object&.class&.reflect_on_association(association_name).present?
251
+ association_name && form_object&.respond_to?(association_name)
260
252
  end
261
253
 
262
254
  def form_object
@@ -308,7 +300,7 @@ class HotwireCombobox::Component
308
300
  def hidden_field_value
309
301
  return value if value
310
302
 
311
- if form_object&.defined_enums&.try :[], name
303
+ if form_object&.try(:defined_enums)&.try(:[], name)
312
304
  form_object.public_send "#{name}_before_type_cast"
313
305
  else
314
306
  form_object&.try(name).then do |value|
@@ -4,6 +4,19 @@
4
4
  <%= render "hotwire_combobox/combobox/hidden_field", component: component %>
5
5
 
6
6
  <%= tag.div **component.main_wrapper_attrs do %>
7
+ <%# Announcer styles defined here because they're not optional %>
8
+ <%= tag.style nonce: content_security_policy_nonce do %>
9
+ .hw-combobox__announcer {
10
+ position: absolute;
11
+ width: 1px;
12
+ height: 1px;
13
+ margin: -1px;
14
+ padding: 0;
15
+ overflow: hidden;
16
+ clip: rect(0, 0, 0, 0);
17
+ border: 0;
18
+ }
19
+ <% end %>
7
20
  <%= tag.div **component.announcer_attrs %>
8
21
  <%= render "hotwire_combobox/combobox/input", component: component %>
9
22
  <%= render "hotwire_combobox/combobox/paginated_listbox", component: component %>
@@ -1,6 +1,6 @@
1
- <%# locals: (for_id:, next_page:, src:) -%>
1
+ <%# locals: (for_id:, src:) -%>
2
2
 
3
3
  <%= turbo_stream.remove hw_pagination_frame_wrapper_id(for_id) %>
4
4
  <%= turbo_stream.append hw_listbox_id(for_id) do %>
5
- <%= render "hotwire_combobox/pagination", for_id: for_id, src: hw_combobox_next_page_uri(src, next_page, for_id) %>
5
+ <%= render "hotwire_combobox/pagination", for_id: for_id, src: src %>
6
6
  <% end %>
@@ -37,7 +37,7 @@ module HotwireCombobox
37
37
  def hw_paginated_combobox_options(
38
38
  options,
39
39
  for_id: params[:for_id],
40
- src: request.path,
40
+ src: request.fullpath,
41
41
  next_page: nil,
42
42
  render_in: {},
43
43
  include_blank: {},
@@ -45,7 +45,7 @@ module HotwireCombobox
45
45
  include_blank = params[:page].to_i > 0 ? nil : include_blank
46
46
  options = hw_combobox_options options, render_in: render_in, include_blank: include_blank, **custom_methods
47
47
  this_page = render "hotwire_combobox/paginated_options", for_id: for_id, options: options
48
- next_page = render "hotwire_combobox/next_page", for_id: for_id, src: src, next_page: next_page
48
+ next_page = render "hotwire_combobox/next_page", for_id: for_id, src: hw_combobox_next_page_uri(src, next_page, for_id)
49
49
 
50
50
  safe_join [ this_page, next_page ]
51
51
  end
@@ -146,23 +146,13 @@ module HotwireCombobox
146
146
  "#{id}__hw_combobox_pagination"
147
147
  end
148
148
 
149
- def hw_combobox_next_page_uri(uri, next_page, for_id)
150
- if next_page
151
- hw_uri_with_params uri,
152
- page: next_page,
153
- q: params[:q],
154
- for_id: for_id,
155
- format: :turbo_stream
156
- end
157
- end
158
-
159
149
  def hw_combobox_page_stream_action
160
150
  params[:page].to_i > 0 ? :append : :update
161
151
  end
162
152
 
163
153
  def hw_uri_with_params(url_or_path, **params)
164
154
  URI.parse(url_or_path).tap do |url_or_path|
165
- query = URI.decode_www_form(url_or_path.query || "").to_h.merge(params)
155
+ query = URI.decode_www_form(url_or_path.query || "").to_h.merge(params.compact_blank.stringify_keys)
166
156
  url_or_path.query = URI.encode_www_form query
167
157
  end.to_s
168
158
  rescue URI::InvalidURIError
@@ -178,6 +168,16 @@ module HotwireCombobox
178
168
  end
179
169
 
180
170
  private
171
+ def hw_combobox_next_page_uri(uri, next_page, for_id)
172
+ return unless next_page
173
+
174
+ hw_uri_with_params uri,
175
+ page: next_page,
176
+ q: params[:q],
177
+ for_id: for_id,
178
+ format: :turbo_stream
179
+ end
180
+
181
181
  def hw_extract_options_and_src(options_or_src, render_in, include_blank)
182
182
  if options_or_src.is_a? String
183
183
  [ hw_combobox_options([]), options_or_src ]
@@ -1,3 +1,3 @@
1
1
  module HotwireCombobox
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hotwire_combobox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jose Farias
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-31 00:00:00.000000000 Z
11
+ date: 2024-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mocha
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.1'
55
69
  description: An accessible autocomplete for Ruby on Rails apps using Hotwire.
56
70
  email:
57
71
  - jose@farias.mx
@@ -130,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
144
  - !ruby/object:Gem::Version
131
145
  version: '0'
132
146
  requirements: []
133
- rubygems_version: 3.4.18
147
+ rubygems_version: 3.5.9
134
148
  signing_key:
135
149
  specification_version: 4
136
150
  summary: Accessible Autocomplete for Rails apps