@@ -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+
6973watch (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
125137let observer = new IntersectionObserver (
0 commit comments