From f0b8b46eb70cbab76cf4b0457f633a47444da74e Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 15 Jan 2026 17:52:56 +0100 Subject: [PATCH] fix sort order pins fix group pins to be limited to the one group remove console --- backend/src/graphql/resolvers/posts.ts | 16 +++++++++++++++- backend/src/graphql/types/type/Post.gql | 4 ++++ webapp/pages/groups/_id/_slug.vue | 4 ++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/backend/src/graphql/resolvers/posts.ts b/backend/src/graphql/resolvers/posts.ts index 0eba1cda4..847212027 100644 --- a/backend/src/graphql/resolvers/posts.ts +++ b/backend/src/graphql/resolvers/posts.ts @@ -29,6 +29,16 @@ const maintainPinnedPosts = (params) => { return params } +const maintainGroupPinnedPosts = (params) => { + const pinnedPostFilter = { groupPinned: true, group: params.filter.group } + if (isEmpty(params.filter)) { + params.filter = { OR: [pinnedPostFilter, {}] } + } else { + params.filter = { OR: [pinnedPostFilter, { ...params.filter }] } + } + return params +} + const filterEventDates = (params) => { if (params.filter?.eventStart_gte) { const date = params.filter.eventStart_gte @@ -52,6 +62,7 @@ export default { params = await filterPostsOfMyGroups(params, context) params = await filterInvisiblePosts(params, context) params = await filterForMutedUsers(params, context) + params = await maintainGroupPinnedPosts(params) return neo4jgraphql(object, params, context, resolveInfo) }, PostsEmotionsCountByEmotion: async (_object, params, context, _resolveInfo) => { @@ -468,7 +479,8 @@ export default { await context.database.write({ query: ` MATCH (post:Post {id: $params.id})-[:IN]->(group:Group) - MATCH (:User)-[pinned:GROUP_PINNED]->(:Post)-[:IN]->(:Group {id: group.id}) + MATCH (:User)-[pinned:GROUP_PINNED]->(oldPinnedPost:Post)-[:IN]->(:Group {id: group.id}) + REMOVE oldPinnedPost.groupPinned DELETE pinned`, variables: { user: context.user, params }, }) @@ -492,6 +504,7 @@ export default { MATCH (user:User {id: $user.id}) MATCH (post:Post {id: $params.id})-[:IN]->(group:Group) MERGE (user)-[pinned:GROUP_PINNED{createdAt: toString(datetime())}]->(post) + SET post.groupPinned = true RETURN post {.*, pinnedAt: pinned.createdAt}`, variables: { user: context.user, params }, }) @@ -505,6 +518,7 @@ export default { MATCH (post:Post {id: $postId}) OPTIONAL MATCH (:User)-[pinned:GROUP_PINNED]->(post) DELETE pinned + REMOVE post.groupPinned RETURN post {.*}`, variables: { postId: params.id }, }) diff --git a/backend/src/graphql/types/type/Post.gql b/backend/src/graphql/types/type/Post.gql index e48800d4a..e012ceaf5 100644 --- a/backend/src/graphql/types/type/Post.gql +++ b/backend/src/graphql/types/type/Post.gql @@ -49,6 +49,7 @@ input _PostFilter { language_in: [String!] language_not_in: [String!] pinned: Boolean # required for `maintainPinnedPost` + groupPinned: Boolean # required for `maintainGroupPinnedPost` tags: _TagFilter tags_not: _TagFilter tags_in: [_TagFilter!] @@ -86,6 +87,7 @@ input _PostFilter { postType_in: [PostType] eventStart_gte: String eventEnd_gte: String + } enum _PostOrdering { @@ -111,6 +113,8 @@ enum _PostOrdering { pinned_desc eventStart_asc eventStart_desc + groupPinned_asc + groupPinned_desc } diff --git a/webapp/pages/groups/_id/_slug.vue b/webapp/pages/groups/_id/_slug.vue index 7973b2d73..2bd518260 100644 --- a/webapp/pages/groups/_id/_slug.vue +++ b/webapp/pages/groups/_id/_slug.vue @@ -470,7 +470,7 @@ export default { offset: this.offset, filter: this.filter, first: this.pageSize, - orderBy: 'sortDate_desc', + orderBy: ['groupPinned_asc', 'sortDate_desc'], }, updateQuery: UpdateQuery(this, { $state, pageKey: 'profilePagePosts' }), }) @@ -579,7 +579,7 @@ export default { filter: this.filter, first: this.pageSize, offset: 0, - orderBy: 'sortDate_desc', + orderBy: ['groupPinned_asc', 'sortDate_desc'], } }, update({ profilePagePosts }) {