To avoid hydration matches string operations need to do the same thing on the client and server. Add utilities for performing sorting and fuzzy matching of strings that uses the account's locale.
37 lines
836 B
TypeScript
37 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;
|
|
}
|
|
}
|