diff --git a/app/actions/remote/post.ts b/app/actions/remote/post.ts index 2b2c1e8e5..26f3e299d 100644 --- a/app/actions/remote/post.ts +++ b/app/actions/remote/post.ts @@ -552,3 +552,26 @@ export const togglePinPost = async (serverUrl: string, postId: string) => { return {error}; } }; + +export const deletePost = async (serverUrl: string, postId: string) => { + const database = DatabaseManager.serverDatabases[serverUrl]?.database; + if (!database) { + return {error: `${serverUrl} database not found`}; + } + + let client: Client; + try { + client = NetworkManager.getClient(serverUrl); + } catch (error) { + return {error}; + } + + try { + await client.deletePost(postId); + const post = await removePost(serverUrl, {id: postId} as Post); + return {post}; + } catch (error) { + forceLogoutIfNecessary(serverUrl, error as ClientErrorProps); + return {error}; + } +}; diff --git a/app/screens/post_options/options/delete_post_option.tsx b/app/screens/post_options/options/delete_post_option.tsx index 73782d085..b8af596c3 100644 --- a/app/screens/post_options/options/delete_post_option.tsx +++ b/app/screens/post_options/options/delete_post_option.tsx @@ -1,22 +1,52 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import React from 'react'; +import React, {useCallback} from 'react'; +import {useIntl} from 'react-intl'; +import {Alert} from 'react-native'; +import {deletePost} from '@actions/remote/post'; +import {Screens} from '@constants'; +import {useServerUrl} from '@context/server'; import {t} from '@i18n'; +import {dismissBottomSheet} from '@screens/navigation'; import BaseOption from './base_option'; -//fixme: wire up handleDeletePost -const DeletePostOption = () => { - const handleDeletePost = () => null; +type Props = { + postId: string ; +} +const DeletePostOption = ({postId}: Props) => { + const serverUrl = useServerUrl(); + const {formatMessage} = useIntl(); + + const onPress = useCallback(() => { + Alert.alert( + formatMessage({id: 'mobile.post.delete_title', defaultMessage: 'Delete Post'}), + formatMessage({ + id: 'mobile.post.delete_question', + defaultMessage: 'Are you sure you want to delete this post?', + }), + [{ + text: formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'}), + style: 'cancel', + }, { + text: formatMessage({id: 'post_info.del', defaultMessage: 'Delete'}), + style: 'destructive', + onPress: () => { + deletePost(serverUrl, postId); + dismissBottomSheet(Screens.POST_OPTIONS); + }, + }], + ); + }, [postId, serverUrl]); return ( diff --git a/app/screens/post_options/options/edit_option.tsx b/app/screens/post_options/options/edit_option.tsx index 6a3f2236d..f3ccd97ea 100644 --- a/app/screens/post_options/options/edit_option.tsx +++ b/app/screens/post_options/options/edit_option.tsx @@ -1,22 +1,30 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import React from 'react'; +import React, {useCallback} from 'react'; +import {Screens} from '@constants'; import {t} from '@i18n'; +import {dismissBottomSheet, goToScreen} from '@screens/navigation'; +import PostModel from '@typings/database/models/servers/post'; import BaseOption from './base_option'; -const EditOption = () => { - const handleEdit = () => { - //todo: - }; +type Props = { + post: PostModel; +} +const EditOption = ({post}: Props) => { + const onPress = useCallback(async () => { + // https://mattermost.atlassian.net/browse/MM-41991 + await dismissBottomSheet(Screens.POST_OPTIONS); + goToScreen('EDIT_SCREEN_NOT_IMPLEMENTED_YET', '', {post}); + }, [post]); return ( diff --git a/app/screens/post_options/post_options.tsx b/app/screens/post_options/post_options.tsx index ed3db3610..e0076e115 100644 --- a/app/screens/post_options/post_options.tsx +++ b/app/screens/post_options/post_options.tsx @@ -89,8 +89,8 @@ const PostOptions = ({ postId={post.id} /> } - {canEdit && } - {canDelete && } + {canEdit && } + {canDelete && } ); }; diff --git a/assets/base/i18n/en.json b/assets/base/i18n/en.json index 828012ded..546d693b9 100644 --- a/assets/base/i18n/en.json +++ b/assets/base/i18n/en.json @@ -291,6 +291,8 @@ "mobile.post_textbox.uploadFailedDesc": "Some attachments failed to upload to the server. Are you sure you want to post the message?", "mobile.post_textbox.uploadFailedTitle": "Attachment failure", "mobile.post.cancel": "Cancel", + "mobile.post.delete_question": "Are you sure you want to delete this post?", + "mobile.post.delete_title": "Delete Post", "mobile.post.failed_delete": "Delete Message", "mobile.post.failed_retry": "Try Again", "mobile.posts_view.moreMsg": "More New Messages Above",