Skip to content

Commit e2abe27

Browse files
[6.x] Search instructions when searching sets (#13727)
Co-authored-by: Jason Varga <jason@pixelfear.com>
1 parent be4d19f commit e2abe27

1 file changed

Lines changed: 18 additions & 14 deletions

File tree

resources/js/components/fieldtypes/replicator/SetPicker.vue

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ body:has(:is(.bard-fullscreen, .replicator-fullscreen)) [data-reka-popper-conten
193193

194194
<script>
195195
import { Primitive } from 'reka-ui';
196+
import fuzzysort from 'fuzzysort';
196197
197198
export default {
198199
emits: ['added', 'clicked-away'],
@@ -263,14 +264,7 @@ export default {
263264
}, []);
264265
265266
if (this.search) {
266-
return sets
267-
.filter((set) => !set.hide)
268-
.filter((set) => {
269-
return (
270-
__(set.display).toLowerCase().includes(this.search.toLowerCase()) ||
271-
set.handle.toLowerCase().includes(this.search.toLowerCase())
272-
);
273-
});
267+
sets = this.filterSetsBySearch(sets);
274268
}
275269
276270
return sets.filter((set) => !set.hide);
@@ -317,12 +311,7 @@ export default {
317311
318312
// Apply search filter if there's a search term
319313
if (this.search) {
320-
filteredSets = filteredSets.filter(set => {
321-
return (
322-
__(set.display).toLowerCase().includes(this.search.toLowerCase()) ||
323-
set.handle.toLowerCase().includes(this.search.toLowerCase())
324-
);
325-
});
314+
filteredSets = this.filterSetsBySearch(filteredSets);
326315
}
327316
328317
groups[group.handle] = {
@@ -479,6 +468,21 @@ export default {
479468
isSetLoading(handle) {
480469
return this.loadingSet === handle;
481470
},
471+
472+
filterSetsBySearch(sets) {
473+
return fuzzysort
474+
.go(this.search, sets, {
475+
all: true,
476+
keys: [(set) => __(set.display), 'handle', (set) => __(set.instructions)],
477+
scoreFn: (scores) => {
478+
const displayScore = scores[0]?.score ?? -Infinity;
479+
const handleScore = scores[1]?.score ?? -Infinity;
480+
const instructionsScore = (scores[2]?.score ?? -Infinity) * 0.5;
481+
return Math.max(displayScore, handleScore, instructionsScore);
482+
},
483+
})
484+
.map((result) => result.obj);
485+
}
482486
},
483487
};
484488
</script>

0 commit comments

Comments
 (0)