aboutsummaryrefslogtreecommitdiff
path: root/resources/vue/components/AdminCourses.vue
diff options
context:
space:
mode:
Diffstat (limited to 'resources/vue/components/AdminCourses.vue')
-rw-r--r--resources/vue/components/AdminCourses.vue45
1 files changed, 23 insertions, 22 deletions
diff --git a/resources/vue/components/AdminCourses.vue b/resources/vue/components/AdminCourses.vue
index a2f61d7..d24a900 100644
--- a/resources/vue/components/AdminCourses.vue
+++ b/resources/vue/components/AdminCourses.vue
@@ -23,7 +23,7 @@
<th v-for="activeField in sortedActivatedFields" :key="`field-${activeField}`" :class="sort.by === activeField ? 'sort' + sort.direction.toLowerCase() : ''">
<a href="#"
@click.prevent="changeSort(activeField)"
- :title="sort.by === activeField && sort.direction === 'ASC' ? $gettextInterpolate('Sortiert aufsteigend nach %{field}', {field: fields[activeField]}) : (sort.by === activeField && sort.direction === 'DESC' ? $gettextInterpolate('Sortiert absteigend nach %{ field } ', { field: fields[activeField]}) : $gettextInterpolate('Sortieren nach %{ field }', { field: fields[activeField]}))"
+ :title="sort.by === activeField && sort.direction === 'ASC' ? $gettextInterpolate('Sortiert aufsteigend nach %{field}', {field: fields[activeField]}, true) : (sort.by === activeField && sort.direction === 'DESC' ? $gettextInterpolate('Sortiert absteigend nach %{ field } ', { field: fields[activeField]}, true) : $gettextInterpolate('Sortieren nach %{ field }', { field: fields[activeField]}, true))"
v-if="!unsortableFields.includes(activeField)"
>
{{ fields[activeField] }}
@@ -221,22 +221,28 @@ export default {
});
},
sortArray (array) {
+ const mappedFields = {
+ last_activity: 'last_activity_raw',
+ semester: 'semester_sort',
+ };
+
if (!array.length) {
return [];
}
- let sortby = this.sort.by;
- if (!this.activatedFields.includes(sortby) && sortby !== 'completion') {
+ if (!this.activatedFields.includes(this.sort.by) && this.sort.by !== 'completion') {
return array;
}
const striptags = function (text) {
- if (typeof text === "string") {
+ if (typeof text === 'string') {
return text.replace(/(<([^>]+)>)/gi, "");
} else {
return text;
}
};
+ let sortby = mappedFields[this.sort.by] ?? this.sort.by;
+
// Define sort direction by this factor
const directionFactor = this.sort.direction === 'ASC' ? 1 : -1;
@@ -246,33 +252,28 @@ export default {
sensitivity: 'base'
});
let sortFunction = function (a, b) {
- return collator.compare(striptags(a[sortby]), striptags(b[sortby]));
+ return collator.compare(striptags(a[sortby]), striptags(b[sortby]))
+ || collator.compare(striptags(a.number), striptags(b.number));
};
- if (sortby === 'last_activity') {
- sortFunction = (a, b) => a.last_activity_raw - b.last_activity_raw;
- } else if (sortby === 'name') {
- sortFunction = (a, b) => {
- return collator.compare(striptags(a.name), striptags(b.name))
- || collator.compare(striptags(a.number), striptags(b.number));
- };
- } else if (sortby === 'number') {
+ if (sortby === 'number') {
sortFunction = (a, b) => {
return collator.compare(striptags(a.number), striptags(b.number))
|| collator.compare(striptags(a.name), striptags(b.name));
};
} else {
- let is_numeric = true;
- for (let i in array) {
- if (striptags(array[i][sortby]) && isNaN(striptags(array[i][sortby]))) {
- is_numeric = false;
- break;
- }
- }
+ let is_numeric = !array.some(i => {
+ const value = striptags(i[sortby]);
+ return value && isNaN(parseInt(value, 10));
+ });
+
if (is_numeric) {
sortFunction = function (a, b) {
- return (striptags(a[sortby]) ? parseInt(striptags(a[sortby]), 10) : 0)
- - (striptags(b[sortby]) ? parseInt(striptags(b[sortby]), 10) : 0);
+ const aValue = (striptags(a[sortby]) ? parseInt(striptags(a[sortby]), 10) : 0);
+ const bValue = (striptags(b[sortby]) ? parseInt(striptags(b[sortby]), 10) : 0);
+
+ return aValue - bValue
+ || collator.compare(striptags(a.number), striptags(b.number));
};
}
}