34 lines
756 B
JavaScript
34 lines
756 B
JavaScript
import { ref, computed } from 'vue';
|
|
|
|
export default function useSort(availableItems, sortProp) {
|
|
const sorting = ref(null);
|
|
const displayedUsers = computed(function() {
|
|
if (!sorting.value) {
|
|
return availableItems.value;
|
|
}
|
|
return availableItems.value.slice().sort((item1, item2) => {
|
|
if (sorting.value === 'asc' && item1[sortProp] > item2[sortProp]) {
|
|
return 1;
|
|
} else if (sorting.value === 'asc') {
|
|
return -1;
|
|
} else if (
|
|
sorting.value === 'desc' &&
|
|
item1[sortProp] > item2[sortProp]
|
|
) {
|
|
return -1;
|
|
} else {
|
|
return 1;
|
|
}
|
|
});
|
|
});
|
|
|
|
function sort(mode) {
|
|
sorting.value = mode;
|
|
}
|
|
return {
|
|
displayedUsers,
|
|
sort,
|
|
sorting
|
|
};
|
|
}
|