Skip to content

Commit 31e8cc8

Browse files
committed
[Autocomplete] Allow configuring TomSelect’s labelField
1 parent 89c7fa9 commit 31e8cc8

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

src/Autocomplete/assets/dist/controller.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
1515
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1616
PERFORMANCE OF THIS SOFTWARE.
1717
***************************************************************************** */
18-
/* global Reflect, Promise, SuppressedError, Symbol */
18+
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */
1919

2020

2121
function __classPrivateFieldGet(receiver, state, kind, f) {
@@ -261,22 +261,26 @@ _default_1_instances = new WeakSet(), _default_1_getCommonConfig = function _def
261261
});
262262
return __classPrivateFieldGet(this, _default_1_instances, "m", _default_1_createTomSelect).call(this, config);
263263
}, _default_1_createAutocompleteWithHtmlContents = function _default_1_createAutocompleteWithHtmlContents() {
264-
const config = __classPrivateFieldGet(this, _default_1_instances, "m", _default_1_mergeObjects).call(this, __classPrivateFieldGet(this, _default_1_instances, "m", _default_1_getCommonConfig).call(this), {
264+
const commonConfig = __classPrivateFieldGet(this, _default_1_instances, "m", _default_1_getCommonConfig).call(this);
265+
const labelField = commonConfig.labelField ?? 'text';
266+
const config = __classPrivateFieldGet(this, _default_1_instances, "m", _default_1_mergeObjects).call(this, commonConfig, {
265267
maxOptions: this.getMaxOptions(),
266268
score: (search) => {
267269
const scoringFunction = this.tomSelect.getScoreFunction(search);
268270
return (item) => {
269-
return scoringFunction({ ...item, text: __classPrivateFieldGet(this, _default_1_instances, "m", _default_1_stripTags).call(this, item.text) });
271+
return scoringFunction({ ...item, text: __classPrivateFieldGet(this, _default_1_instances, "m", _default_1_stripTags).call(this, item[labelField]) });
270272
};
271273
},
272274
render: {
273-
item: (item) => `<div>${item.text}</div>`,
274-
option: (item) => `<div>${item.text}</div>`,
275+
item: (item) => `<div>${item[labelField]}</div>`,
276+
option: (item) => `<div>${item[labelField]}</div>`,
275277
},
276278
});
277279
return __classPrivateFieldGet(this, _default_1_instances, "m", _default_1_createTomSelect).call(this, config);
278280
}, _default_1_createAutocompleteWithRemoteData = function _default_1_createAutocompleteWithRemoteData(autocompleteEndpointUrl, minCharacterLength) {
279-
const config = __classPrivateFieldGet(this, _default_1_instances, "m", _default_1_mergeObjects).call(this, __classPrivateFieldGet(this, _default_1_instances, "m", _default_1_getCommonConfig).call(this), {
281+
const commonConfig = __classPrivateFieldGet(this, _default_1_instances, "m", _default_1_getCommonConfig).call(this);
282+
const labelField = commonConfig.labelField ?? 'text';
283+
const config = __classPrivateFieldGet(this, _default_1_instances, "m", _default_1_mergeObjects).call(this, commonConfig, {
280284
firstUrl: (query) => {
281285
const separator = autocompleteEndpointUrl.includes('?') ? '&' : '?';
282286
return `${autocompleteEndpointUrl}${separator}query=${encodeURIComponent(query)}`;
@@ -306,8 +310,8 @@ _default_1_instances = new WeakSet(), _default_1_getCommonConfig = function _def
306310
optgroupField: 'group_by',
307311
score: (search) => (item) => 1,
308312
render: {
309-
option: (item) => `<div>${item.text}</div>`,
310-
item: (item) => `<div>${item.text}</div>`,
313+
option: (item) => `<div>${item[labelField]}</div>`,
314+
item: (item) => `<div>${item[labelField]}</div>`,
311315
loading_more: () => {
312316
return `<div class="loading-more-results">${this.loadingMoreTextValue}</div>`;
313317
},

src/Autocomplete/assets/src/controller.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -177,26 +177,32 @@ export default class extends Controller {
177177
}
178178

179179
#createAutocompleteWithHtmlContents(): TomSelect {
180-
const config = this.#mergeObjects(this.#getCommonConfig(), {
180+
const commonConfig = this.#getCommonConfig();
181+
const labelField = commonConfig.labelField ?? 'text';
182+
183+
const config = this.#mergeObjects(commonConfig, {
181184
maxOptions: this.getMaxOptions(),
182185
score: (search: string) => {
183186
const scoringFunction = this.tomSelect.getScoreFunction(search);
184187
return (item: any) => {
185188
// strip HTML tags from each option's searchable text
186-
return scoringFunction({ ...item, text: this.#stripTags(item.text) });
189+
return scoringFunction({ ...item, text: this.#stripTags(item[labelField]) });
187190
};
188191
},
189192
render: {
190-
item: (item: any) => `<div>${item.text}</div>`,
191-
option: (item: any) => `<div>${item.text}</div>`,
193+
item: (item: any) => `<div>${item[labelField]}</div>`,
194+
option: (item: any) => `<div>${item[labelField]}</div>`,
192195
},
193196
});
194197

195198
return this.#createTomSelect(config);
196199
}
197200

198201
#createAutocompleteWithRemoteData(autocompleteEndpointUrl: string, minCharacterLength: number | null): TomSelect {
199-
const config: RecursivePartial<TomSettings> = this.#mergeObjects(this.#getCommonConfig(), {
202+
const commonConfig = this.#getCommonConfig();
203+
const labelField = commonConfig.labelField ?? 'text';
204+
205+
const config: RecursivePartial<TomSettings> = this.#mergeObjects(commonConfig, {
200206
firstUrl: (query: string) => {
201207
const separator = autocompleteEndpointUrl.includes('?') ? '&' : '?';
202208

@@ -241,8 +247,8 @@ export default class extends Controller {
241247
// avoid extra filtering after results are returned
242248
score: (search: string) => (item: any) => 1,
243249
render: {
244-
option: (item: any) => `<div>${item.text}</div>`,
245-
item: (item: any) => `<div>${item.text}</div>`,
250+
option: (item: any) => `<div>${item[labelField]}</div>`,
251+
item: (item: any) => `<div>${item[labelField]}</div>`,
246252
loading_more: (): string => {
247253
return `<div class="loading-more-results">${this.loadingMoreTextValue}</div>`;
248254
},

0 commit comments

Comments
 (0)