mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 12:28:40 +00:00
100 lines
3.3 KiB
Dart
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,
|
|
);
|
|
}
|
|
}
|