* typescript and view component for permalink with user and message
* Old post edited handling in permalink
* Added test and update flag value to EnablePermalinkPreview
* Added test for permalink_preview component
* Added test for content/index.tsx for permalink
* Addressed review comments
* Unit test for missing file and review comments
* Added test to check handlePostEdited permalink sync only calls one time only
* Change TouchableOpacity to Pressable
* When user not found fetch the user from the server
* Removed the redundant test in the test for permalink_preview/index?
* ts to tsx
* Removed the circular dependency
* Address review comments
* displayname fallback
* remove permalink when permalink post is deleted
* UX review comments
* Linter fixes
* Test fixes
* File attachment in permalink preview component
* Fix the width and height of the image in permalink
* Added gredient when exceeds height of permalink container
* Minor
* Updated tests
* Minor
* Review comments
* Minor review comments
* type fixes
* Review comments
* Minor
* Address review comments
* Minor
* Merge fixes
* Addressed review comments
* Some more review comments
* linter fixes
* UX review and remove show more height not require
* Fix tests
* Review fixes, dev and ux
---------
(cherry picked from commit d732b5a33e)
Co-authored-by: Rajat Dabade <rajatdabade1997@gmail.com>
Co-authored-by: yasserfaraazkhan <attitude3cena.yf@gmail.com>
67 lines
2.2 KiB
TypeScript
67 lines
2.2 KiB
TypeScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import {logWarning} from '@utils/log';
|
|
|
|
import type PostModel from '@typings/database/models/servers/post';
|
|
|
|
/**
|
|
* Update permalink metadata with fresh post data
|
|
*/
|
|
export function updatePermalinkMetadata(
|
|
referencingPost: PostModel,
|
|
referencedPostId: string,
|
|
freshPostData: Post,
|
|
): PostModel | null {
|
|
try {
|
|
const metadata = referencingPost.metadata;
|
|
if (!metadata?.embeds?.length) {
|
|
return null;
|
|
}
|
|
|
|
let updated = false;
|
|
const updatedEmbeds = metadata.embeds.map((embed) => {
|
|
if (embed.type === 'permalink' && embed.data?.post_id === referencedPostId) {
|
|
const currentEditAt = embed.data.post?.edit_at || 0;
|
|
const freshEditAt = freshPostData.edit_at || 0;
|
|
|
|
if (freshEditAt > currentEditAt) {
|
|
updated = true;
|
|
return {
|
|
...embed,
|
|
data: {
|
|
...embed.data,
|
|
post: {
|
|
...embed.data.post,
|
|
id: freshPostData.id,
|
|
message: freshPostData.message,
|
|
edit_at: freshPostData.edit_at,
|
|
update_at: freshPostData.update_at,
|
|
user_id: freshPostData.user_id,
|
|
create_at: freshPostData.create_at,
|
|
file_ids: freshPostData.file_ids,
|
|
metadata: freshPostData.metadata,
|
|
},
|
|
},
|
|
};
|
|
}
|
|
}
|
|
return embed;
|
|
});
|
|
|
|
if (updated) {
|
|
const updatedPost = referencingPost.prepareUpdate((post) => {
|
|
post.metadata = {
|
|
...metadata,
|
|
embeds: updatedEmbeds,
|
|
};
|
|
});
|
|
return updatedPost;
|
|
}
|
|
|
|
return null;
|
|
} catch (error) {
|
|
logWarning('Error updating permalink metadata:', error);
|
|
return null;
|
|
}
|
|
}
|