Skip to content

Commit a33bcc7

Browse files
Course: Apply natural sort to user course list display - refs #1655
1 parent 3260318 commit a33bcc7

File tree

1 file changed

+41
-29
lines changed

1 file changed

+41
-29
lines changed

assets/vue/views/user/courses/List.vue

+41-29
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ const { result, fetchMore } = useQuery(GET_COURSE_REL_USER, {
6666
after: null,
6767
})
6868
69+
const sortCourses = () => {
70+
courses.value.sort((a, b) => a.title.localeCompare(b.title, undefined, { numeric: true, sensitivity: "base" }))
71+
}
72+
6973
watch(result, (newResult) => {
7074
if (newResult?.courseRelUsers) {
7175
const newCourses = newResult.courseRelUsers.edges.map(({ node }) => node.course)
@@ -74,12 +78,17 @@ watch(result, (newResult) => {
7478
(newCourse) => !courses.value.some((existingCourse) => existingCourse._id === newCourse._id),
7579
)
7680
77-
courses.value.push(...filteredCourses)
81+
if (filteredCourses.length > 0) {
82+
courses.value.push(...filteredCourses)
83+
sortCourses()
84+
}
85+
7886
endCursor.value = newResult.courseRelUsers.pageInfo.endCursor
7987
hasMore.value = newResult.courseRelUsers.pageInfo.hasNextPage
8088
8189
nextTick(() => {
8290
if (lastCourseRef.value) {
91+
observer.unobserve(lastCourseRef.value)
8392
observer.observe(lastCourseRef.value)
8493
}
8594
})
@@ -92,34 +101,37 @@ const loadMoreCourses = () => {
92101
if (!hasMore.value || isLoading.value) return
93102
isLoading.value = true
94103
95-
fetchMore({
96-
variables: {
97-
user: securityStore.user["@id"],
98-
first: 10,
99-
after: endCursor.value,
100-
},
101-
updateQuery: (previousResult, { fetchMoreResult }) => {
102-
if (!fetchMoreResult) return previousResult
103-
104-
const newCourses = fetchMoreResult.courseRelUsers.edges.map(({ node }) => node.course)
105-
const filteredCourses = newCourses.filter(
106-
(newCourse) => !courses.value.some((existingCourse) => existingCourse._id === newCourse._id),
107-
)
108-
courses.value.push(...filteredCourses)
109-
endCursor.value = fetchMoreResult.courseRelUsers.pageInfo.endCursor
110-
hasMore.value = fetchMoreResult.courseRelUsers.pageInfo.hasNextPage
111-
112-
return {
113-
...previousResult,
114-
courseRelUsers: {
115-
...fetchMoreResult.courseRelUsers,
116-
edges: [...previousResult.courseRelUsers.edges, ...fetchMoreResult.courseRelUsers.edges],
117-
},
118-
}
119-
},
120-
}).finally(() => {
121-
isLoading.value = false
122-
})
104+
setTimeout(() => {
105+
fetchMore({
106+
variables: {
107+
user: securityStore.user["@id"],
108+
first: 10,
109+
after: endCursor.value,
110+
},
111+
updateQuery: (previousResult, { fetchMoreResult }) => {
112+
if (!fetchMoreResult) return previousResult
113+
114+
const newCourses = fetchMoreResult.courseRelUsers.edges.map(({ node }) => node.course)
115+
const filteredCourses = newCourses.filter(
116+
(newCourse) => !courses.value.some((existingCourse) => existingCourse._id === newCourse._id),
117+
)
118+
courses.value.push(...filteredCourses)
119+
sortCourses(courses.value)
120+
endCursor.value = fetchMoreResult.courseRelUsers.pageInfo.endCursor
121+
hasMore.value = fetchMoreResult.courseRelUsers.pageInfo.hasNextPage
122+
123+
return {
124+
...previousResult,
125+
courseRelUsers: {
126+
...fetchMoreResult.courseRelUsers,
127+
edges: [...previousResult.courseRelUsers.edges, ...fetchMoreResult.courseRelUsers.edges],
128+
},
129+
}
130+
},
131+
}).finally(() => {
132+
isLoading.value = false
133+
})
134+
}, 300)
123135
}
124136
125137
let observer = new IntersectionObserver(

0 commit comments

Comments
 (0)