mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-22 12:59:21 +00:00
Can delete comments
This commit is contained in:
parent
55088f2b23
commit
6d73d38bf8
@ -37,6 +37,15 @@ class CommentsHelper {
|
||||
return apiToComment(response.getObject());
|
||||
}
|
||||
|
||||
/// Attempt to delete a comment
|
||||
Future<bool> delete(int id) async {
|
||||
return (await APIRequest(
|
||||
uri: "comments/delete",
|
||||
needLogin: true,
|
||||
args: {"commentID": id.toString()},
|
||||
).exec()).code == 200;
|
||||
}
|
||||
|
||||
/// Turn an API entry into a [Comment] object
|
||||
static Comment apiToComment(Map<String, dynamic> entry) {
|
||||
return Comment(
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'package:comunic/models/like_element.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:comunic/utils/account_utils.dart' as account;
|
||||
|
||||
/// Comments
|
||||
///
|
||||
@ -37,4 +38,6 @@ class Comment implements LikeElement {
|
||||
bool get hasContent => content != null && content.length > 0;
|
||||
|
||||
bool get hasImage => imageURL != null;
|
||||
|
||||
bool get isOwner => userID == account.userID();
|
||||
}
|
||||
|
@ -9,16 +9,20 @@ import 'package:flutter/material.dart';
|
||||
///
|
||||
/// @author Pierre HUBERT
|
||||
|
||||
enum _CommentAction { DELETE }
|
||||
|
||||
class CommentTile extends StatelessWidget {
|
||||
final Comment comment;
|
||||
final User user;
|
||||
final void Function(Comment) onUpdateLike;
|
||||
final void Function(Comment) onDeleteComment;
|
||||
|
||||
const CommentTile({
|
||||
Key key,
|
||||
@required this.comment,
|
||||
@required this.user,
|
||||
@required this.onUpdateLike,
|
||||
@required this.onDeleteComment,
|
||||
}) : assert(comment != null),
|
||||
assert(user != null),
|
||||
assert(onUpdateLike != null),
|
||||
@ -27,9 +31,7 @@ class CommentTile extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListTile(
|
||||
leading: AccountImageWidget(
|
||||
user: user,
|
||||
),
|
||||
leading: _buildAccountImageWidget(),
|
||||
title: Text(
|
||||
user.displayName,
|
||||
),
|
||||
@ -37,6 +39,22 @@ class CommentTile extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildAccountImageWidget() {
|
||||
return PopupMenuButton<_CommentAction>(
|
||||
child: AccountImageWidget(
|
||||
user: user,
|
||||
),
|
||||
onSelected: _selectedMenuOption,
|
||||
itemBuilder: (c) => [
|
||||
PopupMenuItem(
|
||||
enabled: comment.isOwner,
|
||||
child: Text("Delete"),
|
||||
value: _CommentAction.DELETE,
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildCommentContent() {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
@ -106,4 +124,14 @@ class CommentTile extends StatelessWidget {
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/// A menu option has been selected
|
||||
void _selectedMenuOption(_CommentAction value) {
|
||||
switch (value) {
|
||||
// Delete comment
|
||||
case _CommentAction.DELETE:
|
||||
onDeleteComment(comment);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -195,6 +195,7 @@ class _PostTileState extends State<PostTile> {
|
||||
comment: widget.post.comments[num],
|
||||
user: widget.usersInfo.getUser(widget.post.comments[num].userID),
|
||||
onUpdateLike: _updateCommentLike,
|
||||
onDeleteComment: _deleteComment,
|
||||
),
|
||||
);
|
||||
|
||||
@ -290,7 +291,7 @@ class _PostTileState extends State<PostTile> {
|
||||
Future<void> _pickImageForComment() async {
|
||||
// Ask the user to confirm image removal if there is already one selected
|
||||
if (_hasImage) {
|
||||
if (await askUserConfirmation(
|
||||
if (await showConfirmDialog(
|
||||
context: context,
|
||||
title: tr("Remove selected image"),
|
||||
message: tr("Do you want to unselected currently selected image ?"),
|
||||
@ -364,4 +365,22 @@ class _PostTileState extends State<PostTile> {
|
||||
element.userLike ? element.likes++ : element.likes--;
|
||||
});
|
||||
}
|
||||
|
||||
/// Process the deletion of a user
|
||||
Future<void> _deleteComment(Comment comment) async {
|
||||
if (!await showConfirmDialog(
|
||||
context: context,
|
||||
message: tr("Do you really want to delete this comment ?"),
|
||||
title: tr("Delete comment"))) return;
|
||||
|
||||
if (!await _commentsHelper.delete(comment.id)) {
|
||||
showSimpleSnack(context, tr("Could not delete the comment!"));
|
||||
return;
|
||||
}
|
||||
|
||||
// Remove the comment from the list
|
||||
setState(() {
|
||||
widget.post.comments.remove(comment);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -122,7 +122,7 @@ Future<String> askUserString({
|
||||
/// Show an alert dialog to get user confirmation for something
|
||||
///
|
||||
/// Return value of this function is never null
|
||||
Future<bool> askUserConfirmation({
|
||||
Future<bool> showConfirmDialog({
|
||||
@required BuildContext context,
|
||||
String title,
|
||||
@required String message,
|
||||
|
Loading…
Reference in New Issue
Block a user