From da876f5978e224aded4e1090411c7f5e94ead980 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Thu, 22 Apr 2021 15:54:30 +0200 Subject: [PATCH] Can update presence settings --- lib/helpers/forez_presence_helper.dart | 6 +- .../routes/forez_presence_settings_route.dart | 91 +++++++++++++++++++ .../forez_presence_section.dart | 3 +- 3 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 lib/ui/routes/forez_presence_settings_route.dart diff --git a/lib/helpers/forez_presence_helper.dart b/lib/helpers/forez_presence_helper.dart index 137d14b..d3f3d4f 100644 --- a/lib/helpers/forez_presence_helper.dart +++ b/lib/helpers/forez_presence_helper.dart @@ -57,8 +57,9 @@ class ForezPresenceHelper { /// Add a new day of presence /// /// Throws in case of failure - static Future addDay(DateTime dt) async => + static Future addDay(int groupID, DateTime dt) async => await ws("forez_presence/add_day", { + "group": groupID, "year": dt.year, "month": dt.month, "day": dt.day, @@ -67,8 +68,9 @@ class ForezPresenceHelper { /// Remove a new day of presence /// /// Throws in case of failure - static Future delDay(DateTime dt) async => + static Future delDay(int groupID, DateTime dt) async => await ws("forez_presence/del_day", { + "group": groupID, "year": dt.year, "month": dt.month, "day": dt.day, diff --git a/lib/ui/routes/forez_presence_settings_route.dart b/lib/ui/routes/forez_presence_settings_route.dart new file mode 100644 index 0000000..de637aa --- /dev/null +++ b/lib/ui/routes/forez_presence_settings_route.dart @@ -0,0 +1,91 @@ +import 'package:comunic/helpers/forez_presence_helper.dart'; +import 'package:comunic/lists/forez_presences_set.dart'; +import 'package:comunic/ui/widgets/async_screen_widget.dart'; +import 'package:comunic/ui/widgets/forez_presence_calendar_widget.dart'; +import 'package:comunic/utils/account_utils.dart'; +import 'package:comunic/utils/intl_utils.dart'; +import 'package:comunic/utils/log_utils.dart'; +import 'package:comunic/utils/ui_utils.dart'; +import 'package:flutter/material.dart'; + +/// Forez presence settings route +/// +/// On this route, users can change there presence settings +/// +/// @author Pierre Hubert + +/// Show presence settings route +Future showPresenceSettingsRoute( + BuildContext context, int groupID) async => + await Navigator.push(context, + MaterialPageRoute(builder: (c) => PresenceSettings(groupID: groupID))); + +class PresenceSettings extends StatefulWidget { + final int groupID; + + const PresenceSettings({ + Key key, + @required this.groupID, + }) : assert(groupID != null), + super(key: key); + + @override + _PresenceSettingsState createState() => _PresenceSettingsState(); +} + +class _PresenceSettingsState extends State { + PresenceSet _currPresences; + + Future _load() async { + await ForezPresenceHelper.refreshCache(widget.groupID); + _currPresences = + await ForezPresenceHelper.getForUser(widget.groupID, userID()); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(tr("Presence settings")), + ), + body: AsyncScreenWidget( + onReload: _load, + onBuild: _buildScreen, + errorMessage: tr("Failed to load data!"), + ), + ); + } + + Widget _buildScreen() => ListView( + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + tr("Please click on the day you will be in the plain, so that everyone gets informed ! ;)"), + textAlign: TextAlign.center, + ), + ), + PresenceCalendarWidget( + presenceSet: _currPresences, + onDayClicked: _toggleDay, + ), + ], + ); + + void _toggleDay(DateTime dt) async { + try { + // Update current list + _currPresences.toggleDate(dt, userID()); + + // Update on server + if (_currPresences.containsDate(dt)) + await ForezPresenceHelper.addDay(widget.groupID, dt); + else + await ForezPresenceHelper.delDay(widget.groupID, dt); + } catch (e, s) { + logError(e, s); + _currPresences.toggleDate(dt, userID()); + snack(context, tr("Failed to update information!")); + } + } +} diff --git a/lib/ui/screens/group_sections/forez_presence_section.dart b/lib/ui/screens/group_sections/forez_presence_section.dart index a47f37a..9efdbdd 100644 --- a/lib/ui/screens/group_sections/forez_presence_section.dart +++ b/lib/ui/screens/group_sections/forez_presence_section.dart @@ -2,6 +2,7 @@ import 'package:comunic/helpers/forez_presence_helper.dart'; import 'package:comunic/helpers/users_helper.dart'; import 'package:comunic/lists/forez_presences_set.dart'; import 'package:comunic/lists/users_list.dart'; +import 'package:comunic/ui/routes/forez_presence_settings_route.dart'; import 'package:comunic/ui/widgets/account_image_widget.dart'; import 'package:comunic/ui/widgets/async_screen_widget.dart'; import 'package:comunic/ui/widgets/forez_presence_calendar_widget.dart'; @@ -52,7 +53,7 @@ class _ForezPresenceSectionState extends State { bottom: 10, child: FloatingActionButton( backgroundColor: Colors.green, - onPressed: () {}, + onPressed: () => showPresenceSettingsRoute(context, widget.groupID), child: Icon(Icons.edit), ), )