From 3d92a61f321ec0990e8d652c401b3005b8687eeb Mon Sep 17 00:00:00 2001 From: Mattermost Build Date: Mon, 4 Sep 2023 11:03:01 +0300 Subject: [PATCH] Fix posts not showing on permalink view (#7531) (#7532) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 0a78b1d804e39f8df08b015b2df41ce95a4b2c42) Co-authored-by: Daniel Espino GarcĂ­a --- app/actions/remote/post.ts | 6 ++---- app/helpers/database/index.ts | 6 ------ app/screens/permalink/permalink.tsx | 9 ++++++++- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/app/actions/remote/post.ts b/app/actions/remote/post.ts index 24535fd99..d557a7d12 100644 --- a/app/actions/remote/post.ts +++ b/app/actions/remote/post.ts @@ -9,11 +9,9 @@ import {addPostAcknowledgement, removePost, removePostAcknowledgement, storePost import {addRecentReaction} from '@actions/local/reactions'; import {createThreadFromNewPost} from '@actions/local/thread'; import {ActionType, General, Post, ServerErrors} from '@constants'; -import {MM_TABLES} from '@constants/database'; import DatabaseManager from '@database/manager'; import {filterPostsInOrderedArray} from '@helpers/api/post'; import {getNeededAtMentionedUsernames} from '@helpers/api/user'; -import {extractRecordsForTable} from '@helpers/database'; import NetworkManager from '@managers/network_manager'; import {getMyChannel, prepareMissingChannelsForAllTeams, queryAllMyChannel} from '@queries/servers/channel'; import {queryAllCustomEmojis} from '@queries/servers/custom_emoji'; @@ -600,7 +598,7 @@ export async function fetchPostThread(serverUrl: string, postId: string, options await operator.batchRecords(models, 'fetchPostThread'); } setFetchingThreadState(postId, false); - return {posts: extractRecordsForTable(posts, MM_TABLES.SERVER.POST)}; + return {posts: result.posts}; } catch (error) { logDebug('error on fetchPostThread', getFullErrorMessage(error)); forceLogoutIfNecessary(serverUrl, error); @@ -668,7 +666,7 @@ export async function fetchPostsAround(serverUrl: string, channelId: string, pos await operator.batchRecords(models, 'fetchPostsAround'); } - return {posts: extractRecordsForTable(posts, MM_TABLES.SERVER.POST)}; + return {posts: data.posts}; } catch (error) { logDebug('error on fetchPostsAround', getFullErrorMessage(error)); forceLogoutIfNecessary(serverUrl, error); diff --git a/app/helpers/database/index.ts b/app/helpers/database/index.ts index f06699d36..4952bee4d 100644 --- a/app/helpers/database/index.ts +++ b/app/helpers/database/index.ts @@ -5,7 +5,6 @@ import xRegExp from 'xregexp'; import {General} from '@constants'; -import type Model from '@nozbe/watermelondb/Model'; import type ChannelModel from '@typings/database/models/servers/channel'; import type MyChannelModel from '@typings/database/models/servers/my_channel'; @@ -26,11 +25,6 @@ type NotifyProps = { NotifyProps, ] -export const extractRecordsForTable = (records: Model[], tableName: string): T[] => { - // @ts-expect-error constructor.table not exposed in type definition - return records.filter((r) => r.constructor.table === tableName) as T[]; -}; - export function extractChannelDisplayName(raw: Pick, record?: ChannelModel) { let displayName = ''; switch (raw.type) { diff --git a/app/screens/permalink/permalink.tsx b/app/screens/permalink/permalink.tsx index 68fce7604..e22ba188a 100644 --- a/app/screens/permalink/permalink.tsx +++ b/app/screens/permalink/permalink.tsx @@ -6,6 +6,7 @@ import {Alert, Text, TouchableOpacity, View} from 'react-native'; import Animated from 'react-native-reanimated'; import {type Edge, SafeAreaView, useSafeAreaInsets} from 'react-native-safe-area-context'; +import {getPosts} from '@actions/local/post'; import {fetchChannelById, joinChannel, switchToChannelById} from '@actions/remote/channel'; import {fetchPostById, fetchPostsAround, fetchPostThread} from '@actions/remote/post'; import {addCurrentUserToTeam, fetchTeamByName, removeCurrentUserFromTeam} from '@actions/remote/team'; @@ -122,6 +123,10 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({ const POSTS_LIMIT = 5; +const idExtractor = (item: Post) => { + return item.id; +}; + function Permalink({ channel, rootId, @@ -163,7 +168,9 @@ function Permalink({ setError({unreachable: true}); } if (data.posts) { - setPosts(loadThreadPosts ? processThreadPosts(data.posts, postId) : data.posts); + const ids = data.posts.map(idExtractor); + const postsModels = await getPosts(serverUrl, ids, 'desc'); + setPosts(loadThreadPosts ? processThreadPosts(postsModels, postId) : postsModels); } setLoading(false); return;