hotwire_combobox 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/controllers/hw_combobox_controller.js +32 -8
- data/app/assets/javascripts/hotwire_combobox.esm.js +85 -11
- data/app/assets/javascripts/hotwire_combobox.umd.js +85 -11
- data/app/assets/javascripts/hw_combobox/models/combobox/callbacks.js +45 -0
- data/app/assets/javascripts/hw_combobox/models/combobox/filtering.js +9 -2
- data/app/assets/javascripts/hw_combobox/models/combobox.js +1 -0
- data/app/assets/stylesheets/hotwire_combobox.css +1 -1
- data/app/presenters/hotwire_combobox/component.rb +1 -1
- data/app/presenters/hotwire_combobox/listbox/option.rb +1 -0
- data/app/views/hotwire_combobox/_pagination.html.erb +1 -1
- data/lib/hotwire_combobox/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5bdfc61a78393aa3f25828d5a09b0146038b1e4c74aeeb1189eb3d9cb3da1bc4
|
4
|
+
data.tar.gz: be98cd6da831d77f7401127bfc6409cd93a07dbe13d57b4198427ca0d662e146
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a6556e4c39ae6b6ae721e1e0fc587c5c1224365ca5e1feffdf32750b1a69085e3ec531ea8eafc3857cbc841d12c2a361321a295bbf90197ce3054547fe1abed
|
7
|
+
data.tar.gz: e4d81183deceede7b786abe9732d12c1ce76c2399ae8e44d4f3c4ebfa6822fef041b661358ea0ce254200985dd3643a056b50fa992e7ad94f3e5d6522ceaa7f4
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import Combobox from "hw_combobox/models/combobox"
|
2
2
|
import { Concerns, sleep } from "hw_combobox/helpers"
|
3
|
+
import { nextRepaint } from "hw_combobox/helpers"
|
3
4
|
import { Controller } from "@hotwired/stimulus"
|
4
5
|
|
5
6
|
window.HOTWIRE_COMBOBOX_STREAM_DELAY = 0 // ms, for testing purposes
|
@@ -10,6 +11,7 @@ const concerns = [
|
|
10
11
|
Combobox.Announcements,
|
11
12
|
Combobox.AsyncLoading,
|
12
13
|
Combobox.Autocomplete,
|
14
|
+
Combobox.Callbacks,
|
13
15
|
Combobox.Dialog,
|
14
16
|
Combobox.Events,
|
15
17
|
Combobox.Filtering,
|
@@ -61,6 +63,7 @@ export default class HwComboboxController extends Concerns(...concerns) {
|
|
61
63
|
initialize() {
|
62
64
|
this._initializeActors()
|
63
65
|
this._initializeFiltering()
|
66
|
+
this._initializeCallbacks()
|
64
67
|
}
|
65
68
|
|
66
69
|
connect() {
|
@@ -87,18 +90,39 @@ export default class HwComboboxController extends Concerns(...concerns) {
|
|
87
90
|
}
|
88
91
|
|
89
92
|
async endOfOptionsStreamTargetConnected(element) {
|
90
|
-
|
91
|
-
|
93
|
+
if (element.dataset.callbackId) {
|
94
|
+
this._runCallback(element)
|
95
|
+
} else {
|
96
|
+
this._preselectSingle()
|
97
|
+
}
|
98
|
+
}
|
99
|
+
|
100
|
+
async _runCallback(element) {
|
101
|
+
const callbackId = element.dataset.callbackId
|
92
102
|
|
93
|
-
this.
|
103
|
+
if (this._callbackAttemptsExceeded(callbackId)) {
|
104
|
+
this._dequeueCallback(callbackId)
|
105
|
+
return
|
106
|
+
} else {
|
107
|
+
this._recordCallbackAttempt(callbackId)
|
108
|
+
}
|
109
|
+
|
110
|
+
if (this._isNextCallback(callbackId)) {
|
111
|
+
const inputType = element.dataset.inputType
|
112
|
+
const delay = window.HOTWIRE_COMBOBOX_STREAM_DELAY
|
94
113
|
|
95
|
-
if (inputType === "hw:multiselectSync") {
|
96
|
-
this.openByFocusing()
|
97
|
-
} else if (inputType && inputType !== "hw:lockInSelection") {
|
98
114
|
if (delay) await sleep(delay)
|
99
|
-
this.
|
115
|
+
this._dequeueCallback(callbackId)
|
116
|
+
this._resetMultiselectionMarks()
|
117
|
+
|
118
|
+
if (inputType === "hw:multiselectSync") {
|
119
|
+
this.openByFocusing()
|
120
|
+
} else if (inputType !== "hw:lockInSelection") {
|
121
|
+
this._selectOnQuery(inputType)
|
122
|
+
}
|
100
123
|
} else {
|
101
|
-
|
124
|
+
await nextRepaint()
|
125
|
+
this._runCallback(element)
|
102
126
|
}
|
103
127
|
}
|
104
128
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
HotwireCombobox 0.3.
|
2
|
+
HotwireCombobox 0.3.2
|
3
3
|
*/
|
4
4
|
import { Controller } from '@hotwired/stimulus';
|
5
5
|
|
@@ -204,6 +204,50 @@ Combobox.Autocomplete = Base => class extends Base {
|
|
204
204
|
}
|
205
205
|
};
|
206
206
|
|
207
|
+
const MAX_CALLBACK_ATTEMPTS = 3;
|
208
|
+
|
209
|
+
Combobox.Callbacks = Base => class extends Base {
|
210
|
+
_initializeCallbacks() {
|
211
|
+
this.callbackQueue = [];
|
212
|
+
this.callbackExecutionAttempts = {};
|
213
|
+
}
|
214
|
+
|
215
|
+
_enqueueCallback() {
|
216
|
+
const callbackId = crypto.randomUUID();
|
217
|
+
this.callbackQueue.push(callbackId);
|
218
|
+
return callbackId
|
219
|
+
}
|
220
|
+
|
221
|
+
_isNextCallback(callbackId) {
|
222
|
+
return this._nextCallback === callbackId
|
223
|
+
}
|
224
|
+
|
225
|
+
_callbackAttemptsExceeded(callbackId) {
|
226
|
+
return this._callbackAttempts(callbackId) > MAX_CALLBACK_ATTEMPTS
|
227
|
+
}
|
228
|
+
|
229
|
+
_callbackAttempts(callbackId) {
|
230
|
+
return this.callbackExecutionAttempts[callbackId] || 0
|
231
|
+
}
|
232
|
+
|
233
|
+
_recordCallbackAttempt(callbackId) {
|
234
|
+
this.callbackExecutionAttempts[callbackId] = this._callbackAttempts(callbackId) + 1;
|
235
|
+
}
|
236
|
+
|
237
|
+
_dequeueCallback(callbackId) {
|
238
|
+
this.callbackQueue = this.callbackQueue.filter(id => id !== callbackId);
|
239
|
+
this._forgetCallbackExecutionAttempts(callbackId);
|
240
|
+
}
|
241
|
+
|
242
|
+
_forgetCallbackExecutionAttempts(callbackId) {
|
243
|
+
delete this.callbackExecutionAttempts[callbackId];
|
244
|
+
}
|
245
|
+
|
246
|
+
get _nextCallback() {
|
247
|
+
return this.callbackQueue[0]
|
248
|
+
}
|
249
|
+
};
|
250
|
+
|
207
251
|
Combobox.Dialog = Base => class extends Base {
|
208
252
|
rerouteListboxStreamToDialog({ detail: { newStream } }) {
|
209
253
|
if (newStream.target == this.listboxTarget.id && this._dialogIsOpen) {
|
@@ -592,6 +636,12 @@ Combobox.Filtering = Base => class extends Base {
|
|
592
636
|
}
|
593
637
|
}
|
594
638
|
|
639
|
+
clear(event) {
|
640
|
+
this._clearQuery();
|
641
|
+
this.chipDismisserTargets.forEach(el => el.click());
|
642
|
+
if (event && !event.defaultPrevented) event.target.focus();
|
643
|
+
}
|
644
|
+
|
595
645
|
_initializeFiltering() {
|
596
646
|
this._debouncedFilterAsync = debounce(this._debouncedFilterAsync.bind(this));
|
597
647
|
}
|
@@ -614,7 +664,8 @@ Combobox.Filtering = Base => class extends Base {
|
|
614
664
|
const query = {
|
615
665
|
q: this._fullQuery,
|
616
666
|
input_type: inputType,
|
617
|
-
for_id: this.element.dataset.asyncId
|
667
|
+
for_id: this.element.dataset.asyncId,
|
668
|
+
callback_id: this._enqueueCallback()
|
618
669
|
};
|
619
670
|
|
620
671
|
await get(this.asyncSrcValue, { responseKind: "turbo-stream", query });
|
@@ -635,7 +686,7 @@ Combobox.Filtering = Base => class extends Base {
|
|
635
686
|
}
|
636
687
|
|
637
688
|
_markQueried() {
|
638
|
-
this.
|
689
|
+
this._forAllComboboxes(el => el.toggleAttribute("data-queried", this._isQueried));
|
639
690
|
}
|
640
691
|
|
641
692
|
get _isQueried() {
|
@@ -1657,6 +1708,7 @@ const concerns = [
|
|
1657
1708
|
Combobox.Announcements,
|
1658
1709
|
Combobox.AsyncLoading,
|
1659
1710
|
Combobox.Autocomplete,
|
1711
|
+
Combobox.Callbacks,
|
1660
1712
|
Combobox.Dialog,
|
1661
1713
|
Combobox.Events,
|
1662
1714
|
Combobox.Filtering,
|
@@ -1708,6 +1760,7 @@ class HwComboboxController extends Concerns(...concerns) {
|
|
1708
1760
|
initialize() {
|
1709
1761
|
this._initializeActors();
|
1710
1762
|
this._initializeFiltering();
|
1763
|
+
this._initializeCallbacks();
|
1711
1764
|
}
|
1712
1765
|
|
1713
1766
|
connect() {
|
@@ -1734,18 +1787,39 @@ class HwComboboxController extends Concerns(...concerns) {
|
|
1734
1787
|
}
|
1735
1788
|
|
1736
1789
|
async endOfOptionsStreamTargetConnected(element) {
|
1737
|
-
|
1738
|
-
|
1790
|
+
if (element.dataset.callbackId) {
|
1791
|
+
this._runCallback(element);
|
1792
|
+
} else {
|
1793
|
+
this._preselectSingle();
|
1794
|
+
}
|
1795
|
+
}
|
1739
1796
|
|
1740
|
-
|
1797
|
+
async _runCallback(element) {
|
1798
|
+
const callbackId = element.dataset.callbackId;
|
1799
|
+
|
1800
|
+
if (this._callbackAttemptsExceeded(callbackId)) {
|
1801
|
+
this._dequeueCallback(callbackId);
|
1802
|
+
return
|
1803
|
+
} else {
|
1804
|
+
this._recordCallbackAttempt(callbackId);
|
1805
|
+
}
|
1806
|
+
|
1807
|
+
if (this._isNextCallback(callbackId)) {
|
1808
|
+
const inputType = element.dataset.inputType;
|
1809
|
+
const delay = window.HOTWIRE_COMBOBOX_STREAM_DELAY;
|
1741
1810
|
|
1742
|
-
if (inputType === "hw:multiselectSync") {
|
1743
|
-
this.openByFocusing();
|
1744
|
-
} else if (inputType && inputType !== "hw:lockInSelection") {
|
1745
1811
|
if (delay) await sleep(delay);
|
1746
|
-
this.
|
1812
|
+
this._dequeueCallback(callbackId);
|
1813
|
+
this._resetMultiselectionMarks();
|
1814
|
+
|
1815
|
+
if (inputType === "hw:multiselectSync") {
|
1816
|
+
this.openByFocusing();
|
1817
|
+
} else if (inputType !== "hw:lockInSelection") {
|
1818
|
+
this._selectOnQuery(inputType);
|
1819
|
+
}
|
1747
1820
|
} else {
|
1748
|
-
|
1821
|
+
await nextRepaint();
|
1822
|
+
this._runCallback(element);
|
1749
1823
|
}
|
1750
1824
|
}
|
1751
1825
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
HotwireCombobox 0.3.
|
2
|
+
HotwireCombobox 0.3.2
|
3
3
|
*/
|
4
4
|
(function (global, factory) {
|
5
5
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@hotwired/stimulus')) :
|
@@ -208,6 +208,50 @@ HotwireCombobox 0.3.1
|
|
208
208
|
}
|
209
209
|
};
|
210
210
|
|
211
|
+
const MAX_CALLBACK_ATTEMPTS = 3;
|
212
|
+
|
213
|
+
Combobox.Callbacks = Base => class extends Base {
|
214
|
+
_initializeCallbacks() {
|
215
|
+
this.callbackQueue = [];
|
216
|
+
this.callbackExecutionAttempts = {};
|
217
|
+
}
|
218
|
+
|
219
|
+
_enqueueCallback() {
|
220
|
+
const callbackId = crypto.randomUUID();
|
221
|
+
this.callbackQueue.push(callbackId);
|
222
|
+
return callbackId
|
223
|
+
}
|
224
|
+
|
225
|
+
_isNextCallback(callbackId) {
|
226
|
+
return this._nextCallback === callbackId
|
227
|
+
}
|
228
|
+
|
229
|
+
_callbackAttemptsExceeded(callbackId) {
|
230
|
+
return this._callbackAttempts(callbackId) > MAX_CALLBACK_ATTEMPTS
|
231
|
+
}
|
232
|
+
|
233
|
+
_callbackAttempts(callbackId) {
|
234
|
+
return this.callbackExecutionAttempts[callbackId] || 0
|
235
|
+
}
|
236
|
+
|
237
|
+
_recordCallbackAttempt(callbackId) {
|
238
|
+
this.callbackExecutionAttempts[callbackId] = this._callbackAttempts(callbackId) + 1;
|
239
|
+
}
|
240
|
+
|
241
|
+
_dequeueCallback(callbackId) {
|
242
|
+
this.callbackQueue = this.callbackQueue.filter(id => id !== callbackId);
|
243
|
+
this._forgetCallbackExecutionAttempts(callbackId);
|
244
|
+
}
|
245
|
+
|
246
|
+
_forgetCallbackExecutionAttempts(callbackId) {
|
247
|
+
delete this.callbackExecutionAttempts[callbackId];
|
248
|
+
}
|
249
|
+
|
250
|
+
get _nextCallback() {
|
251
|
+
return this.callbackQueue[0]
|
252
|
+
}
|
253
|
+
};
|
254
|
+
|
211
255
|
Combobox.Dialog = Base => class extends Base {
|
212
256
|
rerouteListboxStreamToDialog({ detail: { newStream } }) {
|
213
257
|
if (newStream.target == this.listboxTarget.id && this._dialogIsOpen) {
|
@@ -596,6 +640,12 @@ HotwireCombobox 0.3.1
|
|
596
640
|
}
|
597
641
|
}
|
598
642
|
|
643
|
+
clear(event) {
|
644
|
+
this._clearQuery();
|
645
|
+
this.chipDismisserTargets.forEach(el => el.click());
|
646
|
+
if (event && !event.defaultPrevented) event.target.focus();
|
647
|
+
}
|
648
|
+
|
599
649
|
_initializeFiltering() {
|
600
650
|
this._debouncedFilterAsync = debounce(this._debouncedFilterAsync.bind(this));
|
601
651
|
}
|
@@ -618,7 +668,8 @@ HotwireCombobox 0.3.1
|
|
618
668
|
const query = {
|
619
669
|
q: this._fullQuery,
|
620
670
|
input_type: inputType,
|
621
|
-
for_id: this.element.dataset.asyncId
|
671
|
+
for_id: this.element.dataset.asyncId,
|
672
|
+
callback_id: this._enqueueCallback()
|
622
673
|
};
|
623
674
|
|
624
675
|
await get(this.asyncSrcValue, { responseKind: "turbo-stream", query });
|
@@ -639,7 +690,7 @@ HotwireCombobox 0.3.1
|
|
639
690
|
}
|
640
691
|
|
641
692
|
_markQueried() {
|
642
|
-
this.
|
693
|
+
this._forAllComboboxes(el => el.toggleAttribute("data-queried", this._isQueried));
|
643
694
|
}
|
644
695
|
|
645
696
|
get _isQueried() {
|
@@ -1661,6 +1712,7 @@ HotwireCombobox 0.3.1
|
|
1661
1712
|
Combobox.Announcements,
|
1662
1713
|
Combobox.AsyncLoading,
|
1663
1714
|
Combobox.Autocomplete,
|
1715
|
+
Combobox.Callbacks,
|
1664
1716
|
Combobox.Dialog,
|
1665
1717
|
Combobox.Events,
|
1666
1718
|
Combobox.Filtering,
|
@@ -1712,6 +1764,7 @@ HotwireCombobox 0.3.1
|
|
1712
1764
|
initialize() {
|
1713
1765
|
this._initializeActors();
|
1714
1766
|
this._initializeFiltering();
|
1767
|
+
this._initializeCallbacks();
|
1715
1768
|
}
|
1716
1769
|
|
1717
1770
|
connect() {
|
@@ -1738,18 +1791,39 @@ HotwireCombobox 0.3.1
|
|
1738
1791
|
}
|
1739
1792
|
|
1740
1793
|
async endOfOptionsStreamTargetConnected(element) {
|
1741
|
-
|
1742
|
-
|
1794
|
+
if (element.dataset.callbackId) {
|
1795
|
+
this._runCallback(element);
|
1796
|
+
} else {
|
1797
|
+
this._preselectSingle();
|
1798
|
+
}
|
1799
|
+
}
|
1743
1800
|
|
1744
|
-
|
1801
|
+
async _runCallback(element) {
|
1802
|
+
const callbackId = element.dataset.callbackId;
|
1803
|
+
|
1804
|
+
if (this._callbackAttemptsExceeded(callbackId)) {
|
1805
|
+
this._dequeueCallback(callbackId);
|
1806
|
+
return
|
1807
|
+
} else {
|
1808
|
+
this._recordCallbackAttempt(callbackId);
|
1809
|
+
}
|
1810
|
+
|
1811
|
+
if (this._isNextCallback(callbackId)) {
|
1812
|
+
const inputType = element.dataset.inputType;
|
1813
|
+
const delay = window.HOTWIRE_COMBOBOX_STREAM_DELAY;
|
1745
1814
|
|
1746
|
-
if (inputType === "hw:multiselectSync") {
|
1747
|
-
this.openByFocusing();
|
1748
|
-
} else if (inputType && inputType !== "hw:lockInSelection") {
|
1749
1815
|
if (delay) await sleep(delay);
|
1750
|
-
this.
|
1816
|
+
this._dequeueCallback(callbackId);
|
1817
|
+
this._resetMultiselectionMarks();
|
1818
|
+
|
1819
|
+
if (inputType === "hw:multiselectSync") {
|
1820
|
+
this.openByFocusing();
|
1821
|
+
} else if (inputType !== "hw:lockInSelection") {
|
1822
|
+
this._selectOnQuery(inputType);
|
1823
|
+
}
|
1751
1824
|
} else {
|
1752
|
-
|
1825
|
+
await nextRepaint();
|
1826
|
+
this._runCallback(element);
|
1753
1827
|
}
|
1754
1828
|
}
|
1755
1829
|
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import Combobox from "hw_combobox/models/combobox/base"
|
2
|
+
|
3
|
+
const MAX_CALLBACK_ATTEMPTS = 3
|
4
|
+
|
5
|
+
Combobox.Callbacks = Base => class extends Base {
|
6
|
+
_initializeCallbacks() {
|
7
|
+
this.callbackQueue = []
|
8
|
+
this.callbackExecutionAttempts = {}
|
9
|
+
}
|
10
|
+
|
11
|
+
_enqueueCallback() {
|
12
|
+
const callbackId = crypto.randomUUID()
|
13
|
+
this.callbackQueue.push(callbackId)
|
14
|
+
return callbackId
|
15
|
+
}
|
16
|
+
|
17
|
+
_isNextCallback(callbackId) {
|
18
|
+
return this._nextCallback === callbackId
|
19
|
+
}
|
20
|
+
|
21
|
+
_callbackAttemptsExceeded(callbackId) {
|
22
|
+
return this._callbackAttempts(callbackId) > MAX_CALLBACK_ATTEMPTS
|
23
|
+
}
|
24
|
+
|
25
|
+
_callbackAttempts(callbackId) {
|
26
|
+
return this.callbackExecutionAttempts[callbackId] || 0
|
27
|
+
}
|
28
|
+
|
29
|
+
_recordCallbackAttempt(callbackId) {
|
30
|
+
this.callbackExecutionAttempts[callbackId] = this._callbackAttempts(callbackId) + 1
|
31
|
+
}
|
32
|
+
|
33
|
+
_dequeueCallback(callbackId) {
|
34
|
+
this.callbackQueue = this.callbackQueue.filter(id => id !== callbackId)
|
35
|
+
this._forgetCallbackExecutionAttempts(callbackId)
|
36
|
+
}
|
37
|
+
|
38
|
+
_forgetCallbackExecutionAttempts(callbackId) {
|
39
|
+
delete this.callbackExecutionAttempts[callbackId]
|
40
|
+
}
|
41
|
+
|
42
|
+
get _nextCallback() {
|
43
|
+
return this.callbackQueue[0]
|
44
|
+
}
|
45
|
+
}
|
@@ -14,6 +14,12 @@ Combobox.Filtering = Base => class extends Base {
|
|
14
14
|
}
|
15
15
|
}
|
16
16
|
|
17
|
+
clear(event) {
|
18
|
+
this._clearQuery()
|
19
|
+
this.chipDismisserTargets.forEach(el => el.click())
|
20
|
+
if (event && !event.defaultPrevented) event.target.focus()
|
21
|
+
}
|
22
|
+
|
17
23
|
_initializeFiltering() {
|
18
24
|
this._debouncedFilterAsync = debounce(this._debouncedFilterAsync.bind(this))
|
19
25
|
}
|
@@ -36,7 +42,8 @@ Combobox.Filtering = Base => class extends Base {
|
|
36
42
|
const query = {
|
37
43
|
q: this._fullQuery,
|
38
44
|
input_type: inputType,
|
39
|
-
for_id: this.element.dataset.asyncId
|
45
|
+
for_id: this.element.dataset.asyncId,
|
46
|
+
callback_id: this._enqueueCallback()
|
40
47
|
}
|
41
48
|
|
42
49
|
await get(this.asyncSrcValue, { responseKind: "turbo-stream", query })
|
@@ -57,7 +64,7 @@ Combobox.Filtering = Base => class extends Base {
|
|
57
64
|
}
|
58
65
|
|
59
66
|
_markQueried() {
|
60
|
-
this.
|
67
|
+
this._forAllComboboxes(el => el.toggleAttribute("data-queried", this._isQueried))
|
61
68
|
}
|
62
69
|
|
63
70
|
get _isQueried() {
|
@@ -4,6 +4,7 @@ import "hw_combobox/models/combobox/actors"
|
|
4
4
|
import "hw_combobox/models/combobox/announcements"
|
5
5
|
import "hw_combobox/models/combobox/async_loading"
|
6
6
|
import "hw_combobox/models/combobox/autocomplete"
|
7
|
+
import "hw_combobox/models/combobox/callbacks"
|
7
8
|
import "hw_combobox/models/combobox/dialog"
|
8
9
|
import "hw_combobox/models/combobox/events"
|
9
10
|
import "hw_combobox/models/combobox/filtering"
|
@@ -246,7 +246,7 @@ class HotwireCombobox::Component
|
|
246
246
|
elsif async_src && form_object&.respond_to?(name)
|
247
247
|
form_object.public_send name
|
248
248
|
else
|
249
|
-
options.find_by_value(hidden_field_value)&.autocompletable_as
|
249
|
+
options.find_by_value(hidden_field_value)&.autocompletable_as || hidden_field_value
|
250
250
|
end
|
251
251
|
end
|
252
252
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<%# locals: (for_id:, src:) -%>
|
2
2
|
|
3
3
|
<%= tag.li id: hw_pagination_frame_wrapper_id(for_id), class: "hw_combobox__pagination__wrapper",
|
4
|
-
data: { hw_combobox_target: "endOfOptionsStream", input_type: params[:input_type] },
|
4
|
+
data: { hw_combobox_target: "endOfOptionsStream", input_type: params[:input_type], callback_id: params[:callback_id] },
|
5
5
|
aria: { hidden: true } do %>
|
6
6
|
<%= turbo_frame_tag hw_pagination_frame_id(for_id), src: src, loading: :lazy %>
|
7
7
|
<% 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.3.
|
4
|
+
version: 0.3.2
|
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-
|
11
|
+
date: 2024-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -87,6 +87,7 @@ files:
|
|
87
87
|
- app/assets/javascripts/hw_combobox/models/combobox/async_loading.js
|
88
88
|
- app/assets/javascripts/hw_combobox/models/combobox/autocomplete.js
|
89
89
|
- app/assets/javascripts/hw_combobox/models/combobox/base.js
|
90
|
+
- app/assets/javascripts/hw_combobox/models/combobox/callbacks.js
|
90
91
|
- app/assets/javascripts/hw_combobox/models/combobox/dialog.js
|
91
92
|
- app/assets/javascripts/hw_combobox/models/combobox/events.js
|
92
93
|
- app/assets/javascripts/hw_combobox/models/combobox/filtering.js
|
@@ -144,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
145
|
- !ruby/object:Gem::Version
|
145
146
|
version: '0'
|
146
147
|
requirements: []
|
147
|
-
rubygems_version: 3.5.
|
148
|
+
rubygems_version: 3.5.11
|
148
149
|
signing_key:
|
149
150
|
specification_version: 4
|
150
151
|
summary: Accessible Autocomplete for Rails apps
|