2025-06-30 18:58:24 +02:00
|
|
|
/*
|
|
|
|
SPDX-FileCopyrightText: © 2025 Hornwitser <code@hornwitser.no>
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
*/
|
2025-06-27 18:13:51 +02:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|