Skip to content

Commit de5b5b1

Browse files
committed
feature #2382 [Autocomplete] Allow configuring TomSelect’s labelField (MatTheCat)
This PR was merged into the 2.x branch. Discussion ---------- [Autocomplete] Allow configuring TomSelect’s `labelField` | Q | A | ------------- | --- | Bug fix? | no | New feature? | yes | Issues | Fix #2375 | License | MIT Commits ------- aeaec35 [Autocomplete] Allow configuring TomSelect’s `labelField`
2 parents 7bef0bf + aeaec35 commit de5b5b1

File tree

3 files changed

+28
-14
lines changed

3 files changed

+28
-14
lines changed

src/Autocomplete/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# CHANGELOG
22

3+
## 2.22.0
4+
5+
- Take `labelField` TomSelect option into account #2382
6+
37
## 2.21.0
48

59
- Translate the `option_create` option from TomSelect with remote data setup #2279

src/Autocomplete/assets/dist/controller.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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)