score weight + quantils tooltip
This commit is contained in:
42
src/components/table/sort.ts
Normal file
42
src/components/table/sort.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import { MaybeRefOrGetter, computed, ref, toValue } from "vue";
|
||||
|
||||
export type SortDirection = "asc" | "desc";
|
||||
export type UseSortOptions = {
|
||||
defaultSortKey?: string;
|
||||
defaultSortDirection?: SortDirection;
|
||||
};
|
||||
|
||||
export const useSort = <T>(array: MaybeRefOrGetter<T[]>, options?: UseSortOptions) => {
|
||||
const sortKey = ref<string | null>(options?.defaultSortKey ?? null);
|
||||
const sortDirection = ref<SortDirection | null>(options?.defaultSortDirection ?? null);
|
||||
const sortBy = (key: string, direction: SortDirection) => {
|
||||
sortKey.value = key;
|
||||
sortDirection.value = direction;
|
||||
};
|
||||
const headerProps = computed(() => ({
|
||||
onSort: sortBy,
|
||||
currentSortKey: sortKey.value,
|
||||
sortDirection: sortDirection.value,
|
||||
}));
|
||||
|
||||
const sortedArray = computed(() => toValue(array).sort((a, b) => {
|
||||
if (sortKey.value === null || sortDirection.value === null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const aValue = (a as any)[sortKey.value];
|
||||
const bValue = (b as any)[sortKey.value];
|
||||
|
||||
if (aValue === bValue) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (sortDirection.value === "asc") {
|
||||
return aValue > bValue ? 1 : -1;
|
||||
} else {
|
||||
return aValue > bValue ? -1 : 1;
|
||||
}
|
||||
}));
|
||||
|
||||
return { sortedArray, headerProps };
|
||||
}
|
||||
Reference in New Issue
Block a user