twonly-app/lib/src/views/components/group_context_menu.component.dart
2025-11-06 18:40:22 +01:00

100 lines
3.3 KiB
Dart

import 'package:drift/drift.dart' hide Column;
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:twonly/globals.dart';
import 'package:twonly/src/database/twonly.db.dart';
import 'package:twonly/src/utils/misc.dart';
import 'package:twonly/src/views/chats/chat_messages.view.dart';
import 'package:twonly/src/views/components/alert_dialog.dart';
import 'package:twonly/src/views/components/context_menu.component.dart';
class GroupContextMenu extends StatelessWidget {
const GroupContextMenu({
required this.group,
required this.child,
super.key,
});
final Widget child;
final Group group;
@override
Widget build(BuildContext context) {
return ContextMenu(
items: [
if (!group.archived)
ContextMenuItem(
title: context.lang.contextMenuArchiveUser,
onTap: () async {
const update = GroupsCompanion(archived: Value(true));
if (context.mounted) {
await twonlyDB.groupsDao.updateGroup(group.groupId, update);
}
},
icon: Icons.archive_outlined,
),
if (group.archived)
ContextMenuItem(
title: context.lang.contextMenuUndoArchiveUser,
onTap: () async {
const update = GroupsCompanion(archived: Value(false));
if (context.mounted) {
await twonlyDB.groupsDao.updateGroup(group.groupId, update);
}
},
icon: Icons.unarchive_outlined,
),
ContextMenuItem(
title: context.lang.contextMenuOpenChat,
onTap: () async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return ChatMessagesView(group);
},
),
);
},
icon: FontAwesomeIcons.comments,
),
if (!group.archived)
ContextMenuItem(
title: group.pinned
? context.lang.contextMenuUnpin
: context.lang.contextMenuPin,
onTap: () async {
final update = GroupsCompanion(pinned: Value(!group.pinned));
if (context.mounted) {
await twonlyDB.groupsDao.updateGroup(group.groupId, update);
}
},
icon: group.pinned
? FontAwesomeIcons.thumbtackSlash
: FontAwesomeIcons.thumbtack,
),
ContextMenuItem(
title: context.lang.delete,
icon: FontAwesomeIcons.trashCan,
onTap: () async {
final ok = await showAlertDialog(
context,
context.lang.deleteTitle,
context.lang.groupContextMenuDeleteGroup,
);
if (ok) {
await twonlyDB.messagesDao.deleteMessagesByGroupId(group.groupId);
// await twonlyDB.groupsDao.deleteGroup(group.groupId);
await twonlyDB.groupsDao.updateGroup(
group.groupId,
const GroupsCompanion(
deletedContent: Value(true),
),
);
}
},
),
],
child: child,
);
}
}