From d889321b3894199b8ddf8661b531d9f0379be313 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Fri, 1 May 2020 15:39:54 +0200 Subject: [PATCH] Can change group name --- lib/helpers/groups_helper.dart | 26 +++++++++++++++++++++- lib/models/group.dart | 2 +- lib/ui/screens/group_settings_screen.dart | 27 +++++++++++++++++++++++ lib/utils/map_utils.dart | 6 +++++ 4 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 lib/utils/map_utils.dart diff --git a/lib/helpers/groups_helper.dart b/lib/helpers/groups_helper.dart index 8d17395..7d65142 100644 --- a/lib/helpers/groups_helper.dart +++ b/lib/helpers/groups_helper.dart @@ -3,6 +3,7 @@ import 'package:comunic/models/advanced_group_info.dart'; import 'package:comunic/models/api_request.dart'; import 'package:comunic/models/group.dart'; import 'package:comunic/utils/api_utils.dart'; +import 'package:comunic/utils/map_utils.dart'; /// Groups helper /// @@ -192,6 +193,29 @@ class GroupsHelper { return groupInfo.info; } + /// Update (set) new group settings + /// + /// Throws in case of error + static Future setSettings(AdvancedGroupInfo settings) async { + await APIRequest(uri: "groups/set_settings", needLogin: true) + .addInt("id", settings.id) + .addString("name", settings.name) + .addString("virtual_directory", settings.virtualDirectory) + .addString("visibility", + invertMap(_APIGroupsVisibilityLevelsMap)[settings.visibilityLevel]) + .addString( + "registration_level", + invertMap( + _APIGroupsRegistrationLevelsMap)[settings.registrationLevel]) + .addString( + "posts_level", + invertMap( + _APIGroupsPostsCreationLevelsMap)[settings.postCreationLevel]) + .addString("description", settings.description) + .addString("url", settings.url) + .execWithThrow(); + } + /// Turn an API entry into a group object Group _getGroupFromAPI(Map map) { return Group( @@ -224,7 +248,7 @@ class GroupsHelper { following: map["following"], timeCreate: map["time_create"], description: map["description"], - url: map["url"], + url: map["url"] == "null" ? "" : map["url"], likes: map["number_likes"], userLike: map["is_liking"], ); diff --git a/lib/models/group.dart b/lib/models/group.dart index 381543b..ba32f55 100644 --- a/lib/models/group.dart +++ b/lib/models/group.dart @@ -21,7 +21,7 @@ enum GroupPostCreationLevel { MODERATORS, MEMBERS } class Group { final int id; - final String name; + String name; final String iconURL; final int numberMembers; GroupMembershipLevel membershipLevel; diff --git a/lib/ui/screens/group_settings_screen.dart b/lib/ui/screens/group_settings_screen.dart index 4abcae4..7d4db8e 100644 --- a/lib/ui/screens/group_settings_screen.dart +++ b/lib/ui/screens/group_settings_screen.dart @@ -3,7 +3,9 @@ import 'package:comunic/models/advanced_group_info.dart'; import 'package:comunic/ui/widgets/async_screen_widget.dart'; import 'package:comunic/ui/widgets/comunic_back_button_widget.dart'; import 'package:comunic/ui/widgets/safe_state.dart'; +import 'package:comunic/ui/widgets/settings/text_settings_edit_tile.dart'; import 'package:comunic/utils/intl_utils.dart'; +import 'package:comunic/utils/ui_utils.dart'; import 'package:flutter/material.dart'; import 'package:settings_ui/settings_ui.dart'; @@ -25,10 +27,23 @@ class GroupSettingsScreen extends StatefulWidget { class _GroupSettingsScreenState extends SafeState { AdvancedGroupInfo _groupSettings; + final _key = GlobalKey(); + Future _refresh() async { _groupSettings = await GroupsHelper().getSettings(widget.groupID); } + Future _updateSettings() async { + try { + await GroupsHelper.setSettings(_groupSettings); + } catch (e, stack) { + print("Could not update group settings! $e\n$stack"); + showSimpleSnack(context, tr("Could not update group settings!")); + } + + _key.currentState.refresh(); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -42,9 +57,11 @@ class _GroupSettingsScreenState extends SafeState { Widget _buildBody() { return AsyncScreenWidget( + key: _key, onReload: _refresh, onBuild: _buildContent, errorMessage: tr("Could not get group settings!"), + showOldDataWhileUpdating: true, ); } @@ -58,10 +75,20 @@ class _GroupSettingsScreenState extends SafeState { return SettingsSection( title: tr("General information"), tiles: [ + // Group ID SettingsTile( title: tr("Group ID"), subtitle: _groupSettings.id.toString(), ), + + // Group name + TextEditSettingsTile( + title: tr("Group name"), + currValue: _groupSettings.name, + onChanged: (s) { + _groupSettings.name = s; + _updateSettings(); + }), ], ); } diff --git a/lib/utils/map_utils.dart b/lib/utils/map_utils.dart new file mode 100644 index 0000000..417944a --- /dev/null +++ b/lib/utils/map_utils.dart @@ -0,0 +1,6 @@ +/// Map utilities +/// +/// @author Pierre HUBERT + +/// Invert the values of a map with their keys +Map invertMap(Map m) => m.map((k, v) => MapEntry(v, k));