2022-11-21 02:13:13 +00:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:photos/models/collection.dart';
|
2022-11-21 09:11:09 +00:00
|
|
|
import 'package:photos/services/collections_service.dart';
|
2022-11-21 02:13:13 +00:00
|
|
|
import 'package:photos/theme/colors.dart';
|
|
|
|
import 'package:photos/theme/ente_theme.dart';
|
2022-11-21 09:11:09 +00:00
|
|
|
import 'package:photos/ui/actions/collection/collection_sharing_actions.dart';
|
2022-11-21 02:13:13 +00:00
|
|
|
import 'package:photos/ui/components/captioned_text_widget.dart';
|
|
|
|
import 'package:photos/ui/components/divider_widget.dart';
|
|
|
|
import 'package:photos/ui/components/menu_item_widget.dart';
|
|
|
|
import 'package:photos/ui/components/menu_section_description_widget.dart';
|
|
|
|
import 'package:photos/ui/components/menu_section_title.dart';
|
|
|
|
import 'package:photos/ui/components/title_bar_title_widget.dart';
|
|
|
|
|
|
|
|
class ManageIndividualParticipant extends StatefulWidget {
|
|
|
|
final Collection collection;
|
|
|
|
final User user;
|
|
|
|
|
|
|
|
const ManageIndividualParticipant({
|
|
|
|
super.key,
|
|
|
|
required this.collection,
|
|
|
|
required this.user,
|
|
|
|
});
|
|
|
|
|
|
|
|
@override
|
|
|
|
State<StatefulWidget> createState() => _ManageIndividualParticipantState();
|
|
|
|
}
|
|
|
|
|
|
|
|
class _ManageIndividualParticipantState
|
|
|
|
extends State<ManageIndividualParticipant> {
|
2022-12-15 10:02:46 +00:00
|
|
|
final CollectionActions collectionActions =
|
|
|
|
CollectionActions(CollectionsService.instance);
|
2022-11-21 09:11:09 +00:00
|
|
|
|
2022-11-21 02:13:13 +00:00
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
final colorScheme = getEnteColorScheme(context);
|
|
|
|
final textTheme = getEnteTextTheme(context);
|
|
|
|
return Scaffold(
|
|
|
|
appBar: AppBar(),
|
|
|
|
body: Padding(
|
|
|
|
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
|
|
|
child: Column(
|
|
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
children: [
|
|
|
|
SafeArea(
|
|
|
|
child: Column(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
children: [
|
|
|
|
const SizedBox(
|
|
|
|
height: 12,
|
|
|
|
),
|
|
|
|
const TitleBarTitleWidget(
|
|
|
|
title: "Manage",
|
|
|
|
),
|
|
|
|
Text(
|
|
|
|
widget.user.email.toString().trim(),
|
|
|
|
textAlign: TextAlign.left,
|
|
|
|
style:
|
|
|
|
textTheme.small.copyWith(color: colorScheme.textMuted),
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
2022-11-21 09:11:09 +00:00
|
|
|
const SizedBox(height: 12),
|
2022-11-21 02:13:13 +00:00
|
|
|
const MenuSectionTitle(title: "Added as"),
|
|
|
|
MenuItemWidget(
|
|
|
|
captionedTextWidget: const CaptionedTextWidget(
|
|
|
|
title: "Collaborator",
|
|
|
|
),
|
2022-11-22 08:34:39 +00:00
|
|
|
leadingIcon: Icons.edit_outlined,
|
2022-11-21 02:13:13 +00:00
|
|
|
menuItemColor: getEnteColorScheme(context).fillFaint,
|
|
|
|
pressedColor: getEnteColorScheme(context).fillFaint,
|
|
|
|
trailingIcon: widget.user.isCollaborator ? Icons.check : null,
|
2022-11-22 18:06:32 +00:00
|
|
|
onTap: widget.user.isCollaborator
|
|
|
|
? null
|
|
|
|
: () async {
|
2022-12-15 10:02:46 +00:00
|
|
|
final result =
|
|
|
|
await collectionActions.addEmailToCollection(
|
2022-11-22 18:06:32 +00:00
|
|
|
context,
|
|
|
|
widget.collection,
|
|
|
|
widget.user.email,
|
|
|
|
role: CollectionParticipantRole.collaborator,
|
2023-01-31 01:04:03 +00:00
|
|
|
showProgress: true,
|
2022-11-22 18:06:32 +00:00
|
|
|
);
|
|
|
|
if ((result ?? false) && mounted) {
|
|
|
|
widget.user.role = CollectionParticipantRole
|
|
|
|
.collaborator
|
|
|
|
.toStringVal();
|
|
|
|
setState(() => {});
|
|
|
|
}
|
|
|
|
},
|
2022-11-21 02:13:13 +00:00
|
|
|
isBottomBorderRadiusRemoved: true,
|
|
|
|
),
|
|
|
|
DividerWidget(
|
|
|
|
dividerType: DividerType.menu,
|
2022-12-16 11:51:35 +00:00
|
|
|
bgColor: getEnteColorScheme(context).fillFaint,
|
2022-11-21 02:13:13 +00:00
|
|
|
),
|
|
|
|
MenuItemWidget(
|
2022-11-21 09:11:09 +00:00
|
|
|
captionedTextWidget: const CaptionedTextWidget(
|
2022-12-16 04:13:16 +00:00
|
|
|
title: "Viewer",
|
2022-11-21 02:13:13 +00:00
|
|
|
),
|
2022-11-22 08:34:39 +00:00
|
|
|
leadingIcon: Icons.photo_outlined,
|
|
|
|
leadingIconColor: getEnteColorScheme(context).strokeBase,
|
2022-11-21 02:13:13 +00:00
|
|
|
menuItemColor: getEnteColorScheme(context).fillFaint,
|
|
|
|
pressedColor: getEnteColorScheme(context).fillFaint,
|
|
|
|
trailingIcon: widget.user.isViewer ? Icons.check : null,
|
2022-11-22 18:06:32 +00:00
|
|
|
onTap: widget.user.isViewer
|
|
|
|
? null
|
|
|
|
: () async {
|
2022-12-15 10:02:46 +00:00
|
|
|
final result =
|
|
|
|
await collectionActions.addEmailToCollection(
|
2022-11-22 18:06:32 +00:00
|
|
|
context,
|
|
|
|
widget.collection,
|
|
|
|
widget.user.email,
|
|
|
|
role: CollectionParticipantRole.viewer,
|
2023-01-31 01:04:03 +00:00
|
|
|
showProgress: true,
|
2022-11-22 18:06:32 +00:00
|
|
|
);
|
|
|
|
if ((result ?? false) && mounted) {
|
|
|
|
widget.user.role =
|
|
|
|
CollectionParticipantRole.viewer.toStringVal();
|
|
|
|
setState(() => {});
|
|
|
|
}
|
|
|
|
},
|
2022-11-21 02:13:13 +00:00
|
|
|
isTopBorderRadiusRemoved: true,
|
|
|
|
),
|
|
|
|
const MenuSectionDescriptionWidget(
|
|
|
|
content:
|
|
|
|
"Collaborators can add photos and videos to the shared album.",
|
|
|
|
),
|
|
|
|
const SizedBox(height: 24),
|
|
|
|
const MenuSectionTitle(title: "Remove participant"),
|
|
|
|
MenuItemWidget(
|
|
|
|
captionedTextWidget: const CaptionedTextWidget(
|
|
|
|
title: "Remove",
|
|
|
|
textColor: warning500,
|
|
|
|
makeTextBold: true,
|
|
|
|
),
|
|
|
|
leadingIcon: Icons.not_interested_outlined,
|
|
|
|
leadingIconColor: warning500,
|
|
|
|
menuItemColor: getEnteColorScheme(context).fillFaint,
|
|
|
|
pressedColor: getEnteColorScheme(context).fillFaint,
|
|
|
|
onTap: () async {
|
2022-12-15 10:02:46 +00:00
|
|
|
final result = await collectionActions.removeParticipant(
|
2022-11-21 09:11:09 +00:00
|
|
|
context,
|
|
|
|
widget.collection,
|
|
|
|
widget.user,
|
|
|
|
);
|
2022-11-22 08:02:54 +00:00
|
|
|
|
|
|
|
if ((result ?? false) && mounted) {
|
2022-11-21 09:11:09 +00:00
|
|
|
Navigator.of(context).pop(true);
|
|
|
|
}
|
2022-11-21 02:13:13 +00:00
|
|
|
},
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|