mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-22 21:09:21 +00:00
Can delete posts
This commit is contained in:
parent
d3f5fb6c28
commit
1fbe59c83c
@ -56,6 +56,16 @@ class PostsHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Delete a post
|
||||||
|
Future<bool> delete(int id) async {
|
||||||
|
return (await APIRequest(
|
||||||
|
uri: "posts/delete",
|
||||||
|
needLogin: true,
|
||||||
|
args: {"postID": id.toString()},
|
||||||
|
).exec())
|
||||||
|
.isOK;
|
||||||
|
}
|
||||||
|
|
||||||
/// Turn an API entry into a [Post] object
|
/// Turn an API entry into a [Post] object
|
||||||
Post _apiToPost(Map<String, dynamic> map) {
|
Post _apiToPost(Map<String, dynamic> map) {
|
||||||
// Parse comments
|
// Parse comments
|
||||||
|
@ -32,29 +32,29 @@ class Post implements LikeElement {
|
|||||||
final UserAccessLevels access;
|
final UserAccessLevels access;
|
||||||
final CommentsList comments;
|
final CommentsList comments;
|
||||||
|
|
||||||
Post({
|
Post(
|
||||||
@required this.id,
|
{@required this.id,
|
||||||
@required this.userID,
|
@required this.userID,
|
||||||
@required this.userPageID,
|
@required this.userPageID,
|
||||||
@required this.groupID,
|
@required this.groupID,
|
||||||
@required this.timeSent,
|
@required this.timeSent,
|
||||||
@required this.content,
|
@required this.content,
|
||||||
@required this.visibilityLevel,
|
@required this.visibilityLevel,
|
||||||
@required this.kind,
|
@required this.kind,
|
||||||
@required this.fileSize,
|
@required this.fileSize,
|
||||||
@required this.fileType,
|
@required this.fileType,
|
||||||
@required this.filePath,
|
@required this.filePath,
|
||||||
@required this.fileURL,
|
@required this.fileURL,
|
||||||
@required this.timeEnd,
|
@required this.timeEnd,
|
||||||
@required this.linkURL,
|
@required this.linkURL,
|
||||||
@required this.linkTitle,
|
@required this.linkTitle,
|
||||||
@required this.linkDescription,
|
@required this.linkDescription,
|
||||||
@required this.linkImage,
|
@required this.linkImage,
|
||||||
@required this.likes,
|
@required this.likes,
|
||||||
@required this.userLike,
|
@required this.userLike,
|
||||||
@required this.access,
|
@required this.access,
|
||||||
@required this.comments
|
@required this.comments})
|
||||||
}) : assert(id != null),
|
: assert(id != null),
|
||||||
assert(userID != null),
|
assert(userID != null),
|
||||||
assert(userPageID != 0 || groupID != 0),
|
assert(userPageID != 0 || groupID != 0),
|
||||||
assert(timeSent != null),
|
assert(timeSent != null),
|
||||||
@ -69,4 +69,8 @@ class Post implements LikeElement {
|
|||||||
bool get hasContent => content != null;
|
bool get hasContent => content != null;
|
||||||
|
|
||||||
bool get hasComments => comments != null;
|
bool get hasComments => comments != null;
|
||||||
|
|
||||||
|
bool get canDelete =>
|
||||||
|
access == UserAccessLevels.FULL ||
|
||||||
|
access == UserAccessLevels.INTERMEDIATE;
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import 'package:comunic/enums/likes_type.dart';
|
|||||||
import 'package:comunic/enums/post_kind.dart';
|
import 'package:comunic/enums/post_kind.dart';
|
||||||
import 'package:comunic/helpers/comments_helper.dart';
|
import 'package:comunic/helpers/comments_helper.dart';
|
||||||
import 'package:comunic/helpers/likes_helper.dart';
|
import 'package:comunic/helpers/likes_helper.dart';
|
||||||
|
import 'package:comunic/helpers/posts_helper.dart';
|
||||||
import 'package:comunic/lists/users_list.dart';
|
import 'package:comunic/lists/users_list.dart';
|
||||||
import 'package:comunic/models/comment.dart';
|
import 'package:comunic/models/comment.dart';
|
||||||
import 'package:comunic/models/like_element.dart';
|
import 'package:comunic/models/like_element.dart';
|
||||||
@ -29,16 +30,22 @@ const TextStyle _userNameStyle = TextStyle(
|
|||||||
fontWeight: FontWeight.w600,
|
fontWeight: FontWeight.w600,
|
||||||
fontSize: 16.0);
|
fontSize: 16.0);
|
||||||
|
|
||||||
|
/// Post actions
|
||||||
|
enum _PostActions { DELETE }
|
||||||
|
|
||||||
class PostTile extends StatefulWidget {
|
class PostTile extends StatefulWidget {
|
||||||
final Post post;
|
final Post post;
|
||||||
final UsersList usersInfo;
|
final UsersList usersInfo;
|
||||||
|
final void Function(Post) onDeletedPost;
|
||||||
|
|
||||||
const PostTile({
|
const PostTile({
|
||||||
Key key,
|
Key key,
|
||||||
@required this.post,
|
@required this.post,
|
||||||
@required this.usersInfo,
|
@required this.usersInfo,
|
||||||
|
@required this.onDeletedPost,
|
||||||
}) : assert(post != null),
|
}) : assert(post != null),
|
||||||
assert(usersInfo != null),
|
assert(usersInfo != null),
|
||||||
|
assert(onDeletedPost != null),
|
||||||
super(key: key);
|
super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -47,6 +54,7 @@ class PostTile extends StatefulWidget {
|
|||||||
|
|
||||||
class _PostTileState extends State<PostTile> {
|
class _PostTileState extends State<PostTile> {
|
||||||
// Helpers
|
// Helpers
|
||||||
|
final _postsHelper = PostsHelper();
|
||||||
final _likesHelper = LikesHelper();
|
final _likesHelper = LikesHelper();
|
||||||
final _commentsHelper = CommentsHelper();
|
final _commentsHelper = CommentsHelper();
|
||||||
|
|
||||||
@ -89,8 +97,16 @@ class _PostTileState extends State<PostTile> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
PopupMenuButton(
|
PopupMenuButton<_PostActions>(
|
||||||
itemBuilder: (c) => [],
|
itemBuilder: (c) => [
|
||||||
|
// Delete post
|
||||||
|
PopupMenuItem(
|
||||||
|
child: Text(tr("Delete")),
|
||||||
|
value: _PostActions.DELETE,
|
||||||
|
enabled: widget.post.canDelete,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
onSelected: _selectedPostMenuAction,
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
@ -402,4 +418,30 @@ class _PostTileState extends State<PostTile> {
|
|||||||
widget.post.comments.remove(comment);
|
widget.post.comments.remove(comment);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Method called each time the user has selected an option
|
||||||
|
void _selectedPostMenuAction(_PostActions value) {
|
||||||
|
switch (value) {
|
||||||
|
case _PostActions.DELETE:
|
||||||
|
confirmDelete();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Perform the deletion of the post
|
||||||
|
Future<void> confirmDelete() async {
|
||||||
|
// Ask user confirmation
|
||||||
|
if (!await showConfirmDialog(
|
||||||
|
context: context,
|
||||||
|
message: tr(
|
||||||
|
"Do you really want to delete this post ? The operation can not be reverted !"),
|
||||||
|
)) return;
|
||||||
|
|
||||||
|
if (!await _postsHelper.delete(widget.post.id)) {
|
||||||
|
showSimpleSnack(context, tr("Could not delete the post!"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
widget.onDeletedPost(widget.post);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:comunic/helpers/users_helper.dart';
|
import 'package:comunic/helpers/users_helper.dart';
|
||||||
import 'package:comunic/lists/posts_list.dart';
|
import 'package:comunic/lists/posts_list.dart';
|
||||||
import 'package:comunic/lists/users_list.dart';
|
import 'package:comunic/lists/users_list.dart';
|
||||||
|
import 'package:comunic/models/post.dart';
|
||||||
import 'package:comunic/ui/screens/conversation_screen.dart';
|
import 'package:comunic/ui/screens/conversation_screen.dart';
|
||||||
import 'package:comunic/ui/tiles/post_tile.dart';
|
import 'package:comunic/ui/tiles/post_tile.dart';
|
||||||
import 'package:comunic/utils/intl_utils.dart';
|
import 'package:comunic/utils/intl_utils.dart';
|
||||||
@ -73,6 +74,7 @@ class _PostsListWidgetState extends State<PostsListWidget> {
|
|||||||
itemBuilder: (c, i) => PostTile(
|
itemBuilder: (c, i) => PostTile(
|
||||||
post: _list[i],
|
post: _list[i],
|
||||||
usersInfo: _users,
|
usersInfo: _users,
|
||||||
|
onDeletedPost: _removePost,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -83,4 +85,6 @@ class _PostsListWidgetState extends State<PostsListWidget> {
|
|||||||
if (_list == null) return buildCenteredProgressBar();
|
if (_list == null) return buildCenteredProgressBar();
|
||||||
return _buildListView();
|
return _buildListView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _removePost(Post post) => setState(() => _list.remove(post));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user