38 lines
836 B
TypeScript
38 lines
836 B
TypeScript
|
export function useStringSort() {
|
||
|
const accountStore = useAccountStore();
|
||
|
const localeCompare = computed(() => Intl.Collator(
|
||
|
accountStore.activeLocale,
|
||
|
{
|
||
|
usage: "sort",
|
||
|
numeric: true,
|
||
|
sensitivity: "base",
|
||
|
},
|
||
|
).compare);
|
||
|
return function stringSort(a: string, b: string) {
|
||
|
return localeCompare.value(a, b);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export function useFuzzyMatch() {
|
||
|
const accountStore = useAccountStore();
|
||
|
const localeCompare = computed(() => Intl.Collator(
|
||
|
accountStore.activeLocale,
|
||
|
{
|
||
|
usage: "search",
|
||
|
sensitivity: "base",
|
||
|
},
|
||
|
).compare);
|
||
|
return function fuzzyMatch(pattern: string, text: string) {
|
||
|
let pos = 0;
|
||
|
for (const char of text) {
|
||
|
if (localeCompare.value(char, pattern[pos]) === 0) {
|
||
|
pos += 1;
|
||
|
if (pos === pattern.length) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return pos === pattern.length;
|
||
|
}
|
||
|
}
|